Browse Source

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

v1.0
15989082884@163.com 2 years ago
parent
commit
5b42ee3adf
  1. 18
      src/main/java/com/qs/serve/common/model/AmountDTO.java
  2. 33
      src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java
  3. 2
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  4. 5
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java
  5. 9
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMatchMapper.java
  6. 58
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java
  7. 32
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  8. 60
      src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

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

33
src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java

@ -43,6 +43,9 @@ public class CostSort2WrapperUtil {
}
public static List<TbsScheduleItemBudget> sortOfCondition(List<TbsScheduleItemBudget> list){
if(list.size()==0){
return new ArrayList<>();
}
List<TbsScheduleItemBudget> listResult = new ArrayList<>();
//条件排序
List<TbsScheduleItemBudget> 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<TbsScheduleItemBudget> 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;
}
}

2
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)

5
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<TbsCenterGoodsGroupDTO> queryGoodsGroups;
/** */
@JsonIgnore
@TableField(exist = false)
private List<TbsScheduleItemBudget> match2ScheduleItemBudgetList ;
public TbsBudgetCostItem toBudgetCostItem(){
TbsBudgetCostItem budgetCostItem = CopierUtil.copy(this,new TbsBudgetCostItem());
budgetCostItem.setId(null);

9
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<TbsScheduleItemBudget> getTbsScheduleItemsByCenterGoods(@Param("query") TbsActivityCenterGoods centerGoods);
List<AmountDTO> getBudgetUsedAmount(@Param("ids") Set<Long> ids);
List<AmountDTO> getBudgetNotUsedAmount(@Param("ids") Set<Long> ids);
List<AmountDTO> getBudgetFinalUsedAmount(@Param("ids") Set<Long> ids);
}

58
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<Long, BigDecimal> usableAmountMap = new HashMap<>();
// 提取命中的预算
Map<Long,TbsScheduleItemBudget> matchItemBudgetsMap = new HashMap<>();
Set<Long> scheduleItemBudgetIds = new HashSet<>();
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
// 通过TbsActivityCenterGoods获取匹配条件的预算
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods);
// 优先级
scheduleItemBudgetList = CostSort2WrapperUtil.sort(scheduleItemBudgetList);
if(scheduleItemBudgetList.size()>0){
List<Long> 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<TbsScheduleItemBudget> 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<TbsActivityCenterGoods> activityCenterGoodsList, Set<Long> scheduleItemBudgetIds) {
if(scheduleItemBudgetIds.size()>0){
List<AmountDTO> notUsedAmountList = budgetMatchMapper.getBudgetNotUsedAmount(scheduleItemBudgetIds);
List<AmountDTO> usedAmountList = budgetMatchMapper.getBudgetUsedAmount(scheduleItemBudgetIds);
List<AmountDTO> finalAmountList = budgetMatchMapper.getBudgetFinalUsedAmount(scheduleItemBudgetIds);
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
List<TbsScheduleItemBudget> 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<Long, TbsActivity> activityMap, List<TbsActivityCenterGoods> activityCenterGoodsList, Map<Long, TbsScheduleItemBudget> matchItemBudgetsMap) {
List<TbsBudgetTableVo.TopTheadHeader> topTheadHeaderList = new ArrayList<>();
@ -123,7 +179,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);

32
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<TbsCostApplyMapper,TbsC
private TbsActivityChannelMapper activityChannelMapper;
private TbsActivityChannelPointMapper activityChannelPointMapper;
private ProjectProperties projectProperties;
private BirRoiRateService birRoiRateService;
private TbsCostPercentMapper tbsCostPercentMapper;
private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private final ErpDispatchDataMapper dispatchDataMapper;
private TbsCostContractMapper costContractMapper;
private VtbVerificationMapper verificationMapper;
private SysAttachService sysAttachService;
private BirRoiRateService birRoiRateService;
private BirCenterRateService centerRateService;
private BirActivityCenterGoodsMapper birActivityCenterGoodsMapper;
private BirBaseActivityMapper birBaseActivityMapper;
private TbsBudgetMatchApplication tbsBudgetMatchApplication;
@ -141,6 +148,18 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
LambdaQueryWrapper<TbsBudgetLog> rmLogLqw = new LambdaQueryWrapper<>();
rmLogLqw.eq(TbsBudgetLog::getCostApplyId,id);
budgetLogService.remove(rmLogLqw);
//删除BIR
LambdaQueryWrapper<BirActivityCenterGoods> birActivityCenterGoodsLqw = new LambdaQueryWrapper<>();
birActivityCenterGoodsLqw.eq(BirActivityCenterGoods::getCostApplyId,id);
birActivityCenterGoodsMapper.delete(birActivityCenterGoodsLqw);
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.eq(BirBaseActivity::getCostApplyId,id);
birBaseActivityMapper.delete(birBaseActivityLqw);
//命中预算
budgetCostItemService.removeByCostApplyId(id);
}
@Override
@ -430,12 +449,13 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
allBudgetItem.add(costItem);
//保存
if(costUnItems.size() > 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())){

60
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 @@
</foreach>
)
</select>
<select id="getBudgetUsedAmount" resultType="com.qs.serve.common.model.AmountDTO">
select sum(tbg.amount) as amount,tbg.schedule_item_budget_id as id
from tbs_budget_log tbg
where tbg.opt_type not in(0,2,3)
and tbg.del_flag = 0
and tbg.schedule_item_budget_id in
<foreach collection="ids" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
GROUP BY tbg.schedule_item_budget_id
</select>
<select id="getBudgetNotUsedAmount" resultType="com.qs.serve.common.model.AmountDTO">
select sum(tbg.amount) as amount,tbg.schedule_item_budget_id as id
from tbs_budget_log tbg
where tbg.del_flag = 0
and tbg.schedule_item_budget_id in
<foreach collection="ids" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
GROUP BY tbg.schedule_item_budget_id
</select>
<select id="getBudgetFinalUsedAmount" resultType="com.qs.serve.common.model.AmountDTO">
select sum(tbg.amount) as amount,tbg.schedule_item_budget_id as id
from tbs_budget_log tbg
where tbg.opt_type in(0,2,3)
and tbg.del_flag = 0
and tbg.schedule_item_budget_id in
<foreach collection="ids" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
GROUP BY tbg.schedule_item_budget_id
</select>
</mapper>

Loading…
Cancel
Save