diff --git a/.idea/workspace.xml b/.idea/workspace.xml index af07cc8..bc615df 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,14 +4,13 @@ + + { "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 @@ 1703487755445 - + - @@ -208,7 +232,9 @@ - @@ -220,6 +246,11 @@ + + + + + diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java index 5c21da2..952bacb 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/controller/ProductController.java @@ -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 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 item(@PathVariable("skuId") Long skuId) { + ProductItemVo productItemVo = productService.itemBySkuId(skuId); + return Result.build(productItemVo, ResultCodeEnum.SUCCESS); + } } diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductDetailsMapper.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductDetailsMapper.java new file mode 100644 index 0000000..776428c --- /dev/null +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductDetailsMapper.java @@ -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); +} diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductMapper.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductMapper.java new file mode 100644 index 0000000..fa23dd4 --- /dev/null +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductMapper.java @@ -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); +} diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java index 2db19b8..b213843 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java @@ -10,6 +10,14 @@ import java.util.List; public interface ProductSkuMapper { List selectProductSkuBySale(); + // 分页查询 List findByPage(ProductSkuDto productSkuDto); + + // 根据skuId获取sku信息 + ProductSku getById(Long skuId); + + + // 封装map集合 == 商品规则对应商品skuId信息 + List findByProductId(Long productId); } diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java index 2b2dcd5..9deb3dc 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java @@ -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 selectProductSkuBySal(); + // 分页查询 PageInfo findByPage(Integer page, Integer limit, ProductSkuDto productSkuDto); + + // 商品详情 + ProductItemVo itemBySkuId(Long skuId); } diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java index a948705..73f213c 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java @@ -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 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 skuSpecValueMap = new HashMap<>(); + List productSkuList = productSkuMapper.findByProductId(productId); + productSkuList.forEach(item -> { + skuSpecValueMap.put(item.getSkuSpec(), item.getId()); + }); + // 6.把需要封装数据到productItemVo中 + String imageUrls = productDetails.getImageUrls(); + String[] split = imageUrls.split(","); + List 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; + } } diff --git a/spzx-service/service-product/src/main/resources/mapper/product/ProductDetailsMapper.xml b/spzx-service/service-product/src/main/resources/mapper/product/ProductDetailsMapper.xml new file mode 100644 index 0000000..cd78435 --- /dev/null +++ b/spzx-service/service-product/src/main/resources/mapper/product/ProductDetailsMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + id,product_id,image_urls,create_time,update_time,is_deleted + + + + + diff --git a/spzx-service/service-product/src/main/resources/mapper/product/ProductMapper.xml b/spzx-service/service-product/src/main/resources/mapper/product/ProductMapper.xml new file mode 100644 index 0000000..b6f1346 --- /dev/null +++ b/spzx-service/service-product/src/main/resources/mapper/product/ProductMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + 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 + + + + + diff --git a/spzx-service/service-product/src/main/resources/mapper/product/ProductSkuMapper.xml b/spzx-service/service-product/src/main/resources/mapper/product/ProductSkuMapper.xml index 271c1b4..4f95d73 100644 --- a/spzx-service/service-product/src/main/resources/mapper/product/ProductSkuMapper.xml +++ b/spzx-service/service-product/src/main/resources/mapper/product/ProductSkuMapper.xml @@ -20,6 +20,7 @@ order by sku.sale_num desc limit 10 + + + + + + +