From 24fc0fe9abfbd9a559c658b5ed8358cd84536850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Thu, 19 May 2022 06:08:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=AE=97=E5=8F=8A=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xm/core/ctrl/XmTaskController.java | 99 ++++++++++++------- .../com/xm/core/service/XmTaskService.java | 10 +- .../mapper/xm/core/dao/XmTaskMapper.xml | 33 +------ 3 files changed, 72 insertions(+), 70 deletions(-) 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 2a135511..0018eb0a 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 @@ -256,6 +256,9 @@ public class XmTaskController { if(fieldKey.size()<=0) { return ResponseHelper.failed("fieldKey-0","没有需要更新的字段"); } + if(fieldKey.contains("budgetAt") && ids.size()>0){ + return ResponseHelper.failed("ids-to-more","修改预算只能一次修改一条数据"); + } XmTask xmTask= BaseUtils.fromMap(xmTaskMap,XmTask.class); List xmTasksDb=xmTaskService.selectListByIds(ids); if(xmTasksDb==null ||xmTasksDb.size()==0){ @@ -271,6 +274,7 @@ public class XmTaskController { } } + List can=new ArrayList<>(); List no=new ArrayList<>(); @@ -288,6 +292,23 @@ public class XmTaskController { can.add(xmTaskDb); } } + + if(can.size()>0 && fieldKey.contains("budgetAt")){ + + XmTask taskDb=can.get(0); + XmProject xmProject=xmProjectService.getProjectFromCache(taskDb.getProjectId()); + BigDecimal budgetAt=NumberUtil.getBigDecimal(xmTaskMap.get("budgetAt"),BigDecimal.ZERO); + if("1".equals(xmProject.getBudgetCtrl())){ + if(taskDb.getLvl()<=1){ + tips=this.xmTaskService.judgetProjectBudget(taskDb.getProjectId(),budgetAt,Arrays.asList(taskDb.getId())); + }else { + tips=this.xmTaskService.judgetTaskBudget(taskDb.getParentTaskid(),budgetAt,null,null,null,Arrays.asList(taskDb.getId())); + } + if(!tips.isOk()){ + return ResponseHelper.failed(tips); + } + } + } if(can.size()>0){ xmTaskMap.put("ids",can.stream().map(i->i.getId()).collect(Collectors.toList())); @@ -296,7 +317,7 @@ public class XmTaskController { this.xmTaskService.batchUpdateBudgetWorkloadAndRate(xmTasksDb.stream().map(i->i.getId()).collect(Collectors.toSet()).stream().collect(Collectors.toList()),NumberUtil.getBigDecimal(xmTaskMap.get("budgetWorkload"))); pushService.pushXmTasks(xmTasksDb); } - }else{ + }else { xmTaskService.editSomeFields(xmTaskMap); } for (XmTask task : can) { @@ -371,6 +392,9 @@ public class XmTaskController { m.put("tips", tips); return m; } + if(!StringUtils.hasText(xmTaskVo.getProjectId())){ + return ResponseHelper.failed("projectId-0","项目编号不能为空"); + } User user=LoginUtils.getCurrentUserInfo(); tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskVo.getProjectId()); if(!tips.isOk()){ @@ -411,13 +435,17 @@ public class XmTaskController { } } this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo); - if(xmTaskVo.getBudgetAt()!=null && xmTaskVo.getBudgetAt().compareTo(BigDecimal.ZERO)>0){ - if("0".equals(xmTaskVo.getPtype()) && xmTaskVo.getLvl()<=1){ - xmTaskService.judgetProjectBudget(xmTaskVo.getProjectId(),xmTaskVo.getBudgetAt(),null); - }else{ - tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetAt(),null,null,null,null); + XmProject xmProject=xmProjectService.getProjectFromCache(xmTaskVo.getProjectId()); + if("1".equals(xmProject.getBudgetCtrl())){ + if(xmTaskVo.getBudgetAt()!=null && xmTaskVo.getBudgetAt().compareTo(BigDecimal.ZERO)>0){ + if(xmTaskVo.getLvl()<=1){ + tips=xmTaskService.judgetProjectBudget(xmTaskVo.getProjectId(),xmTaskVo.getBudgetAt(),null); + }else{ + tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetAt(),null,null,null,null); + } } } + if(tips.isOk()) { xmTaskVo = xmTaskService.addTask(xmTaskVo); } @@ -604,8 +632,9 @@ public class XmTaskController { if(xmTaskDb.getBudgetAt()==null)xmTaskDb.setBudgetAt(BigDecimal.ZERO); List excludeIds=new ArrayList<>(); excludeIds.add(xmTaskDb.getId()); - if( xmTaskDb.getBudgetAt().compareTo(xmTaskVo.getBudgetAt())!=0){ - if("0".equals(xmTaskDb.getPtype()) && xmTaskVo.getLvl()<=1){ + XmProject xmProject=xmProjectService.getProjectFromCache(xmTaskDb.getProjectId()); + if( "1".equals(xmProject.getBudgetCtrl()) && xmTaskDb.getBudgetAt().compareTo(xmTaskVo.getBudgetAt())!=0){ + if(xmTaskVo.getLvl()<=1){ tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(), xmTaskVo.getBudgetAt(),excludeIds); }else if(StringUtils.hasText(xmTaskDb.getParentTaskid())){ tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetAt(),null,null,null,excludeIds); @@ -780,38 +809,42 @@ public class XmTaskController { } xmTaskService.parentIdPathsCalcBeforeSave(xmTasks); List tasksLvl1=xmTasks.stream().filter(i->i.getLvl()<=1).collect(Collectors.toList()); - if(tasksLvl1.size()>0){ - BigDecimal totalTaskBudgetAt=BigDecimal.ZERO; - for (XmTask task : tasksLvl1) { - totalTaskBudgetAt=totalTaskBudgetAt.add(task.getBudgetAt()); - } - if("0".equals(batchImportVo.getPtype())&&totalTaskBudgetAt.compareTo(BigDecimal.ZERO)>0){ - tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetAt,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList())); - if(!tips.isOk()){ - tips.setFailureMsg(tips.getMsg()+" 相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】"); - return ResponseHelper.failed(tips); + XmProject xmProject=xmProjectService.getProjectFromCache(projectId); + if("1".equals(xmProject.getBudgetCtrl())){ + if(tasksLvl1.size()>0){ + BigDecimal totalTaskBudgetAt=BigDecimal.ZERO; + for (XmTask task : tasksLvl1) { + totalTaskBudgetAt=totalTaskBudgetAt.add(task.getBudgetAt()); } - } - }else{ - List tasks=xmTasks.stream().filter(i->!xmTasks.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 childBudgetAt=BigDecimal.ZERO; - List childs=xmTasks.stream().filter(i->pid.equals(i.getParentTaskid())).collect(Collectors.toList()); - for (XmTask child : childs) { - childBudgetAt=childBudgetAt.add(child.getBudgetAt()); + if("0".equals(batchImportVo.getPtype())&&totalTaskBudgetAt.compareTo(BigDecimal.ZERO)>0){ + tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetAt,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList())); + if(!tips.isOk()){ + tips.setFailureMsg(tips.getMsg()+" 相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】"); + return ResponseHelper.failed(tips); } - if(childBudgetAt.compareTo(BigDecimal.ZERO)>0){ - tips= xmTaskService.judgetTaskBudget(pid,childBudgetAt,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(","))+"】"); + } + }else{ + List tasks=xmTasks.stream().filter(i->!xmTasks.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 childBudgetAt=BigDecimal.ZERO; + List childs=xmTasks.stream().filter(i->pid.equals(i.getParentTaskid())).collect(Collectors.toList()); + for (XmTask child : childs) { + childBudgetAt=childBudgetAt.add(child.getBudgetAt()); + } + if(childBudgetAt.compareTo(BigDecimal.ZERO)>0){ + tips= xmTaskService.judgetTaskBudget(pid,childBudgetAt,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(","))+"】"); + } } } } } } + if(tips.isOk()) { for (XmTask task : xmTasks) { task.setChildrenCnt( Integer.valueOf(xmTasks.stream().filter(i->task.getId().equals(i.getParentTaskid())).count()+"")); 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 0f23adef..3da6d73f 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 @@ -157,11 +157,11 @@ public class XmTaskService extends BaseService { return tips; } - 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)+"元"); + BigDecimal budgetAt=NumberUtil.getBigDecimal(g.get("budgetAt"),BigDecimal.ZERO); + BigDecimal childBudgetAt=NumberUtil.getBigDecimal(g.get("childBudgetAt"),BigDecimal.ZERO); + childBudgetAt=childBudgetAt.add(addTaskBudgetCost); + if(budgetAt.compareTo(childBudgetAt)<0) { + tips.setFailureMsg("任务合计总预算超出上级总预算"+childBudgetAt.subtract(budgetAt)+"元"); return tips; }else { return tips; diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml index 30120137..4847bbcf 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml @@ -142,7 +142,7 @@ sum( ifnull(res.budget_at,0) ) AS child_budget_at, sum( ifnull(res.budget_workload,0) ) AS child_budget_workload from - xm_task res where res.parent_taskid=#{parentTaskid} and res.lvl=1 + xm_task res where res.parent_taskid=#{parentTaskid} and res.id not in #{item} @@ -152,37 +152,6 @@ WHERE p.id = #{parentTaskid} - - -