diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java index c0794b9c..c30c50ae 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java @@ -68,6 +68,7 @@ public class GoodsSpuController { private GoodsCategoryService goodsCategoryService; private SeeYonRequestBaseService seeYonRequestBaseService; private ErpDispatchDataMapper dispatchDataMapper; + private GoodsAccreditService goodsAccreditService; @@ -134,7 +135,51 @@ public class GoodsSpuController { return R.error("供应商不存在或停用"); } - //规则设置 + //客户规则设置 + this.toSetSpuParam(param, supplier); + //产品规则设置 + this.tiSetSpuParam2(param, supplier); + + Long total = goodsSpuService.selectCountSkuJoinSpuList(param); + if(total<1){ + return R.byEmptyList(); + } + List list = goodsSpuService.selectSkuJoinSpuList(param); + for (GoodsSpu spu : list) { + spu.setUuid(spu.getId()+"_"+spu.getSkuId()); + } + List skuCodes = list.stream().map(GoodsSpu::getSkuCode).collect(Collectors.toList()); + this.initSpuWithCustomerPrice(param.getSupplierCode(), list, skuCodes); + return R.byPageList(total,list); + } + + private void tiSetSpuParam2(GoodsSpu param, BmsSupplier supplier) { + List goodsAccreditList = goodsAccreditService + .listIgnoreAcc(supplier.getId(), supplier.listBizRegionIds(), supplier.listSaleRegionIds()); + Set spuIds = goodsAccreditList.stream().map(GoodsAccredit::getSpuId).collect(Collectors.toSet()); + Set cateIds = goodsAccreditList.stream().map(GoodsAccredit::getCategoryId).collect(Collectors.toSet()); + if(CollUtil.isNotEmpty(cateIds)){ + if(CollUtil.isEmpty(param.getSelectNotIntCateIds())){ + param.setSelectNotIntCateIds(new ArrayList<>(cateIds)); + }else{ + param.getSelectNotIntCateIds().addAll(cateIds); + } + } + if(CollUtil.isNotEmpty(spuIds)){ + if (CollUtil.isEmpty(param.getSelectNotInIds())){ + param.setSelectNotInIds(new ArrayList<>(spuIds)); + }else{ + param.getSelectNotInIds().addAll(spuIds); + } + } + } + + /** + * 设置Spu查询条件 + * @param param + * @param supplier + */ + private void toSetSpuParam(GoodsSpu param, BmsSupplier supplier) { List ruleItems = goodsRuleService.listBySupplierId(supplier.getId()); GoodsRuleItemDTO ruleItemDTO = goodsRuleService.buildGoodsRuleItemDTO(ruleItems); if(ruleItemDTO!=null){ @@ -212,19 +257,6 @@ public class GoodsSpuController { } } - - - Long total = goodsSpuService.selectCountSkuJoinSpuList(param); - if(total<1){ - return R.byEmptyList(); - } - List list = goodsSpuService.selectSkuJoinSpuList(param); - for (GoodsSpu spu : list) { - spu.setUuid(spu.getId()+"_"+spu.getSkuId()); - } - List skuCodes = list.stream().map(GoodsSpu::getSkuCode).collect(Collectors.toList()); - this.initSpuWithCustomerPrice(param.getSupplierCode(), list, skuCodes); - return R.byPageList(total,list); } /** 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 156191d9..17d2d3ac 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 @@ -2,9 +2,12 @@ package com.qs.serve.modules.goods.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.goods.entity.GoodsAccredit; +import com.qs.serve.modules.goods.entity.GoodsAccreditItem; import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; import com.qs.serve.modules.goods.entity.vo.GoodsAccreditVo; +import java.util.List; + /** * 规则 服务接口 * @author YenHex @@ -16,5 +19,17 @@ public interface GoodsAccreditService extends IService { GoodsAccreditVo getById(String cateId, String spuId, String skuId); + /** + * 查询忽略的授权规则 + * 1.过滤规则的品类和SPU + * 2.忽略过滤符合当前客户的品类和SPU + * 3.忽略特供的品类和SPU + * @param supplierId + * @param bizRegionIds + * @param saleRegionIds + * @return + */ + List listIgnoreAcc(String supplierId,List bizRegionIds,List saleRegionIds); + } 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 9d737065..c6a4392e 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 @@ -25,6 +25,7 @@ import com.qs.serve.modules.goods.mapper.GoodsAccreditMapper; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -241,6 +242,47 @@ public class GoodsAccreditServiceImpl extends ServiceImpl listIgnoreAcc(String supplierId, List bizRegionIds, List saleRegionIds) { + //查询查询所有not in + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.select(GoodsAccreditItem::getId) + // 业务not in + .eq(GoodsAccreditItem::getAccType,1) + .and( + qw->{ + qw.or(a->a.eq(GoodsAccreditItem::getTargetType,"supplier").eq(GoodsAccreditItem::getTargetId,supplierId)) + .or(a->a.eq(GoodsAccreditItem::getTargetType,"saleRegion").in(GoodsAccreditItem::getTargetId,saleRegionIds)) + .or(a->a.eq(GoodsAccreditItem::getTargetType,"bizRegion").in(GoodsAccreditItem::getTargetId,bizRegionIds)); + } + ); + List itemIds = goodsAccreditItemService.list(lqw).stream().map(GoodsAccreditItem::getId).collect(Collectors.toList()); + + //查询所有 in + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.select(GoodsAccreditItem::getId) + // 业务in + .eq(GoodsAccreditItem::getAccType,0) + .and( + qw->{ + qw.or(a->a.eq(GoodsAccreditItem::getTargetType,"supplier").ne(GoodsAccreditItem::getTargetId,supplierId)) + .or(a->a.eq(GoodsAccreditItem::getTargetType,"saleRegion").notIn(GoodsAccreditItem::getTargetId,saleRegionIds)) + .or(a->a.eq(GoodsAccreditItem::getTargetType,"bizRegion").notIn(GoodsAccreditItem::getTargetId,bizRegionIds)); + } + ); + List itemIds2 = goodsAccreditItemService.list(lqw2).stream().map(GoodsAccreditItem::getId).collect(Collectors.toList()); + + itemIds.addAll(itemIds2); + + List itemList; + if(itemIds.size()>0){ + itemList = goodsAccreditItemService.list(new LambdaQueryWrapper().notIn(GoodsAccreditItem::getId,itemIds)); + }else { + itemList = goodsAccreditItemService.list(); + } + Set accIds = itemList.stream().map(GoodsAccreditItem::getAccId).collect(Collectors.toSet()); + return this.listByIds(accIds); + } private GoodsAccredit getGoodsAccredit(GoodsAccreditBo param){ GoodsAccredit accredit = null; diff --git a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java index 83e804a0..1762fe89 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java @@ -19,6 +19,7 @@ import com.qs.serve.modules.goods.entity.dto.InventoryCusPrice; import com.qs.serve.modules.goods.entity.so.InventoryCusPriceQuery; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; import com.qs.serve.modules.goods.mapper.GoodsCategoryRuleMapper; +import com.qs.serve.modules.goods.service.GoodsAccreditService; import com.qs.serve.modules.goods.service.GoodsRuleService; import com.qs.serve.modules.goods.service.GoodsSkuService; import com.qs.serve.modules.goods.service.GoodsSpuService; @@ -81,6 +82,7 @@ public class OmsOrderServiceImpl extends ServiceImpl im private OmsShoppingCartService omsShoppingCartService; private SeeYonRequestBaseService seeYonRequestBaseService; private GoodsRuleService goodsRuleService; + private GoodsAccreditService goodsAccreditService; @Override @@ -325,9 +327,13 @@ public class OmsOrderServiceImpl extends ServiceImpl im List skuCodes = newOrderItemList.stream().map(OmsOrderItem::getSkuCode).collect(Collectors.toList()); - //拦截下单规则 + //拦截商品授权维度规则 + //goodsAccreditService.listAcc() + + //拦截客户维度规则 goodsRuleService.checkSkuCode(skuCodes,goodsRuleService.listBySupplierId(order.getSupplierId().toString()),true); + //拦截品类下单规则 this.handleCategoryRule(categoryRule,newOrderItemList); this.updateById(order);