Browse Source

政策排序修复;金额异常修复

contract
Yen 2 years ago
parent
commit
acca21a649
  1. 2
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetItemCostResult.java
  2. 10
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java
  3. 18
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java
  4. 8
      src/main/java/com/qs/serve/modules/tzc/common/dto/PolicySortWrapper.java
  5. 10
      src/main/java/com/qs/serve/modules/tzc/common/util/PolicySortWrapperUtil.java
  6. 34
      src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java

2
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetItemCostResult.java

@ -34,7 +34,7 @@ public class TbsBudgetItemCostResult {
/** 后台参数:录入时,考核期已用金额(含申请占用金额) */ /** 后台参数:录入时,考核期已用金额(含申请占用金额) */
private BigDecimal scheduleItemAmountUsed; private BigDecimal scheduleItemAmountUsed;
/** 后台参数:录入时,考核期申请占用金额 */ /** 后台参数: */
private BigDecimal scheduleItemAmountApply; private BigDecimal scheduleItemAmountApply;
/** 后台参数:费用考核期项id */ /** 后台参数:费用考核期项id */

10
src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java

@ -15,7 +15,7 @@ import java.math.BigDecimal;
public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemBudget> { public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemBudget> {
/** /**
* 统计费用申请占用的预算金额 * 统计费用申请占用的预算金额
* @param scheduleItemBudgetId 预算考核期id * @param scheduleItemBudgetId 预算考核期id
* @param applyId 费用申请id(防止驳回后提交重复扣除) * @param applyId 费用申请id(防止驳回后提交重复扣除)
* @return * @return
@ -27,6 +27,12 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
" AND `tbs_budget_cost_item`.schedule_item_id = #{scheduleItemBudgetId} and `tbs_cost_apply`.id != #{applyId}") " AND `tbs_budget_cost_item`.schedule_item_id = #{scheduleItemBudgetId} and `tbs_cost_apply`.id != #{applyId}")
BigDecimal totalApplyAmount(@Param("scheduleItemBudgetId") Long scheduleItemBudgetId,@Param("applyId") Long applyId); BigDecimal totalApplyAmount(@Param("scheduleItemBudgetId") Long scheduleItemBudgetId,@Param("applyId") Long applyId);
/**
* 统计政策申请时已占用的预算金额
* @param scheduleItemBudgetId
* @param policyId
* @return
*/
@Select(" SELECT sum(`tbs_budget_cost_item_policy`.policy_item_amount) FROM `tbs_budget_cost_item_policy` " + @Select(" SELECT sum(`tbs_budget_cost_item_policy`.policy_item_amount) FROM `tbs_budget_cost_item_policy` " +
" LEFT JOIN `tzc_policy`" + " LEFT JOIN `tzc_policy`" +
" ON `tbs_budget_cost_item_policy`.policy_id = `tzc_policy`.id " + " ON `tbs_budget_cost_item_policy`.policy_id = `tzc_policy`.id " +
@ -75,7 +81,7 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
"WHERE `tbs_budget_log`.budget_id = #{budgetId} " + "WHERE `tbs_budget_log`.budget_id = #{budgetId} " +
" AND `tbs_budget_log`.schedule_item_id = #{scheduleItemId} " + " AND `tbs_budget_log`.schedule_item_id = #{scheduleItemId} " +
" AND `tzc_policy`.id != #{policyId} " + " AND `tzc_policy`.id != #{policyId} " +
" AND `tzc_policy`.policy_status in (1,2,4,5) AND opt_type IN (1,4,5,6,11)") " AND `tzc_policy`.policy_status in (1,2,4) ")
BigDecimal totalCostAmountByPolicyId(@Param("budgetId") Long budgetId, BigDecimal totalCostAmountByPolicyId(@Param("budgetId") Long budgetId,
@Param("scheduleItemId") Long scheduleItemId, @Param("scheduleItemId") Long scheduleItemId,
@Param("policyId") Long policyId); @Param("policyId") Long policyId);

18
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java

@ -234,18 +234,18 @@ public class TbsBudgetApplicationService {
if(budgetItemApplyAmount==null){ if(budgetItemApplyAmount==null){
budgetItemApplyAmount = BigDecimal.ZERO; budgetItemApplyAmount = BigDecimal.ZERO;
} }
BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), costApplyId); // BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), costApplyId);
if(budgetItemApplyAmount2!=null){ // if(budgetItemApplyAmount2!=null){
budgetItemApplyAmount.add(budgetItemApplyAmount2); // budgetItemApplyAmount.add(budgetItemApplyAmount2);
} // }
budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount2); // budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount2);
BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),costApplyId); BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),costApplyId);
//因为结果为负数,需去相反数 //因为结果为负数,需去相反数
budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate(); budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate();
BigDecimal budgetItemPolicyAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L); // BigDecimal budgetItemPolicyAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
if(budgetItemPolicyAmount!=null){ // if(budgetItemPolicyAmount!=null){
budgetItemAmount.add(budgetItemPolicyAmount.negate()); // budgetItemAmount.add(budgetItemPolicyAmount.negate());
} // }
budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount); budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount);
} }

