Browse Source

feat: 产品规则导入

checkBack
Yen 1 year ago
parent
commit
8553079b6b
  1. 17
      src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java
  2. 1
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java
  3. 54
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java
  4. 3
      src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java
  5. 141
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java
  6. 45
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java
  7. 4
      src/main/java/com/qs/serve/task/GoodsTask.java

17
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.CopierUtil;
import com.qs.serve.common.util.StringUtils; import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; 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.GoodsAccreditExt;
import com.qs.serve.modules.goods.entity.dto.GoodsAccreditQuery; import com.qs.serve.modules.goods.entity.dto.GoodsAccreditQuery;
import com.qs.serve.modules.goods.entity.vo.GoodsAccreditResult; import com.qs.serve.modules.goods.entity.vo.GoodsAccreditResult;
@ -86,5 +87,21 @@ public class GoodsAccreditController {
return R.ok(); 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);
}
} }

1
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java

@ -40,6 +40,7 @@ public class GoodsAccreditBo {
/** 不能选的客户 */ /** 不能选的客户 */
private List<String> notInSupplierIds; private List<String> notInSupplierIds;
public GoodsAccreditBo(String categoryId,String spuId,String skuId){ public GoodsAccreditBo(String categoryId,String spuId,String skuId){
this.categoryId = categoryId; this.categoryId = categoryId;
this.spuId = spuId; this.spuId = spuId;

54
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditImportBo.java

@ -1,8 +1,62 @@
package com.qs.serve.modules.goods.entity.bo; package com.qs.serve.modules.goods.entity.bo;
import lombok.Data;
import java.util.List;
/** /**
* @author YenHex * @author YenHex
* @since 2024/7/22 * @since 2024/7/22
*/ */
@Data
public class GoodsAccreditImportBo { public class GoodsAccreditImportBo {
/** 授权ID(更新必传) */
private Long accId;
private String spuId;
private String skuId;
private String categoryId;
/** 只能选的销售区域 */
private List<String> onlySaleRegionCodes;
/** 不能选的销售区域 */
private List<String> notInSaleRegionCodes;
/** 只能选的行政区域 */
private List<String> onlyBizRegionCodes;
/** 不能选的行政区域 */
private List<String> notInBizRegionCodes;
/** 只能选的客户 */
private List<String> onlySupplierCodes;
/** 不能选的客户 */
private List<String> notInSupplierCodes;
private Boolean successFlag;
/** 只能选的销售区域 */
private List<String> errOnlySaleRegionCodes;
/** 不能选的销售区域 */
private List<String> errNotInSaleRegionCodes;
/** 只能选的行政区域 */
private List<String> errOnlyBizRegionCodes;
/** 不能选的行政区域 */
private List<String> errNotInBizRegionCodes;
/** 只能选的客户 */
private List<String> errOnlySupplierCodes;
/** 不能选的客户 */
private List<String> errNotInSupplierCodes;
} }

3
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.GoodsAccreditItem;
import com.qs.serve.modules.goods.entity.GoodsRuleItem; 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.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.GoodsAccrIdsDto;
import com.qs.serve.modules.goods.entity.dto.GoodsAccreditExt; 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.dto.GoodsAccreditQuery;
@ -22,6 +23,8 @@ import java.util.Map;
*/ */
public interface GoodsAccreditService extends IService<GoodsAccredit> { public interface GoodsAccreditService extends IService<GoodsAccredit> {
GoodsAccreditBo tranGoodsAccreditBo(GoodsAccreditImportBo importBo);
PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query); PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query);
List<GoodsAccreditResult> queryList(GoodsAccreditQuery query); List<GoodsAccreditResult> queryList(GoodsAccreditQuery query);

141
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.bms.mapper.BmsSupplierMapper;
import com.qs.serve.modules.goods.entity.*; import com.qs.serve.modules.goods.entity.*;
import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; 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.GoodsAccrIdsDto;
import com.qs.serve.modules.goods.entity.dto.GoodsAccreditExt; 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.dto.GoodsAccreditQuery;
@ -57,13 +58,151 @@ public class GoodsAccreditServiceImpl extends ServiceImpl<GoodsAccreditMapper,Go
private final GoodsAccreditItemService goodsAccreditItemService; private final GoodsAccreditItemService goodsAccreditItemService;
@Override
public GoodsAccreditBo tranGoodsAccreditBo(GoodsAccreditImportBo importBo) {
importBo.setSuccessFlag(true);
GoodsAccreditBo accreditBo = new GoodsAccreditBo();
List<String> onlySaleRegionCodes = importBo.getOnlySaleRegionCodes();
if(CollUtil.isNotEmpty(onlySaleRegionCodes)){
List<BmsRegion> saleRegionList = regionMapper.selectList(
new LambdaQueryWrapper<BmsRegion>()
.in(BmsRegion::getCode,onlySaleRegionCodes)
);
List<String> 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<String> notInSaleRegionCodes = importBo.getNotInSaleRegionCodes();
if(CollUtil.isNotEmpty(notInSaleRegionCodes)){
List<BmsRegion> saleRegionList = regionMapper.selectList(
new LambdaQueryWrapper<BmsRegion>()
.in(BmsRegion::getCode,notInSaleRegionCodes)
);
List<String> 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<String> onlyBizRegionCodes = importBo.getOnlyBizRegionCodes();
if(CollUtil.isNotEmpty(onlyBizRegionCodes)){
List<BmsRegion2> bizRegionList = region2Mapper.selectList(
new LambdaQueryWrapper<BmsRegion2>()
.in(BmsRegion2::getCode,onlyBizRegionCodes)
);
List<String> 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<String> notInBizRegionCodes = importBo.getNotInBizRegionCodes();
if(CollUtil.isNotEmpty(notInBizRegionCodes)){
List<BmsRegion2> bizRegionList = region2Mapper.selectList(
new LambdaQueryWrapper<BmsRegion2>()
.in(BmsRegion2::getCode,notInBizRegionCodes)
);
List<String> 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<String> notInSupplierCodes = importBo.getNotInSupplierCodes();
if(CollUtil.isNotEmpty(notInSupplierCodes)){
List<BmsSupplier> supplierList = supplierMapper.selectList(
new LambdaQueryWrapper<BmsSupplier>()
.in(BmsSupplier::getCode,notInSupplierCodes)
);
List<String> 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<String> onlySupplierCodes = importBo.getOnlySupplierCodes();
if(CollUtil.isNotEmpty(onlySupplierCodes)){
List<BmsSupplier> supplierList = supplierMapper.selectList(
new LambdaQueryWrapper<BmsSupplier>()
.in(BmsSupplier::getCode,onlySupplierCodes)
);
List<String> 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 @Override
public PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query) { public PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query) {
initAccreditQuery(query); initAccreditQuery(query);
PageUtil.startPage(); PageUtil.startPage();
List<GoodsAccreditExt> list = super.baseMapper.queryUnionPage(query); List<GoodsAccreditExt> list = super.baseMapper.queryUnionPage(query);
List<GoodsAccreditResult> results = getGoodsAccreditResults(list); List<GoodsAccreditResult> results = getGoodsAccreditResults(list);
return R.byPageHelperList(list,results).getData(); return R.byPageHelperList(list,results).getData();
} }

45
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCustomerPriceServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.goods.service.impl; 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.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
@ -277,30 +278,32 @@ public class GoodsCustomerPriceServiceImpl extends ServiceImpl<GoodsCustomerPric
erpCusPriceList = JsonUtil.jsonToList(erpRs.getData(), InventoryCusPrice.class); erpCusPriceList = JsonUtil.jsonToList(erpRs.getData(), InventoryCusPrice.class);
} }
Set<String> skuCodes = erpCusPriceList.stream().map(InventoryCusPrice::getInvCode).collect(Collectors.toSet()); Set<String> skuCodes = erpCusPriceList.stream().map(InventoryCusPrice::getInvCode).collect(Collectors.toSet());
List<GoodsSku> goodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper<GoodsSku>().in(GoodsSku::getSkuCode, skuCodes));
List<GoodsCustomerPrice> goodsCustomerPriceList = new ArrayList<>(); List<GoodsCustomerPrice> goodsCustomerPriceList = new ArrayList<>();
for (InventoryCusPrice cusPrice : erpCusPriceList) { if(CollUtil.isNotEmpty(skuCodes)){
GoodsSku goodsSku = null; List<GoodsSku> goodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper<GoodsSku>().in(GoodsSku::getSkuCode, skuCodes));
for (GoodsSku skuItem : goodsSkus) { for (InventoryCusPrice cusPrice : erpCusPriceList) {
if(skuItem.getSkuCode().equals(cusPrice.getInvCode())){ GoodsSku goodsSku = null;
goodsSku = skuItem; 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<GoodsCustomerPrice>() this.remove(new LambdaQueryWrapper<GoodsCustomerPrice>()

4
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(){ public void syncCusPriceGoods(){
AuthContextUtils.setTenant("001"); AuthContextUtils.setTenant("001");
goodsCustomerPriceService.syncCustomerPrice(); goodsCustomerPriceService.syncCustomerPrice();

Loading…
Cancel
Save