master:系统调优;

pull/1121/head
liujiang 2025-10-28 14:10:45 +08:00
parent a285b8fa0b
commit 49a46e9fc3
6 changed files with 62 additions and 14 deletions

View File

@ -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<GtProdSkuVO> gtOnSaleList = ObjectUtils.defaultIfNull(redisCache
.getCacheObject(CacheConstants.MIGRATION_GT_SALE_BASIC_KEY + userId), new ArrayList<>());
@ -108,7 +108,7 @@ public class GtAndTyBiz2Controller extends BaseController {
Map<String, List<String>> 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<String> existMatchArtNoList = gtMatchTyArtNoMap.getOrDefault(gtOnSaleArtNo, new ArrayList<>());
existMatchArtNoList.add(tyArtNo);
gtMatchTyArtNoMap.put(gtOnSaleArtNo, existMatchArtNoList);
@ -118,7 +118,6 @@ public class GtAndTyBiz2Controller extends BaseController {
// 清洗后,相同货号映射
List<String> matchArtNoList = new ArrayList<>();
List<String> multiMatchGtArtNoList = new ArrayList<>();
matchArtNoList.add("============ GT和TY匹配的货号 ============");
// 清洗数据之后GO平台和TY平台 货号一致的,按照这种来展示: GT => [Z1110(黑色,黑色绒里,棕色,棕色绒里)] <= 清洗后的货号 => [Z1110(黑色,黑色绒里,棕色,棕色绒里)] <= TY
gtMatchTyArtNoMap.forEach((gtArtNo, tyArtNoList) -> {
List<String> tyArtNoColorList = tyArtNoList.stream().map(tyArtNo -> tyArtNo + tyArtNoColorMap.get(tyArtNo)).collect(Collectors.toList());
@ -196,7 +195,7 @@ public class GtAndTyBiz2Controller extends BaseController {
Map<String, List<String>> 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<String> 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));

View File

@ -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));

View File

@ -153,9 +153,9 @@ public class GtController extends BaseController {
for (int i = 0; i < gtProdIdList.size(); i++) {
Map<String, String> 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) {

View File

@ -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<TyProdImportVO> util = new ExcelUtil<>(TyProdImportVO.class);
List<TyProdImportVO> tyProdVOList = util.importExcel(file.getInputStream());
// 获取GT无效的存货并过滤
List<GtProdSkuVO> gtOffSaleList = ObjectUtils.defaultIfNull(redisCache
.getCacheObject(CacheConstants.MIGRATION_GT_OFF_SALE_BASIC_KEY + userId), new ArrayList<>());
List<String> gtOffSaleArtNumList = gtOffSaleList.stream().map(GtProdSkuVO::getArticle_number).distinct().collect(Collectors.toList());
List<String> tyProdArtNumList = tyProdVOList.stream().map(TyProdImportVO::getProdArtNum).distinct().collect(Collectors.toList());
// 找出两个列表的交集
List<String> commonArtNumList = tyProdArtNumList.stream().filter(gtOffSaleArtNumList::contains).collect(Collectors.toList());
List<String> 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<TyProdImportVO> downloadList = tyProdVOList.stream()
.filter(x -> ObjectUtils.isNotEmpty(x.getPrice()))
.filter(x -> CollectionUtils.isEmpty(allMatchArtNumList) || !allMatchArtNumList.contains(x.getProdArtNum()))
.collect(Collectors.toList());
ExcelUtil<TyProdImportVO> 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<String, List<TyProdImportVO>> prodMap = tyProdVOList.stream().collect(Collectors.groupingBy(TyProdImportVO::getProdArtNum));

View File

@ -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 能匹配但因 两边颜色冲突,需要手动处理的货号

View File

@ -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;
}