8
src/main/java/com/qs/serve/modules/tzc/common/dto/PolicySortWrapper.java

@ -22,10 +22,6 @@ public class PolicySortWrapper {
*/ */
Set<Long> budgetSet4Subject = new HashSet<>(); Set<Long> budgetSet4Subject = new HashSet<>();
/**
* 没有科目的预算id
*/
Set<Long> budgetSet4NoSubject = new HashSet<>();
/** /**
* 有条件的预算id * 有条件的预算id
@ -82,11 +78,7 @@ public class PolicySortWrapper {
public void initializeBudget(List<TbsBudget> budgetList){ public void initializeBudget(List<TbsBudget> budgetList){
if(CollectionUtil.isNotEmpty(budgetList)){ if(CollectionUtil.isNotEmpty(budgetList)){
for (TbsBudget budget : budgetList) { for (TbsBudget budget : budgetList) {
if(budget.getSubjectId()==null||budget.getSubjectId().equals(0L)){
budgetSet4NoSubject.add(budget.getId());
}else {
budgetSet4Subject.add(budget.getId()); budgetSet4Subject.add(budget.getId());
}
if(budget.getConditionFlag()==null||budget.getConditionFlag().equals(0)){ if(budget.getConditionFlag()==null||budget.getConditionFlag().equals(0)){
budgetSet4NoCondition.add(budget.getId()); budgetSet4NoCondition.add(budget.getId());
}else { }else {

10
src/main/java/com/qs/serve/modules/tzc/common/util/PolicySortWrapperUtil.java

@ -31,22 +31,16 @@ public class PolicySortWrapperUtil {
//3.时间区间内,区间长度取最短 //3.时间区间内,区间长度取最短
//3.时间区间内,区间长度相同,取最近结束时间 //3.时间区间内,区间长度相同,取最近结束时间
List<TbsScheduleItemBudget> tmpList4Subject = new ArrayList<>(); List<TbsScheduleItemBudget> tmpList4Subject = new ArrayList<>();
List<TbsScheduleItemBudget> tmpList4NotSubject = new ArrayList<>();
for (TbsScheduleItemBudget scheduleItemBudget : list) { for (TbsScheduleItemBudget scheduleItemBudget : list) {
Long budgetId = scheduleItemBudget.getBudgetId(); Long budgetId = scheduleItemBudget.getBudgetId();
if(wrapper.getBudgetSet4Subject().contains(budgetId)){ if(wrapper.getBudgetSet4Subject().contains(budgetId)){
tmpList4Subject.add(scheduleItemBudget); tmpList4Subject.add(scheduleItemBudget);
}else{
tmpList4NotSubject.add(scheduleItemBudget);
} }
} }
log.debug("政策项【{}】匹配有科目预算数:{},无科目预算:{}",policyItem.getPolicyItemCode() ,tmpList4Subject.size() , tmpList4NotSubject.size()); log.debug("政策项【{}】匹配有科目预算数:{}",policyItem.getPolicyItemCode() ,tmpList4Subject.size() );
if(CollectionUtil.isNotEmpty(tmpList4Subject)){ if(CollectionUtil.isNotEmpty(tmpList4Subject)){
PolicySortWrapperUtil.sort4Condition(policyItem,tmpList4Subject,resultSortList,wrapper); PolicySortWrapperUtil.sort4Condition(policyItem,tmpList4Subject,resultSortList,wrapper);
} }
if(CollectionUtil.isNotEmpty(tmpList4NotSubject)){
PolicySortWrapperUtil.sort4Condition(policyItem,tmpList4NotSubject,resultSortList,wrapper);
}
} }
if(resultSortList.size()!=list.size()){ if(resultSortList.size()!=list.size()){
log.error("排序有误"); log.error("排序有误");
@ -73,7 +67,7 @@ public class PolicySortWrapperUtil {
tmpList4NoCondition.add(scheduleItemBudget); tmpList4NoCondition.add(scheduleItemBudget);
} }
} }
log.debug("活动【{}】匹配有科目预算数:{},无科目预算:{}",policyItem.getPolicyItemCode() ,tmpList4Condition.size() , tmpList4NoCondition.size()); log.debug("活动【{}】匹配有条件预算数:{},无条件预算:{}",policyItem.getPolicyItemCode() ,tmpList4Condition.size() , tmpList4NoCondition.size());
if(CollectionUtil.isNotEmpty(tmpList4Condition)){ if(CollectionUtil.isNotEmpty(tmpList4Condition)){
PolicySortWrapperUtil.sort4GoodsCondition(policyItem,tmpList4Condition,result,wrapper); PolicySortWrapperUtil.sort4GoodsCondition(policyItem,tmpList4Condition,result,wrapper);
} }

34
src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java

@ -369,14 +369,11 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
//所有满足条件的考核期,用于加载历史核销费用,并设置不满足时间条件的预算 //所有满足条件的考核期,用于加载历史核销费用,并设置不满足时间条件的预算
List<TbsScheduleItemBudget> scheduleItemList = this.loadScheduleBudgetAndSetting(policyItemList, budgetIds, noBudgetPolicyIds,sortWrapper); List<TbsScheduleItemBudget> scheduleItemList = this.loadScheduleBudgetAndSetting(policyItemList, budgetIds, noBudgetPolicyIds,sortWrapper);
List<String> centerIds = policyItemList.stream().map(TzcPolicyItem::getCenterId).collect(Collectors.toList()); List<String> centerIds = policyItemList.stream().map(TzcPolicyItem::getCenterId).collect(Collectors.toList());
//默认为随货折让
//List<Long> subjectIds = policyItemList.stream().map(TzcPolicyItem::getSubjectId).distinct().collect(Collectors.toList());
List<TbsBudget> budgetList; List<TbsBudget> budgetList;
if(budgetIds.size()>0){ if(budgetIds.size()>0){
LambdaQueryWrapper<TbsBudget> budgetLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsBudget> budgetLqw = new LambdaQueryWrapper<>();
budgetLqw.in(TbsBudget::getId,budgetIds); budgetLqw.in(TbsBudget::getId,budgetIds);
//默认为随货折让(FYMC05) //默认为随货折让(FYMC05)
//budgetLqw.and(qw->qw.eq(TbsBudget::getSubjectId,0).or(qw2->qw2.in(TbsBudget::getSubjectId,subjectIds)));
budgetLqw.eq(TbsBudget::getSubjectCode,"FYMC05"); budgetLqw.eq(TbsBudget::getSubjectCode,"FYMC05");
budgetLqw.in(TbsBudget::getCenterId,centerIds); budgetLqw.in(TbsBudget::getCenterId,centerIds);
budgetLqw.eq(TbsBudget::getBudgetState,1); budgetLqw.eq(TbsBudget::getBudgetState,1);
@ -396,26 +393,26 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
} }
//统计所有占用预算金额 //统计所有占用预算金额
Map<Long, BigDecimal> budgetItemAmountMap = new HashMap<>(scheduleItemList.size()); Map<Long, BigDecimal> budgetItemAmountMap = new HashMap<>(scheduleItemList.size());
//统计费用申请占用金额 //统计费用申请占用金额(录入时,考核期申请占用金额)
Map<Long,BigDecimal> budgetItemApplyAmountMap = new HashMap<>(scheduleItemList.size()); Map<Long,BigDecimal> budgetItemApplyAmountMap = new HashMap<>(scheduleItemList.size());
for (TbsScheduleItemBudget itemBudget : scheduleItemList) { for (TbsScheduleItemBudget itemBudget : scheduleItemList) {
BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId(),0L); // BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId(),0L);
if(budgetItemApplyAmount==null){ // if(budgetItemApplyAmount==null){
budgetItemApplyAmount = BigDecimal.ZERO; // budgetItemApplyAmount = BigDecimal.ZERO;
} // }
BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), policyId); BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), policyId);
if(budgetItemApplyAmount2!=null){ // if(budgetItemApplyAmount2!=null){
budgetItemApplyAmount.add(budgetItemApplyAmount2); // budgetItemApplyAmount.add(budgetItemApplyAmount2);
} // }
budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount); budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount);
BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),policyId); BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),policyId);
//因为结果为负数,需去相反数 //因为结果为负数,需去相反数
budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate(); budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate();
//添加费用占用情况 //添加费用占用情况
BigDecimal budgetItemCostAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L); // BigDecimal budgetItemCostAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
if(budgetItemCostAmount!=null){ // if(budgetItemCostAmount!=null){
budgetItemAmount = budgetItemAmount.add(budgetItemCostAmount.negate()); // budgetItemAmount = budgetItemAmount.add(budgetItemCostAmount.negate());
} // }
budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount); budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount);
} }
//统计当前活动前置项占用预算 //统计当前活动前置项占用预算
@ -753,6 +750,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
budgetIdsOfActivity.addAll(noConditionBudgetList.stream().map(TbsBudget::getId).collect(Collectors.toList())); budgetIdsOfActivity.addAll(noConditionBudgetList.stream().map(TbsBudget::getId).collect(Collectors.toList()));
} }
List<TzcPolicyGoods> policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItemId); List<TzcPolicyGoods> policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItemId);
List<TbsBudgetCondition> poItemMathConList = new ArrayList<>();
for (TbsBudget budget : budgetList) { for (TbsBudget budget : budgetList) {
if(budget.getConditionFlag().equals(1)){ if(budget.getConditionFlag().equals(1)){
List<TbsBudgetCondition> budgetConditionList = budget.getBudgetConditionList(); List<TbsBudgetCondition> budgetConditionList = budget.getBudgetConditionList();
@ -761,6 +759,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
boolean matchGoods = false; boolean matchGoods = false;
for (TbsBudgetCondition budgetCondition : budgetConditionList) { for (TbsBudgetCondition budgetCondition : budgetConditionList) {
if(policyGoods.getTargetLevelPathIds().contains(budgetCondition.getTargetLevelPathIds())){ if(policyGoods.getTargetLevelPathIds().contains(budgetCondition.getTargetLevelPathIds())){
poItemMathConList.add(budgetCondition);
matchGoods = true; matchGoods = true;
break; break;
} }
@ -770,6 +769,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
break; break;
} }
} }
//匹配的
if(!hasNoMatch){ if(!hasNoMatch){
List<Long> budgetIds = activityAllowBudgetIdMap.get(policyItemId); List<Long> budgetIds = activityAllowBudgetIdMap.get(policyItemId);
if(budgetIds==null){ if(budgetIds==null){
@ -777,7 +777,6 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
} }
budgetIds.add(budget.getId()); budgetIds.add(budget.getId());
budgetIds.addAll(budgetIdsOfActivity); budgetIds.addAll(budgetIdsOfActivity);
sortWrapper.putPolicyItemCondition(policyItemId, budgetConditionList);
activityAllowBudgetIdMap.put(policyItemId,budgetIds); activityAllowBudgetIdMap.put(policyItemId,budgetIds);
} }
}else { }else {
@ -790,6 +789,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
activityAllowBudgetIdMap.put(policyItemId,budgetIds); activityAllowBudgetIdMap.put(policyItemId,budgetIds);
} }
} }
sortWrapper.putPolicyItemCondition(policyItemId, poItemMathConList);
} }
return activityAllowBudgetIdMap; return activityAllowBudgetIdMap;
} }

Loading…
Cancel
Save