Browse Source

优先级排序

v1.0
Yen 2 years ago
parent
commit
4f4608bd18
  1. 76
      src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java
  2. 8
      src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java
  3. 6
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java
  4. 8
      src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

76
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<TbsScheduleItemBudget> sort(List<TbsScheduleItemBudget> list){
List<TbsScheduleItemBudget> listResult = new ArrayList<>();
//有无科目
List<TbsScheduleItemBudget> sortOfSubject = new ArrayList<>();
List<TbsScheduleItemBudget> sortOfNoSubject = new ArrayList<>();
for (TbsScheduleItemBudget itemBudget : list) {
if( itemBudget.getBudgetSubjectId() != null && !itemBudget.getBudgetSubjectId().equals(0L)){
sortOfSubject.add(itemBudget);
}else {
sortOfNoSubject.add(itemBudget);
}
}
List<TbsScheduleItemBudget> list1 = sortOfCondition(sortOfSubject);
List<TbsScheduleItemBudget> list2 = sortOfCondition(sortOfNoSubject);
listResult.addAll(list1);
listResult.addAll(list2);
return listResult;
}
public static List<TbsScheduleItemBudget> sortOfCondition(List<TbsScheduleItemBudget> list){
List<TbsScheduleItemBudget> listResult = new ArrayList<>();
//条件排序
List<TbsScheduleItemBudget> sortOfCondition = new ArrayList<>();
List<TbsScheduleItemBudget> 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;
}
}

8
src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java

@ -129,6 +129,14 @@ public class TbsScheduleItemBudget implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private BigDecimal unUsedBudgetAmount; private BigDecimal unUsedBudgetAmount;
@TableField(exist = false)
private Integer budgetConditionFlag;
@TableField(exist = false)
private Long budgetSubjectId;
@TableField(exist = false)
private String conditionGoodsIds;
public BigDecimal compareTargetExpenseRate(){ public BigDecimal compareTargetExpenseRate(){
if(budgetAmount!=null&&preDispatchAmount!=null&&preDispatchAmount.compareTo(BigDecimal.ZERO)!=0){ if(budgetAmount!=null&&preDispatchAmount!=null&&preDispatchAmount.compareTo(BigDecimal.ZERO)!=0){

6
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tbs.service; 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.TbsActivityCenterGoods;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO;
@ -31,8 +32,8 @@ public class TbsBudgetMatchApplication {
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
// 通过TbsActivityCenterGoods获取匹配条件的预算 // 通过TbsActivityCenterGoods获取匹配条件的预算
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods);
// TODO 优先级 // 优先级
scheduleItemBudgetList = CostSort2WrapperUtil.sort(scheduleItemBudgetList);
// 判断金额是否够扣 // 判断金额是否够扣
for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) {
Long scheduleItemBudgetId = itemBudget.getId(); Long scheduleItemBudgetId = itemBudget.getId();
@ -44,6 +45,7 @@ public class TbsBudgetMatchApplication {
usableAmt = usableAmt.subtract(centerGoods.getCenterGoodsAmount()); usableAmt = usableAmt.subtract(centerGoods.getCenterGoodsAmount());
//扣减后存放map //扣减后存放map
usableAmountMap.put(scheduleItemBudgetId,usableAmt); usableAmountMap.put(scheduleItemBudgetId,usableAmt);
//标记使用那个预算
centerGoods.setScheduleItemBudgetId(itemBudget.getId()); centerGoods.setScheduleItemBudgetId(itemBudget.getId());
break; break;
} }

8
src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

@ -18,6 +18,9 @@
<result property="finalBudgetAmount" column="final_budget_amount"/> <result property="finalBudgetAmount" column="final_budget_amount"/>
<result property="usedBudgetAmount" column="used_budget_amount"/> <result property="usedBudgetAmount" column="used_budget_amount"/>
<result property="unUsedBudgetAmount" column="un_used_budget_amount"/> <result property="unUsedBudgetAmount" column="un_used_budget_amount"/>
<result property="budgetConditionFlag" column="budget_condition_flag"/>
<result property="budgetSubjectId" column="subject_id"/>
<result property="conditionGoodsIds" column="condition_goods_ids"/>
</resultMap> </resultMap>
@ -28,6 +31,9 @@
temp_tbg1.amt un_used_budget_amount, temp_tbg1.amt un_used_budget_amount,
temp_tbg2.amt final_budget_amount, temp_tbg2.amt final_budget_amount,
temp_tbg3.amt used_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 from tbs_schedule_item_budget tsib
left join tbs_budget tb on tsib.budget_id = tb.id 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 tbs_budget_condition tbc on tbc.budget_id = tb.id
@ -48,7 +54,7 @@
AND tsib.start_date &gt;= #{query.actStartDate} AND tsib.start_date &gt;= #{query.actStartDate}
AND tsib.end_date &lt;= #{query.actEndDate} AND tsib.end_date &lt;= #{query.actEndDate}
AND ( AND ( tb.condition_flag =0 or
<foreach collection="query.queryGoodsGroups" item ="item" index="i" open="(" close=")" separator="or"> <foreach collection="query.queryGoodsGroups" item ="item" index="i" open="(" close=")" separator="or">
( tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} ) ( tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} )
</foreach> </foreach>

Loading…
Cancel
Save