From 68b05b7063e3d5949b49dfaf570c29beeee43f0d Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Thu, 25 Sep 2025 00:15:28 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E7=B3=BB=E7=BB=9F=E8=B0=83?= =?UTF-8?q?=E4=BC=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xkt/migartion/GtAndFhbBizController.java | 76 ++++++++++--------- .../xkt/migartion/GtController.java | 49 ++++-------- .../xkt/migartion/vo/gt/GtCateVO.java | 17 +++-- .../xkt/migartion/vo/gt/GtProdSkuVO.java | 1 + .../xkt/migartion/vo/gt/GtProdVO.java | 1 + 5 files changed, 67 insertions(+), 77 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndFhbBizController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndFhbBizController.java index f38d3caae..6178fc826 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndFhbBizController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndFhbBizController.java @@ -61,6 +61,7 @@ public class GtAndFhbBizController extends BaseController { final StoreMapper storeMapper; final StoreProductServiceMapper prodSvcMapper; final StoreProductCategoryAttributeMapper prodCateAttrMapper; + final SysProductCategoryMapper prodCateMapper; @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PutMapping("/sync-es/{storeId}") @@ -94,8 +95,8 @@ public class GtAndFhbBizController extends BaseController { List doubleRunSaleBasicList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.MIGRATION_GT_SALE_BASIC_KEY + userId), new ArrayList<>()); Map articleNoColorMap = doubleRunSaleBasicList.stream().collect(Collectors.groupingBy(GtProdSkuVO::getArticle_number, - Collectors.collectingAndThen(Collectors.mapping(GtProdSkuVO::getColor, Collectors.toList()), - list -> "(" + list.stream().distinct().collect(Collectors.joining(",")) + ")"))); + Collectors.collectingAndThen(Collectors.mapping(GtProdSkuVO::getColor, Collectors.toList()), + list -> "(" + list.stream().distinct().collect(Collectors.joining(",")) + ")"))); List doubleRunSaleArtNoList = doubleRunSaleBasicList.stream().map(GtProdSkuVO::getArticle_number) .distinct().collect(Collectors.toList()); // 查看double_run 在售的商品 这边有多少相似的货号 @@ -124,8 +125,8 @@ public class GtAndFhbBizController extends BaseController { List shipMasterProdList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.MIGRATION_SUPPLIER_PROD_KEY + supplierId), new ArrayList<>()); Map shipMasterArticleNoColorMap = shipMasterProdList.stream().collect(Collectors.groupingBy(FhbProdVO.SMIVO::getArtNo, - Collectors.collectingAndThen(Collectors.mapping(FhbProdVO.SMIVO::getColor, Collectors.toList()), - list -> "(" + list.stream().distinct().collect(Collectors.joining(",")) + ")"))); + Collectors.collectingAndThen(Collectors.mapping(FhbProdVO.SMIVO::getColor, Collectors.toList()), + list -> "(" + list.stream().distinct().collect(Collectors.joining(",")) + ")"))); List shipArtNoList = shipMasterProdList.stream().map(FhbProdVO.SMIVO::getArtNo) .distinct().collect(Collectors.toList()); shipArtNoList.forEach(artNo -> { @@ -201,7 +202,6 @@ public class GtAndFhbBizController extends BaseController { * 步骤3: 准备数据,新建客户 * 步骤4: 客户与货号的优惠关系 * 步骤5: 批量创建数据到ES服务器 - * */ @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PutMapping("/init") @@ -215,15 +215,14 @@ public class GtAndFhbBizController extends BaseController { // 步骤1: 准备数据,新建颜色 Map storeColorMap = this.initStoreColorList(initVO.getStoreId(), initVO.getSupplierId()); // 步骤2: GT 和 FHB 货号对应关系,然后直接copy 对应的属性关系 - // a. 商品与颜色对应关系 - // b. 商品颜色尺码 + 价格 对应关系 - // c. 库存初始化 - // d. 服务承诺初始化 - // e. 类目属性初始化 + // a. 商品与颜色对应关系 + // b. 商品颜色尺码 + 价格 对应关系 + // c. 库存初始化 + // d. 服务承诺初始化 + // e. 类目属性初始化 this.init(initVO, storeColorMap); - // 步骤x: 查看有哪些货号价格是有多个的,单独设置差异的价格 @@ -233,18 +232,18 @@ public class GtAndFhbBizController extends BaseController { } - /** * 初始化档口商品列表 + * * @param storeColorMap 档口颜色map */ private R init(GtAndFHBInitVO initVO, Map storeColorMap) { // 步骤2: GT 和 FHB 货号对应关系,然后直接copy 对应的属性关系 - // a. 商品与颜色对应关系 - // b. 商品颜色尺码 + 价格 对应关系 - // c. 库存初始化 - // d. 服务承诺初始化 - // e. 类目属性初始化 + // a. 商品与颜色对应关系 + // b. 商品颜色尺码 + 价格 对应关系 + // c. 库存初始化 + // d. 服务承诺初始化 + // e. 类目属性初始化 Map> multiSaleSameGoMap = new HashMap<>(); Map> multiOffSaleSameGoMap = new HashMap<>(); Map> multiSameFhbMap = new HashMap<>(); @@ -283,17 +282,22 @@ public class GtAndFhbBizController extends BaseController { multiSameFhbMap.put(cleanArtNo, existList); }); - // 商品所有的分类 - List artNoCateList = redisCache.getCacheObject(CacheConstants.MIGRATION_GT_SALE_CATE_KEY + initVO.getUserId()); - if (CollectionUtils.isEmpty(artNoCateList)) { - throw new ServiceException("GT商品分类为空!", HttpStatus.ERROR); - } - Map artNoCateMap = artNoCateList.stream().collect(Collectors.toMap(GtCateVO::getArticle_number, x -> x)); - - // gt按照货号分组 Map> gtSaleGroupMap = gtSaleBasicList.stream().collect(Collectors.groupingBy(GtProdSkuVO::getArticle_number)); + // GT分类 + List cacheList = ObjectUtils.defaultIfNull(redisCache + .getCacheObject(CacheConstants.MIGRATION_GT_SALE_CATE_KEY + initVO.getUserId()), new ArrayList<>()); + List prodCateList = this.prodCateMapper.selectList(new LambdaQueryWrapper() + .eq(SysProductCategory::getDelFlag, Constants.UNDELETED)); + Map dbCateNameMap = prodCateList.stream().collect(Collectors.toMap(SysProductCategory::getName, SysProductCategory::getId)); + // GT商品分类和步橘分类映射 + Map cateRelationMap = new HashMap<>(); + cacheList.forEach(gtCate -> { + final Long cateId = Optional.ofNullable(dbCateNameMap.get(gtCate.getName())).orElseThrow(() -> new ServiceException("GT分类不存在!", HttpStatus.ERROR)); + cateRelationMap.put(gtCate.getId(), cateId); + }); + System.err.println("============ 两边系统“一致”的货号 ============"); // 清洗后,相同货号映射 Set commonArtNos = new HashSet<>(multiSaleSameGoMap.keySet()); @@ -310,11 +314,8 @@ public class GtAndFhbBizController extends BaseController { .forEach(cleanArtNo -> { // 获取GT匹配的商品中的第一个商品 List gtMatchSkuList = this.getGtFirstSku(multiSaleSameGoMap, gtSaleGroupMap, cleanArtNo); - // 商品分类 - final GtCateVO gtCateVO = Optional.ofNullable(artNoCateMap.get(gtMatchSkuList.get(0).getArticle_number())) - .orElseThrow(() -> new ServiceException("没有GT商品分类!", HttpStatus.ERROR)); // 初始化档口商品 - StoreProduct storeProd = new StoreProduct().setStoreId(initVO.getStoreId()).setProdCateId(gtCateVO.getBuju_cate_id()) + StoreProduct storeProd = new StoreProduct().setStoreId(initVO.getStoreId()).setProdCateId(cateRelationMap.get(gtMatchSkuList.get(0).getCategory_nid())) .setProdArtNum(cleanArtNo).setProdTitle(gtMatchSkuList.get(0).getCharacters()).setListingWay(ListingType.RIGHT_NOW.getValue()) .setVoucherDate(voucherDate).setProdStatus(EProductStatus.ON_SALE.getValue()).setRecommendWeight(0L).setSaleWeight(0L).setPopularityWeight(0L); // 提前设置档口商品的类目属性 @@ -400,10 +401,10 @@ public class GtAndFhbBizController extends BaseController { /** * 新建档口客户对应产品的优惠 * - * @param initVO 入参 - * @param storeProdList 档口商品列表 - * @param storeCusList 档口客户列表 - * @param prodColorList 商品颜色列表 + * @param initVO 入参 + * @param storeProdList 档口商品列表 + * @param storeCusList 档口客户列表 + * @param prodColorList 商品颜色列表 * @param multiSameFhbMap 步橘货号和FHB货号对应关系 * @param fhbProdGroupMap FHB货号和颜色对应关系 */ @@ -452,6 +453,7 @@ public class GtAndFhbBizController extends BaseController { /** * 初始化客户列表 + * * @param initVO 入参 * @return List */ @@ -474,8 +476,9 @@ public class GtAndFhbBizController extends BaseController { /** * 提前匹配类目属性 - * @param product_id GT商品ID - * @param userId GT用户ID + * + * @param product_id GT商品ID + * @param userId GT用户ID * @param prodAttrMap 类目属性 */ private void preMatchAttr(Integer product_id, Integer userId, Map prodAttrMap) { @@ -587,6 +590,7 @@ public class GtAndFhbBizController extends BaseController { /** * 取GT匹配的多个货号中的第一个商品 + * * @param multiSaleSameGoMap * @param gtSaleGroupMap * @param cleanArtNo @@ -604,7 +608,7 @@ public class GtAndFhbBizController extends BaseController { /** * 初始化档口颜色 * - * @param storeId 档口ID + * @param storeId 档口ID * @param supplierId 供应商ID */ private Map initStoreColorList(Long storeId, Integer supplierId) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtController.java index 549b1fde2..929899370 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtController.java @@ -1,19 +1,15 @@ package com.ruoyi.web.controller.xkt.migartion; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.CacheConstants; -import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtAttrVO; import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtCateVO; import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtProdSkuVO; import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtProdVO; -import com.ruoyi.xkt.domain.SysProductCategory; import com.ruoyi.xkt.mapper.SysProductCategoryMapper; import com.ruoyi.xkt.service.shipMaster.IShipMasterService; import lombok.RequiredArgsConstructor; @@ -23,12 +19,9 @@ import org.apache.commons.lang3.ObjectUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -45,6 +38,7 @@ public class GtController extends BaseController { final RedisCache redisCache; final SysProductCategoryMapper prodCateMapper; + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PostMapping("/sale/cache") public R createSaleCache(@Validated @RequestBody GtProdVO doubleRunVO) { @@ -55,7 +49,7 @@ public class GtController extends BaseController { .getCacheObject(CacheConstants.MIGRATION_GT_SALE_BASIC_KEY + userId), new ArrayList<>()); artNoList.forEach(artNoInfo -> { artNoInfo.getSkus().forEach(x -> x.setColor(this.decodeUnicode(x.getColor())).setCharacters(artNoInfo.getCharacters()) - .setArticle_number(artNoInfo.getArticle_number()).setProduct_id(artNoInfo.getId())); + .setArticle_number(artNoInfo.getArticle_number()).setProduct_id(artNoInfo.getId()).setCategory_nid(artNoInfo.getCategory_nid())); cacheList.addAll(artNoInfo.getSkus()); }); // 存到redis中 @@ -108,33 +102,20 @@ public class GtController extends BaseController { @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") @PostMapping("/cate/cache/{user_id}") - public R createCateCache(@PathVariable(value = "user_id") Integer user_id, MultipartFile file) throws IOException { - - - // TODO GT分类基础数据导入,然后从商品属性那儿解决 - // TODO GT分类基础数据导入,然后从商品属性那儿解决 - // TODO GT分类基础数据导入,然后从商品属性那儿解决 - - - - - - ExcelUtil util = new ExcelUtil<>(GtCateVO.class); - List artNoCateList = util.importExcel(file.getInputStream()); - // 步橘网获取所有的分类 - List cateList = this.prodCateMapper.selectList(new LambdaQueryWrapper() - .eq(SysProductCategory::getDelFlag, Constants.UNDELETED).ne(SysProductCategory::getId, Constants.TOPMOST_PRODUCT_CATEGORY_ID)); - Map cateNameMap = cateList.stream().collect(Collectors.toMap(SysProductCategory::getName, SysProductCategory::getId)); - artNoCateList.forEach(x -> { - // 必须用trim() - x.setArticle_number(x.getArticle_number().trim()).setCate_name(x.getCate_name().trim()); - if (!cateNameMap.containsKey(x.getCate_name())) { - throw new ServiceException("分类不存在:" + x.getCate_name(), HttpStatus.ERROR); - } - x.setBuju_cate_id(cateNameMap.get(x.getCate_name().trim())); - }); + public R createCateCache(@PathVariable(value = "user_id") Integer user_id, @Validated @RequestBody GtCateVO cateInitVO) { + if (CollectionUtils.isEmpty(cateInitVO.getData())) { + throw new ServiceException("入参GT分类数据为空!", HttpStatus.ERROR); + } + List cateList = cateInitVO.getData().stream() + .filter(x -> x.getHas_child() == 0) + .map(x -> Objects.equals(x.getName(), "时尚雪地靴") ? x.setName("雪地靴") : x) + .collect(Collectors.toList()); + // 先从redis中获取列表数据 + List cacheList = ObjectUtils.defaultIfNull(redisCache + .getCacheObject(CacheConstants.MIGRATION_GT_SALE_CATE_KEY + user_id), new ArrayList<>()); + CollectionUtils.addAll(cacheList, cateList); // 放到缓存中 - redisCache.setCacheObject(CacheConstants.MIGRATION_GT_SALE_CATE_KEY + user_id, artNoCateList, 5, TimeUnit.DAYS); + redisCache.setCacheObject(CacheConstants.MIGRATION_GT_SALE_CATE_KEY + user_id, cacheList); return R.ok(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtCateVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtCateVO.java index 2ae0e51c5..e3c1517b1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtCateVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtCateVO.java @@ -1,9 +1,10 @@ package com.ruoyi.web.controller.xkt.migartion.vo.gt; -import com.ruoyi.common.annotation.Excel; import lombok.Data; import lombok.experimental.Accessors; +import java.util.List; + /** * @author liangyq * @date 2025-05-11 23:46 @@ -12,11 +13,13 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class GtCateVO { - @Excel(name = "货号") - private String article_number; - @Excel(name = "分类") - private String cate_name; - // 步橘的分类id - private Long buju_cate_id; + private List data; + + @Data + public static class GCIDataVO { + private Integer id; + private Integer has_child; + private String name; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdSkuVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdSkuVO.java index f1764076b..0ace2c41f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdSkuVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdSkuVO.java @@ -15,6 +15,7 @@ public class GtProdSkuVO { private Integer product_id; private String article_number; + private Integer category_nid; private String color; private Integer size; private String characters; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdVO.java index b1030f4a5..500af7fbb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gt/GtProdVO.java @@ -22,6 +22,7 @@ public class GtProdVO { public static class DRIArtNoVO { private Integer id; private Integer user_id; + private Integer category_nid; private String article_number; private String characters; private List skus;