diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java index 98f12730..7af7bd4e 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java @@ -243,6 +243,7 @@ public class XmProjectPhaseController { } List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); + xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase); xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); if(xmProjectPhase.getLvl()==1){ tips=xmProjectPhaseService.judgetProjectBudget(xmProject.getId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds); @@ -357,6 +358,7 @@ public class XmProjectPhaseController { m.put("tips", tips); return m; } + xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase); List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); if(xmProjectPhase.getLvl()==1){ @@ -537,6 +539,7 @@ public class XmProjectPhaseController { BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); for (XmProjectPhase child : children) { + xmProjectPhaseService.calcPhaseBudgetAmount(child); phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt()); } Tips tips2=xmProjectPhaseService.judgetPhaseBudget(parentId,phaseTotalBudgetAt,null,null,null,excludeIds); @@ -549,6 +552,7 @@ public class XmProjectPhaseController { BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO; BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; for (XmProjectPhase l1Phase : l1Phases) { + xmProjectPhaseService.calcPhaseBudgetAmount(l1Phase); phaseTotalBudgetWorkload=phaseTotalBudgetWorkload.add(l1Phase.getPhaseBudgetWorkload()); phaseTotalBudgetAt=phaseTotalBudgetAt.add(l1Phase.getPhaseBudgetAt()); } @@ -635,6 +639,7 @@ public class XmProjectPhaseController { BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); for (XmProjectPhase child : children) { + xmProjectPhaseService.calcPhaseBudgetAmount(child); phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt()); } Tips tips2=xmProjectPhaseService.judgetPhaseBudget(parentId,phaseTotalBudgetAt,null,null,null,excludeIds); @@ -647,6 +652,7 @@ public class XmProjectPhaseController { BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO; BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; for (XmProjectPhase l1Phase : l1Phases) { + xmProjectPhaseService.calcPhaseBudgetAmount(l1Phase); phaseTotalBudgetWorkload=phaseTotalBudgetWorkload.add(l1Phase.getPhaseBudgetWorkload()); phaseTotalBudgetAt=phaseTotalBudgetAt.add(l1Phase.getPhaseBudgetAt()); } diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java index 7527c1ee..1ee3412d 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java @@ -133,10 +133,10 @@ public class XmProjectPhaseService extends BaseService { return tips; } - BigDecimal phaseBudgetCostAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); - phaseBudgetCostAt=phaseBudgetCostAt.add(addPhaseBudgetCost); - if(phaseBudgetCostAt.compareTo(planTotalCost)>0) { - tips.setFailureMsg("计划总体预算超出项目总预算"+phaseBudgetCostAt.subtract(planTotalCost)+"元"); + BigDecimal phaseBudgetAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); + phaseBudgetAt=phaseBudgetAt.add(addPhaseBudgetCost); + if(phaseBudgetAt.compareTo(planTotalCost)>0) { + tips.setFailureMsg("计划总体预算超出项目总预算"+phaseBudgetAt.subtract(planTotalCost)+"元"); return tips; }else { return tips; @@ -512,10 +512,10 @@ public class XmProjectPhaseService extends BaseService { BigDecimal planTotalCost=NumberUtil.getBigDecimal(g.get("pbudgetAmount"),zero); - BigDecimal phaseBudgetCostAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); - phaseBudgetCostAt=phaseBudgetCostAt.add(addPhaseBudgetCost); - if(phaseBudgetCostAt.compareTo(planTotalCost)>0) { - tips.setFailureMsg("计划总体预算超出产品总预算"+phaseBudgetCostAt.subtract(planTotalCost)+"元"); + BigDecimal phaseBudgetAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); + phaseBudgetAt=phaseBudgetAt.add(addPhaseBudgetCost); + if(phaseBudgetAt.compareTo(planTotalCost)>0) { + tips.setFailureMsg("计划总体预算超出产品总预算"+phaseBudgetAt.subtract(planTotalCost)+"元"); return tips; }else { return tips; @@ -539,6 +539,22 @@ public class XmProjectPhaseService extends BaseService { return this.selectOne("selectPhaseBudgetCost", p); } + public void calcPhaseBudgetAmount(XmProjectPhase phase){ + if(phase.getPhaseBudgetInnerUserAt()==null){ + phase.setPhaseBudgetInnerUserAt(BigDecimal.ZERO); + } + if(phase.getPhaseBudgetNouserAt()==null){ + phase.setPhaseBudgetNouserAt(BigDecimal.ZERO); + } + if(phase.getPhaseBudgetOutUserAt()==null){ + phase.setPhaseBudgetOutUserAt(BigDecimal.ZERO); + } + if(phase.getPhaseBudgetAt()==null){ + phase.setPhaseBudgetAt(BigDecimal.ZERO); + } + phase.setPhaseBudgetAt(phase.getPhaseBudgetInnerUserAt().add(phase.getPhaseBudgetNouserAt()).add(phase.getPhaseBudgetAt())); + } + /** * res2.id, * res2.phase_budget_workload, diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java index a31ee10e..94b9e967 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java @@ -115,8 +115,8 @@ public class XmTaskService extends BaseService { return tips; } - BigDecimal phaseBudgetCostAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); - if(phaseBudgetCostAt.compareTo(taskBudgetTotalCost)<0) { + BigDecimal phaseBudgetAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); + if(phaseBudgetAt.compareTo(taskBudgetTotalCost)<0) { tips.setFailureMsg("任务合计总预算超出计划总预算"); return tips; }else { diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml index 7525e6fb..35785c4c 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml @@ -104,7 +104,7 @@ sum( ifnull(res.phase_budget_nouser_at,0) ) AS child_phase_budget_nouser_at, sum( ifnull(res.phase_budget_inner_user_at,0) ) AS child_phase_budget_inner_user_at, sum( ifnull(res.phase_budget_out_user_at,0) ) AS child_phase_budget_out_user_at, - sum( ifnull(res.phase_budget_at,0) ) AS child_phase_budget_at, + sum( ifnull(res.phase_budget_at,0) ) AS child_phase_budget_at FROM xm_project_phase res where res.parent_phase_id=#{id} and res.id not in