商品详情

This commit is contained in:
Bunny 2023-12-26 13:05:46 +08:00
parent c501095426
commit 1ab1d7f27d
10 changed files with 191 additions and 14 deletions

View File

@ -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">{
&quot;customColor&quot;: &quot;&quot;,
&quot;associatedIndex&quot;: 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 />

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>