diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java index c0067589..3b9de7c4 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java @@ -47,6 +47,7 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper totalPolicyAmountList(@Param("sibIdList")List scheduleItemBudgetIds, + @Param("policyId")Long policyId); + /** * 统计费用申请占用的预算金额 * 状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回 @@ -95,6 +107,19 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper scheduleItemIds, @Param("applyId") Long applyId); + /** + * 统计费用申请占用的预算金额 + * 状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回 + * @param budgetIds 预算id + * @param scheduleItemIds 考核期id + * @param policyId 费用申请id(防止驳回后提交重复扣除) + * @return + * 用于替代 totalCostAmountByApplyId() + */ + List listLogCostAmountWithPolicy(@Param("budgetIds") List budgetIds, + @Param("scheduleItemIds") List scheduleItemIds, + @Param("policyId") Long policyId); + /** * 统计费用申请占用的预算金额 * 通过状态(0-未提交;1-审核中;2-已通过待执行;3-拒绝;4-被驳回;5-结束) diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java index 502e5f92..3dc48fba 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java @@ -35,6 +35,8 @@ import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetItemCostResult; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogPreAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetAmount; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; @@ -429,30 +431,60 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ if(!budgetNoCondition){ this.handleNoBudgetPolicy(throwEx, overspend, policyItemList,noBudgetPolicyIds,policyAllowBudgetIdMap); } - //统计所有占用预算金额 - Map budgetItemAmountMap = new HashMap<>(scheduleItemList.size()); //统计费用申请占用金额(录入时,考核期申请占用金额) Map budgetItemApplyAmountMap = new HashMap<>(scheduleItemList.size()); - for (TbsScheduleItemBudget itemBudget : scheduleItemList) { -// BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId(),0L); -// if(budgetItemApplyAmount==null){ -// budgetItemApplyAmount = BigDecimal.ZERO; -// } + + List scheduleItemBudgetIds = scheduleItemList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); + if(scheduleItemBudgetIds.size()>0){ + List scheduleItemBudgetAmounts = tbsScheduleItemBudgetMapper.totalPolicyAmountList(scheduleItemBudgetIds,policyId); + for (TbsScheduleItemBudgetAmount budgetAmount : scheduleItemBudgetAmounts) { + Long scheduleItemBudgetId = null; + for (TbsScheduleItemBudget itemBudget : scheduleItemList) { + if(itemBudget.getScheduleItemId().equals(budgetAmount.getScheduleItemId())){ + scheduleItemBudgetId = itemBudget.getId(); + break; + } + } + if (budgetAmount.getTotalAmount()==null){ + budgetItemApplyAmountMap.put(scheduleItemBudgetId,BigDecimal.ZERO); + continue; + } + budgetItemApplyAmountMap.put(scheduleItemBudgetId,budgetAmount.getTotalAmount()); + } + } + + //统计所有占用预算金额 + Map budgetItemAmountMap = new HashMap<>(scheduleItemList.size()); + List budgetIdsFromScheduleItemList = scheduleItemList.stream().map(TbsScheduleItemBudget::getBudgetId).distinct().collect(Collectors.toList()); + List scheduleItemIdsFromScheduleItemList = scheduleItemList.stream().map(TbsScheduleItemBudget::getScheduleItemId).distinct().collect(Collectors.toList()); + if(scheduleItemIdsFromScheduleItemList.size()>0&&budgetIdsFromScheduleItemList.size()>0){ + List budgetLogPreAmounts = tbsScheduleItemBudgetMapper.listLogCostAmountWithPolicy(budgetIdsFromScheduleItemList,scheduleItemIdsFromScheduleItemList,policyId); + for (TbsScheduleItemBudget itemBudget : scheduleItemList) { + boolean isNotMatch = true; + for (TbsBudgetLogPreAmount logPreAmount : budgetLogPreAmounts) { + if(itemBudget.getBudgetId().equals(logPreAmount.getBudgetId())&&itemBudget.getScheduleItemId().equals(logPreAmount.getScheduleItemId())){ + BigDecimal budgetItemAmount = logPreAmount.getAmount(); + isNotMatch = false; + //因为已使用的预算费用为负数,需去相反数 + budgetItemAmount = budgetItemAmount==null?BigDecimal.ZERO:budgetItemAmount.negate(); + budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount); + } + } + if(isNotMatch){ + budgetItemAmountMap.put(itemBudget.getId(),BigDecimal.ZERO); + } + } + } + + /*for (TbsScheduleItemBudget itemBudget : scheduleItemList) { 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()); -// } budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount); - } + }*/ //统计当前活动前置项占用预算 Map counterMap = new HashMap<>(); //匹配预算主要方法 diff --git a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml index 6ac2303a..b24ba01f 100644 --- a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml +++ b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml @@ -91,6 +91,50 @@ group by `tbs_budget_log`.budget_id,`tbs_budget_log`.schedule_item_id + + + + +