|
|
@ -1,5 +1,6 @@ |
|
|
|
package com.qs.serve.modules.tbs.service; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.qs.serve.common.model.AmountDTO; |
|
|
|
import com.qs.serve.common.util.CollectionUtil; |
|
|
|
import com.qs.serve.common.util.StringUtils; |
|
|
@ -7,10 +8,12 @@ import com.qs.serve.modules.tbs.common.TbsGoodsType; |
|
|
|
import com.qs.serve.modules.tbs.common.util.CostSort2WrapperUtil; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsActivity; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsBudget; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; |
|
|
|
import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; |
|
|
|
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableResultVo; |
|
|
|
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; |
|
|
|
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; |
|
|
|
import com.qs.serve.modules.tbs.mapper.TbsBudgetMatchMapper; |
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -34,13 +37,23 @@ public class TbsBudgetMatchApplication { |
|
|
|
private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; |
|
|
|
private final TbsActivityService activityService; |
|
|
|
private final TbsBudgetMatchMapper budgetMatchMapper; |
|
|
|
private final TbsBudgetMapper budgetMapper; |
|
|
|
|
|
|
|
public TbsBudgetTableResultVo getMatchResult(Long costApplyId,boolean buildTable){ |
|
|
|
|
|
|
|
List<TbsActivity> activityList = activityService.listByCostApplyId(costApplyId); |
|
|
|
|
|
|
|
//list转map,减少循环代码
|
|
|
|
Map<Long,TbsActivity> activityMap = new HashMap<>(activityList.size()); |
|
|
|
//模板过滤-活动指定预算
|
|
|
|
Map<Long,List<Long>> activityBudgetIdsMap = new HashMap<>(activityList.size()); |
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
activityMap.put(activity.getId(),activity); |
|
|
|
if(StringUtils.hasText(activity.getTemplateBudgetIds())){ |
|
|
|
List<Long> budgetIdsList = Arrays.stream(activity.getTemplateBudgetIds().split(",")).map(Long::parseLong) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
activityBudgetIdsMap.put(activity.getId(),budgetIdsList); |
|
|
|
} |
|
|
|
} |
|
|
|
List<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId); |
|
|
|
// 记录使用金额
|
|
|
@ -48,6 +61,8 @@ public class TbsBudgetMatchApplication { |
|
|
|
// 提取命中的预算
|
|
|
|
Map<Long,TbsScheduleItemBudget> matchItemBudgetsMap = new HashMap<>(); |
|
|
|
Set<Long> scheduleItemBudgetIds = new HashSet<>(); |
|
|
|
//所有的预算
|
|
|
|
Set<Long> allBudgetIds = new HashSet<>(); |
|
|
|
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { |
|
|
|
// 通过TbsActivityCenterGoods获取匹配条件的预算
|
|
|
|
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); |
|
|
@ -56,17 +71,72 @@ public class TbsBudgetMatchApplication { |
|
|
|
if(scheduleItemBudgetList.size()>0){ |
|
|
|
List<Long> sids = scheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); |
|
|
|
scheduleItemBudgetIds.addAll(sids); |
|
|
|
List<Long> budgetIds = scheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getBudgetId).collect(Collectors.toList()); |
|
|
|
allBudgetIds.addAll(budgetIds); |
|
|
|
} |
|
|
|
centerGoods.setMatch2ScheduleItemBudgetList(scheduleItemBudgetList); |
|
|
|
} |
|
|
|
//加载金额统计
|
|
|
|
this.batchInitScheduleAmount(activityCenterGoodsList, scheduleItemBudgetIds,costApplyId); |
|
|
|
|
|
|
|
//加载所有预算
|
|
|
|
allBudgetIds.add(0L); |
|
|
|
// LambdaQueryWrapper<TbsBudget> budgetTemplateFlagLqw = new LambdaQueryWrapper<>();
|
|
|
|
// budgetTemplateFlagLqw.eq(TbsBudget::getTemplateFlag,1);
|
|
|
|
// budgetTemplateFlagLqw.in(TbsBudget::getId,allBudgetIds);
|
|
|
|
// budgetTemplateFlagLqw.apply(" length(template_ids)>0 ");
|
|
|
|
// List<TbsBudget> budgetTemplateFlagList = budgetMapper.selectList(budgetTemplateFlagLqw);
|
|
|
|
List<TbsBudget> allBudgetList = budgetMapper.selectBatchIds(allBudgetIds); |
|
|
|
Map<Long,TbsBudget> allBudgetMap = new HashMap<>(); |
|
|
|
for (TbsBudget budget : allBudgetList) { |
|
|
|
allBudgetMap.put(budget.getId(),budget); |
|
|
|
} |
|
|
|
|
|
|
|
// 金额匹配
|
|
|
|
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { |
|
|
|
// 通过TbsActivityCenterGoods获取匹配条件的预算
|
|
|
|
List<TbsScheduleItemBudget> scheduleItemBudgetList = centerGoods.getMatch2ScheduleItemBudgetList(); |
|
|
|
// 判断金额是否够扣
|
|
|
|
for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { |
|
|
|
|
|
|
|
|
|
|
|
//跳过活动模板指定的预算
|
|
|
|
List<Long> matchActBudgetIds = activityBudgetIdsMap.get(centerGoods.getActivityId()); |
|
|
|
boolean notMatch = false; |
|
|
|
if(CollectionUtil.isNotEmpty(matchActBudgetIds)){ |
|
|
|
notMatch = true; |
|
|
|
for (Long budgetId : matchActBudgetIds) { |
|
|
|
if(itemBudget.getBudgetId().equals(budgetId)){ |
|
|
|
notMatch = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(!notMatch){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
//跳过预算指定的模板
|
|
|
|
TbsActivity activity = activityMap.get(centerGoods.getActivityId()); |
|
|
|
String templateId = activity.getTenantId(); |
|
|
|
TbsBudget budget = allBudgetMap.get(itemBudget.getBudgetId()); |
|
|
|
if (budget.getTemplateFlag().equals(1)) { |
|
|
|
if(templateId==null||budget.getTemplateIds()==null||budget.getTemplateIds().length<1){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
boolean matchTemId = false; |
|
|
|
for (String budgetTemplateId : budget.getTemplateIds()) { |
|
|
|
if(templateId.equals(budgetTemplateId)){ |
|
|
|
matchTemId = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if(!matchTemId){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//开始匹配主要逻辑
|
|
|
|
Long scheduleItemBudgetId = itemBudget.getId(); |
|
|
|
BigDecimal usableAmt = usableAmountMap.get(scheduleItemBudgetId); |
|
|
|
if(usableAmt==null){ |
|
|
|