master:系统调优;
parent
a285b8fa0b
commit
49a46e9fc3
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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 能匹配但因 两边颜色冲突,需要手动处理的货号
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue