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 d2dc5fc81..051fef3e9 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 @@ -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 prodArtNumMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, StoreProduct::getProdArtNum)); // 商品所有颜色 尺码 颜色库存初始化 List prodColorList = new ArrayList<>(); @@ -339,11 +337,7 @@ public class GtAndFhbBizController extends BaseController { // 获取GT匹配的商品sku列表 List gtMatchSkuList = this.getGtFirstSku(multiSaleSameGoMap, gtSaleGroupMap, storeProd.getProdArtNum()); // 当前货号在GT的所有尺码,作为标准尺码 - List 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 gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize()))).collect(Collectors.toList()); fhbMatchArtNoList.forEach(fhbArtNo -> { List 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 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 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 storeProdList, List storeCusList, + private void initStoreCusProdDiscAndProdStock(GtAndFHBInitVO initVO, List storeProdList, List storeCusList, List prodColorList, Map> multiSameFhbMap) { // 从redis中获取客户优惠数据 List 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 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>> fhbCusDiscGroupMap = fhbCusDiscCacheList.stream().collect(Collectors .groupingBy(FhbCusDiscountVO.SMCDRecordVO::getArtNo, Collectors.groupingBy(FhbCusDiscountVO.SMCDRecordVO::getColor))); + // FHB 货号颜色库存对应关系 + Map> fhbStockGroupMap = fhbStockCacheList.stream().collect(Collectors + .groupingBy(FhbProdStockVO.SMPSRecordVO::getArtNo, Collectors.toMap(FhbProdStockVO.SMPSRecordVO::getColor, x -> x))); // 步橘系统商品所有颜色maps Map> prodColorGroupMap = prodColorList.stream().collect(Collectors .groupingBy(StoreProductColor::getStoreProdId, Collectors.toMap(StoreProductColor::getColorName, x -> x))); // 步橘系统客户名称map Map buJuStoreCusMap = storeCusList.stream().collect(Collectors.toMap(StoreCustomer::getCusName, x -> x)); List prodCusDiscList = new ArrayList<>(); + List prodStockList = new ArrayList<>(); // 依次遍历商品列表,找到货号和FHB货号对应关系,然后用颜色进行匹配,建立客户优惠关系 storeProdList.forEach(storeProd -> { // 当前商品颜色列表 key 颜色中文名称 @@ -434,22 +432,74 @@ public class GtAndFhbBizController extends BaseController { // 根据步橘货号 找到FHB对应的货号,可能是列表 List fhbAtrNoList = Optional.ofNullable(multiSameFhbMap.get(storeProd.getProdArtNum())).orElseThrow(() -> new ServiceException("没有FHB货号!" + storeProd.getProdArtNum(), HttpStatus.ERROR)); fhbAtrNoList.forEach(fhbAtrNo -> { - // FHB货号下有哪些颜色存在客户优惠 - Map> 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> fhbStockGroupMap, Map buJuProdColorMap, + Long storeId, Long storeProdId, String prodArtNum, List prodStockList) { + Map 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>> fhbCusDiscGroupMap, Map buJuProdColorMap, + Map buJuStoreCusMap, Long storeId, Long storeProdId, List prodCusDiscList) { + // FHB货号下有哪些颜色存在客户优惠 + Map> 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())); + })); } /** 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 f104b3b5a..e0c7d3899 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 @@ -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 initToDB(@Validated @RequestBody GtAndTYInitVO initVO) { // 去掉可能的空格 initVO.setExcludeArtNoList(initVO.getExcludeArtNoList().stream().map(String::trim).collect(Collectors.toList())); Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper() @@ -210,6 +211,7 @@ public class GtAndTyBizController extends BaseController { // e. 类目属性初始化 this.init(initVO, storeColorMap); + return R.ok(); } private void init(GtAndTYInitVO initVO, Map storeColorMap) { @@ -294,8 +296,6 @@ public class GtAndTyBizController extends BaseController { storeProdList.add(storeProd); }); this.storeProdMapper.insert(storeProdList); - // 货号map - Map prodArtNumMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, StoreProduct::getProdArtNum)); // 商品所有颜色 尺码 颜色库存初始化 List prodColorList = new ArrayList<>(); @@ -308,11 +308,7 @@ public class GtAndTyBizController extends BaseController { // 获取GT匹配的商品sku列表 List gtMatchSkuList = this.getGtFirstSku(multiSaleSameGoMap, gtSaleGroupMap, storeProd.getProdArtNum()); // 当前货号在GT的所有尺码,作为标准尺码 - List 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 gtStandardSizeList = gtMatchSkuList.stream().map(sku -> (int) Math.floor(Double.parseDouble(sku.getSize()))).collect(Collectors.toList()); tyMatchArtNoList.forEach(tyArtNo -> { List 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 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 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 storeProdList, List storeCusList, - List prodColorList, Map> multiSameTyMap) { + private void initStoreCusProdDiscAndProdStock(GtAndTYInitVO initVO, List storeProdList, List storeCusList, + List prodColorList, Map> multiSameTyMap) { // 从redis中获取已存在的客户优惠数据 List 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 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> tyProdStockMap = tyStockList.stream().collect(Collectors + .groupingBy(TyProdStockVO::getProdArtNum, Collectors.toMap(TyProdStockVO::getColorName, x -> x))); // TY 货号颜色优惠对应关系 Map>> tyCusDiscGroupMap = tyCusDiscCacheList.stream().collect(Collectors .groupingBy(TyCusDiscImportVO::getProdArtNum, Collectors.groupingBy(TyCusDiscImportVO::getColorName))); @@ -415,6 +412,7 @@ public class GtAndTyBizController extends BaseController { // 步橘系统客户名称map Map buJuStoreCusMap = storeCusList.stream().collect(Collectors.toMap(StoreCustomer::getCusName, x -> x)); List prodCusDiscList = new ArrayList<>(); + List prodStockList = new ArrayList<>(); // 依次遍历商品列表,找到货号和FHB货号对应关系,然后用颜色进行匹配,建立客户优惠关系 storeProdList.forEach(storeProd -> { // 当前商品颜色列表 key 颜色中文名称 @@ -422,22 +420,74 @@ public class GtAndTyBizController extends BaseController { // 根据步橘货号 找到TY对应的货号,可能是列表 List tyAtrNoList = Optional.ofNullable(multiSameTyMap.get(storeProd.getProdArtNum())).orElseThrow(() -> new ServiceException("没有TY货号!" + storeProd.getProdArtNum(), HttpStatus.ERROR)); tyAtrNoList.forEach(tyAtrNo -> { - // TY货号下有哪些颜色存在客户优惠 - Map> 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> tyProdStockMap, Map buJuProdColorMap, + Long storeId, Long storeProdId, String prodArtNum, List prodStockList) { + Map 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>> tyCusDiscGroupMap, Map buJuProdColorMap, + Map buJuStoreCusMap, List prodCusDiscList, Long storeId, Long storeProdId) { + // TY货号下有哪些颜色存在客户优惠 + Map> 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())); + })); } /** 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 7a82df360..d64402f3c 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 @@ -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()); }); 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 162274765..94474793d 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 @@ -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 createTyProdStockCache(@PathVariable Integer userId, @Validated @RequestBody TyProdStockVO stockVO) { - /* // 供应商ID - if (ObjectUtils.isEmpty(stockVO.getData()) || ObjectUtils.isEmpty(stockVO.getData().getList())) { - return R.ok(); - } - // 先从redis中获取列表数据 - List 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 createTyProdStockCache(@PathVariable Integer userId, MultipartFile file) throws IOException { + ExcelUtil util = new ExcelUtil<>(TyProdStockVO.class); + List tyStockList = util.importExcel(file.getInputStream()); + // 因为是采用的截图转excel方式,所以每个张图会冗余部分数据长度,导入是需要判断是否已存在 + Map importStockMap = new ConcurrentHashMap<>(); + List 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(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/fhb/FhbProdVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/fhb/FhbProdVO.java index 9f4c07a27..5420d5c83 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/fhb/FhbProdVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/fhb/FhbProdVO.java @@ -31,6 +31,7 @@ public class FhbProdVO { private BigDecimal addPrice; private String addPriceSize; private String snPrefix; + private BigDecimal salePrice; } } 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 ee9b8c4a5..3117b1a51 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 @@ -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; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdStockVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdStockVO.java index cbe3dea89..1a96d267c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdStockVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/migartion/vo/ty/TyProdStockVO.java @@ -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 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; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index b7811bcb5..55bdbade7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -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:"; }