diff --git a/src/main/java/com/qs/serve/common/model/AmountDTO.java b/src/main/java/com/qs/serve/common/model/AmountDTO.java new file mode 100644 index 00000000..b663b896 --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/AmountDTO.java @@ -0,0 +1,18 @@ +package com.qs.serve.common.model; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/7/31 + */ +@Data +public class AmountDTO { + + private String id; + + private BigDecimal amount; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index 845c53b6..5dc914d7 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -255,6 +255,11 @@ public class TbsActivityCenterGoods implements Serializable { @TableField(exist = false) private List queryGoodsGroups; + /** */ + @JsonIgnore + @TableField(exist = false) + private List match2ScheduleItemBudgetList ; + public TbsBudgetCostItem toBudgetCostItem(){ TbsBudgetCostItem budgetCostItem = CopierUtil.copy(this,new TbsBudgetCostItem()); budgetCostItem.setId(null); diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java index 5d7f01f8..f7e26433 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java @@ -1,10 +1,12 @@ package com.qs.serve.modules.tbs.mapper; +import com.qs.serve.common.model.AmountDTO; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; /** * @author YenHex @@ -19,4 +21,11 @@ public interface TbsBudgetMatchMapper { */ List getTbsScheduleItemsByCenterGoods(@Param("query") TbsActivityCenterGoods centerGoods); + + List getBudgetUsedAmount(@Param("ids") Set ids); + + List getBudgetNotUsedAmount(@Param("ids") Set ids); + + List getBudgetFinalUsedAmount(@Param("ids") Set ids); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java index 4a8755f4..f38a3156 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java @@ -1,5 +1,7 @@ package com.qs.serve.modules.tbs.service; +import com.qs.serve.common.model.AmountDTO; +import com.qs.serve.common.util.CollectionUtil; 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; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * 匹配规则2 @@ -42,11 +45,24 @@ public class TbsBudgetMatchApplication { Map usableAmountMap = new HashMap<>(); // 提取命中的预算 Map matchItemBudgetsMap = new HashMap<>(); + Set scheduleItemBudgetIds = new HashSet<>(); for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { // 通过TbsActivityCenterGoods获取匹配条件的预算 List scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); // 优先级 scheduleItemBudgetList = CostSort2WrapperUtil.sort(scheduleItemBudgetList); + if(scheduleItemBudgetList.size()>0){ + List sids = scheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); + scheduleItemBudgetIds.addAll(sids); + } + centerGoods.setMatch2ScheduleItemBudgetList(scheduleItemBudgetList); + } + //加载金额统计 + this.batchInitScheduleAmount(activityCenterGoodsList, scheduleItemBudgetIds); + // 金额匹配 + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + // 通过TbsActivityCenterGoods获取匹配条件的预算 + List scheduleItemBudgetList = centerGoods.getMatch2ScheduleItemBudgetList(); // 判断金额是否够扣 for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { Long scheduleItemBudgetId = itemBudget.getId(); @@ -65,6 +81,7 @@ public class TbsBudgetMatchApplication { } } } + TbsBudgetTableResultVo resultVo = new TbsBudgetTableResultVo(); resultVo.setActivityCenterGoodsList(activityCenterGoodsList); resultVo.setMatchItemBudgetsMap(matchItemBudgetsMap); @@ -76,6 +93,45 @@ public class TbsBudgetMatchApplication { return resultVo; } + /** + * 初始化金额 + * @param activityCenterGoodsList + * @param scheduleItemBudgetIds + */ + private void batchInitScheduleAmount(List activityCenterGoodsList, Set scheduleItemBudgetIds) { + if(scheduleItemBudgetIds.size()>0){ + List notUsedAmountList = budgetMatchMapper.getBudgetNotUsedAmount(scheduleItemBudgetIds); + List usedAmountList = budgetMatchMapper.getBudgetUsedAmount(scheduleItemBudgetIds); + List finalAmountList = budgetMatchMapper.getBudgetFinalUsedAmount(scheduleItemBudgetIds); + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + List scheduleItemBudgetList = centerGoods.getMatch2ScheduleItemBudgetList(); + if(CollectionUtil.isNotEmpty(scheduleItemBudgetList)){ + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + String itemBudgetId = itemBudget.getId().toString(); + for (AmountDTO dto : notUsedAmountList) { + if(dto.getId().equals(itemBudgetId)){ + itemBudget.setUnUsedBudgetAmount(dto.getAmount()); + break; + } + } + for (AmountDTO dto : usedAmountList) { + if(dto.getId().equals(itemBudgetId)){ + itemBudget.setUsedBudgetAmount(dto.getAmount()); + break; + } + } + for (AmountDTO dto : finalAmountList) { + if(dto.getId().equals(itemBudgetId)){ + itemBudget.setFinalBudgetAmount(dto.getAmount()); + break; + } + } + } + } + } + } + } + @NotNull private TbsBudgetTableVo buildTbsBudgetTableVo(Map activityMap, List activityCenterGoodsList, Map matchItemBudgetsMap) { List topTheadHeaderList = new ArrayList<>(); diff --git a/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml index b874f80f..b6519534 100644 --- a/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml +++ b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml @@ -30,9 +30,9 @@ resultType="com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget"> select tsib.*, - temp_tbg1.amt un_used_budget_amount, - temp_tbg2.amt final_budget_amount, - temp_tbg3.amt used_budget_amount, +-- temp_tbg1.amt un_used_budget_amount, +-- temp_tbg2.amt final_budget_amount, +-- temp_tbg3.amt used_budget_amount, tb.condition_flag budget_condition_flag, tb.subject_id subject_id, tb.budget_code budget_name, @@ -41,15 +41,15 @@ from tbs_schedule_item_budget tsib left join tbs_budget tb on tsib.budget_id = tb.id left join tbs_budget_condition tbc on tbc.budget_id = tb.id - left join - (select sum(tbg.amount) amt,tbg.schedule_item_budget_id from tbs_budget_log tbg where tbg.del_flag = 0 GROUP BY tbg.schedule_item_budget_id) temp_tbg1 - on temp_tbg1.schedule_item_budget_id = tsib.id - left join - (select sum(tbg2.amount) amt,tbg2.schedule_item_budget_id from tbs_budget_log tbg2 where tbg2.opt_type in(0,2,3) and tbg2.del_flag = 0 GROUP BY tbg2.schedule_item_budget_id) temp_tbg2 - on temp_tbg2.schedule_item_budget_id = tsib.id - left join - (select sum(tbg3.amount) amt,tbg3.schedule_item_budget_id from tbs_budget_log tbg3 where tbg3.opt_type not in(0,2,3) and tbg3.del_flag = 0 GROUP BY tbg3.schedule_item_budget_id) temp_tbg3 - on temp_tbg3.schedule_item_budget_id = tsib.id +-- left join +-- (select sum(tbg.amount) amt,tbg.schedule_item_budget_id from tbs_budget_log tbg where tbg.del_flag = 0 GROUP BY tbg.schedule_item_budget_id) temp_tbg1 +-- on temp_tbg1.schedule_item_budget_id = tsib.id +-- left join +-- (select sum(tbg2.amount) amt,tbg2.schedule_item_budget_id from tbs_budget_log tbg2 where tbg2.opt_type in(0,2,3) and tbg2.del_flag = 0 GROUP BY tbg2.schedule_item_budget_id) temp_tbg2 +-- on temp_tbg2.schedule_item_budget_id = tsib.id +-- left join +-- (select sum(tbg3.amount) amt,tbg3.schedule_item_budget_id from tbs_budget_log tbg3 where tbg3.opt_type not in(0,2,3) and tbg3.del_flag = 0 GROUP BY tbg3.schedule_item_budget_id) temp_tbg3 +-- on temp_tbg3.schedule_item_budget_id = tsib.id where 1=1 AND (tb.subject_id = 0 OR tb.subject_id = #{query.subjectId} ) AND tb.center_id = #{query.centerId} @@ -64,4 +64,40 @@ ) + + + + + + +