diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index 574ed508..b029ac64 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java @@ -657,9 +657,14 @@ public class TbsCostApplyServiceImpl extends ServiceImpl activitySubjects = tbsActivitySubjectService.listByCostApplyId(tbsCostApply.getId()); List subjectList = subjectService.listByIds( activitySubjects.stream().map(TbsActivitySubject::getSubjectId).collect(Collectors.toList())); + List activityChannelList = tbsActivityChannelMapper.selectList(new LambdaQueryWrapper() + .eq(TbsActivityChannel::getCostApplyId,tbsCostApply.getId())); + List activityChannelPointList = tbsActivityChannelPointMapper.selectList(new LambdaQueryWrapper() + .eq(TbsActivityChannelPoint::getCostApplyId,tbsCostApply.getId())); if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(2)){ // 拦截进场费的历史记录和规则 - this.vaildEnterTypeCostHistoryAndRule(tbsCostApply, activityList, subjectList); + this.vaildEnterTypeCostHistoryAndRule(tbsCostApply, activityList, subjectList,activityCenterGoodsList, + activityChannelList,activityChannelPointList); } //模板拦截 boolean isIgnoreSubject = false; @@ -1060,57 +1065,77 @@ public class TbsCostApplyServiceImpl extends ServiceImpl activityList, List subjectList) { + private void vaildEnterTypeCostHistoryAndRule(TbsCostApply tbsCostApply, + List activityList, + List subjectList, + List activityGoodsList, + List activityChannelList, + List activityChannelPointList) { if (activityList.size()>1){ Assert.throwEx("进场费类型只能有一个活动"); } if(subjectList.stream().anyMatch(s->s.getSlottingFlag().equals(0))){ Assert.throwEx("当前申请含非进场费类型科目"); } - // 判断是否已有历史进场费 + // 查找历史有效的进场费费用 LambdaQueryWrapper costApplyLqw = new LambdaQueryWrapper<>(); costApplyLqw.eq(TbsCostApply::getSupplierId, tbsCostApply.getSupplierId()); costApplyLqw.eq(TbsCostApply::getContractFlag,2); - // 生效的费用申请 costApplyLqw.in(TbsCostApply::getChargeState,1,2,3,7); costApplyLqw.select(TbsCostApply::getId); List costApplyList = tbsCostApplyMapper.selectList(costApplyLqw); - List enterIds = costApplyList.stream().map(TbsCostApply::getId).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(enterIds)){ - Set pointIds = new HashSet<>(); - Set channelIds = new HashSet<>(); - List activityChannelList = tbsActivityChannelMapper.selectList( - new LambdaQueryWrapper() - .select(TbsActivityChannel::getChannelId) - .in(TbsActivityChannel::getCostApplyId,enterIds)); - for (TbsActivityChannel channel : activityChannelList) { - channelIds.add(channel.getChannelId()); - } - List activityChannelPointList = tbsActivityChannelPointMapper.selectList( + List hisCostIds = costApplyList.stream().map(TbsCostApply::getId).collect(Collectors.toList()); + + // 当前的渠道和网点id + Set channelIds = activityChannelList.stream().map(TbsActivityChannel::getChannelId).collect(Collectors.toSet()); + Set pointIds = activityChannelPointList.stream().map(TbsActivityChannelPoint::getPointId).collect(Collectors.toSet()); + + // 通过历史记录查询有雷同网点和渠道的费用id + Set sameChannelCostIds = new HashSet<>(); + if(CollUtil.isNotEmpty(hisCostIds)){ + if (CollUtil.isNotEmpty(pointIds)){ + List selectHisPoint = tbsActivityChannelPointMapper.selectList( new LambdaQueryWrapper() - .select(TbsActivityChannelPoint::getPointId, - TbsActivityChannelPoint::getChannelId) - .in(TbsActivityChannelPoint::getCostApplyId,enterIds)); - for (TbsActivityChannelPoint point : activityChannelPointList) { - pointIds.add(point.getPointId()); - } - if(CollUtil.isNotEmpty(channelIds)){ - long count = tbsActivityChannelMapper.selectCount(new LambdaQueryWrapper() - .in(TbsActivityChannel::getChannelId,channelIds) - .eq(TbsActivityChannel::getCostApplyId, tbsCostApply.getId()) + .select(TbsActivityChannelPoint::getCostApplyId) + .in(TbsActivityChannelPoint::getCostApplyId,hisCostIds) + .in(TbsActivityChannelPoint::getPointId,pointIds) ); - if(count>0){ - Assert.throwEx("当前申请含网点,且已有历史进场费申请"); + Set enterIds = selectHisPoint.stream().map(TbsActivityChannelPoint::getCostApplyId).collect(Collectors.toSet()); + for (Long enterId : enterIds) { + sameChannelCostIds.add(enterId); } } - if(CollUtil.isNotEmpty(pointIds)){ - long count = tbsActivityChannelPointMapper.selectCount(new LambdaQueryWrapper() - .in(TbsActivityChannelPoint::getPointId,pointIds) - .eq(TbsActivityChannelPoint::getCostApplyId, tbsCostApply.getId()) + if (CollUtil.isNotEmpty(channelIds)){ + List selectHisChannel = tbsActivityChannelMapper.selectList( + new LambdaQueryWrapper() + .select(TbsActivityChannel::getCostApplyId) + .in(TbsActivityChannel::getCostApplyId,hisCostIds) + .in(TbsActivityChannel::getChannelId,channelIds) ); - if(count>0){ - Assert.throwEx("当前申请含网点,且已有历史进场费申请"); + Set enterIds = selectHisChannel.stream().map(TbsActivityChannel::getCostApplyId).collect(Collectors.toSet()); + for (Long enterId : enterIds) { + sameChannelCostIds.add(enterId); + } + } + } + + // 有雷同网点的费用ids判断商品是否雷同 + if (CollUtil.isNotEmpty(sameChannelCostIds)){ + Set goodsIds = activityGoodsList.stream().map(TbsActivityGoods::getTargetId).collect(Collectors.toSet()); + List selectHisGoods = tbsActivityGoodsService.list( + new LambdaQueryWrapper() + .select(TbsActivityGoods::getCostApplyId) + .in(TbsActivityGoods::getCostApplyId,sameChannelCostIds) + .in(TbsActivityGoods::getTargetId,goodsIds) + ); + for (TbsActivityGoods goods : activityGoodsList) { + for (TbsActivityGoods hisGoods : selectHisGoods) { + if (goods.getTargetId().equals(hisGoods.getTargetId()) + &&goods.getTargetType().equals(hisGoods.getTargetType())){ + Assert.throwEx("历史含相同渠道或网点的进场费活动商品:"+goods.getTargetName()); + } } } }