diff --git a/src/main/java/com/qs/serve/modules/bir/consts/BirActivityCenterGoodsUtil.java b/src/main/java/com/qs/serve/modules/bir/consts/BirActivityCenterGoodsUtil.java index 9f8bc178..a2d28973 100644 --- a/src/main/java/com/qs/serve/modules/bir/consts/BirActivityCenterGoodsUtil.java +++ b/src/main/java/com/qs/serve/modules/bir/consts/BirActivityCenterGoodsUtil.java @@ -32,7 +32,7 @@ public class BirActivityCenterGoodsUtil { for (Long costId : costIds) { TbsCostBirLogMapper birLogMapper = SpringUtils.getBean(TbsCostBirLogMapper.class); TbsCostBirLog birLog = new TbsCostBirLog(); - birLog.setId(costId); + birLog.setCostId(costId); birLogMapper.insert(birLog); } } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java index 6990b14f..f8974650 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java @@ -5,6 +5,8 @@ import java.time.LocalDateTime; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; @@ -373,7 +375,7 @@ public class BmsSupplier implements Serializable { list.add(this.getRegion2Second()); list.add(this.getRegion2Third()); list.add(this.getRegion2Fourthly()); - return list; + return list.stream().filter(Objects::nonNull).collect(Collectors.toList()); } public List listSaleRegionIds(){ @@ -382,7 +384,7 @@ public class BmsSupplier implements Serializable { list.add(this.getRegionSecond()); list.add(this.getRegionThird()); list.add(this.getRegionFourthly()); - return list; + return list.stream().filter(Objects::nonNull).collect(Collectors.toList()); } public HisUserSupplier toHisUserSupplier(String userId,Integer type){ 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 635b9017..ca49f424 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 @@ -1,5 +1,6 @@ package com.qs.serve.modules.goods.controller; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qs.serve.common.model.annotation.SysLog; @@ -8,10 +9,14 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.*; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; import com.qs.serve.modules.goods.common.GoodsConst; import com.qs.serve.modules.goods.entity.*; import com.qs.serve.modules.goods.entity.bo.*; +import com.qs.serve.modules.goods.entity.dto.GoodsRuleItemDTO; import com.qs.serve.modules.goods.entity.dto.InventoryCusPrice; import com.qs.serve.modules.goods.entity.so.GoodsHisOrderQuery; import com.qs.serve.modules.goods.entity.so.InventoryCusPriceQuery; @@ -36,10 +41,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; +import java.util.*; import java.util.stream.Collectors; /** @@ -54,6 +56,7 @@ import java.util.stream.Collectors; public class GoodsSpuController { private GoodsSpuMapper goodsSpuMapper; + private GoodsRuleService goodsRuleService; private GoodsSkuService goodsSkuService; private GoodsSpuService goodsSpuService; private GoodsSpuSpecService goodsSpuSpecService; @@ -61,6 +64,7 @@ public class GoodsSpuController { private GoodsCategoryRuleService goodsCategoryRuleService; private TbsActivityGoodsService activityGoodsService; private TbsBudgetConditionService budgetConditionService; + private BmsSupplierService bmsSupplierService; private GoodsCategoryService goodsCategoryService; private SeeYonRequestBaseService seeYonRequestBaseService; private ErpDispatchDataMapper dispatchDataMapper; @@ -125,6 +129,57 @@ public class GoodsSpuController { param.setSelectNotIntCateIds(Arrays.asList(categoryRule.getIgnoreBrandIds())); log.warn("setSelectNotIntCateIds {}",JsonUtil.objectToJson(param)); } + BmsSupplier supplier = bmsSupplierService.getByNameOrCode(param.getSupplierCode()); + if(supplier==null){ + return R.error("供应商不存在或停用"); + } + + //规则设置 + List ruleItems = goodsRuleService.listBySupplierId(supplier.getId()); + GoodsRuleItemDTO ruleItemDTO = goodsRuleService.buildGoodsRuleItemDTO(ruleItems); + if(ruleItemDTO!=null){ + + if(CollUtil.isEmpty(param.getSelectNotIntCateIds())){ + param.setSelectNotIntCateIds(ruleItemDTO.getNotInCategoryIds()); + }else if (ruleItemDTO.getNotInCategoryIds()!=null){ + param.getSelectNotIntCateIds().addAll(ruleItemDTO.getNotInCategoryIds()); + } + + if (CollUtil.isEmpty(param.getSelectCateIds())){ + param.setSelectCateIds(ruleItemDTO.getOnlyCategoryIds()); + }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlyCategoryIds())){ + //交集 + Collection ids = cn.hutool.core.collection.CollectionUtil + .intersection(ruleItemDTO.getOnlyCategoryIds(), param.getSelectCateIds()); + List idsList = new ArrayList<>(); + idsList.addAll(ids); + param.setSelectCateIds(idsList); + } + + if (CollUtil.isEmpty(param.getSelectIds())){ + List ids = ruleItemDTO.getOnlySpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); + param.setSelectIds(ids); + }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlySpuIds())){ + List ids = ruleItemDTO.getOnlySpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); + //交集 + Collection id2s = cn.hutool.core.collection.CollectionUtil + .intersection(ids, param.getSelectIds()); + List idsList = new ArrayList<>(); + idsList.addAll(id2s); + param.setSelectIds(idsList); + } + + if (CollUtil.isEmpty(param.getSelectNotInIds())){ + List ids = ruleItemDTO.getNotInSpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); + param.setSelectNotInIds(ids); + }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlySpuIds())){ + List ids = ruleItemDTO.getNotInSpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); + param.getSelectNotInIds().addAll(ids); + } + + } + + Long total = goodsSpuService.selectCountSkuJoinSpuList(param); if(total<1){ return R.byEmptyList(); diff --git a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsSpuApi.java b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsSpuApi.java index dd586ef6..e3537f43 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsSpuApi.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsSpuApi.java @@ -61,7 +61,7 @@ public class GoodsSpuApi { .or().eq(GoodsSpu::getCategoryThird,selectCateId); }); } - List selectCateIds = param.getSelectCateIds(); + List selectCateIds = param.getSelectCateIds(); if(selectCateIds!=null&&selectCateIds.size()>0){ spuWrapper.and(qw->{ qw.in(GoodsSpu::getCategoryFirst,selectCateIds) diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java index 8f2e0685..4172e604 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java @@ -160,11 +160,17 @@ public class GoodsSpu implements Serializable { private List selectIds; @TableField(exist = false) - private List selectCateIds; + private List selectNotInIds; + + @TableField(exist = false) + private List selectCateIds; @TableField(exist = false) private List selectNotIntCateIds; + @TableField(exist = false) + private List selectNotInSpuIds; + @TableField(exist = false) private Integer selectSpecialFlag; diff --git a/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodsRuleItemDTO.java b/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodsRuleItemDTO.java new file mode 100644 index 00000000..8e5cb8b8 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodsRuleItemDTO.java @@ -0,0 +1,26 @@ +package com.qs.serve.modules.goods.entity.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2024/3/28 + */ +@Data +public class GoodsRuleItemDTO { + + /** 只能选的分类 */ + private List onlyCategoryIds; + + /** 不能选的分类 */ + private List notInCategoryIds; + + /** 只能选的SPU */ + private List onlySpuIds; + + /** 不能选的SPU */ + private List notInSpuIds; + +} diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java index 01558053..c56f6e72 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java @@ -2,10 +2,14 @@ package com.qs.serve.modules.goods.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.goods.entity.GoodsRule; +import com.qs.serve.modules.goods.entity.GoodsRuleItem; import com.qs.serve.modules.goods.entity.bo.GoodsRuleBo; import com.qs.serve.modules.goods.entity.dto.GoodsRuleBaseDTO; +import com.qs.serve.modules.goods.entity.dto.GoodsRuleItemDTO; import com.qs.serve.modules.goods.entity.vo.GoodsRuleVo; +import java.util.List; + /** * 规则 服务接口 * @author YenHex @@ -18,5 +22,10 @@ public interface GoodsRuleService extends IService { GoodsRuleVo getVoById(GoodsRuleBaseDTO baseDTO); + + List listBySupplierId(String supplierId); + + GoodsRuleItemDTO buildGoodsRuleItemDTO(List ruleItems); + } diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java index 60f64ed3..880c0345 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java @@ -16,18 +16,21 @@ import com.qs.serve.modules.goods.entity.GoodsRuleItem; import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.bo.GoodsRuleBo; import com.qs.serve.modules.goods.entity.dto.GoodsRuleBaseDTO; +import com.qs.serve.modules.goods.entity.dto.GoodsRuleItemDTO; import com.qs.serve.modules.goods.entity.vo.GoodsRuleVo; import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper; import com.qs.serve.modules.goods.mapper.GoodsSpuMapper; import com.qs.serve.modules.goods.service.GoodsRuleItemService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import com.qs.serve.modules.goods.entity.GoodsRule; import com.qs.serve.modules.goods.service.GoodsRuleService; import com.qs.serve.modules.goods.mapper.GoodsRuleMapper; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -182,6 +185,61 @@ public class GoodsRuleServiceImpl extends ServiceImpl return null; } + @Override + public List listBySupplierId(String supplierId) { + BmsSupplier supplier = supplierMapper.selectById(supplierId); + + List goodsRules = this.list(new LambdaQueryWrapper() + .eq(GoodsRule::getSupplierId,supplierId) + ); + List bizRegionIds = supplier.listBizRegionIds(); + bizRegionIds.add("#"); + List saleRegionIds = supplier.listSaleRegionIds(); + saleRegionIds.add("#"); + List bySaleRegion = this.list(new LambdaQueryWrapper() + .eq(GoodsRule::getSaleRegionId,saleRegionIds) + ); + goodsRules.addAll(bySaleRegion); + List byBizRegion = this.list(new LambdaQueryWrapper() + .eq(GoodsRule::getBizRegionId,bizRegionIds) + ); + goodsRules.addAll(byBizRegion); + + List ruleIds = goodsRules.stream().map(GoodsRule::getId).collect(Collectors.toList()); + + if(CollUtil.isNotEmpty(ruleIds)){ + List ruleItems = goodsRuleItemService.list(new LambdaQueryWrapper() + .eq(GoodsRuleItem::getRuleId,ruleIds) + ); + return ruleItems; + } + return null; + } + + @Override + public GoodsRuleItemDTO buildGoodsRuleItemDTO(List ruleItems) { + if (CollUtil.isNotEmpty(ruleItems)){ + GoodsRuleItemDTO dto = new GoodsRuleItemDTO(); + Map> map = ruleItems.stream() + .collect(Collectors.groupingBy(GoodsRuleItem::getTargetType)); + dto.setOnlyCategoryIds(this.getRuleStrings(map.get(1))); + dto.setNotInCategoryIds(this.getRuleStrings(map.get(2))); + dto.setOnlySpuIds(this.getRuleStrings(map.get(3))); + dto.setNotInSpuIds(this.getRuleStrings(map.get(4))); + return dto; + } + return null; + } + + + private List getRuleStrings(List list) { + if(CollUtil.isEmpty(list)){ + return null; + } + return list.stream().map(a->a.getId()+"").collect(Collectors.toList()); + } + + private GoodsRule getGoodsRule(GoodsRuleBaseDTO param) { GoodsRule goodsRule = null; if(param.getSupplierId()!=null){ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostBirLog.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostBirLog.java index a83d8828..a1c2ca8b 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostBirLog.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostBirLog.java @@ -68,19 +68,5 @@ public class TbsCostBirLog implements Serializable { private String updateBy; - public static TbsCostBirLog toNewObject(TbsCostBirLog source){ - TbsCostBirLog costBirLog = new TbsCostBirLog(); - costBirLog.setId(source.getId()); - costBirLog.setCostId(source.getCostId()); - costBirLog.setStatus(source.getStatus()); - costBirLog.setCreateTime(source.getCreateTime()); - costBirLog.setUpdateTime(source.getUpdateTime()); - costBirLog.setTenantId(source.getTenantId()); - costBirLog.setDelFlag(source.getDelFlag()); - costBirLog.setCreateBy(source.getCreateBy()); - costBirLog.setUpdateBy(source.getUpdateBy()); - return costBirLog; - } - } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java index a05359d0..491a4847 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java @@ -75,7 +75,12 @@ public class VtbVerificationApplication { boolean devFlag = false; VtbVerification verification = vtbVerificationService.getById(affairCommit.getCostApplyId()); if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ - Assert.throwEx("费用申请处于未非审批状态!"); + VtbVerificationOperationServiceImpl optSvc = SpringUtils.getBean(VtbVerificationOperationServiceImpl.class); + optSvc.runCompensate(verification.getId()+""); + verification = vtbVerificationService.getById(affairCommit.getCostApplyId()); + if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ + Assert.throwEx("费用申请处于未非审批状态!"); + } } List verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId()); List verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); diff --git a/src/main/resources/mapper/goods/GoodsSpuMapper.xml b/src/main/resources/mapper/goods/GoodsSpuMapper.xml index 7e3551e3..dce51009 100644 --- a/src/main/resources/mapper/goods/GoodsSpuMapper.xml +++ b/src/main/resources/mapper/goods/GoodsSpuMapper.xml @@ -131,6 +131,12 @@ #{selectId} + + and `goods_spu`.`id` not in + + #{selectId} + + and (`goods_spu`.`category_first` in