From b40ef4f06bf08d7f9e374a52466f9046119d7ef5 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Mon, 22 Sep 2025 14:09:29 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=97=B6=EF=BC=8C=E9=BB=98=E8=AE=A4=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=A1=A3=E5=8F=A3=E5=95=86=E5=93=81=E5=AF=B9=E5=BA=94=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E7=9A=84=E5=BA=93=E5=AD=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xkt/shipMaster/DoubleRunController.java | 57 ++++++++++++++----- .../xkt/shipMaster/ShipMasterController.java | 18 +++--- .../xkt/shipMaster/vo/DoubleRunAttrRQVO.java | 40 +++++++++++++ ...bleRunImportVO.java => DoubleRunRQVO.java} | 6 +- ...asterImportVO.java => ShipMasterRQVO.java} | 2 +- .../ruoyi/xkt/domain/StoreProductStock.java | 1 + .../service/impl/StoreProductServiceImpl.java | 34 ++++++++--- 7 files changed, 123 insertions(+), 35 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunAttrRQVO.java rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/{DoubleRunImportVO.java => DoubleRunRQVO.java} (85%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/{ShipMasterImportVO.java => ShipMasterRQVO.java} (93%) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/DoubleRunController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/DoubleRunController.java index ff22783a3..82b143c64 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/DoubleRunController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/DoubleRunController.java @@ -4,7 +4,8 @@ import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; -import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunImportVO; +import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunAttrRQVO; +import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunRQVO; import com.ruoyi.xkt.service.shipMaster.IShipMasterService; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -31,16 +32,16 @@ public class DoubleRunController extends BaseController { @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PostMapping("/cache") - public R createCache(@Validated @RequestBody DoubleRunImportVO importVO) { - List artNoList = importVO.getData().getData(); - final Integer userId = importVO.getData().getData().get(0).getUserId(); + public R createCache(@Validated @RequestBody DoubleRunRQVO importVO) { + List artNoList = importVO.getData().getData(); + final Integer userId = importVO.getData().getData().get(0).getUser_id(); // 先从redis中获取列表数据 - List cacheList = ObjectUtils.defaultIfNull(redisCache + List cacheList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.DOUBLE_RUN_KEY + userId), new ArrayList<>()); // Map>> artNoMap = new LinkedHashMap<>(); artNoList.forEach(artNoInfo -> { artNoInfo.getSkus().forEach(x -> x.setColor(this.decodeUnicode(x.getColor())) - .setArticle_number(artNoInfo.getArticle_number())); + .setArticle_number(artNoInfo.getArticle_number()).setProduct_id(artNoInfo.getId())); cacheList.addAll(artNoInfo.getSkus()); // artNoMap.put(artNoInfo.getArticle_number(), artNoInfo.getSkus().stream().collect(Collectors // .groupingBy(DoubleRunImportVO.DRIArtNoSkuVO::getColor))); @@ -61,33 +62,57 @@ public class DoubleRunController extends BaseController { return R.ok(); } + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") + @PostMapping("/attr/cache/{product_id}") + public R createAttrCache(@PathVariable Integer product_id, @Validated @RequestBody DoubleRunAttrRQVO attrVO) { + Map attrMap = new HashMap<>(); + attrVO.getData().forEach((itemId, attr) -> { + // 不处理 multi=1 的属性 + if (attr.getMulti() == 1) { + return; + } + // 有值 + if (attr.getHas_value() == 1) { + attr.getAttr().stream().filter(x -> x.getChoosed() == 1).forEach(x -> attrMap.put(this.decodeUnicode(x.getProps_name()), this.decodeUnicode(x.getPropsvalue_name()))); + } + }); + + Map> productIdAttrMap = new HashMap<>(); + productIdAttrMap.put(product_id, attrMap); + + + + return R.ok(); + } + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @GetMapping("/cache/{userId}") public R getCache(@PathVariable Integer userId) { // 从redis中获取数据 - List cacheList = ObjectUtils.defaultIfNull(redisCache + List cacheList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.DOUBLE_RUN_KEY + userId), new ArrayList<>()); if (CollectionUtils.isEmpty(cacheList)) { return R.fail(); } - Map> artNoGroup = cacheList.stream() - .sorted(Comparator.comparing(DoubleRunImportVO.DRIArtNoSkuVO::getArticle_number) - .thenComparing(DoubleRunImportVO.DRIArtNoSkuVO::getColor)) + Map> artNoGroup = cacheList.stream() + .sorted(Comparator.comparing(DoubleRunRQVO.DRIArtNoSkuVO::getArticle_number) + .thenComparing(DoubleRunRQVO.DRIArtNoSkuVO::getColor)) .collect(Collectors - .groupingBy(DoubleRunImportVO.DRIArtNoSkuVO::getArticle_number, LinkedHashMap::new, Collectors.toList())); + .groupingBy(DoubleRunRQVO.DRIArtNoSkuVO::getArticle_number, LinkedHashMap::new, Collectors.toList())); // 货号 颜色 map Map> artNoColorMap = new LinkedHashMap<>(); artNoGroup.forEach((artNo, colorList) -> { - artNoColorMap.put(artNo, colorList.stream().map(DoubleRunImportVO.DRIArtNoSkuVO::getColor).collect(Collectors.toList())); + artNoColorMap.put(artNo, colorList.stream().map(DoubleRunRQVO.DRIArtNoSkuVO::getColor).collect(Collectors.toList())); + }); + + artNoColorMap.forEach((k,v) -> { + System.err.println(k + ":" + v); }); // TODO 如何对比?? - - - return R.ok(); } @@ -102,6 +127,8 @@ public class DoubleRunController extends BaseController { if (unicodeStr == null || unicodeStr.isEmpty()) { return unicodeStr; } + // 去除首尾的空格 + unicodeStr = unicodeStr.trim(); StringBuilder result = new StringBuilder(); int i = 0; while (i < unicodeStr.length()) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/ShipMasterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/ShipMasterController.java index eaf43363c..1b3c6e026 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/ShipMasterController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/ShipMasterController.java @@ -4,7 +4,7 @@ import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; -import com.ruoyi.web.controller.xkt.shipMaster.vo.ShipMasterImportVO; +import com.ruoyi.web.controller.xkt.shipMaster.vo.ShipMasterRQVO; import com.ruoyi.xkt.service.shipMaster.IShipMasterService; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -31,11 +31,11 @@ public class ShipMasterController extends BaseController { @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PostMapping("/cache") - public R createCache(@Validated @RequestBody ShipMasterImportVO importVO) { + public R createCache(@Validated @RequestBody ShipMasterRQVO importVO) { // 供应商ID final Integer supplierId = importVO.getData().getRecords().get(0).getSupplierId(); // 先从redis中获取列表数据 - List cacheList = ObjectUtils.defaultIfNull(redisCache + List cacheList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.SUPPLIER_KEY + supplierId), new ArrayList<>()); CollectionUtils.addAll(cacheList, importVO.getData().getRecords()); // 存到redis中 @@ -47,23 +47,23 @@ public class ShipMasterController extends BaseController { @GetMapping("/cache/{supplierId}") public R getCache(@PathVariable Integer supplierId) { // 从redis中获取数据 - List cacheList = ObjectUtils.defaultIfNull(redisCache + List cacheList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.SUPPLIER_KEY + supplierId), new ArrayList<>()); if (CollectionUtils.isEmpty(cacheList)) { return R.fail(); } // 按照artNo分组 - Map> artNoGroup = cacheList.stream() - .sorted(Comparator.comparing(ShipMasterImportVO.SMIVO::getArtNo) - .thenComparing(ShipMasterImportVO.SMIVO::getColor)) + Map> artNoGroup = cacheList.stream() + .sorted(Comparator.comparing(ShipMasterRQVO.SMIVO::getArtNo) + .thenComparing(ShipMasterRQVO.SMIVO::getColor)) .collect(Collectors - .groupingBy(ShipMasterImportVO.SMIVO::getArtNo, LinkedHashMap::new, Collectors.toList())); + .groupingBy(ShipMasterRQVO.SMIVO::getArtNo, LinkedHashMap::new, Collectors.toList())); // 货号 颜色 对应的条码前缀 Map> artSnPrefixMap = new LinkedHashMap<>(); // 货号 颜色 map Map> artNoColorMap = new LinkedHashMap<>(); artNoGroup.forEach((artNo, colorList) -> { - artNoColorMap.put(artNo, colorList.stream().map(ShipMasterImportVO.SMIVO::getColor).collect(Collectors.toList())); + artNoColorMap.put(artNo, colorList.stream().map(ShipMasterRQVO.SMIVO::getColor).collect(Collectors.toList())); Map snPrefixMap = new LinkedHashMap<>(); // 按照颜色设置条码前缀 colorList.forEach(color -> snPrefixMap diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunAttrRQVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunAttrRQVO.java new file mode 100644 index 000000000..7b0190ee2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunAttrRQVO.java @@ -0,0 +1,40 @@ +package com.ruoyi.web.controller.xkt.shipMaster.vo; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author liangyq + * @date 2025-05-11 23:46 + */ +@Data +public class DoubleRunAttrRQVO { + + private Map data; + + @Data + public static class DRAAttrVO { + private Integer must; + private Integer multi; + private Integer has_value; + // eg: 帮面材质 + private String name; + private Integer props_id; + private List attr; + + @Data + public static class DRAAttrItemVO { + private Integer props_id; + // eg: 帮面材质 + private String props_name; + private Integer propsvalue_id; + // eg: 头层牛皮 + private String propsvalue_name; + private Integer choosed; + } + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunImportVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunRQVO.java similarity index 85% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunImportVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunRQVO.java index a8a0893c6..dbeb93b03 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunImportVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/DoubleRunRQVO.java @@ -11,7 +11,7 @@ import java.util.List; * @date 2025-05-11 23:46 */ @Data -public class DoubleRunImportVO { +public class DoubleRunRQVO { private DRIDataVO data; @@ -22,7 +22,8 @@ public class DoubleRunImportVO { @Data public static class DRIArtNoVO { - private Integer userId; + private Integer id; + private Integer user_id; private String article_number; private List skus; } @@ -30,6 +31,7 @@ public class DoubleRunImportVO { @Data @Accessors(chain = true) public static class DRIArtNoSkuVO { + private Integer product_id; private String article_number; private String color; private Integer size; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterImportVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterRQVO.java similarity index 93% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterImportVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterRQVO.java index a23ec346d..5740888cf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterImportVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/shipMaster/vo/ShipMasterRQVO.java @@ -9,7 +9,7 @@ import java.util.List; * @date 2025-05-11 23:46 */ @Data -public class ShipMasterImportVO { +public class ShipMasterRQVO { private SMIDataVO data; diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java index 2b43818ad..0ce4d9c22 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java @@ -12,6 +12,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; /** * 档口商品库存对象 store_product_stock + * 全部统一在新增商品时,创建默认的库存 * * @author ruoyi * @date 2025-03-26 diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java index abe7e416a..cfcc133a5 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java @@ -220,7 +220,7 @@ public class StoreProductServiceImpl implements IStoreProductService { .setRecommendWeight(0L).setSaleWeight(0L).setPopularityWeight(0L); int count = this.storeProdMapper.insert(storeProd); // 新增档口商品颜色相关 - this.createProdColor(createDTO, storeProd.getId(), storeProd.getStoreId()); + this.createProdColor(createDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum()); // 新增档口商品其它属性 this.createOtherProperties(createDTO, storeProd); // 立即发布 将商品同步到 ES 商品文档,并将商品主图同步到 以图搜款服务中 @@ -279,7 +279,7 @@ public class StoreProductServiceImpl implements IStoreProductService { // 档口工艺信息的del_flag置为2 this.storeProdProcMapper.updateDelFlagByStoreProdId(storeProdId); // 更新档口商品颜色价格及尺码等 - this.updateColorRelation(updateDTO, storeProd.getId(), storeProd.getStoreId()); + this.updateColorRelation(updateDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum()); // 处理更新逻辑 this.updateOtherProperties(updateDTO, storeProd); // 只有在售和尾货状态,更新ES 信息 及 图搜 @@ -337,12 +337,12 @@ public class StoreProductServiceImpl implements IStoreProductService { /** * 更新档口商品其它属性 - * - * @param updateDTO 更新入参 + * @param updateDTO 更新入参 * @param storeProdId 档口商品ID * @param storeId 档口ID + * @param prodArtNum 货号 */ - private void updateColorRelation(StoreProdDTO updateDTO, Long storeProdId, Long storeId) { + private void updateColorRelation(StoreProdDTO updateDTO, Long storeProdId, Long storeId, String prodArtNum) { // 处理档口所有颜色 Map storeColorMap = updateDTO.getAllColorList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId())) .collect(Collectors.toMap(StoreColorDTO::getColorName, StoreColorDTO::getStoreColorId)); @@ -415,6 +415,20 @@ public class StoreProductServiceImpl implements IStoreProductService { if (CollectionUtils.isNotEmpty(nullSnPrefixList)) { this.storeProdColorSizeMapper.updateById(nullSnPrefixList); } + + // 正在生效的颜色 + List validColorList = dbProdColorList.stream().filter(x -> Objects.equals(x.getDelFlag(), UNDELETED)).collect(Collectors.toList()); + final List validColorIdList = validColorList.stream().map(StoreProductColor::getId).collect(Collectors.toList()); + // 如果数据库不存在该商品颜色的库存,则初始化 + List dbProdStockList = Optional.ofNullable(this.prodStockMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductStock::getStoreProdId, storeProdId).eq(StoreProductStock::getDelFlag, Constants.UNDELETED))).orElse(new ArrayList<>()); + final List dbExistStockColorIdList = dbProdStockList.stream().map(StoreProductStock::getStoreProdColorId).collect(Collectors.toList()); + // 有哪些颜色是删除的 + dbProdStockList.stream().filter(x -> !validColorIdList.contains(x.getStoreProdColorId())).forEach(x -> x.setDelFlag(Constants.DELETED)); + // 有哪些是新增的颜色 + validColorList.stream().filter(x -> !dbExistStockColorIdList.contains(x.getId())) + .forEach(x -> dbProdStockList.add(BeanUtil.toBean(x, StoreProductStock.class).setProdArtNum(prodArtNum).setStoreProdColorId(x.getId()))); + this.prodStockMapper.insertOrUpdate(dbProdStockList); } /** @@ -456,12 +470,12 @@ public class StoreProductServiceImpl implements IStoreProductService { /** * 新增档口商品颜色等 - * - * @param createDTO 入参 + * @param createDTO 入参 * @param storeProdId 档口商品ID * @param storeId 档口ID + * @param prodArtNum 货号 */ - private void createProdColor(StoreProdDTO createDTO, Long storeProdId, Long storeId) { + private void createProdColor(StoreProdDTO createDTO, Long storeProdId, Long storeId, String prodArtNum) { // 处理档口所有颜色 Map storeColorMap = createDTO.getAllColorList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId())) .collect(Collectors.toMap(StoreColorDTO::getColorName, StoreColorDTO::getStoreColorId)); @@ -488,6 +502,10 @@ public class StoreProductServiceImpl implements IStoreProductService { // 设置档口商品价格尺码的barcode_prefix prodColorSizeList.forEach(x -> x.setSnPrefix(storeId + String.format("%08d", x.getId()))); this.storeProdColorSizeMapper.updateById(prodColorSizeList); + // 新增档口库存初始化数据 + List prodStockList = prodColorList.stream().map(x -> BeanUtil.toBean(x, StoreProductStock.class) + .setProdArtNum(prodArtNum).setStoreProdColorId(x.getId())).collect(Collectors.toList()); + this.prodStockMapper.insert(prodStockList); // 设置了档口商品全部优惠的客户,新增商品优惠 this.createStoreCusDiscount(prodColorList, storeProdId); }