master:系统调优;
parent
581bec9cb7
commit
06e1f49c6e
|
|
@ -14,6 +14,7 @@ import com.ruoyi.web.controller.xkt.migartion.vo.GtAndFHBCompareDownloadVO;
|
|||
import com.ruoyi.web.controller.xkt.migartion.vo.GtAndFHBInitVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.fhb.FhbCusDiscountVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.fhb.FhbCusVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.fhb.FhbProdStockVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.fhb.FhbProdVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtCateVO;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.gt.GtProdSkuVO;
|
||||
|
|
@ -33,7 +34,6 @@ import org.springframework.web.bind.annotation.*;
|
|||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
|
@ -325,8 +325,6 @@ public class GtAndFhbBizController extends BaseController {
|
|||
storeProdList.add(storeProd);
|
||||
});
|
||||
this.storeProdMapper.insert(storeProdList);
|
||||
// 货号map
|
||||
Map<Long, String> prodArtNumMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, StoreProduct::getProdArtNum));
|
||||
|
||||
// 商品所有颜色 尺码 颜色库存初始化
|
||||
List<StoreProductColor> prodColorList = new ArrayList<>();
|
||||
|
|
@ -339,11 +337,7 @@ public class GtAndFhbBizController extends BaseController {
|
|||
// 获取GT匹配的商品sku列表
|
||||
List<GtProdSkuVO> gtMatchSkuList = this.getGtFirstSku(multiSaleSameGoMap, gtSaleGroupMap, storeProd.getProdArtNum());
|
||||
// 当前货号在GT的所有尺码,作为标准尺码
|
||||
List<Integer> gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize())))
|
||||
.collect(Collectors.toList());
|
||||
// 先获取最低价格,然后给所有颜色和尺码添加初始值,之后再来单独改,这是最方便的方式了
|
||||
final BigDecimal minPrice = gtMatchSkuList.stream().map(GtProdSkuVO::getPrice).min(Comparator.comparing(x -> x))
|
||||
.orElseThrow(() -> new ServiceException("没有GT商品价格!", HttpStatus.ERROR));
|
||||
List<Integer> gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize()))).collect(Collectors.toList());
|
||||
fhbMatchArtNoList.forEach(fhbArtNo -> {
|
||||
List<FhbProdVO.SMIVO> fhbMatchSkuList = fhbProdGroupMap.get(fhbArtNo);
|
||||
for (int i = 0; i < fhbMatchSkuList.size(); i++) {
|
||||
|
|
@ -358,8 +352,10 @@ public class GtAndFhbBizController extends BaseController {
|
|||
final String otherSnPrefix = fhbMatchSkuList.get(i).getSupplierId()
|
||||
+ String.format("%05d", fhbMatchSkuList.get(i).getSupplierSkuId()) + Constants.SIZE_LIST.get(j);
|
||||
prodColorSizeList.add(new StoreProductColorSize().setSize(Constants.SIZE_LIST.get(j)).setStoreColorId(storeColor.getId())
|
||||
.setStoreProdId(storeProd.getId()).setPrice(minPrice).setOtherSnPrefix(otherSnPrefix).setNextSn(0)
|
||||
.setStandard(gtStandardSizeList.contains(Constants.SIZE_LIST.get(j)) ? 1 : 0));
|
||||
.setStoreProdId(storeProd.getId()).setStandard(gtStandardSizeList.contains(Constants.SIZE_LIST.get(j)) ? 1 : 0)
|
||||
// 销售价格以FHB价格为准
|
||||
.setPrice(fhbMatchSkuList.get(i).getSalePrice())
|
||||
.setOtherSnPrefix(otherSnPrefix).setNextSn(0));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -384,18 +380,11 @@ public class GtAndFhbBizController extends BaseController {
|
|||
prodColorSizeList.forEach(x -> x.setSnPrefix(initVO.getStoreId() + String.format("%08d", x.getId())));
|
||||
this.prodColorSizeMapper.updateById(prodColorSizeList);
|
||||
|
||||
// 商品颜色对应的库存初始化
|
||||
List<StoreProductStock> prodStockList = prodColorList.stream().map(color -> new StoreProductStock().setStoreId(color.getStoreId())
|
||||
.setStoreProdId(color.getStoreProdId()).setProdArtNum(prodArtNumMap.get(color.getStoreProdId()))
|
||||
.setStoreProdColorId(color.getId()).setStoreColorId(color.getStoreColorId()).setColorName(color.getColorName()))
|
||||
.collect(Collectors.toList());
|
||||
this.prodStockMapper.insert(prodStockList);
|
||||
|
||||
// 步骤3: 准备数据,新建客户
|
||||
List<StoreCustomer> storeCusList = this.initStoreCusList(initVO);
|
||||
|
||||
// 步骤4: 客户与货号的优惠关系
|
||||
this.initStoreCusProdDiscList(initVO, storeProdList, storeCusList, prodColorList, multiSameFhbMap);
|
||||
this.initStoreCusProdDiscAndProdStock(initVO, storeProdList, storeCusList, prodColorList, multiSameFhbMap);
|
||||
|
||||
return R.ok();
|
||||
}
|
||||
|
|
@ -410,7 +399,7 @@ public class GtAndFhbBizController extends BaseController {
|
|||
* @param prodColorList 商品颜色列表
|
||||
* @param multiSameFhbMap 步橘货号和FHB货号对应关系
|
||||
*/
|
||||
private void initStoreCusProdDiscList(GtAndFHBInitVO initVO, List<StoreProduct> storeProdList, List<StoreCustomer> storeCusList,
|
||||
private void initStoreCusProdDiscAndProdStock(GtAndFHBInitVO initVO, List<StoreProduct> storeProdList, List<StoreCustomer> storeCusList,
|
||||
List<StoreProductColor> prodColorList, Map<String, List<String>> multiSameFhbMap) {
|
||||
// 从redis中获取客户优惠数据
|
||||
List<FhbCusDiscountVO.SMCDRecordVO> fhbCusDiscCacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
|
|
@ -418,15 +407,24 @@ public class GtAndFhbBizController extends BaseController {
|
|||
if (CollectionUtils.isEmpty(fhbCusDiscCacheList)) {
|
||||
throw new ServiceException("fhb供应商客户优惠列表为空!" + initVO.getSupplierId(), HttpStatus.ERROR);
|
||||
}
|
||||
List<FhbProdStockVO.SMPSRecordVO> fhbStockCacheList = redisCache
|
||||
.getCacheObject(CacheConstants.MIGRATION_SUPPLIER_PROD_STOCK_KEY + initVO.getSupplierId());
|
||||
if (CollectionUtils.isEmpty(fhbStockCacheList)) {
|
||||
throw new ServiceException("fhb供应商商品库存列表为空!" + initVO.getSupplierId(), HttpStatus.ERROR);
|
||||
}
|
||||
// FHB 货号颜色优惠对应关系
|
||||
Map<String, Map<String, List<FhbCusDiscountVO.SMCDRecordVO>>> fhbCusDiscGroupMap = fhbCusDiscCacheList.stream().collect(Collectors
|
||||
.groupingBy(FhbCusDiscountVO.SMCDRecordVO::getArtNo, Collectors.groupingBy(FhbCusDiscountVO.SMCDRecordVO::getColor)));
|
||||
// FHB 货号颜色库存对应关系
|
||||
Map<String, Map<String, FhbProdStockVO.SMPSRecordVO>> fhbStockGroupMap = fhbStockCacheList.stream().collect(Collectors
|
||||
.groupingBy(FhbProdStockVO.SMPSRecordVO::getArtNo, Collectors.toMap(FhbProdStockVO.SMPSRecordVO::getColor, x -> x)));
|
||||
// 步橘系统商品所有颜色maps
|
||||
Map<Long, Map<String, StoreProductColor>> prodColorGroupMap = prodColorList.stream().collect(Collectors
|
||||
.groupingBy(StoreProductColor::getStoreProdId, Collectors.toMap(StoreProductColor::getColorName, x -> x)));
|
||||
// 步橘系统客户名称map
|
||||
Map<String, StoreCustomer> buJuStoreCusMap = storeCusList.stream().collect(Collectors.toMap(StoreCustomer::getCusName, x -> x));
|
||||
List<StoreCustomerProductDiscount> prodCusDiscList = new ArrayList<>();
|
||||
List<StoreProductStock> prodStockList = new ArrayList<>();
|
||||
// 依次遍历商品列表,找到货号和FHB货号对应关系,然后用颜色进行匹配,建立客户优惠关系
|
||||
storeProdList.forEach(storeProd -> {
|
||||
// 当前商品颜色列表 key 颜色中文名称
|
||||
|
|
@ -434,22 +432,74 @@ public class GtAndFhbBizController extends BaseController {
|
|||
// 根据步橘货号 找到FHB对应的货号,可能是列表
|
||||
List<String> fhbAtrNoList = Optional.ofNullable(multiSameFhbMap.get(storeProd.getProdArtNum())).orElseThrow(() -> new ServiceException("没有FHB货号!" + storeProd.getProdArtNum(), HttpStatus.ERROR));
|
||||
fhbAtrNoList.forEach(fhbAtrNo -> {
|
||||
// FHB货号下有哪些颜色存在客户优惠
|
||||
Map<String, List<FhbCusDiscountVO.SMCDRecordVO>> fhbColorCusDiscMap = fhbCusDiscGroupMap.get(fhbAtrNo);
|
||||
if (MapUtils.isEmpty(fhbColorCusDiscMap)) {
|
||||
return;
|
||||
}
|
||||
// 依次遍历存在优惠的颜色,设置步橘系统客户优惠关系
|
||||
fhbColorCusDiscMap.forEach((fhbColor, fhbCusDiscList) -> fhbCusDiscList.forEach(fhbCusDisc -> {
|
||||
StoreProductColor buJuProdColor = Optional.ofNullable(buJuProdColorMap.get(fhbColor)).orElseThrow(() -> new ServiceException("没有步橘系统对应的颜色!" + fhbColor, HttpStatus.ERROR));
|
||||
StoreCustomer storeCus = Optional.ofNullable(buJuStoreCusMap.get(fhbCusDisc.getCustomerName())).orElseThrow(() -> new ServiceException("没有步橘系统对应的客户!" + fhbCusDisc.getCustomerName(), HttpStatus.ERROR));
|
||||
// 将FHB客户优惠 转为步橘系统优惠
|
||||
prodCusDiscList.add(new StoreCustomerProductDiscount().setStoreId(storeProd.getStoreId()).setStoreProdId(storeProd.getId()).setStoreCusId(storeCus.getId())
|
||||
.setStoreCusName(storeCus.getCusName()).setStoreProdColorId(buJuProdColor.getId()).setDiscount(fhbCusDisc.getDiscount()));
|
||||
}));
|
||||
// 处理档口客户商品优惠
|
||||
this.handleCusDisc(fhbAtrNo, fhbCusDiscGroupMap, buJuProdColorMap, buJuStoreCusMap, storeProd.getStoreId(), storeProd.getId(), prodCusDiscList);
|
||||
// 处理档口商品库存
|
||||
this.handleProdStock(fhbAtrNo, fhbStockGroupMap, buJuProdColorMap, storeProd.getStoreId(), storeProd.getId(), storeProd.getProdArtNum(), prodStockList);
|
||||
});
|
||||
});
|
||||
|
||||
// 档口客户优惠
|
||||
this.storeCusProdDiscMapper.insert(prodCusDiscList);
|
||||
// 档口客户库存
|
||||
this.prodStockMapper.insert(prodStockList);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理货号颜色的库存
|
||||
* @param fhbAtrNo
|
||||
* @param fhbStockGroupMap
|
||||
* @param buJuProdColorMap
|
||||
* @param storeId
|
||||
* @param storeProdId
|
||||
* @param prodArtNum
|
||||
* @param prodStockList
|
||||
*/
|
||||
private void handleProdStock(String fhbAtrNo, Map<String, Map<String, FhbProdStockVO.SMPSRecordVO>> fhbStockGroupMap, Map<String, StoreProductColor> buJuProdColorMap,
|
||||
Long storeId, Long storeProdId, String prodArtNum, List<StoreProductStock> prodStockList) {
|
||||
Map<String, FhbProdStockVO.SMPSRecordVO> fhbColorStockMap = fhbStockGroupMap.get(fhbAtrNo);
|
||||
buJuProdColorMap.forEach((buJuColor, buJuProdColor) -> {
|
||||
StoreProductStock stock = new StoreProductStock().setStoreId(storeId).setStoreProdId(storeProdId).setProdArtNum(prodArtNum)
|
||||
.setColorName(buJuProdColorMap.get(buJuColor).getColorName()).setStoreProdColorId(buJuProdColorMap.get(buJuColor).getId())
|
||||
.setStoreColorId(buJuProdColorMap.get(buJuColor).getStoreColorId());
|
||||
// FHB 有该颜色的库存
|
||||
if (fhbColorStockMap.containsKey(buJuColor)) {
|
||||
FhbProdStockVO.SMPSRecordVO fhbSizeStock = fhbColorStockMap.getOrDefault(buJuColor, null);
|
||||
stock.setSize30(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize30() : null)
|
||||
.setSize31(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize31() : null)
|
||||
.setSize32(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize32() : null)
|
||||
.setSize33(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize33() : null)
|
||||
.setSize34(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize34() : null)
|
||||
.setSize35(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize35() : null)
|
||||
.setSize36(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize36() : null)
|
||||
.setSize37(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize37() : null)
|
||||
.setSize38(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize38() : null)
|
||||
.setSize39(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize39() : null)
|
||||
.setSize40(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize40() : null)
|
||||
.setSize41(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize41() : null)
|
||||
.setSize42(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize42() : null)
|
||||
.setSize43(ObjectUtils.isNotEmpty(fhbSizeStock) ? fhbSizeStock.getSize43() : null);
|
||||
}
|
||||
prodStockList.add(stock);
|
||||
});
|
||||
}
|
||||
|
||||
private void handleCusDisc(String fhbAtrNo, Map<String, Map<String, List<FhbCusDiscountVO.SMCDRecordVO>>> fhbCusDiscGroupMap, Map<String, StoreProductColor> buJuProdColorMap,
|
||||
Map<String, StoreCustomer> buJuStoreCusMap, Long storeId, Long storeProdId, List<StoreCustomerProductDiscount> prodCusDiscList) {
|
||||
// FHB货号下有哪些颜色存在客户优惠
|
||||
Map<String, List<FhbCusDiscountVO.SMCDRecordVO>> fhbColorCusDiscMap = fhbCusDiscGroupMap.get(fhbAtrNo);
|
||||
if (MapUtils.isEmpty(fhbColorCusDiscMap)) {
|
||||
return;
|
||||
}
|
||||
// 依次遍历存在优惠的颜色,设置步橘系统客户优惠关系
|
||||
fhbColorCusDiscMap.forEach((fhbColor, fhbCusDiscList) -> fhbCusDiscList.forEach(fhbCusDisc -> {
|
||||
StoreProductColor buJuProdColor = Optional.ofNullable(buJuProdColorMap.get(fhbColor)).orElseThrow(() -> new ServiceException("没有步橘系统对应的颜色!" + fhbColor, HttpStatus.ERROR));
|
||||
StoreCustomer storeCus = Optional.ofNullable(buJuStoreCusMap.get(fhbCusDisc.getCustomerName())).orElseThrow(() -> new ServiceException("没有步橘系统对应的客户!" + fhbCusDisc.getCustomerName(), HttpStatus.ERROR));
|
||||
// 将FHB客户优惠 转为步橘系统优惠
|
||||
prodCusDiscList.add(new StoreCustomerProductDiscount().setStoreId(storeId).setStoreProdId(storeProdId).setStoreCusId(storeCus.getId())
|
||||
.setStoreCusName(storeCus.getCusName()).setStoreProdColorId(buJuProdColor.getId()).setDiscount(fhbCusDisc.getDiscount()));
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ 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.DateUtils;
|
||||
|
|
@ -16,6 +17,7 @@ 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;
|
||||
import com.ruoyi.web.controller.xkt.migartion.vo.ty.TyProdStockVO;
|
||||
import com.ruoyi.xkt.domain.*;
|
||||
import com.ruoyi.xkt.enums.EProductStatus;
|
||||
import com.ruoyi.xkt.enums.ListingType;
|
||||
|
|
@ -32,7 +34,6 @@ import org.springframework.web.bind.annotation.*;
|
|||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
|
@ -194,7 +195,7 @@ public class GtAndTyBizController extends BaseController {
|
|||
|
||||
@Transactional
|
||||
|
||||
public void initToDB(@Validated @RequestBody GtAndTYInitVO initVO) {
|
||||
public R<Integer> initToDB(@Validated @RequestBody GtAndTYInitVO initVO) {
|
||||
// 去掉可能的空格
|
||||
initVO.setExcludeArtNoList(initVO.getExcludeArtNoList().stream().map(String::trim).collect(Collectors.toList()));
|
||||
Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper<Store>()
|
||||
|
|
@ -210,6 +211,7 @@ public class GtAndTyBizController extends BaseController {
|
|||
// e. 类目属性初始化
|
||||
this.init(initVO, storeColorMap);
|
||||
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
private void init(GtAndTYInitVO initVO, Map<String, StoreColor> storeColorMap) {
|
||||
|
|
@ -294,8 +296,6 @@ public class GtAndTyBizController extends BaseController {
|
|||
storeProdList.add(storeProd);
|
||||
});
|
||||
this.storeProdMapper.insert(storeProdList);
|
||||
// 货号map
|
||||
Map<Long, String> prodArtNumMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, StoreProduct::getProdArtNum));
|
||||
|
||||
// 商品所有颜色 尺码 颜色库存初始化
|
||||
List<StoreProductColor> prodColorList = new ArrayList<>();
|
||||
|
|
@ -308,11 +308,7 @@ public class GtAndTyBizController extends BaseController {
|
|||
// 获取GT匹配的商品sku列表
|
||||
List<GtProdSkuVO> gtMatchSkuList = this.getGtFirstSku(multiSaleSameGoMap, gtSaleGroupMap, storeProd.getProdArtNum());
|
||||
// 当前货号在GT的所有尺码,作为标准尺码
|
||||
List<Integer> gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize())))
|
||||
.collect(Collectors.toList());
|
||||
// 先获取最低价格,然后给所有颜色和尺码添加初始值,之后再来单独改,这是最方便的方式了
|
||||
final BigDecimal minPrice = gtMatchSkuList.stream().map(GtProdSkuVO::getPrice).min(Comparator.comparing(x -> x))
|
||||
.orElseThrow(() -> new ServiceException("没有GT商品价格!", HttpStatus.ERROR));
|
||||
List<Integer> gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize()))).collect(Collectors.toList());
|
||||
tyMatchArtNoList.forEach(tyArtNo -> {
|
||||
List<TyProdImportVO> tyMatchSkuList = tyProdGroupMap.get(tyArtNo);
|
||||
for (int i = 0; i < tyMatchSkuList.size(); i++) {
|
||||
|
|
@ -326,7 +322,7 @@ public class GtAndTyBizController extends BaseController {
|
|||
// TY系统条码前缀
|
||||
final String otherSnPrefix = tyMatchSkuList.get(i).getTySnPrefix() + Constants.SIZE_LIST.get(j);
|
||||
prodColorSizeList.add(new StoreProductColorSize().setSize(Constants.SIZE_LIST.get(j)).setStoreColorId(storeColor.getId())
|
||||
.setStoreProdId(storeProd.getId()).setPrice(minPrice).setOtherSnPrefix(otherSnPrefix).setNextSn(0)
|
||||
.setStoreProdId(storeProd.getId()).setPrice(tyMatchSkuList.get(i).getPrice()).setOtherSnPrefix(otherSnPrefix).setNextSn(0)
|
||||
.setStandard(gtStandardSizeList.contains(Constants.SIZE_LIST.get(j)) ? 1 : 0));
|
||||
}
|
||||
}
|
||||
|
|
@ -352,18 +348,11 @@ public class GtAndTyBizController extends BaseController {
|
|||
prodColorSizeList.forEach(x -> x.setSnPrefix(initVO.getStoreId() + String.format("%08d", x.getId())));
|
||||
this.prodColorSizeMapper.updateById(prodColorSizeList);
|
||||
|
||||
// 商品颜色对应的库存初始化
|
||||
List<StoreProductStock> prodStockList = prodColorList.stream().map(color -> new StoreProductStock().setStoreId(color.getStoreId())
|
||||
.setStoreProdId(color.getStoreProdId()).setProdArtNum(prodArtNumMap.get(color.getStoreProdId()))
|
||||
.setStoreProdColorId(color.getId()).setStoreColorId(color.getStoreColorId()).setColorName(color.getColorName()))
|
||||
.collect(Collectors.toList());
|
||||
this.prodStockMapper.insert(prodStockList);
|
||||
|
||||
// 步骤3: 准备数据,新建客户
|
||||
List<StoreCustomer> storeCusList = this.initStoreCusList(initVO);
|
||||
|
||||
// 步骤4: 客户与货号的优惠关系
|
||||
this.initStoreCusProdDiscList(initVO, storeProdList, storeCusList, prodColorList, multiSameTyMap);
|
||||
// 步骤4: 客户与货号的优惠关系 及 商品颜色的库存
|
||||
this.initStoreCusProdDiscAndProdStock(initVO, storeProdList, storeCusList, prodColorList, multiSameTyMap);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -399,13 +388,21 @@ public class GtAndTyBizController extends BaseController {
|
|||
* @param prodColorList
|
||||
* @param multiSameTyMap
|
||||
*/
|
||||
private void initStoreCusProdDiscList(GtAndTYInitVO initVO, List<StoreProduct> storeProdList, List<StoreCustomer> storeCusList,
|
||||
List<StoreProductColor> prodColorList, Map<String, List<String>> multiSameTyMap) {
|
||||
private void initStoreCusProdDiscAndProdStock(GtAndTYInitVO initVO, List<StoreProduct> storeProdList, List<StoreCustomer> storeCusList,
|
||||
List<StoreProductColor> prodColorList, Map<String, List<String>> multiSameTyMap) {
|
||||
// 从redis中获取已存在的客户优惠数据
|
||||
List<TyCusDiscImportVO> tyCusDiscCacheList = redisCache.getCacheObject(CacheConstants.MIGRATION_TY_CUS_DISCOUNT_KEY + initVO.getUserId());
|
||||
if (CollectionUtils.isEmpty(tyCusDiscCacheList)) {
|
||||
throw new ServiceException("ty供应商客户优惠列表为空!" + initVO.getUserId(), HttpStatus.ERROR);
|
||||
}
|
||||
// 从redis中获取已存在的商品库存数据
|
||||
List<TyProdStockVO> tyStockList = redisCache.getCacheObject(CacheConstants.MIGRATION_TY_PROD_STOCK_KEY + initVO.getUserId());
|
||||
if (CollectionUtils.isEmpty(tyStockList)) {
|
||||
throw new ServiceException("ty供应商商品库存列表为空!" + initVO.getUserId(), HttpStatus.ERROR);
|
||||
}
|
||||
// TY 货号颜色的库存对应关系
|
||||
Map<String, Map<String, TyProdStockVO>> tyProdStockMap = tyStockList.stream().collect(Collectors
|
||||
.groupingBy(TyProdStockVO::getProdArtNum, Collectors.toMap(TyProdStockVO::getColorName, x -> x)));
|
||||
// TY 货号颜色优惠对应关系
|
||||
Map<String, Map<String, List<TyCusDiscImportVO>>> tyCusDiscGroupMap = tyCusDiscCacheList.stream().collect(Collectors
|
||||
.groupingBy(TyCusDiscImportVO::getProdArtNum, Collectors.groupingBy(TyCusDiscImportVO::getColorName)));
|
||||
|
|
@ -415,6 +412,7 @@ public class GtAndTyBizController extends BaseController {
|
|||
// 步橘系统客户名称map
|
||||
Map<String, StoreCustomer> buJuStoreCusMap = storeCusList.stream().collect(Collectors.toMap(StoreCustomer::getCusName, x -> x));
|
||||
List<StoreCustomerProductDiscount> prodCusDiscList = new ArrayList<>();
|
||||
List<StoreProductStock> prodStockList = new ArrayList<>();
|
||||
// 依次遍历商品列表,找到货号和FHB货号对应关系,然后用颜色进行匹配,建立客户优惠关系
|
||||
storeProdList.forEach(storeProd -> {
|
||||
// 当前商品颜色列表 key 颜色中文名称
|
||||
|
|
@ -422,22 +420,74 @@ public class GtAndTyBizController extends BaseController {
|
|||
// 根据步橘货号 找到TY对应的货号,可能是列表
|
||||
List<String> tyAtrNoList = Optional.ofNullable(multiSameTyMap.get(storeProd.getProdArtNum())).orElseThrow(() -> new ServiceException("没有TY货号!" + storeProd.getProdArtNum(), HttpStatus.ERROR));
|
||||
tyAtrNoList.forEach(tyAtrNo -> {
|
||||
// TY货号下有哪些颜色存在客户优惠
|
||||
Map<String, List<TyCusDiscImportVO>> tyColorCusDiscMap = tyCusDiscGroupMap.get(tyAtrNo);
|
||||
if (MapUtils.isEmpty(tyColorCusDiscMap)) {
|
||||
return;
|
||||
}
|
||||
// 依次遍历存在优惠的颜色,设置步橘系统客户优惠关系
|
||||
tyColorCusDiscMap.forEach((tyColor, tyCusDiscList) -> tyCusDiscList.forEach(tyCusDisc -> {
|
||||
StoreProductColor buJuProdColor = Optional.ofNullable(buJuProdColorMap.get(tyColor)).orElseThrow(() -> new ServiceException("没有步橘系统对应的颜色!" + tyColor, HttpStatus.ERROR));
|
||||
StoreCustomer storeCus = Optional.ofNullable(buJuStoreCusMap.get(tyCusDisc.getCusName())).orElseThrow(() -> new ServiceException("没有步橘系统对应的客户!" + tyCusDisc.getCusName(), HttpStatus.ERROR));
|
||||
// 将FHB客户优惠 转为步橘系统优惠
|
||||
prodCusDiscList.add(new StoreCustomerProductDiscount().setStoreId(storeProd.getStoreId()).setStoreProdId(storeProd.getId()).setStoreCusId(storeCus.getId())
|
||||
.setStoreCusName(storeCus.getCusName()).setStoreProdColorId(buJuProdColor.getId()).setDiscount(tyCusDisc.getDiscount()));
|
||||
}));
|
||||
// 处理客户优惠
|
||||
this.handleCusDisc(tyAtrNo, tyCusDiscGroupMap, buJuProdColorMap, buJuStoreCusMap, prodCusDiscList, storeProd.getStoreId(), storeProd.getId());
|
||||
// 处理档口商品库存
|
||||
this.handleProdStock(tyAtrNo, tyProdStockMap, buJuProdColorMap, storeProd.getStoreId(), storeProd.getId(), storeProd.getProdArtNum(), prodStockList);
|
||||
});
|
||||
});
|
||||
|
||||
// 档口客户优惠
|
||||
this.storeCusProdDiscMapper.insert(prodCusDiscList);
|
||||
// 档口客户库存
|
||||
this.prodStockMapper.insert(prodStockList);
|
||||
|
||||
}
|
||||
|
||||
private void handleProdStock(String tyAtrNo, Map<String, Map<String, TyProdStockVO>> tyProdStockMap, Map<String, StoreProductColor> buJuProdColorMap,
|
||||
Long storeId, Long storeProdId, String prodArtNum, List<StoreProductStock> prodStockList) {
|
||||
Map<String, TyProdStockVO> tyColorStockMap = tyProdStockMap.get(tyAtrNo);
|
||||
buJuProdColorMap.forEach((buJuColor, buJuProdColor) -> {
|
||||
StoreProductStock stock = new StoreProductStock().setStoreId(storeId).setStoreProdId(storeProdId).setProdArtNum(prodArtNum)
|
||||
.setColorName(buJuProdColorMap.get(buJuColor).getColorName()).setStoreProdColorId(buJuProdColorMap.get(buJuColor).getId())
|
||||
.setStoreColorId(buJuProdColorMap.get(buJuColor).getStoreColorId());
|
||||
if (tyColorStockMap.containsKey(buJuColor)) {
|
||||
TyProdStockVO tySizeStock = tyColorStockMap.getOrDefault(buJuColor, null);
|
||||
stock.setSize30(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize30() : null)
|
||||
.setSize31(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize31() : null)
|
||||
.setSize32(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize32() : null)
|
||||
.setSize33(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize33() : null)
|
||||
.setSize34(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize34() : null)
|
||||
.setSize35(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize35() : null)
|
||||
.setSize36(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize36() : null)
|
||||
.setSize37(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize37() : null)
|
||||
.setSize38(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize38() : null)
|
||||
.setSize39(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize39() : null)
|
||||
.setSize40(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize40() : null)
|
||||
.setSize41(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize41() : null)
|
||||
.setSize42(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize42() : null)
|
||||
.setSize43(ObjectUtils.isNotEmpty(tySizeStock) ? tySizeStock.getSize43() : null);
|
||||
}
|
||||
prodStockList.add(stock);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理档口客户优惠
|
||||
*
|
||||
* @param tyAtrNo
|
||||
* @param tyCusDiscGroupMap
|
||||
* @param buJuProdColorMap
|
||||
* @param buJuStoreCusMap
|
||||
* @param prodCusDiscList
|
||||
* @param storeId
|
||||
* @param storeProdId
|
||||
*/
|
||||
private void handleCusDisc(String tyAtrNo, Map<String, Map<String, List<TyCusDiscImportVO>>> tyCusDiscGroupMap, Map<String, StoreProductColor> buJuProdColorMap,
|
||||
Map<String, StoreCustomer> buJuStoreCusMap, List<StoreCustomerProductDiscount> prodCusDiscList, Long storeId, Long storeProdId) {
|
||||
// TY货号下有哪些颜色存在客户优惠
|
||||
Map<String, List<TyCusDiscImportVO>> tyColorCusDiscMap = tyCusDiscGroupMap.get(tyAtrNo);
|
||||
if (MapUtils.isEmpty(tyColorCusDiscMap)) {
|
||||
return;
|
||||
}
|
||||
// 依次遍历存在优惠的颜色,设置步橘系统客户优惠关系
|
||||
tyColorCusDiscMap.forEach((tyColor, tyCusDiscList) -> tyCusDiscList.forEach(tyCusDisc -> {
|
||||
StoreProductColor buJuProdColor = Optional.ofNullable(buJuProdColorMap.get(tyColor)).orElseThrow(() -> new ServiceException("没有步橘系统对应的颜色!" + tyColor, HttpStatus.ERROR));
|
||||
StoreCustomer storeCus = Optional.ofNullable(buJuStoreCusMap.get(tyCusDisc.getCusName())).orElseThrow(() -> new ServiceException("没有步橘系统对应的客户!" + tyCusDisc.getCusName(), HttpStatus.ERROR));
|
||||
// 将FHB客户优惠 转为步橘系统优惠
|
||||
prodCusDiscList.add(new StoreCustomerProductDiscount().setStoreId(storeId).setStoreProdId(storeProdId).setStoreCusId(storeCus.getId())
|
||||
.setStoreCusName(storeCus.getCusName()).setStoreProdColorId(buJuProdColor.getId()).setDiscount(tyCusDisc.getDiscount()));
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -56,7 +56,8 @@ public class GtController extends BaseController {
|
|||
.stream().filter(x -> x.getCreate_time().after(threeYearsBefore) || x.getUpdate_time().after(threeYearsBefore))
|
||||
.forEach(artNoInfo -> {
|
||||
artNoInfo.getSkus().forEach(x -> x.setColor(this.decodeUnicode(x.getColor().trim())).setCharacters(artNoInfo.getCharacters().trim())
|
||||
.setArticle_number(artNoInfo.getArticle_number().trim()).setProduct_id(artNoInfo.getId()).setCategory_nid(artNoInfo.getCategory_nid()));
|
||||
.setSize(x.getSize().trim().replaceAll("[^0-9.]", "")).setArticle_number(artNoInfo.getArticle_number().trim())
|
||||
.setProduct_id(artNoInfo.getId()).setCategory_nid(artNoInfo.getCategory_nid()));
|
||||
cacheList.addAll(artNoInfo.getSkus());
|
||||
});
|
||||
// 存到redis中
|
||||
|
|
@ -74,6 +75,7 @@ public class GtController extends BaseController {
|
|||
.getCacheObject(CacheConstants.MIGRATION_GT_OFF_SALE_BASIC_KEY + userId), new ArrayList<>());
|
||||
artNoList.forEach(artNoInfo -> {
|
||||
artNoInfo.getSkus().forEach(x -> x.setColor(this.decodeUnicode(x.getColor()))
|
||||
.setSize(x.getSize().trim().replaceAll("[^0-9.]", ""))
|
||||
.setArticle_number(artNoInfo.getArticle_number().trim()).setProduct_id(artNoInfo.getId()));
|
||||
cacheList.addAll(artNoInfo.getSkus());
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ 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.fhb.FhbProdStockVO;
|
||||
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;
|
||||
|
|
@ -16,12 +15,13 @@ import lombok.RequiredArgsConstructor;
|
|||
import org.apache.commons.collections4.CollectionUtils;
|
||||
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.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -104,7 +104,7 @@ public class TyController extends BaseController {
|
|||
if (importCusDiscMap.containsKey(x.getProdArtNum() + ":" + x.getColorName())) {
|
||||
System.err.println(x.getProdArtNum() + ":" + x.getColorName());
|
||||
} else {
|
||||
final Integer discount = x.getBasicPrice() - x.getCustomerPrice();
|
||||
final int discount = x.getBasicPrice() - x.getCustomerPrice();
|
||||
if (discount < 0) {
|
||||
errorList.add(cusName + ":" + x.getProdArtNum() + ":" + x.getColorName() + ":优惠金额不能小于0");
|
||||
}
|
||||
|
|
@ -130,18 +130,28 @@ public class TyController extends BaseController {
|
|||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||
@PostMapping("/-R/prod/stock/cache/{userId}")
|
||||
public R<Integer> createTyProdStockCache(@PathVariable Integer userId, @Validated @RequestBody TyProdStockVO stockVO) {
|
||||
/* // 供应商ID
|
||||
if (ObjectUtils.isEmpty(stockVO.getData()) || ObjectUtils.isEmpty(stockVO.getData().getList())) {
|
||||
return R.ok();
|
||||
}
|
||||
// 先从redis中获取列表数据
|
||||
List<FhbProdStockVO.SMPSRecordVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
.getCacheObject(CacheConstants.MIGRATION_SUPPLIER_PROD_STOCK_KEY + supplierId), new ArrayList<>());
|
||||
CollectionUtils.addAll(cacheList, stockVO.getData().getList().getRecords());
|
||||
// 存到redis中
|
||||
redisCache.setCacheObject(CacheConstants.MIGRATION_SUPPLIER_PROD_STOCK_KEY + supplierId, cacheList, 5, TimeUnit.DAYS);*/
|
||||
@PostMapping("/-R/stock/cache/{userId}")
|
||||
public R<Integer> createTyProdStockCache(@PathVariable Integer userId, MultipartFile file) throws IOException {
|
||||
ExcelUtil<TyProdStockVO> util = new ExcelUtil<>(TyProdStockVO.class);
|
||||
List<TyProdStockVO> tyStockList = util.importExcel(file.getInputStream());
|
||||
// 因为是采用的截图转excel方式,所以每个张图会冗余部分数据长度,导入是需要判断是否已存在
|
||||
Map<String, TyProdStockVO> importStockMap = new ConcurrentHashMap<>();
|
||||
List<TyProdStockVO> cacheList = new ArrayList<>();
|
||||
tyStockList.forEach(x -> {
|
||||
String prodArtNum = x.getProdArtNum().trim();
|
||||
String colorName = x.getColorName().trim();
|
||||
// 如果货号包括-R 则表明是 货号为绒里,手动给颜色添加后缀“绒里”
|
||||
if (prodArtNum.contains("-R")) {
|
||||
colorName = colorName.contains("绒里") ? colorName : (colorName + "绒里");
|
||||
}
|
||||
if (importStockMap.containsKey(prodArtNum + ":" + colorName)) {
|
||||
System.err.println(prodArtNum + ":" + colorName);
|
||||
} else {
|
||||
importStockMap.put(prodArtNum + ":" + colorName, x);
|
||||
cacheList.add(x.setProdArtNum(prodArtNum).setColorName(colorName));
|
||||
}
|
||||
});
|
||||
redisCache.setCacheObject(CacheConstants.MIGRATION_TY_PROD_STOCK_KEY + userId, cacheList, 5, TimeUnit.DAYS);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ public class FhbProdVO {
|
|||
private BigDecimal addPrice;
|
||||
private String addPriceSize;
|
||||
private String snPrefix;
|
||||
private BigDecimal salePrice;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
|
|||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
|
|
@ -20,7 +22,7 @@ public class TyProdImportVO {
|
|||
@Excel(name = "COL")
|
||||
private String colorName;
|
||||
@Excel(name = "jg")
|
||||
private Integer price;
|
||||
private BigDecimal price;
|
||||
@Excel(name = "SN")
|
||||
private String tySnPrefix;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,47 +1,49 @@
|
|||
package com.ruoyi.web.controller.xkt.migartion.vo.ty;
|
||||
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.data.annotation.AccessType;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-05-11 23:46
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class TyProdStockVO {
|
||||
|
||||
private SMPSDataVO data;
|
||||
|
||||
@Data
|
||||
public static class SMPSDataVO {
|
||||
private SMPSListVO list;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class SMPSListVO {
|
||||
private List<SMPSRecordVO> records;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class SMPSRecordVO {
|
||||
private Integer supplierId;
|
||||
private String artNo;
|
||||
private String color;
|
||||
private Integer size30;
|
||||
private Integer size31;
|
||||
private Integer size32;
|
||||
private Integer size33;
|
||||
private Integer size34;
|
||||
private Integer size35;
|
||||
private Integer size36;
|
||||
private Integer size37;
|
||||
private Integer size38;
|
||||
private Integer size39;
|
||||
private Integer size40;
|
||||
private Integer size41;
|
||||
private Integer size42;
|
||||
private Integer size43;
|
||||
}
|
||||
@Excel(name = "货号")
|
||||
private String prodArtNum;
|
||||
@Excel(name = "颜色")
|
||||
private String colorName;
|
||||
@Excel(name = "size30")
|
||||
private Integer size30;
|
||||
@Excel(name = "size31")
|
||||
private Integer size31;
|
||||
@Excel(name = "size32")
|
||||
private Integer size32;
|
||||
@Excel(name = "size33")
|
||||
private Integer size33;
|
||||
@Excel(name = "size34")
|
||||
private Integer size34;
|
||||
@Excel(name = "size35")
|
||||
private Integer size35;
|
||||
@Excel(name = "size36")
|
||||
private Integer size36;
|
||||
@Excel(name = "size37")
|
||||
private Integer size37;
|
||||
@Excel(name = "size38")
|
||||
private Integer size38;
|
||||
@Excel(name = "size39")
|
||||
private Integer size39;
|
||||
@Excel(name = "size40")
|
||||
private Integer size40;
|
||||
@Excel(name = "size41")
|
||||
private Integer size41;
|
||||
@Excel(name = "size42")
|
||||
private Integer size42;
|
||||
@Excel(name = "size43")
|
||||
private Integer size43;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -356,5 +356,9 @@ public class CacheConstants {
|
|||
* TY客户优惠缓存
|
||||
*/
|
||||
public static final String MIGRATION_TY_CUS_DISCOUNT_KEY = "mig_ty_cus_discount:";
|
||||
/**
|
||||
* TY商品库存缓存
|
||||
*/
|
||||
public static final String MIGRATION_TY_PROD_STOCK_KEY = "mig_ty_prod_stock:";
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue