Browse Source

Merge remote-tracking branch 'origin/v1.0' into v1.0

v1.0
15989082884@163.com 2 years ago
parent
commit
7e4756a56d
  1. 5
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java
  2. 12
      src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java
  3. 18
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCenterGoodsGroupDTO.java
  4. 22
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java
  5. 61
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java
  6. 56
      src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

5
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<TbsCenterGoodsGroupDTO> queryGoodsGroups;
public TbsBudgetCostItem toBudgetCostItem(){
TbsBudgetCostItem budgetCostItem = CopierUtil.copy(this,new TbsBudgetCostItem());
budgetCostItem.setId(null);

12
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<TbsBudgetLog> 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;

18
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;
}

22
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<TbsScheduleItemBudget> getTbsScheduleItemsByCenterGoods(@Param("query") TbsActivityCenterGoods centerGoods);
}

61
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<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId);
Map<Long, BigDecimal> usableAmountMap = new HashMap<>();
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
//通过TbsActivityCenterGoods获取匹配条件的预算
List<TbsScheduleItemBudget> scheduleItemBudgetList = getCenterGoodsMatchTbsScheduleItemBudget(centerGoods);
//TODO 拼接Table
// 通过TbsActivityCenterGoods获取匹配条件的预算
List<TbsScheduleItemBudget> 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<TbsScheduleItemBudget> getCenterGoodsMatchTbsScheduleItemBudget(TbsActivityCenterGoods centerGoods){
//TODO
return new ArrayList<>();
private List<TbsScheduleItemBudget> centerGoodsMatchTbsScheduleItemBudget(TbsActivityCenterGoods centerGoods){
//预处理,将商品维度分割
String[] goodsIds = centerGoods.getTargetLevelPathIds().split("_");
List<TbsCenterGoodsGroupDTO> groups = new ArrayList<>();
List<String> 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);
}
}

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

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qs.serve.modules.tbs.mapper.TbsBudgetMatchMapper">
<resultMap id="tbsScheduleItemBudgetMap" type="com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget" >
<result property="id" column="id"/>
<result property="scheduleId" column="schedule_id"/>
<result property="scheduleItemId" column="schedule_item_id"/>
<result property="itemName" column="item_name"/>
<result property="startDate" column="start_date"/>
<result property="endDate" column="end_date"/>
<result property="budgetId" column="budget_id"/>
<result property="budgetAmount" column="budget_amount"/>
<result property="preDispatchAmount" column="pre_dispatch_amount"/>
<result property="remark" column="remark"/>
<result property="finalBudgetAmount" column="final_budget_amount"/>
<result property="usedBudgetAmount" column="used_budget_amount"/>
<result property="unUsedBudgetAmount" column="un_used_budget_amount"/>
</resultMap>
<select id="getTbsScheduleItemsByCenterGoods"
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,
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.opt_type 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) 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) 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}
AND tb.center_type = #{query.centerType}
AND tb.budget_state = 1
AND tsib.start_date &gt;= #{query.actStartDate}
AND tsib.end_date &lt;= #{query.actEndDate}
AND (
<foreach collection="query.queryGoodsGroups" item ="item" index="i" open="(" close=")" separator="or">
( tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} )
</foreach>
)
</select>
</mapper>
Loading…
Cancel
Save