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 0e62bc32..0fdf75ce 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 @@ -662,36 +662,7 @@ public class XmProjectPhaseController { } xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases); List l1Phases=xmProjectPhases.stream().filter(i->1==i.getLvl()).collect(Collectors.toList()); - if(l1Phases==null ||l1Phases.size()==0){//如果是导入到某个计划之下, - //找到导入的树中最上面的节点 - List noExists=xmProjectPhases.stream().filter(i->!xmProjectPhases.stream().filter(k->k.getId().equals(i.getParentPhaseId())).findAny().isPresent()).collect(Collectors.toList()); - //根据同一个父亲归类 - Map> map=new HashMap<>(); - for (XmProjectPhase noExist : noExists) { - List phases=map.get(noExist.getParentPhaseId()); - if(phases==null){ - phases=new ArrayList<>(); - map.put(noExist.getParentPhaseId(),phases); - } - phases.add(noExist); - } - for (Map.Entry> kv : map.entrySet()) { - String parentId=kv.getKey(); - List children=kv.getValue(); - BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; - List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); - for (XmProjectPhase child : children) { - phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt()); - } - if("1".equals(xmProject.getPhaseBudgetCtrl())) { - Tips tips2 = xmProjectPhaseService.judgetPhaseBudget(parentId, phaseTotalBudgetAt, null, null, null, excludeIds); - if (!tips2.isOk()) { - tips2.setFailureMsg(tips2.getMsg() + " 相关计划为【" + children.stream().map(i -> i.getPhaseName()).collect(Collectors.joining(",")) + "】"); - return ResponseHelper.failed(tips2); - } - } - } - }else{//直接导入到项目之下,需要判断当前一级预算是否超出项目总预算 + if(l1Phases==null ||l1Phases.size()==0){//如果是导入到某个计划之下,{//直接导入到项目之下,需要判断当前一级预算是否超出项目总预算 BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO; BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; for (XmProjectPhase l1Phase : l1Phases) { @@ -705,6 +676,35 @@ public class XmProjectPhaseController { } } } + //找到导入的树中最上面的节点 + List parentNoNulls= xmProjectPhases.stream().filter(i->StringUtils.hasText(i.getParentPhaseId())&&!"0".equals(i.getParentPhaseId())).collect(Collectors.toList()); + //根据同一个父亲归类 + Map> map=new HashMap<>(); + for (XmProjectPhase phase : parentNoNulls) { + List phases=map.get(phase.getParentPhaseId()); + if(phases==null){ + phases=new ArrayList<>(); + map.put(phase.getParentPhaseId(),phases); + } + phases.add(phase); + } + for (Map.Entry> kv : map.entrySet()) { + String parentId=kv.getKey(); + List children=kv.getValue(); + BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; + List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); + for (XmProjectPhase child : children) { + phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt()); + } + if("1".equals(xmProject.getPhaseBudgetCtrl())) { + Tips tips2 = xmProjectPhaseService.judgetPhaseBudget(parentId, phaseTotalBudgetAt, null, null, null, excludeIds); + if (!tips2.isOk()) { + tips2.setFailureMsg(tips2.getMsg() + " 相关计划为【" + children.stream().map(i -> i.getPhaseName()).collect(Collectors.joining(",")) + "】"); + return ResponseHelper.failed(tips2); + } + } + } + for (XmProjectPhase projectPhase : xmProjectPhases) { int childrenCnt=Integer.valueOf(xmProjectPhases.stream().filter(i->projectPhase.getId().equals(i.getParentPhaseId())).count()+""); diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java index 949708ad..781750fd 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java @@ -1179,27 +1179,34 @@ public class XmTaskController { return ResponseHelper.failed(tips); } } - }else{ - List tasks=canOpTasks.stream().filter(i->!canOpTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList()); - tasks=tasks.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList()); - if(tasks.size()>0){ - Set parentTaskIdSet=tasks.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet()); - for (String pid : parentTaskIdSet) { - BigDecimal childBudgetCost=BigDecimal.ZERO; - List childs=canOpTasks.stream().filter(i->pid.equals(i.getParentTaskid())).collect(Collectors.toList()); - for (XmTask child : childs) { - childBudgetCost=childBudgetCost.add(child.getBudgetCost()); - } - if(childBudgetCost.compareTo(BigDecimal.ZERO)>0){ - tips= xmTaskService.judgetTaskBudget(pid,childBudgetCost,null,null,null,childs.stream().map(i->i.getId()).collect(Collectors.toList())); - if(!tips.isOk()){ - return ResponseHelper.failed("budget-not-enought",tips.getMsg()+" 相关任务【"+childs.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】"); - } - } + } + Map> map=new HashMap<>(); + for (XmTask canOpTask : canOpTasks) { + if(!StringUtils.hasText(canOpTask.getParentTaskid())||canOpTask.getParentTaskid().equals("0")){ + continue; + } + List childs=map.get(canOpTask.getParentTaskid()); + if(childs==null){ + childs=new ArrayList<>(); + } + childs.add(canOpTask); + map.put(canOpTask.getParentTaskid(),childs); + } + for (Map.Entry> kv : map.entrySet()) { + BigDecimal childBudgetCost = BigDecimal.ZERO; + List childs = kv.getValue(); + for (XmTask child : childs) { + childBudgetCost = childBudgetCost.add(child.getBudgetCost()); + } + if (childBudgetCost.compareTo(BigDecimal.ZERO) > 0) { + tips = xmTaskService.judgetTaskBudget(kv.getKey(), childBudgetCost, null, null, null, childs.stream().map(i -> i.getId()).collect(Collectors.toList())); + if (!tips.isOk()) { + return ResponseHelper.failed("budget-not-enought", tips.getMsg() + " 相关任务【" + childs.stream().map(i -> i.getName()).collect(Collectors.joining(",")) + "】"); } } } + //过滤掉我没有权限的 List canUpdateTasks=canOpTasks.stream().filter(i->xmTaskDbMap.containsKey(i.getId())).collect(Collectors.toList()); List canInsertTasks=canOpTasks.stream().filter(i->!xmTaskDbMap.containsKey(i.getId())).collect(Collectors.toList()); 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 99247a5c..aa652689 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 @@ -149,6 +149,7 @@ public class XmTaskService extends BaseService { BigDecimal budgetCost=NumberUtil.getBigDecimal(g.get("budgetCost"),BigDecimal.ZERO); BigDecimal childBudgetCost=NumberUtil.getBigDecimal(g.get("childBudgetCost"),BigDecimal.ZERO); + childBudgetCost=childBudgetCost.add(addTaskBudgetCost); if(budgetCost.compareTo(childBudgetCost)<0) { tips.setFailureMsg("任务合计总预算超出上级总预算"+childBudgetCost.subtract(budgetCost)+"元"); return tips;