商品详情
This commit is contained in:
parent
c501095426
commit
1ab1d7f27d
|
@ -4,14 +4,13 @@
|
|||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="6ee93b58-a7e0-45a0-9e98-4c363b192afb" name="Changes" comment="将首页数据存放在redis中作为缓存">
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/BrandController.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/BrandMapper.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/BrandService.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/BrandServiceImpl.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/resources/mapper/product/BrandMapper.xml" afterDir="false" />
|
||||
<list default="true" id="6ee93b58-a7e0-45a0-9e98-4c363b192afb" name="Changes" comment="修改不用的引用">
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductDetailsMapper.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductMapper.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/resources/mapper/product/ProductDetailsMapper.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/resources/mapper/product/ProductMapper.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java" beforeDir="false" afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java" beforeDir="false" afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java" afterDir="false" />
|
||||
|
@ -25,12 +24,15 @@
|
|||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="mybatis-mapper" />
|
||||
<option value="Class" />
|
||||
<option value="Interface" />
|
||||
<option value="mybatis-mapper" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="FormatOnSaveOptions">
|
||||
<option name="myRunOnSave" value="true" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
|
@ -51,6 +53,9 @@
|
|||
</MavenImportingSettings>
|
||||
</option>
|
||||
</component>
|
||||
<component name="OptimizeOnSaveOptions">
|
||||
<option name="myRunOnSave" value="true" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"customColor": "",
|
||||
"associatedIndex": 5
|
||||
|
@ -70,6 +75,7 @@
|
|||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||
"WebServerToolWindowFactoryState": "false",
|
||||
"code.cleanup.on.save": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"jdk.selected.JAVA_MODULE": "21",
|
||||
"last_opened_file_path": "F:/File/Java/spzx-parent/spzx-service/service-product/src/main/java/cn/bunny/web/product",
|
||||
|
@ -77,10 +83,12 @@
|
|||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"project.structure.last.edited": "Project",
|
||||
"project.structure.proportion": "0.15",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
"settings.editor.selected.configurable": "reference.settingsdialog.IDE.editor.colors.XML",
|
||||
"rearrange.code.on.save": "true",
|
||||
"settings.editor.selected.configurable": "actions.on.save",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
},
|
||||
"keyToStringList": {
|
||||
|
@ -155,7 +163,7 @@
|
|||
<updated>1703487755445</updated>
|
||||
<workItem from="1703487757122" duration="903000" />
|
||||
<workItem from="1703488670206" duration="5932000" />
|
||||
<workItem from="1703549556395" duration="9451000" />
|
||||
<workItem from="1703549556395" duration="13968000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="前端接口初始化;显示商品页面">
|
||||
<option name="closed" value="true" />
|
||||
|
@ -197,7 +205,23 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1703557481401</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="6" />
|
||||
<task id="LOCAL-00006" summary="根据品牌进行查询">
|
||||
<option name="closed" value="true" />
|
||||
<created>1703559123840</created>
|
||||
<option name="number" value="00006" />
|
||||
<option name="presentableId" value="LOCAL-00006" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1703559123840</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00007" summary="修改不用的引用">
|
||||
<option name="closed" value="true" />
|
||||
<created>1703559306235</created>
|
||||
<option name="number" value="00007" />
|
||||
<option name="presentableId" value="LOCAL-00007" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1703559306235</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="8" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
|
@ -208,7 +232,9 @@
|
|||
<MESSAGE value="解决跨域;修改MySQL语法错误;获取分类树形数据" />
|
||||
<MESSAGE value="搭建网关服务和nacos,将访问端口改为8500" />
|
||||
<MESSAGE value="将首页数据存放在redis中作为缓存" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="将首页数据存放在redis中作为缓存" />
|
||||
<MESSAGE value="根据品牌进行查询" />
|
||||
<MESSAGE value="修改不用的引用" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="修改不用的引用" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
|
@ -220,6 +246,11 @@
|
|||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
</breakpoint-manager>
|
||||
<pin-to-top-manager>
|
||||
<pinned-members>
|
||||
<PinnedItemInfo parentTag="java.lang.String" memberName="value" />
|
||||
</pinned-members>
|
||||
</pin-to-top-manager>
|
||||
</component>
|
||||
<component name="XSLT-Support.FileAssociations.UIState">
|
||||
<expand />
|
||||
|
|
|
@ -4,9 +4,11 @@ import cn.bunny.common.spzx.model.dto.h5.ProductSkuDto;
|
|||
import cn.bunny.common.spzx.model.entity.product.ProductSku;
|
||||
import cn.bunny.common.spzx.model.vo.common.Result;
|
||||
import cn.bunny.common.spzx.model.vo.common.ResultCodeEnum;
|
||||
import cn.bunny.common.spzx.model.vo.h5.ProductItemVo;
|
||||
import cn.bunny.web.product.service.ProductService;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
@ -27,4 +29,12 @@ public class ProductController {
|
|||
PageInfo<ProductSku> pageInfo = productService.findByPage(page, limit, productSkuDto);
|
||||
return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
|
||||
}
|
||||
|
||||
@Operation(summary = "商品详情")
|
||||
@GetMapping("item/{skuId}")
|
||||
@Parameter(name = "skuId", description = "商品skuId", required = true)
|
||||
public Result<ProductItemVo> item(@PathVariable("skuId") Long skuId) {
|
||||
ProductItemVo productItemVo = productService.itemBySkuId(skuId);
|
||||
return Result.build(productItemVo, ResultCodeEnum.SUCCESS);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package cn.bunny.web.product.mapper;
|
||||
|
||||
import cn.bunny.common.spzx.model.entity.product.ProductDetails;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface ProductDetailsMapper {
|
||||
// productId,获取商品详情skuId信息
|
||||
ProductDetails getByProductId(Long productId);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package cn.bunny.web.product.mapper;
|
||||
|
||||
import cn.bunny.common.spzx.model.entity.product.Product;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface ProductMapper {
|
||||
// 根据第二步获取sku,从sku中获取productId,获取商品数量
|
||||
Product getById(Long productId);
|
||||
}
|
|
@ -10,6 +10,14 @@ import java.util.List;
|
|||
public interface ProductSkuMapper {
|
||||
|
||||
List<ProductSku> selectProductSkuBySale();
|
||||
|
||||
// 分页查询
|
||||
List<ProductSku> findByPage(ProductSkuDto productSkuDto);
|
||||
|
||||
// 根据skuId获取sku信息
|
||||
ProductSku getById(Long skuId);
|
||||
|
||||
|
||||
// 封装map集合 == 商品规则对应商品skuId信息
|
||||
List<ProductSku> findByProductId(Long productId);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.bunny.web.product.service;
|
|||
|
||||
import cn.bunny.common.spzx.model.dto.h5.ProductSkuDto;
|
||||
import cn.bunny.common.spzx.model.entity.product.ProductSku;
|
||||
import cn.bunny.common.spzx.model.vo.h5.ProductItemVo;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -9,6 +10,10 @@ import java.util.List;
|
|||
public interface ProductService {
|
||||
// 根据销量排序,获取前十条激励
|
||||
List<ProductSku> selectProductSkuBySal();
|
||||
|
||||
// 分页查询
|
||||
PageInfo<ProductSku> findByPage(Integer page, Integer limit, ProductSkuDto productSkuDto);
|
||||
|
||||
// 商品详情
|
||||
ProductItemVo itemBySkuId(Long skuId);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
package cn.bunny.web.product.service.imp;
|
||||
|
||||
import cn.bunny.common.spzx.model.dto.h5.ProductSkuDto;
|
||||
import cn.bunny.common.spzx.model.entity.product.Product;
|
||||
import cn.bunny.common.spzx.model.entity.product.ProductDetails;
|
||||
import cn.bunny.common.spzx.model.entity.product.ProductSku;
|
||||
import cn.bunny.common.spzx.model.vo.h5.ProductItemVo;
|
||||
import cn.bunny.web.product.mapper.ProductDetailsMapper;
|
||||
import cn.bunny.web.product.mapper.ProductMapper;
|
||||
import cn.bunny.web.product.mapper.ProductSkuMapper;
|
||||
import cn.bunny.web.product.service.ProductService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
@ -12,13 +17,18 @@ import org.springframework.cache.annotation.Cacheable;
|
|||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class ProductServiceImpl implements ProductService {
|
||||
@Resource
|
||||
private ProductSkuMapper productSkuMapper;
|
||||
|
||||
@Resource
|
||||
private ProductMapper productMapper;
|
||||
|
||||
@Resource
|
||||
private ProductDetailsMapper productDetailsMapper;
|
||||
@Resource
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
|
@ -53,4 +63,37 @@ public class ProductServiceImpl implements ProductService {
|
|||
List<ProductSku> productSkuList = productSkuMapper.findByPage(productSkuDto);
|
||||
return new PageInfo<>(productSkuList);
|
||||
}
|
||||
|
||||
// 商品详情
|
||||
@Override
|
||||
public ProductItemVo itemBySkuId(Long skuId) {
|
||||
// 1.创建vo对象,用于封装最终数据
|
||||
ProductItemVo productItemVo = new ProductItemVo();
|
||||
// 2. 根据skuId获取sku信息
|
||||
ProductSku productSku = productSkuMapper.getById(skuId);
|
||||
// 3. 根据第二步获取sku,从sku中获取productId,获取商品数量
|
||||
Long productId = productSku.getProductId();
|
||||
Product product = productMapper.getById(productId);
|
||||
// 4.productId,获取商品详情skuId信息
|
||||
ProductDetails productDetails = productDetailsMapper.getByProductId(productId);
|
||||
// 5.封装map集合 == 商品规则对应商品skuId信息
|
||||
Map<String, Object> skuSpecValueMap = new HashMap<>();
|
||||
List<ProductSku> productSkuList = productSkuMapper.findByProductId(productId);
|
||||
productSkuList.forEach(item -> {
|
||||
skuSpecValueMap.put(item.getSkuSpec(), item.getId());
|
||||
});
|
||||
// 6.把需要封装数据到productItemVo中
|
||||
String imageUrls = productDetails.getImageUrls();
|
||||
String[] split = imageUrls.split(",");
|
||||
List<String> list = Arrays.asList(split);
|
||||
|
||||
productItemVo.setProduct(product);
|
||||
productItemVo.setProductSku(productSku);
|
||||
productItemVo.setSkuSpecValueMap(skuSpecValueMap);
|
||||
productItemVo.setDetailsImageUrlList(list);
|
||||
productItemVo.setSliderUrlList(Arrays.asList(product.getSliderUrls().split(",")));
|
||||
productItemVo.setSpecValueList(JSON.parseArray(product.getSpecValue()));
|
||||
|
||||
return productItemVo;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="cn.bunny.web.product.mapper.ProductDetailsMapper">
|
||||
<resultMap id="productDetailsMap" type="cn.bunny.web.product.mapper.ProductDetailsMapper" autoMapping="true">
|
||||
</resultMap>
|
||||
|
||||
<!-- 用于select查询公用抽取的列 -->
|
||||
<sql id="columns">
|
||||
id,product_id,image_urls,create_time,update_time,is_deleted
|
||||
</sql>
|
||||
|
||||
<!-- productId,获取商品详情skuId信息 -->
|
||||
<select id="getByProductId" resultType="cn.bunny.common.spzx.model.entity.product.ProductDetails">
|
||||
select
|
||||
<include refid="columns"/>
|
||||
from product_details
|
||||
where
|
||||
product_id = #{productId}
|
||||
</select>
|
||||
</mapper>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="cn.bunny.web.product.mapper.ProductMapper">
|
||||
|
||||
<resultMap id="productMap" type="cn.bunny.web.product.mapper.ProductMapper" autoMapping="true">
|
||||
</resultMap>
|
||||
|
||||
<!-- 用于select查询公用抽取的列 -->
|
||||
<sql id="columns">
|
||||
id,name,brand_id,category1_id,category2_id,category3_id,unit_name,slider_urls,spec_value,status,audit_status,audit_message,create_time,update_time,is_deleted
|
||||
</sql>
|
||||
|
||||
<!-- 根据第二步获取sku,从sku中获取productId,获取商品数量 -->
|
||||
<select id="getById" resultType="cn.bunny.common.spzx.model.entity.product.Product">
|
||||
select
|
||||
<include refid="columns"/>
|
||||
from product
|
||||
where
|
||||
id = #{id}
|
||||
</select>
|
||||
</mapper>
|
|
@ -20,6 +20,7 @@
|
|||
order by sku.sale_num desc
|
||||
limit 10
|
||||
</select>
|
||||
|
||||
<!-- 分页查询 -->
|
||||
<select id="findByPage" resultMap="productSkuMap">
|
||||
select
|
||||
|
@ -57,4 +58,22 @@
|
|||
order by sku.sale_price desc
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 根据skuId获取sku信息 -->
|
||||
<select id="getById" resultType="cn.bunny.common.spzx.model.entity.product.ProductSku">
|
||||
select
|
||||
<include refid="columns"/>
|
||||
from product_sku
|
||||
where
|
||||
id = #{id}
|
||||
</select>
|
||||
|
||||
<!-- productId,获取商品详情skuId信息 -->
|
||||
<select id="findByProductId" resultType="cn.bunny.common.spzx.model.entity.product.ProductSku">
|
||||
select
|
||||
<include refid="columns"/>
|
||||
from product_sku
|
||||
where
|
||||
product_id = #{productId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
Loading…
Reference in New Issue