diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBiz2Controller.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBiz2Controller.java index a21fd9a35..3da288490 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBiz2Controller.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBiz2Controller.java @@ -82,8 +82,8 @@ public class GtAndTyBiz2Controller extends BaseController { * step1 */ @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") - @GetMapping("/compare/{userId}") - public void compare(HttpServletResponse response, @PathVariable("userId") Integer userId) throws UnsupportedEncodingException { + @GetMapping("/compare/{userId}/{diffStr}") + public void compare(HttpServletResponse response, @PathVariable("userId") Integer userId, @PathVariable("diffStr") String diffStr) throws UnsupportedEncodingException { // 处理的思路,以GT为主,根据GT的货号 去匹配TY的货号,有些档口写的比较规范,这种就比较好处理 List gtOnSaleList = ObjectUtils.defaultIfNull(redisCache .getCacheObject(CacheConstants.MIGRATION_GT_SALE_BASIC_KEY + userId), new ArrayList<>()); @@ -108,7 +108,7 @@ public class GtAndTyBiz2Controller extends BaseController { Map> gtMatchTyArtNoMap = new HashMap<>(); // 以GT为准在,找TY匹配的货号 gtArtNoList.forEach(gtOnSaleArtNo -> tyArtNoColorMap.forEach((tyArtNo, tyArtNoColorStr) -> { - if (tyArtNo.contains(gtOnSaleArtNo)) { + if (Objects.equals(tyArtNo, gtOnSaleArtNo) || Objects.equals(tyArtNo, gtOnSaleArtNo + diffStr)) { List existMatchArtNoList = gtMatchTyArtNoMap.getOrDefault(gtOnSaleArtNo, new ArrayList<>()); existMatchArtNoList.add(tyArtNo); gtMatchTyArtNoMap.put(gtOnSaleArtNo, existMatchArtNoList); @@ -118,7 +118,6 @@ public class GtAndTyBiz2Controller extends BaseController { // 清洗后,相同货号映射 List matchArtNoList = new ArrayList<>(); List multiMatchGtArtNoList = new ArrayList<>(); - matchArtNoList.add("============ GT和TY匹配的货号 ============"); // 清洗数据之后,GO平台和TY平台 货号一致的,按照这种来展示: GT => [Z1110(黑色,黑色绒里,棕色,棕色绒里)] <= 清洗后的货号 => [Z1110(黑色,黑色绒里,棕色,棕色绒里)] <= TY gtMatchTyArtNoMap.forEach((gtArtNo, tyArtNoList) -> { List tyArtNoColorList = tyArtNoList.stream().map(tyArtNo -> tyArtNo + tyArtNoColorMap.get(tyArtNo)).collect(Collectors.toList()); @@ -196,7 +195,7 @@ public class GtAndTyBiz2Controller extends BaseController { Map> gtMatchTyArtNoMap = new HashMap<>(); // 以GT为准在,找TY匹配的货号 gtArtNoList.forEach(gtOnSaleArtNo -> tyArtNoColorMap.forEach((tyArtNo, tyArtNoColorStr) -> { - if (tyArtNo.contains(gtOnSaleArtNo)) { + if (Objects.equals(tyArtNo, gtOnSaleArtNo) || Objects.equals(tyArtNo, gtOnSaleArtNo + initVO.getDiffStr())) { List existMatchArtNoList = gtMatchTyArtNoMap.getOrDefault(gtOnSaleArtNo, new ArrayList<>()); existMatchArtNoList.add(tyArtNo); gtMatchTyArtNoMap.put(gtOnSaleArtNo, existMatchArtNoList); @@ -324,7 +323,7 @@ public class GtAndTyBiz2Controller extends BaseController { // 该颜色所有的尺码 for (int j = 0; j < Constants.SIZE_LIST.size(); j++) { // TY系统条码前缀 - final String otherSnPrefix = tyProdImportVO.getTySnPrefix() + Constants.SIZE_LIST.get(j); + final String otherSnPrefix = tyProdImportVO.getSn() + Constants.SIZE_LIST.get(j); prodColorSizeList.add(new StoreProductColorSize().setSize(Constants.SIZE_LIST.get(j)).setStoreColorId(storeColor.getId()) .setStoreProdId(storeProd.getId()).setPrice(tyProdImportVO.getPrice()).setOtherSnPrefix(otherSnPrefix).setNextSn(0) .setStandard(gtStandardSizeList.contains(Constants.SIZE_LIST.get(j)) ? 1 : 0)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBizController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBizController.java index 851616b68..e3e9deacc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBizController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/GtAndTyBizController.java @@ -372,7 +372,7 @@ public class GtAndTyBizController extends BaseController { // 该颜色所有的尺码 for (int j = 0; j < Constants.SIZE_LIST.size(); j++) { // TY系统条码前缀 - final String otherSnPrefix = tyProdImportVO.getTySnPrefix() + Constants.SIZE_LIST.get(j); + final String otherSnPrefix = tyProdImportVO.getSn() + Constants.SIZE_LIST.get(j); prodColorSizeList.add(new StoreProductColorSize().setSize(Constants.SIZE_LIST.get(j)).setStoreColorId(storeColor.getId()) .setStoreProdId(storeProd.getId()).setPrice(tyProdImportVO.getPrice()).setOtherSnPrefix(otherSnPrefix).setNextSn(0) .setStandard(gtStandardSizeList.contains(Constants.SIZE_LIST.get(j)) ? 1 : 0)); 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 7f4d77595..3bf3e453e 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 @@ -153,9 +153,9 @@ public class GtController extends BaseController { for (int i = 0; i < gtProdIdList.size(); i++) { Map attrMap = new HashMap<>(); try { - // 添加随机延迟(6-20秒) + // 添加随机延迟(6-15秒) if (i > 0) { - Thread.sleep((random.nextInt(15) + 6) * 1000L); + Thread.sleep((random.nextInt(10) + 6) * 1000L); } sendRequest(attrQueryVO, gtProdIdList.get(i), attrMap, errArtNoList, i); } catch (Exception e) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/TyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/TyController.java index 62e6b40f9..b8e5b80f5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/TyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/TyController.java @@ -6,9 +6,11 @@ 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.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.web.controller.xkt.migartion.vo.CusDiscErrorVO; +import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtProdSkuVO; import com.ruoyi.web.controller.xkt.migartion.vo.ty.TyCusDiscImportVO; import com.ruoyi.web.controller.xkt.migartion.vo.ty.TyCusImportVO; import com.ruoyi.web.controller.xkt.migartion.vo.ty.TyProdImportVO; @@ -20,7 +22,9 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URLEncoder; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -37,6 +41,47 @@ public class TyController extends BaseController { final RedisCache redisCache; + /** + * step0 + */ + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin')") + @PostMapping("/filter/{userId}/{compareStr}") + public void filterUnValidProd(HttpServletResponse response, @PathVariable("userId") Integer userId, + @PathVariable("compareStr") String compareStr, MultipartFile file) throws IOException { + ExcelUtil util = new ExcelUtil<>(TyProdImportVO.class); + List tyProdVOList = util.importExcel(file.getInputStream()); + // 获取GT无效的存货并过滤 + List gtOffSaleList = ObjectUtils.defaultIfNull(redisCache + .getCacheObject(CacheConstants.MIGRATION_GT_OFF_SALE_BASIC_KEY + userId), new ArrayList<>()); + List gtOffSaleArtNumList = gtOffSaleList.stream().map(GtProdSkuVO::getArticle_number).distinct().collect(Collectors.toList()); + List tyProdArtNumList = tyProdVOList.stream().map(TyProdImportVO::getProdArtNum).distinct().collect(Collectors.toList()); + + // 找出两个列表的交集 + List commonArtNumList = tyProdArtNumList.stream().filter(gtOffSaleArtNumList::contains).collect(Collectors.toList()); + List allMatchArtNumList = new ArrayList<>(commonArtNumList); + tyProdArtNumList.stream().filter(x -> x.contains("R")).forEach(x -> { + for (String comArtNum : commonArtNumList) { + if ( Objects.equals(x, comArtNum + compareStr)) { + System.err.println(x + " : " + comArtNum); + allMatchArtNumList.add(x); + break; + } + } + }); + + List downloadList = tyProdVOList.stream() + .filter(x -> ObjectUtils.isNotEmpty(x.getPrice())) + .filter(x -> CollectionUtils.isEmpty(allMatchArtNumList) || !allMatchArtNumList.contains(x.getProdArtNum())) + .collect(Collectors.toList()); + ExcelUtil downloadUtil = new ExcelUtil<>(TyProdImportVO.class); + // 设置下载excel名 + String encodedFileName = URLEncoder.encode("TY过滤GT" + DateUtils.getDate(), "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName + ".xlsx"); + downloadUtil.exportExcel(response, downloadList, "TY过滤GT"); + } + + + /** * step1 */ @@ -49,17 +94,16 @@ public class TyController extends BaseController { tyProdVOList = tyProdVOList.stream() // 只导入价格不能为空的存货 .filter(x -> ObjectUtils.isNotEmpty(x.getPrice())) - // 过滤掉货号为空的存货 - .filter(x -> StringUtils.isNotBlank(x.getTySnPrefix())) .map(x -> { String prodArtNum = x.getProdArtNum().trim(); String colorName = x.getColorName().trim(); - String tySnPrefix = x.getTySnPrefix().trim(); + // 如果有sn则取sn 否则取hpbm + String tySnPrefix = StringUtils.isNotBlank(x.getSn()) ? x.getSn().trim() : x.getHpbm().trim(); // 如果货号包括-R 则表明是 货号为绒里,手动给颜色添加后缀“绒里” if (prodArtNum.contains("R")) { colorName = colorName.contains("绒") ? colorName : (colorName + "绒里"); } - return x.setProdArtNum(prodArtNum).setColorName(colorName).setTySnPrefix(tySnPrefix); + return x.setProdArtNum(prodArtNum).setColorName(colorName).setSn(tySnPrefix); }) .collect(Collectors.toList()); Map> prodMap = tyProdVOList.stream().collect(Collectors.groupingBy(TyProdImportVO::getProdArtNum)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gtAndTy/GtAndTYInitVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gtAndTy/GtAndTYInitVO.java index 22b0276bc..e03886146 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gtAndTy/GtAndTYInitVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/gtAndTy/GtAndTYInitVO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotBlank; import java.math.BigDecimal; import java.util.List; @@ -19,6 +20,8 @@ public class GtAndTYInitVO { private Integer userId; private Long storeId; + @NotBlank(message = "diffStr不能为空") + private String diffStr; // 大小码加价金额 0 or other private BigDecimal addOverPrice; // GT 和 TY 能匹配但因 两边颜色冲突,需要手动处理的货号 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdImportVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdImportVO.java index 3117b1a51..39853d30b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdImportVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdImportVO.java @@ -23,7 +23,9 @@ public class TyProdImportVO { private String colorName; @Excel(name = "jg") private BigDecimal price; + @Excel(name = "HPBM") + private String hpbm; @Excel(name = "SN") - private String tySnPrefix; + private String sn; }