Browse Source

政策的预算占用优化

contract
Yen 2 years ago
parent
commit
f1727f5508
  1. 25
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java
  2. 62
      src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java
  3. 44
      src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml

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

@ -47,6 +47,7 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
* @param policyId
* @return
*/
@Deprecated
@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 " +
@ -54,6 +55,17 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
" AND `tbs_budget_cost_item_policy`.schedule_item_id = #{scheduleItemBudgetId} and `tzc_policy`.id !=#{policyId};")
BigDecimal totalPolicyAmount(@Param("scheduleItemBudgetId") Long scheduleItemBudgetId,@Param("policyId") Long policyId);
/**
* 统计费用申请时记录占用的预算金额
* 用于替代 totalApplyAmount()
* @param scheduleItemBudgetIds
* @param policyId
* @return
*/
List<TbsScheduleItemBudgetAmount> totalPolicyAmountList(@Param("sibIdList")List<Long> scheduleItemBudgetIds,
@Param("policyId")Long policyId);
/**
* 统计费用申请占用的预算金额
* 状态:0=未发布1=审批中2=待执行3=完成4-被驳回
@ -95,6 +107,19 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
@Param("scheduleItemIds") List<Long> scheduleItemIds,
@Param("applyId") Long applyId);
/**
* 统计费用申请占用的预算金额
* 状态:0=未发布1=审批中2=待执行3=完成4-被驳回
* @param budgetIds 预算id
* @param scheduleItemIds 考核期id
* @param policyId 费用申请id(防止驳回后提交重复扣除)
* @return
* 用于替代 totalCostAmountByApplyId()
*/
List<TbsBudgetLogPreAmount> listLogCostAmountWithPolicy(@Param("budgetIds") List<Long> budgetIds,
@Param("scheduleItemIds") List<Long> scheduleItemIds,
@Param("policyId") Long policyId);
/**
* 统计费用申请占用的预算金额
* 通过状态(0-未提交1-审核中2-已通过待执行3-拒绝4-被驳回5-结束)

62
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<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;
// }
List<Long> scheduleItemBudgetIds = scheduleItemList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList());
if(scheduleItemBudgetIds.size()>0){
List<TbsScheduleItemBudgetAmount> 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<Long, BigDecimal> budgetItemAmountMap = new HashMap<>(scheduleItemList.size());
List<Long> budgetIdsFromScheduleItemList = scheduleItemList.stream().map(TbsScheduleItemBudget::getBudgetId).distinct().collect(Collectors.toList());
List<Long> scheduleItemIdsFromScheduleItemList = scheduleItemList.stream().map(TbsScheduleItemBudget::getScheduleItemId).distinct().collect(Collectors.toList());
if(scheduleItemIdsFromScheduleItemList.size()>0&&budgetIdsFromScheduleItemList.size()>0){
List<TbsBudgetLogPreAmount> 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<Long,BigDecimal> counterMap = new HashMap<>();
//匹配预算主要方法

44
src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml

@ -91,6 +91,50 @@
group by `tbs_budget_log`.budget_id,`tbs_budget_log`.schedule_item_id
</select>
<select id="totalPolicyAmountList"
resultType="com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetAmount"
resultMap="TbsScheduleItemBudgetAmountMap">
SELECT
`tbs_budget_cost_item_policy`.schedule_item_id,
sum(`tbs_budget_cost_item_policy`.policy_item_amount) total_amount
FROM `tbs_budget_cost_item_policy`
LEFT JOIN `tzc_policy`
ON `tbs_budget_cost_item_policy`.policy_id = `tzc_policy`.id
WHERE `tzc_policy`.policy_status = 1 OR `tzc_policy`.policy_status = 4
AND `tbs_budget_cost_item_policy`.schedule_item_id in
<foreach collection="sibIdList" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
and `tzc_policy`.id !=#{policyId}
group by `tbs_budget_cost_item_policy`.schedule_item_id
</select>
<select id="listLogCostAmountWithPolicy"
resultType="com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogPreAmount">
SELECT
`tbs_budget_log`.budget_id,
`tbs_budget_log`.schedule_item_id,
sum (`tbs_budget_log`.amount) amount
FROM
`tbs_budget_log`
LEFT JOIN
`tzc_policy`
ON `tbs_budget_log`.policy_id = tzc_policy.id
WHERE
`tbs_budget_log`.budget_id in
<foreach collection="budgetIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND `tbs_budget_log`.schedule_item_id in
<foreach collection="scheduleItemIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND `tzc_policy`.id != #{policyId}
AND opt_type IN (11,12,13,14)
group by `tbs_budget_log`.budget_id,`tbs_budget_log`.schedule_item_id
</select>
</mapper>

Loading…
Cancel
Save