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 30df6321..845c53b6 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 @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.tbs.common.TbsGoodsType; +import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.hibernate.validator.constraints.Length; @@ -18,6 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; +import java.util.List; /** * 活动成本中心配比项 实体类 @@ -250,6 +252,9 @@ public class TbsActivityCenterGoods implements Serializable { @TableField(exist = false) private Integer activityFinishedFlag; + @TableField(exist = false) + private List queryGoodsGroups; + public TbsBudgetCostItem toBudgetCostItem(){ TbsBudgetCostItem budgetCostItem = CopierUtil.copy(this,new TbsBudgetCostItem()); budgetCostItem.setId(null); 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 88ab6941..74f5c5c5 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 @@ -108,12 +108,24 @@ public class TbsScheduleItemBudget implements Serializable { @TableField(exist = false) private List budgetLogList; + /** + * 预算总额 + * select sum(tbg.amount),tbg.schedule_item_budget_id from tbs_budget_log tbg where tbg.opt_type in(0,2,3) GROUP BY tbg.schedule_item_budget_id limit 1000 + */ @TableField(exist = false) private BigDecimal finalBudgetAmount; + /** + * 已用预算 + * select sum(tbg.amount),tbg.schedule_item_budget_id from tbs_budget_log tbg where tbg.opt_type not in(0,2,3) GROUP BY tbg.schedule_item_budget_id limit 1000 + */ @TableField(exist = false) private BigDecimal usedBudgetAmount; + /** + * 未用预算 + * select sum(tbg.amount),tbg.schedule_item_budget_id from tbs_budget_log tbg where tbg.opt_type GROUP BY tbg.schedule_item_budget_id limit 1000 + */ @TableField(exist = false) private BigDecimal unUsedBudgetAmount; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCenterGoodsGroupDTO.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCenterGoodsGroupDTO.java new file mode 100644 index 00000000..65cad522 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCenterGoodsGroupDTO.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author YenHex + * @since 2023/7/21 + */ +@Data +@AllArgsConstructor +public class TbsCenterGoodsGroupDTO { + + String targetType; + + String targetId; + +} 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 new file mode 100644 index 00000000..5d7f01f8 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.tbs.mapper; + +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; + +/** + * @author YenHex + * @since 2023/7/21 + */ +public interface TbsBudgetMatchMapper { + + /** + * 通过TbsActivityCenterGoods获取匹配条件的预算 + * @param centerGoods + * @return + */ + List getTbsScheduleItemsByCenterGoods(@Param("query") TbsActivityCenterGoods centerGoods); + +} 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 aa6470c7..01f7f8a5 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 @@ -2,13 +2,15 @@ package com.qs.serve.modules.tbs.service; 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; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; +import com.qs.serve.modules.tbs.mapper.TbsBudgetMatchMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; /** * 匹配规则2 @@ -20,15 +22,36 @@ import java.util.List; @AllArgsConstructor public class TbsBudgetMatchApplication { - private TbsActivityCenterGoodsService tbsActivityCenterGoodsService; + private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; + private final TbsBudgetMatchMapper budgetMatchMapper; public TbsBudgetTableVo buildResultTable(Long costApplyId){ List activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId); + Map usableAmountMap = new HashMap<>(); for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { - //通过TbsActivityCenterGoods获取匹配条件的预算 - List scheduleItemBudgetList = getCenterGoodsMatchTbsScheduleItemBudget(centerGoods); - //TODO 拼接Table + // 通过TbsActivityCenterGoods获取匹配条件的预算 + List scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); + // TODO 优先级 + + // 判断金额是否够扣 + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + Long scheduleItemBudgetId = itemBudget.getId(); + BigDecimal usableAmt = usableAmountMap.get(scheduleItemBudgetId); + if(usableAmt==null){ + usableAmt = itemBudget.getUnUsedBudgetAmount(); + } + if(usableAmt.compareTo(centerGoods.getCenterGoodsAmount())<0){ + usableAmt = usableAmt.subtract(centerGoods.getCenterGoodsAmount()); + //扣减后存放map + usableAmountMap.put(scheduleItemBudgetId,usableAmt); + centerGoods.setScheduleItemBudgetId(itemBudget.getId()); + break; + } + } + //TODO 拼接Table,要重新设计显示内容 + //TODO 关联通用数据 + } return null; } @@ -38,9 +61,29 @@ public class TbsBudgetMatchApplication { * @param centerGoods * @return */ - private List getCenterGoodsMatchTbsScheduleItemBudget(TbsActivityCenterGoods centerGoods){ - //TODO - return new ArrayList<>(); + private List centerGoodsMatchTbsScheduleItemBudget(TbsActivityCenterGoods centerGoods){ + //预处理,将商品维度分割 + String[] goodsIds = centerGoods.getTargetLevelPathIds().split("_"); + List groups = new ArrayList<>(); + List goodsIdList = Arrays.asList(goodsIds); + Collections.reverse(goodsIdList); + for (int i = 0; i < goodsIdList.size(); i++) { + if(i==0){ + //brand、category、series、spu、sku + groups.add(new TbsCenterGoodsGroupDTO("sku",goodsIdList.get(i))); + }else if (i==1){ + groups.add(new TbsCenterGoodsGroupDTO("spu",goodsIdList.get(i))); + }else if (i==2){ + groups.add(new TbsCenterGoodsGroupDTO("series",goodsIdList.get(i))); + }else if (i==3){ + groups.add(new TbsCenterGoodsGroupDTO("category",goodsIdList.get(i))); + }else { + groups.add(new TbsCenterGoodsGroupDTO("brand",goodsIdList.get(i))); + break; + } + } + centerGoods.setQueryGoodsGroups(groups); + return budgetMatchMapper.getTbsScheduleItemsByCenterGoods(centerGoods); } } diff --git a/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml new file mode 100644 index 00000000..96b7d921 --- /dev/null +++ b/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + +