From 8553079b6b6deffbf84b3f44d061e9f5e0cad228 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 23 Jul 2024 10:42:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GoodsAccreditController.java | 17 +++ .../goods/entity/bo/GoodsAccreditBo.java | 1 + .../entity/bo/GoodsAccreditImportBo.java | 54 +++++++ .../goods/service/GoodsAccreditService.java | 3 + .../impl/GoodsAccreditServiceImpl.java | 141 +++++++++++++++++- .../impl/GoodsCustomerPriceServiceImpl.java | 45 +++--- .../java/com/qs/serve/task/GoodsTask.java | 4 +- 7 files changed, 241 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java index 245eed08..5d63d580 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java @@ -10,6 +10,7 @@ import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditImportBo; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditExt; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditQuery; import com.qs.serve.modules.goods.entity.vo.GoodsAccreditResult; @@ -86,5 +87,21 @@ public class GoodsAccreditController { return R.ok(); } + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/importData") + @SysLog(module = SystemModule.GOODS, title = "规则", biz = BizType.UPDATE) + public R importData(@RequestBody @Valid GoodsAccreditImportBo param){ + GoodsAccreditBo accreditBo = goodsAccreditService.tranGoodsAccreditBo(param); + if(param.getSuccessFlag()){ + goodsAccreditService.modify(accreditBo); + return R.ok(); + } + return R.errorImport(param); + } + } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java index 9a07f290..9ad164ce 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java @@ -40,6 +40,7 @@ public class GoodsAccreditBo { /** 不能选的客户 */ private List notInSupplierIds; + public GoodsAccreditBo(String categoryId,String spuId,String skuId){ this.categoryId = categoryId; this.spuId = spuId; diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java index b021ecb6..722389f3 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java @@ -1,8 +1,62 @@ package com.qs.serve.modules.goods.entity.bo; +import lombok.Data; + +import java.util.List; + /** * @author YenHex * @since 2024/7/22 */ +@Data public class GoodsAccreditImportBo { + + /** 授权ID(更新必传) */ + private Long accId; + + private String spuId; + + private String skuId; + + private String categoryId; + + /** 只能选的销售区域 */ + private List onlySaleRegionCodes; + + /** 不能选的销售区域 */ + private List notInSaleRegionCodes; + + /** 只能选的行政区域 */ + private List onlyBizRegionCodes; + + /** 不能选的行政区域 */ + private List notInBizRegionCodes; + + /** 只能选的客户 */ + private List onlySupplierCodes; + + /** 不能选的客户 */ + private List notInSupplierCodes; + + private Boolean successFlag; + + + /** 只能选的销售区域 */ + private List errOnlySaleRegionCodes; + + /** 不能选的销售区域 */ + private List errNotInSaleRegionCodes; + + /** 只能选的行政区域 */ + private List errOnlyBizRegionCodes; + + /** 不能选的行政区域 */ + private List errNotInBizRegionCodes; + + /** 只能选的客户 */ + private List errOnlySupplierCodes; + + /** 不能选的客户 */ + private List errNotInSupplierCodes; + } diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java index 4db28118..3e2f5b9c 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java @@ -6,6 +6,7 @@ import com.qs.serve.modules.goods.entity.GoodsAccredit; import com.qs.serve.modules.goods.entity.GoodsAccreditItem; import com.qs.serve.modules.goods.entity.GoodsRuleItem; import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditImportBo; import com.qs.serve.modules.goods.entity.dto.GoodsAccrIdsDto; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditExt; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditQuery; @@ -22,6 +23,8 @@ import java.util.Map; */ public interface GoodsAccreditService extends IService { + GoodsAccreditBo tranGoodsAccreditBo(GoodsAccreditImportBo importBo); + PageVo queryPage(GoodsAccreditQuery query); List queryList(GoodsAccreditQuery query); diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java index e7d6bfe9..37073b4e 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java @@ -18,6 +18,7 @@ import com.qs.serve.modules.bms.mapper.BmsRegionMapper; import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; import com.qs.serve.modules.goods.entity.*; import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditImportBo; import com.qs.serve.modules.goods.entity.dto.GoodsAccrIdsDto; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditExt; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditQuery; @@ -57,13 +58,151 @@ public class GoodsAccreditServiceImpl extends ServiceImpl onlySaleRegionCodes = importBo.getOnlySaleRegionCodes(); + if(CollUtil.isNotEmpty(onlySaleRegionCodes)){ + List saleRegionList = regionMapper.selectList( + new LambdaQueryWrapper() + .in(BmsRegion::getCode,onlySaleRegionCodes) + ); + List errCodes = new ArrayList<>(); + for (String regionCode : onlySaleRegionCodes) { + boolean r = saleRegionList.stream().anyMatch(a->a.getCode().equals(regionCode)); + if(!r){ + errCodes.add(regionCode); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrOnlySaleRegionCodes(errCodes); + }else { + accreditBo.setOnlySaleRegionIds(saleRegionList.stream() + .map(BmsRegion::getId).collect(Collectors.toList())); + } + } + + List notInSaleRegionCodes = importBo.getNotInSaleRegionCodes(); + if(CollUtil.isNotEmpty(notInSaleRegionCodes)){ + List saleRegionList = regionMapper.selectList( + new LambdaQueryWrapper() + .in(BmsRegion::getCode,notInSaleRegionCodes) + ); + List errCodes = new ArrayList<>(); + for (String regionCode : notInSaleRegionCodes) { + boolean r = saleRegionList.stream().anyMatch(a->a.getCode().equals(regionCode)); + if(!r){ + errCodes.add(regionCode); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrNotInSaleRegionCodes(errCodes); + }else { + accreditBo.setNotInSaleRegionIds(saleRegionList.stream() + .map(BmsRegion::getId).collect(Collectors.toList())); + } + } + + List onlyBizRegionCodes = importBo.getOnlyBizRegionCodes(); + if(CollUtil.isNotEmpty(onlyBizRegionCodes)){ + List bizRegionList = region2Mapper.selectList( + new LambdaQueryWrapper() + .in(BmsRegion2::getCode,onlyBizRegionCodes) + ); + List errCodes = new ArrayList<>(); + for (String regionCode : onlyBizRegionCodes) { + boolean r = bizRegionList.stream().anyMatch(a->a.getCode().equals(regionCode)); + if(!r){ + errCodes.add(regionCode); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrOnlyBizRegionCodes(errCodes); + }else { + accreditBo.setOnlyBizRegionIds(bizRegionList.stream() + .map(BmsRegion2::getId).collect(Collectors.toList())); + } + } + + List notInBizRegionCodes = importBo.getNotInBizRegionCodes(); + if(CollUtil.isNotEmpty(notInBizRegionCodes)){ + List bizRegionList = region2Mapper.selectList( + new LambdaQueryWrapper() + .in(BmsRegion2::getCode,notInBizRegionCodes) + ); + List errCodes = new ArrayList<>(); + for (String regionCode : notInBizRegionCodes) { + boolean r = bizRegionList.stream().anyMatch(a->a.getCode().equals(regionCode)); + if(!r){ + errCodes.add(regionCode); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrNotInBizRegionCodes(errCodes); + }else { + accreditBo.setNotInBizRegionIds(bizRegionList.stream() + .map(BmsRegion2::getId).collect(Collectors.toList())); + } + } + + List notInSupplierCodes = importBo.getNotInSupplierCodes(); + if(CollUtil.isNotEmpty(notInSupplierCodes)){ + List supplierList = supplierMapper.selectList( + new LambdaQueryWrapper() + .in(BmsSupplier::getCode,notInSupplierCodes) + ); + List errCodes = new ArrayList<>(); + for (String code : notInSupplierCodes) { + boolean r = supplierList.stream().anyMatch(a->a.getCode().equals(code)); + if(!r){ + errCodes.add(code); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrNotInSupplierCodes(errCodes); + }else { + accreditBo.setNotInSupplierIds(supplierList.stream() + .map(BmsSupplier::getId).collect(Collectors.toList())); + } + } + + List onlySupplierCodes = importBo.getOnlySupplierCodes(); + if(CollUtil.isNotEmpty(onlySupplierCodes)){ + List supplierList = supplierMapper.selectList( + new LambdaQueryWrapper() + .in(BmsSupplier::getCode,onlySupplierCodes) + ); + List errCodes = new ArrayList<>(); + for (String code : onlySupplierCodes) { + boolean r = supplierList.stream().anyMatch(a->a.getCode().equals(code)); + if(!r){ + errCodes.add(code); + } + } + if(CollUtil.isNotEmpty(errCodes)){ + importBo.setSuccessFlag(false); + importBo.setErrOnlySupplierCodes(errCodes); + }else { + accreditBo.setOnlySupplierIds(supplierList.stream() + .map(BmsSupplier::getId).collect(Collectors.toList())); + } + } + return accreditBo; + } + @Override public PageVo queryPage(GoodsAccreditQuery query) { initAccreditQuery(query); PageUtil.startPage(); List list = super.baseMapper.queryUnionPage(query); List results = getGoodsAccreditResults(list); - return R.byPageHelperList(list,results).getData(); } diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java index 5b4028e1..c23e3a7e 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.goods.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.model.dto.R; @@ -277,30 +278,32 @@ public class GoodsCustomerPriceServiceImpl extends ServiceImpl skuCodes = erpCusPriceList.stream().map(InventoryCusPrice::getInvCode).collect(Collectors.toSet()); - List goodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper().in(GoodsSku::getSkuCode, skuCodes)); List goodsCustomerPriceList = new ArrayList<>(); - for (InventoryCusPrice cusPrice : erpCusPriceList) { - GoodsSku goodsSku = null; - for (GoodsSku skuItem : goodsSkus) { - if(skuItem.getSkuCode().equals(cusPrice.getInvCode())){ - goodsSku = skuItem; + if(CollUtil.isNotEmpty(skuCodes)){ + List goodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper().in(GoodsSku::getSkuCode, skuCodes)); + for (InventoryCusPrice cusPrice : erpCusPriceList) { + GoodsSku goodsSku = null; + for (GoodsSku skuItem : goodsSkus) { + if(skuItem.getSkuCode().equals(cusPrice.getInvCode())){ + goodsSku = skuItem; + } } + //跳过无效商品 + if(goodsSku==null){ + continue; + } + GoodsCustomerPrice customerPrice = new GoodsCustomerPrice(); + customerPrice.setSupplierId(supplier.getId()); + customerPrice.setSupplierCode(supplier.getCode()); + customerPrice.setSupplierName(supplier.getName()); + customerPrice.setSkuId(goodsSku.getId()+""); + customerPrice.setSkuCode(goodsSku.getSkuCode()); + customerPrice.setSkuName(goodsSku.getSkuName()); + customerPrice.setSkuUnit(goodsSku.getUnitName()); + customerPrice.setInitPrice(cusPrice.getPrice()); + customerPrice.setRealPrice(cusPrice.getPrice()); + goodsCustomerPriceList.add(customerPrice); } - //跳过无效商品 - if(goodsSku==null){ - continue; - } - GoodsCustomerPrice customerPrice = new GoodsCustomerPrice(); - customerPrice.setSupplierId(supplier.getId()); - customerPrice.setSupplierCode(supplier.getCode()); - customerPrice.setSupplierName(supplier.getName()); - customerPrice.setSkuId(goodsSku.getId()+""); - customerPrice.setSkuCode(goodsSku.getSkuCode()); - customerPrice.setSkuName(goodsSku.getSkuName()); - customerPrice.setSkuUnit(goodsSku.getUnitName()); - customerPrice.setInitPrice(cusPrice.getPrice()); - customerPrice.setRealPrice(cusPrice.getPrice()); - goodsCustomerPriceList.add(customerPrice); } //移除旧历史 this.remove(new LambdaQueryWrapper() diff --git a/src/main/java/com/qs/serve/task/GoodsTask.java b/src/main/java/com/qs/serve/task/GoodsTask.java index d880fc02..d13b8205 100644 --- a/src/main/java/com/qs/serve/task/GoodsTask.java +++ b/src/main/java/com/qs/serve/task/GoodsTask.java @@ -31,9 +31,9 @@ public class GoodsTask { } /** - * 每两个小时同步一次 + * 每15分钟同步一次 */ - @Scheduled(cron="0 0/2 0 * * ?") + @Scheduled(cron="0/15 0 0 * * ?") public void syncCusPriceGoods(){ AuthContextUtils.setTenant("001"); goodsCustomerPriceService.syncCustomerPrice();