From 4f4608bd1834ae0efeba2137186c97d4f5379879 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 25 Jul 2023 16:28:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/common/util/CostSort2WrapperUtil.java | 76 +++++++++++++++++++ .../tbs/entity/TbsScheduleItemBudget.java | 8 ++ .../service/TbsBudgetMatchApplication.java | 6 +- .../mapper/tbs/TbsBudgetMatchMapper.xml | 8 +- 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java 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 new file mode 100644 index 00000000..9a67855c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java @@ -0,0 +1,76 @@ +package com.qs.serve.modules.tbs.common.util; + +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.tbs.common.dto.CostSortWrapper; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; +import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 用于排序 + * @author YenHex + * @since 2023/5/18 + */ +@Slf4j +@Data +public class CostSort2WrapperUtil { + + public static List sort(List list){ + List listResult = new ArrayList<>(); + //有无科目 + List sortOfSubject = new ArrayList<>(); + List sortOfNoSubject = new ArrayList<>(); + for (TbsScheduleItemBudget itemBudget : list) { + if( itemBudget.getBudgetSubjectId() != null && !itemBudget.getBudgetSubjectId().equals(0L)){ + sortOfSubject.add(itemBudget); + }else { + sortOfNoSubject.add(itemBudget); + } + } + List list1 = sortOfCondition(sortOfSubject); + List list2 = sortOfCondition(sortOfNoSubject); + listResult.addAll(list1); + listResult.addAll(list2); + return listResult; + } + + public static List sortOfCondition(List list){ + List listResult = new ArrayList<>(); + //条件排序 + List sortOfCondition = new ArrayList<>(); + List sortOfNoCondition = new ArrayList<>(); + for (TbsScheduleItemBudget scheduleItemBudget : list) { + if(scheduleItemBudget.getBudgetConditionFlag().equals(1)){ + sortOfCondition.add(scheduleItemBudget); + }else { + sortOfNoCondition.add(scheduleItemBudget); + } + } + //商品排序 + Collections.sort(list, (o1, o2) -> { + int len1 = o1.getConditionGoodsIds().split("_").length; + int len2 = o2.getConditionGoodsIds().split("_").length; + return len2 - len1; + }); + + //时间区间内,区间长度取最短 + 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); + }); + listResult.addAll(sortOfNoCondition); + listResult.addAll(sortOfCondition); + return listResult; + } + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java index 74f5c5c5..05051eeb 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java @@ -129,6 +129,14 @@ public class TbsScheduleItemBudget implements Serializable { @TableField(exist = false) private BigDecimal unUsedBudgetAmount; + @TableField(exist = false) + private Integer budgetConditionFlag; + + @TableField(exist = false) + private Long budgetSubjectId; + + @TableField(exist = false) + private String conditionGoodsIds; public BigDecimal compareTargetExpenseRate(){ if(budgetAmount!=null&&preDispatchAmount!=null&&preDispatchAmount.compareTo(BigDecimal.ZERO)!=0){ 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 01f7f8a5..2f8df5fc 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,6 @@ package com.qs.serve.modules.tbs.service; +import com.qs.serve.modules.tbs.common.util.CostSort2WrapperUtil; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; @@ -31,8 +32,8 @@ public class TbsBudgetMatchApplication { for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { // 通过TbsActivityCenterGoods获取匹配条件的预算 List scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); - // TODO 优先级 - + // 优先级 + scheduleItemBudgetList = CostSort2WrapperUtil.sort(scheduleItemBudgetList); // 判断金额是否够扣 for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { Long scheduleItemBudgetId = itemBudget.getId(); @@ -44,6 +45,7 @@ public class TbsBudgetMatchApplication { usableAmt = usableAmt.subtract(centerGoods.getCenterGoodsAmount()); //扣减后存放map usableAmountMap.put(scheduleItemBudgetId,usableAmt); + //标记使用那个预算 centerGoods.setScheduleItemBudgetId(itemBudget.getId()); break; } diff --git a/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml index 724d1a14..fcddcb9b 100644 --- a/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml +++ b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml @@ -18,6 +18,9 @@ + + + @@ -28,6 +31,9 @@ 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, + tbc.target_level_path_ids condition_goods_ids 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 @@ -48,7 +54,7 @@ AND tsib.start_date >= #{query.actStartDate} AND tsib.end_date <= #{query.actEndDate} - AND ( + AND ( tb.condition_flag =0 or ( tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} )