From fbabdc5763e8e4bad148cdf0b6fae748731d8bbd Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Tue, 6 Aug 2024 14:49:07 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E5=95=86=E5=93=81=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E8=8E=B7=E5=8F=96=E6=8E=A5=E5=8F=A3=202.=E5=A4=9A?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=E4=B8=8A=E4=B8=8B=E6=9E=B6=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProductController.java | 16 ++++ .../entity/TbProductSkuWithBLOBs.java | 13 ++- .../entity/dto/QuerySpecDTO.java | 21 +++++ .../service/ProductService.java | 94 ++++++++++++++++++- .../resources/mapper/TbProductSkuMapper.xml | 4 +- 5 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/entity/dto/QuerySpecDTO.java diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java index 8392851..b36d7d9 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java @@ -3,6 +3,7 @@ package com.chaozhanggui.system.cashierservice.controller; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.system.cashierservice.entity.dto.QuerySpecDTO; import com.chaozhanggui.system.cashierservice.service.CartService; import com.chaozhanggui.system.cashierservice.service.ProductService; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; @@ -59,6 +60,21 @@ public class ProductController { (map.containsKey("productGroupId") && ObjectUtil.isNotEmpty(map.get("productGroupId"))) ? map.get("productGroupId").toString() : ""); } + /** + * 查询规格 + * + * @return + */ + @PostMapping("querySpec") + public Result querySpec( + @RequestBody QuerySpecDTO querySpecDTO + ) { + if (querySpecDTO.getProductId() == null) { + return Result.fail("id不为空"); + } + return Result.successWithData(productService.querySpec(querySpecDTO)); + } + @GetMapping("queryProductSku") public Result queryProductSku( diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java index ee7e414..91a57d2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java @@ -3,6 +3,9 @@ package com.chaozhanggui.system.cashierservice.entity; import java.io.Serializable; public class TbProductSkuWithBLOBs extends TbProductSku implements Serializable { + + private String tagSnap; + private String specInfo; private String specSnap; @@ -11,6 +14,14 @@ public class TbProductSkuWithBLOBs extends TbProductSku implements Serializable private static final long serialVersionUID = 1L; + public String getTagSnap() { + return tagSnap; + } + + public void setTagSnap(String tagSnap) { + this.tagSnap = tagSnap; + } + public Integer getNumber() { return number; } @@ -34,4 +45,4 @@ public class TbProductSkuWithBLOBs extends TbProductSku implements Serializable public void setSpecSnap(String specSnap) { this.specSnap = specSnap == null ? null : specSnap.trim(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/dto/QuerySpecDTO.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/dto/QuerySpecDTO.java new file mode 100644 index 0000000..23899c2 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/dto/QuerySpecDTO.java @@ -0,0 +1,21 @@ +package com.chaozhanggui.system.cashierservice.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QuerySpecDTO { + @Data + @AllArgsConstructor + @EqualsAndHashCode + public static class QuerySpec { + private String name; + private String value; + } + private Integer productId; + private List querySpecList = new ArrayList<>(); +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java index 41f1292..6f4c7ab 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject; import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.dto.HomeDto; +import com.chaozhanggui.system.cashierservice.entity.dto.QuerySpecDTO; import com.chaozhanggui.system.cashierservice.entity.vo.*; import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; @@ -161,6 +162,80 @@ public class ProductService { return Result.success(CodeEnum.SUCCESS, concurrentMap); } + public JSONArray querySpec(QuerySpecDTO querySpecDTO) { + TbProduct tbProduct = tbProductMapper.selectById(querySpecDTO.getProductId()); + if (tbProduct == null) { + throw new MsgException("商品不存在"); + } + TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPrimaryKey(querySpecDTO.getProductId()); + + // 重组有效规格数据 + String tagSnap = skuResult != null ? skuResult.getTagSnap() : null; + JSONArray finalSnap = new JSONArray(); + if (tagSnap != null) { + JSONArray tagSnaps = JSONObject.parseArray(tagSnap); + HashMap reverseTagSnapMap = new HashMap<>(); + JSONObject snapJSON; + for (Object snap : tagSnaps) { + snapJSON = (JSONObject)snap; + reverseTagSnapMap.put(snapJSON.getString("value"), snapJSON.getString("name")); + } + List tbProductSkus = tbProductSkuMapper.selectGroundingByProId(querySpecDTO.getProductId()); + // 上下架对应的sku + HashSet specSet = new HashSet<>(); + for (TbProductSku item : tbProductSkus) { + String specSnap = item.getSpecSnap(); + + ArrayList skuSpecList = new ArrayList<>(); + if (specSnap != null) { + String[] split = specSnap.split(","); + for (String snap : split) { + reverseTagSnapMap.forEach((k, v) -> { + if (k.contains(snap)) { + skuSpecList.add(new QuerySpecDTO.QuerySpec(v, snap)); + } + }); + } + boolean isHave = false; + for (QuerySpecDTO.QuerySpec spec : querySpecDTO.getQuerySpecList()) { + for (QuerySpecDTO.QuerySpec querySpec : skuSpecList) { + isHave = querySpec.equals(spec); + if (isHave) break; + } + + } + + if (querySpecDTO.getQuerySpecList().isEmpty() || isHave) { + specSet.addAll(Arrays.asList(split)); + } + } + } + + for (Object snap : tagSnaps) { + snapJSON = (JSONObject) snap; + String values = snapJSON.getString("value"); + + ArrayList> data = new ArrayList<>(); + if (StrUtil.isNotBlank(values)) { + String[] valueList = values.split(","); + for (String value : valueList) { + LinkedHashMap finalValue = new LinkedHashMap<>(); + finalValue.put("info", value); + finalValue.put("isGrounding", specSet.contains(value)); + data.add(finalValue); + } + if (!data.isEmpty()) { + snapJSON.put("value", data); + finalSnap.add(snapJSON); + } + + } + } + } + + return finalSnap; + } + public List handleDate(List products){ if (!CollectionUtils.isEmpty(products)) { @@ -235,12 +310,22 @@ public class ProductService { if (ObjectUtil.isEmpty(shopId) || ObjectUtil.isEmpty(productId)) { return Result.fail("参数错误"); } - TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByShopIdAndProductIdAndSpec(shopId, productId, spec_tag); - if (StringUtils.isNotBlank(code)) { - Integer sum = tbProductMapper.selectByCodeAndSkuId(code, tbProductSkuWithBLOBs.getId(), shopId); - tbProductSkuWithBLOBs.setNumber(sum); + + if (tbProductSkuWithBLOBs == null) { + tbProductSkuWithBLOBs = new TbProductSkuWithBLOBs(); + tbProductSkuWithBLOBs.setNumber(0); + tbProductSkuWithBLOBs.setSalePrice(BigDecimal.ZERO); + tbProductSkuWithBLOBs.setOriginPrice(BigDecimal.ZERO); + tbProductSkuWithBLOBs.setId(null); + }else { + if (StringUtils.isNotBlank(code)) { + Integer sum = tbProductMapper.selectByCodeAndSkuId(code, tbProductSkuWithBLOBs.getId(), shopId); + tbProductSkuWithBLOBs.setNumber(sum); + } } + + return Result.success(CodeEnum.SUCCESS, tbProductSkuWithBLOBs); } @@ -549,4 +634,5 @@ public class ProductService { } } } + } diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml index b5f7766..65a401f 100644 --- a/src/main/resources/mapper/TbProductSkuMapper.xml +++ b/src/main/resources/mapper/TbProductSkuMapper.xml @@ -362,11 +362,11 @@