From 5603aea5be794bdb16da6145af1900a315484bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Thu, 24 Feb 2022 02:39:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8A=82=E7=82=B9=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E3=80=81=E6=A0=87=E7=AD=BE=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/ctrl/XmProductPhaseController.java | 12 ++++-- .../core/ctrl/XmProjectPhaseController.java | 30 +++++++------ .../core/service/XmProjectPhaseService.java | 43 +++++++++++++++++++ .../xm/core/dao/XmProjectPhaseMapper.xml | 35 +++++++++++++++ 4 files changed, 104 insertions(+), 16 deletions(-) diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java index 5123cb61..ecec83f5 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java @@ -244,9 +244,8 @@ public class XmProductPhaseController { return m; } BigDecimal phaseBudgetCost=BigDecimal.ZERO; - String productId=null; - BigDecimal zero=BigDecimal.ZERO; - productId=xmProjectPhase.getProductId(); + BigDecimal zero=BigDecimal.ZERO; + String productId=xmProjectPhase.getProductId(); BigDecimal phaseBudgetInnerUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetInnerUserAt(),zero); BigDecimal phaseBudgetOutUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetOutUserAt(),zero); BigDecimal phaseBudgetNouserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetNouserAt(),zero); @@ -255,6 +254,9 @@ public class XmProductPhaseController { excludePhaseIds.add(xmProjectPhase.getId()); if(!StringUtils.hasText(xmProjectPhase.getParentPhaseId())){//如果为顶级计划,预算不能大于产品总预算 Tips judgetTips=xmProjectPhaseService.judgetProductBudget(productId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); + if(!judgetTips.isOk()){ + return ResponseHelper.failed(judgetTips); + } }else{ XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); if(parentDb==null){ @@ -263,6 +265,10 @@ public class XmProductPhaseController { if(!"1".equals(parentDb.getNtype())){ return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); } + Tips judgetTips=xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); + if(!judgetTips.isOk()){ + return ResponseHelper.failed(judgetTips); + } } xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); xmProjectPhaseService.insert(xmProjectPhase); 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 ddfabcd5..d9e46a13 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 @@ -252,24 +252,28 @@ public class XmProjectPhaseController { phaseBudgetCost=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); - Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); - if(judgetTips.isOk()) { - if(StringUtils.hasText(xmProjectPhase.getParentPhaseId())){ - XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); - if(parentDb==null){ - return ResponseHelper.failed("p-no-exists","上级计划不存在"); - } - if(!"1".equals(parentDb.getNtype())){ - return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); - } + if(!StringUtils.hasText(xmProjectPhase.getParentPhaseId())){//如果为顶级计划,预算不能大于产品总预算 + Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); + if(!judgetTips.isOk()){ + return ResponseHelper.failed(judgetTips); + } + }else{ + XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); + if(parentDb==null){ + return ResponseHelper.failed("p-no-exists","上级计划不存在"); } + if(!"1".equals(parentDb.getNtype())){ + return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); + } + Tips judgetTips=xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); + if(!judgetTips.isOk()){ + return ResponseHelper.failed(judgetTips); + } + } xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); xmProjectPhaseService.insert(xmProjectPhase); xmRecordService.addProjectPhaseRecord(projectId, xmProjectPhase.getId(), "项目-计划-新增计划", "新增计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null); m.put("data",xmProjectPhase); - }else { - tips=judgetTips; - } }catch (BizException e) { tips=e.getTips(); logger.error("",e); 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 12dd0b7a..118883ea 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 @@ -522,5 +522,48 @@ public class XmProjectPhaseService extends BaseService { p.put("excludePhaseIds", excludePhaseIds); return this.selectOne("selectTotalProductAndPhaseBudgetCost", p); } + public Map selectPhaseBudgetCost(String phaseId,List excludePhaseIds){ + Map p=new HashMap<>(); + p.put("id", phaseId); + p.put("excludePhaseIds", excludePhaseIds); + return this.selectOne("selectPhaseBudgetCost", p); + } + + /** + * res2.id, + * res2.phase_budget_workload, + * res2.phase_budget_nouser_at, + * res2.phase_budget_inner_user_at, + * res2.phase_budget_out_user_at, + * res2.phase_budget_at, + * res0.child_phase_budget_workload, + * res0.child_phase_budget_nouser_at, + * res0.child_phase_budget_inner_user_at, + * res0.child_phase_budget_out_user_at, + * res0.child_phase_budget_at + * @param parentPhaseId + * @param phaseBudgetCost + * @param phaseBudgetInnerUserAt + * @param phaseBudgetOutUserAt + * @param phaseBudgetNouserAt + * @param excludePhaseIds + * @return + */ + public Tips judgetPhaseBudget(String parentPhaseId, BigDecimal phaseBudgetCost, BigDecimal phaseBudgetInnerUserAt, BigDecimal phaseBudgetOutUserAt, BigDecimal phaseBudgetNouserAt, List excludePhaseIds) { + Tips tips= new Tips("检查通过"); + Map phaseBudget=this.selectPhaseBudgetCost(parentPhaseId,excludePhaseIds); + if(phaseBudget==null || phaseBudget.isEmpty()){ + tips.setFailureMsg("计划不存在"); + }else{ + BigDecimal childPhaseBudgetAt=NumberUtil.getBigDecimal(phaseBudget.get("childPhaseBudgetAt"),BigDecimal.ZERO); + + BigDecimal phaseBudgetAt=NumberUtil.getBigDecimal(phaseBudget.get("phaseBudgetAt"),BigDecimal.ZERO); + + if(childPhaseBudgetAt.add(phaseBudgetCost).compareTo(phaseBudgetAt)>0){ + tips.setFailureMsg("预算金额超出剩余预算金额"+childPhaseBudgetAt.add(phaseBudgetCost).subtract(phaseBudgetAt)+"元"); + } + } + return tips; + } } 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 ec4cb952..84e4a85e 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 @@ -33,6 +33,7 @@ sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at, sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at, sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at, + sum( ifnull(res.phase_budget_at,0) ) AS phase_budget_at, p.plan_nouser_at, p.plan_inner_user_at, p.plan_out_user_at, @@ -65,6 +66,8 @@ sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at, sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at, sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at, + sum( ifnull(res.phase_budget_at,0) ) AS phase_budget_at, + p.pbudget_workload, p.pbudget_amount, p.pmenu_budget_workload, @@ -80,6 +83,38 @@ where p.id=#{productId} + {call load_tasks_to_xm_project_phase(#{projectId,mode=IN})}