From ca1a56545dc599b8c8da003b6791333022199c5f Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 31 Jul 2023 17:28:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8B=BC=E6=8E=A5=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E8=A7=84=E5=88=99=E9=A2=84=E8=A7=881=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/common/util/CostSort2WrapperUtil.java | 33 ++++++++++++++----- .../controller/TbsCostApplyController.java | 2 ++ .../service/TbsBudgetMatchApplication.java | 2 +- .../service/impl/TbsCostApplyServiceImpl.java | 32 ++++++++++++++---- 4 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java b/src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java index 9a67855c..e5acfd9d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java +++ b/src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java @@ -43,6 +43,9 @@ public class CostSort2WrapperUtil { } public static List sortOfCondition(List list){ + if(list.size()==0){ + return new ArrayList<>(); + } List listResult = new ArrayList<>(); //条件排序 List sortOfCondition = new ArrayList<>(); @@ -54,23 +57,35 @@ public class CostSort2WrapperUtil { sortOfNoCondition.add(scheduleItemBudget); } } - //商品排序 + sortProductAndTime(sortOfNoCondition); + sortProductAndTime(sortOfCondition); + listResult.addAll(sortOfNoCondition); + listResult.addAll(sortOfCondition); + return listResult; + } + + private static void sortProductAndTime(List list) { + //时间区间内,区间长度取最短 Collections.sort(list, (o1, o2) -> { - int len1 = o1.getConditionGoodsIds().split("_").length; - int len2 = o2.getConditionGoodsIds().split("_").length; - return len2 - len1; + Integer day1 = o1.getEndDate().getDayOfYear(); + Integer day2 = o2.getEndDate().getDayOfYear(); + return day2-day1; }); - //时间区间内,区间长度取最短 Collections.sort(list, (o1, o2) -> { Long day1 = Duration.between(o1.getStartDate(), o1.getEndDate()).toDays(); Long day2 = Duration.between(o2.getStartDate(), o2.getEndDate()).toDays(); log.debug("时间区间相同,day1:{} , day2:{}",day1,day2); - return (int) (day1-day2); + return (int) (day2-day1); + }); + + //商品排序 + Collections.sort(list, (o1, o2) -> { + int len1 = o1.getConditionGoodsIds().split("_").length; + int len2 = o2.getConditionGoodsIds().split("_").length; + log.debug("时间区间相同,len1:{} , len2:{}",len1,len2); + return len2 - len1; }); - listResult.addAll(sortOfNoCondition); - listResult.addAll(sortOfCondition); - return listResult; } } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 19b2f5d2..6c7839b5 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -273,6 +273,7 @@ public class TbsCostApplyController { * @param id * @return */ + @LimitSubmit @PostMapping("/settingWithChange/{id}") @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.INSERT) @Transactional(rollbackFor = Exception.class) @@ -285,6 +286,7 @@ public class TbsCostApplyController { * @param id * @return */ + @LimitSubmit @PostMapping("/cancelWithChange/{id}") @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.INSERT) @Transactional(rollbackFor = Exception.class) 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 727caaa3..4a8755f4 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 @@ -123,7 +123,7 @@ public class TbsBudgetMatchApplication { leftTheadHeaderList.add(theadHeader); TbsBudgetTableVo.TableValue tableValue = new TbsBudgetTableVo.TableValue(); - tableValue.setTopId(centerGoods.getScheduleItemBudgetId()+""); + tableValue.setTopId(centerGoods.getScheduleItemBudgetId()==null?"0":centerGoods.getScheduleItemBudgetId().toString()); tableValue.setLeftId(centerGoods.getId()+""); tableValue.setValue(centerGoods.getCenterGoodsAmount()); tableValueList.add(tableValue); 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 251b0358..ad892b43 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 @@ -13,8 +13,11 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.*; import com.qs.serve.common.util.model.DateFormatString; import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; +import com.qs.serve.modules.bir.entity.BirBaseActivity; import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; import com.qs.serve.modules.bir.entity.vo.YtdQtdToOAVo; +import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; +import com.qs.serve.modules.bir.mapper.BirBaseActivityMapper; import com.qs.serve.modules.bir.service.BirCenterRateService; import com.qs.serve.modules.bir.service.BirRoiRateService; import com.qs.serve.modules.bms.entity.BmsRegion; @@ -103,14 +106,18 @@ public class TbsCostApplyServiceImpl extends ServiceImpl rmLogLqw = new LambdaQueryWrapper<>(); rmLogLqw.eq(TbsBudgetLog::getCostApplyId,id); budgetLogService.remove(rmLogLqw); + //删除BIR + LambdaQueryWrapper birActivityCenterGoodsLqw = new LambdaQueryWrapper<>(); + birActivityCenterGoodsLqw.eq(BirActivityCenterGoods::getCostApplyId,id); + birActivityCenterGoodsMapper.delete(birActivityCenterGoodsLqw); + + LambdaQueryWrapper birBaseActivityLqw = new LambdaQueryWrapper<>(); + birBaseActivityLqw.eq(BirBaseActivity::getCostApplyId,id); + birBaseActivityMapper.delete(birBaseActivityLqw); + + //命中预算 + budgetCostItemService.removeByCostApplyId(id); + } @Override @@ -430,12 +449,13 @@ public class TbsCostApplyServiceImpl extends ServiceImpl 0){ - tbsCostUnItemService.saveBatch(costUnItems); - } - budgetCostItemService.saveBatch(allBudgetItem); } + + //保存 + if(costUnItems.size() > 0){ + tbsCostUnItemService.saveBatch(costUnItems); + } + budgetCostItemService.saveBatch(allBudgetItem); } if(tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){ From 287e7b85f4a4f4a0c7c9421a5c91be33cea6fc3b Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 31 Jul 2023 17:56:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8C=B9=E9=85=8D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qs/serve/common/model/AmountDTO.java | 18 ++++++ .../tbs/entity/TbsActivityCenterGoods.java | 5 ++ .../tbs/mapper/TbsBudgetMatchMapper.java | 9 +++ .../service/TbsBudgetMatchApplication.java | 56 +++++++++++++++++ .../mapper/tbs/TbsBudgetMatchMapper.xml | 60 +++++++++++++++---- 5 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/qs/serve/common/model/AmountDTO.java 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 @@ ) + + + + + + +