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. 10
      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 scheduleItemAmountApply;
/** 后台参数:费用考核期项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> {
/**
* 统计费用申请占用的预算金额
* 统计费用申请占用的预算金额
* @param scheduleItemBudgetId 预算考核期id
* @param applyId 费用申请id(防止驳回后提交重复扣除)
* @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}")
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` " +
" LEFT JOIN `tzc_policy`" +
" 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} " +
" AND `tbs_budget_log`.schedule_item_id = #{scheduleItemId} " +
" 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,
@Param("scheduleItemId") Long scheduleItemId,
@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){
budgetItemApplyAmount = BigDecimal.ZERO;
}
BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), costApplyId);
if(budgetItemApplyAmount2!=null){
budgetItemApplyAmount.add(budgetItemApplyAmount2);
}
budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount2);
// BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), costApplyId);
// if(budgetItemApplyAmount2!=null){
// budgetItemApplyAmount.add(budgetItemApplyAmount2);
// }
// budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount2);
BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),costApplyId);
//因为结果为负数,需去相反数
budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate();
BigDecimal budgetItemPolicyAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
if(budgetItemPolicyAmount!=null){
budgetItemAmount.add(budgetItemPolicyAmount.negate());
}
// BigDecimal budgetItemPolicyAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
// if(budgetItemPolicyAmount!=null){
// budgetItemAmount.add(budgetItemPolicyAmount.negate());
// }
budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount);
}

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

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

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

@ -31,22 +31,16 @@ public class PolicySortWrapperUtil {
//3.时间区间内,区间长度取最短
//3.时间区间内,区间长度相同,取最近结束时间
List<TbsScheduleItemBudget> tmpList4Subject = new ArrayList<>();
List<TbsScheduleItemBudget> tmpList4NotSubject = new ArrayList<>();
for (TbsScheduleItemBudget scheduleItemBudget : list) {
Long budgetId = scheduleItemBudget.getBudgetId();
if(wrapper.getBudgetSet4Subject().contains(budgetId)){
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)){
PolicySortWrapperUtil.sort4Condition(policyItem,tmpList4Subject,resultSortList,wrapper);
}
if(CollectionUtil.isNotEmpty(tmpList4NotSubject)){
PolicySortWrapperUtil.sort4Condition(policyItem,tmpList4NotSubject,resultSortList,wrapper);
}
}
if(resultSortList.size()!=list.size()){
log.error("排序有误");
@ -73,7 +67,7 @@ public class PolicySortWrapperUtil {
tmpList4NoCondition.add(scheduleItemBudget);
}
}
log.debug("活动【{}】匹配有科目预算数:{},无科目预算:{}",policyItem.getPolicyItemCode() ,tmpList4Condition.size() , tmpList4NoCondition.size());
log.debug("活动【{}】匹配有条件预算数:{},无条件预算:{}",policyItem.getPolicyItemCode() ,tmpList4Condition.size() , tmpList4NoCondition.size());
if(CollectionUtil.isNotEmpty(tmpList4Condition)){
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<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;
if(budgetIds.size()>0){
LambdaQueryWrapper<TbsBudget> budgetLqw = new LambdaQueryWrapper<>();
budgetLqw.in(TbsBudget::getId,budgetIds);
//默认为随货折让(FYMC05)
//budgetLqw.and(qw->qw.eq(TbsBudget::getSubjectId,0).or(qw2->qw2.in(TbsBudget::getSubjectId,subjectIds)));
budgetLqw.eq(TbsBudget::getSubjectCode,"FYMC05");
budgetLqw.in(TbsBudget::getCenterId,centerIds);
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> budgetItemApplyAmountMap = new HashMap<>(scheduleItemList.size());
for (TbsScheduleItemBudget itemBudget : scheduleItemList) {
BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId(),0L);
if(budgetItemApplyAmount==null){
budgetItemApplyAmount = BigDecimal.ZERO;
}
BigDecimal budgetItemApplyAmount2 = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), policyId);
if(budgetItemApplyAmount2!=null){
budgetItemApplyAmount.add(budgetItemApplyAmount2);
}
// BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId(),0L);
// if(budgetItemApplyAmount==null){
// budgetItemApplyAmount = BigDecimal.ZERO;
// }
BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalPolicyAmount(itemBudget.getId(), policyId);
// if(budgetItemApplyAmount2!=null){
// budgetItemApplyAmount.add(budgetItemApplyAmount2);
// }
budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount);
BigDecimal budgetItemAmount = tbsScheduleItemBudgetMapper.totalCostAmountByPolicyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),policyId);
//因为结果为负数,需去相反数
budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate();
//添加费用占用情况
BigDecimal budgetItemCostAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
if(budgetItemCostAmount!=null){
budgetItemAmount = budgetItemAmount.add(budgetItemCostAmount.negate());
}
// BigDecimal budgetItemCostAmount = tbsScheduleItemBudgetMapper.totalCostAmountByApplyId(itemBudget.getBudgetId(),itemBudget.getScheduleItemId(),0L);
// if(budgetItemCostAmount!=null){
// budgetItemAmount = budgetItemAmount.add(budgetItemCostAmount.negate());
// }
budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount);
}
//统计当前活动前置项占用预算
@ -753,6 +750,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
budgetIdsOfActivity.addAll(noConditionBudgetList.stream().map(TbsBudget::getId).collect(Collectors.toList()));
}
List<TzcPolicyGoods> policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItemId);
List<TbsBudgetCondition> poItemMathConList = new ArrayList<>();
for (TbsBudget budget : budgetList) {
if(budget.getConditionFlag().equals(1)){
List<TbsBudgetCondition> budgetConditionList = budget.getBudgetConditionList();
@ -761,6 +759,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
boolean matchGoods = false;
for (TbsBudgetCondition budgetCondition : budgetConditionList) {
if(policyGoods.getTargetLevelPathIds().contains(budgetCondition.getTargetLevelPathIds())){
poItemMathConList.add(budgetCondition);
matchGoods = true;
break;
}
@ -770,6 +769,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
break;
}
}
//匹配的
if(!hasNoMatch){
List<Long> budgetIds = activityAllowBudgetIdMap.get(policyItemId);
if(budgetIds==null){
@ -777,7 +777,6 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
}
budgetIds.add(budget.getId());
budgetIds.addAll(budgetIdsOfActivity);
sortWrapper.putPolicyItemCondition(policyItemId, budgetConditionList);
activityAllowBudgetIdMap.put(policyItemId,budgetIds);
}
}else {
@ -790,6 +789,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
activityAllowBudgetIdMap.put(policyItemId,budgetIds);
}
}
sortWrapper.putPolicyItemCondition(policyItemId, poItemMathConList);
}
return activityAllowBudgetIdMap;
}

Loading…
Cancel
Save