From e7023d6cd4d75fc2c897c24bdb025036162ceb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Tue, 22 Feb 2022 02:37:15 +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 --- .../com/xm/core/ctrl/XmTaskController.java | 18 ++--- .../com/xm/core/service/XmTaskService.java | 81 +++++++++---------- .../mapper/xm/core/dao/XmTaskMapper.xml | 57 +++++++++++-- 3 files changed, 95 insertions(+), 61 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 bda87495..7bc62a82 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 @@ -635,8 +635,7 @@ public class XmTaskController { excludeTaskIds.add(xmTaskVo.getId()); Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds); if(judgetTips.isOk()) { - xmTaskService.updateTask(xmTaskVo); - xmTaskService.sumParents(xmTaskDb); + xmTaskService.updateTask(xmTaskVo,xmTaskDb); if(!StringUtils.isEmpty(xmTaskVo.getExecutorUserid())) { List groups=groupService.getUserGroups(xmTaskVo.getProjectId(), xmTaskVo.getExecutorUserid()); if(groups!=null && groups.size()>0) { @@ -698,7 +697,7 @@ public class XmTaskController { return m; } } - xmTaskService.updateTime(xmTask); + xmTaskService.updateTime(xmTask,xmTaskDb); m.put("data",xmTask); }catch (BizException e) { tips=e.getTips(); @@ -748,12 +747,11 @@ public class XmTaskController { return m; } } - xmTaskService.updateProgress(xmTask); - xmTaskService.sumParents(xmTaskDb); - if(!StringUtils.isEmpty(xmTask.getExecutorUserid())) { + xmTaskService.updateProgress(xmTask,xmTaskDb); + if(!StringUtils.isEmpty(xmTaskDb.getExecutorUserid())) { if(pgroups!=null && pgroups.size()>0) { for (XmProjectGroupVo g : pgroups) { - xmPushMsgService.pushGroupMsg(user.getBranchId(), g.getId(), user.getUserid(), user.getUsername(), user.getUsername()+"将任务【"+xmTask.getName()+"】进度更新为"+xmTask.getRate()+"%"); + xmPushMsgService.pushGroupMsg(user.getBranchId(), g.getId(), user.getUserid(), user.getUsername(), user.getUsername()+"将任务【"+xmTaskDb.getName()+"】进度更新为"+xmTask.getRate()+"%"); } } } @@ -835,6 +833,8 @@ public class XmTaskController { g.setExecutorUserid(user.getUserid()); g.setExecutorUsername(user.getUsername()); g.setCbranchId(user.getBranchId()); + g.setExeUserids(null); + g.setExeUsernames(null); g.setCdeptid(user.getDeptid()); if("1".equals(g.getTaskOut())) { taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero)); @@ -853,10 +853,6 @@ public class XmTaskController { xmTaskService.parentIdPathsCalcBeforeSave(xmTasks); xmTaskService.batchImportFromTemplate(xmTasks); - - - - for (XmTask t : xmTasks) { xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量新增任务", "新增任务"+t.getName(),JSON.toJSONString(t),null); 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 27ff83a9..f3c1cd83 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 @@ -52,11 +52,7 @@ public class XmTaskService extends BaseService { @Transactional public int[] doBatchDelete(List batchValues) { int[] i2= super.batchDelete(batchValues); - List list= batchValues.stream().filter(i->!batchValues.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList()); - list=list.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList()); - if(list.size()>0){ - this.updateChildrenCntByIds(list.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); - } + this.batchSumParents(batchValues); return i2; } @@ -163,9 +159,8 @@ public class XmTaskService extends BaseService { XmTask xmTask = new XmTask(); BeanUtils.copyProperties(xmTaskVo,xmTask); this.insert(xmTask); - if(StringUtils.hasText(xmTask.getParentTaskid())){ - this.updateTaskChildrenCntByTaskId(xmTask.getParentTaskid()); + this.sumParents(xmTask); } //新增/更新附件 //xmAttachmentService.insertOrUpdate(xmTaskVo.getId(),TYPE,xmTaskVo.getAttachment()); @@ -181,15 +176,6 @@ public class XmTaskService extends BaseService { return xmTaskVo; } - /** - * 检查该任务是否有子任务,有不允许删除 - * @param taskId - * @return - */ - public boolean checkExistsChildren(String taskId) { - Long i=this.selectOne("checkExistsChildren", taskId); - return i>0; - } /** * 有执行人,有子任务都不允许删除 * @param xmTask @@ -198,29 +184,26 @@ public class XmTaskService extends BaseService { public void deleteTask(XmTask xmTask) { this.deleteByPk(xmTask); if(StringUtils.hasText(xmTask.getParentTaskid())){ - this.updateTaskChildrenCntByTaskId(xmTask.getParentTaskid()); + this.sumParents(xmTask); } - this.sumParents(xmTask); - } - - private Long checkExistsExecuser(String taskId) { - Long i= this.selectOne("checkExistsExecuser", taskId); - return i; } @Transactional - public void updateTask(XmTaskVo xmTaskVo) { + public void updateTask(XmTaskVo xmTaskVo,XmTask xmTaskDb) { XmTask xmTask = new XmTask(); BeanUtils.copyProperties(xmTaskVo,xmTask); xmTask.setSortLevel(xmTaskVo.getSortLevel()); if(StringUtils.isEmpty(xmTask.getMilestone())){ xmTask.setMilestone("0"); } - this.updateSomeFieldByPk(xmTask); + this.updateSomeFieldByPk(xmTask); + if(StringUtils.hasText(xmTaskDb.getParentTaskid())){ + this.sumParents(xmTaskDb); + } xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-更新任务基础信息", "更新任务"+xmTask.getName(),JSONObject.toJSONString(xmTask),null); } @Transactional - public void updateTime(XmTask xmTask) { + public void updateTime(XmTask xmTask,XmTask xmTaskDb) { //XmTask oldValue = this.selectOneObject(new XmTask(xmTask.getId())); XmTask xmTask2=new XmTask(); xmTask2.setId(xmTask.getId()); @@ -229,7 +212,9 @@ public class XmTaskService extends BaseService { xmTask2.setActStartTime(xmTask.getActStartTime()); xmTask2.setActEndTime(xmTask.getActEndTime()); this.updateSomeFieldByPk(xmTask); - + if(StringUtils.hasText(xmTaskDb.getParentTaskid())){ + this.sumParents(xmTaskDb); + } //更新父任务的进度 //updateParentProgress(xmTask.getParentTaskid()); xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-计划", "更新任务计划开始时间为"+ @@ -237,13 +222,16 @@ public class XmTaskService extends BaseService { "实际开始时间:"+DateUtils.format(xmTask.getActStartTime(),"yyyy-MM-dd")+",实际结束时间为"+DateUtils.format(xmTask.getActEndTime(),"yyyy-MM-dd")); } @Transactional - public void updateProgress(XmTask xmTask) { + public void updateProgress(XmTask xmTask,XmTask xmTaskDb) { //XmTask oldValue = this.selectOneObject(new XmTask(xmTask.getId())); XmTask xmTask2=new XmTask(); xmTask2.setId(xmTask.getId()); xmTask2.setRate(xmTask.getRate()); this.updateSomeFieldByPk(xmTask); - + + if(StringUtils.hasText(xmTaskDb.getParentTaskid())){ + this.sumParents(xmTaskDb); + } //更新父任务的进度 //updateParentProgress(xmTask.getParentTaskid()); xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-进度", "更新任务进度为"+xmTask2.getRate()); @@ -359,11 +347,7 @@ public class XmTaskService extends BaseService { @Transactional public void batchImportFromTemplate(List xmTasks) { this.batchInsert(xmTasks); - List list= xmTasks.stream().filter(i->!xmTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList()); - list=list.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList()); - if(list.size()>0){ - this.updateChildrenCntByIds(list.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); - } + this.batchSumParents(xmTasks); } @@ -380,17 +364,17 @@ public class XmTaskService extends BaseService { @Transactional public void batchInsertOrUpdate(List insertXmTasks,List editXmTasks) { + List all=new ArrayList<>(); if(insertXmTasks!=null && insertXmTasks.size()>0) { this.batchInsert(insertXmTasks); - List list= insertXmTasks.stream().filter(i->!insertXmTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList()); - list=list.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList()); - if(list.size()>0){ - this.updateChildrenCntByIds(list.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); - } - + all.addAll(insertXmTasks); } if(editXmTasks!=null && editXmTasks.size()>0) { this.batchUpdate(editXmTasks); + all.addAll(editXmTasks); + } + if(all.size()>0){ + this.batchSumParents(all); } } @@ -579,12 +563,21 @@ public class XmTaskService extends BaseService { Set set=list.get(i); set.add(pidPathss[i]); } + if(list.size()<=0){ + return; + } Set allSet=new HashSet<>(); for (int i = list.size() - 1; i >= 0; i--) { - allSet.addAll(list.get(i)); - } - if(allSet.size()>0){ - super.update("sumParents",allSet.stream().collect(Collectors.toList())); + Set set=list.get(i); + if(set.size()>0){ + List ids=set.stream().filter(k->!allSet.contains(k)).collect(Collectors.toList()); + if(ids.size()>0){ + allSet.addAll(ids.stream().collect(Collectors.toSet())); + super.update("batchSumParents", ids); + } + + } + } 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 dcfe6a7a..36f9def3 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 @@ -181,13 +181,13 @@ #{item} - - - + + UPDATE xm_task res LEFT JOIN ( SELECT t.parent_taskid, + count(1) as children_cnt, sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost, sum( ifnull( t.budget_workload, 0 ) ) AS budget_workload, sum( ifnull( t.act_cost, 0 ) ) AS act_cost, @@ -200,7 +200,11 @@ FROM xm_task t WHERE - t.parent_taskid = #{item} + t.parent_taskid in + + #{item} + + group by t.parent_taskid ) t2 ON t2.parent_taskid = res.id SET res.budget_cost = t2.budget_cost, res.budget_workload = t2.budget_workload, @@ -210,9 +214,50 @@ res.start_time = t2.start_time, res.end_time = t2.end_time, res.act_start_time = t2.act_start_time, - res.act_end_time = t2.act_end_time + res.act_end_time = t2.act_end_time, + res.children_cnt = ifnull( t2.children_cnt, 0 ) WHERE - res.id = #{item} and res.ntype='1' + res.id in + + #{item} + + and res.ntype='1' + + + + + UPDATE xm_task res + LEFT JOIN ( + SELECT + t.parent_taskid, + count(1) as children_cnt, + sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost, + sum( ifnull( t.budget_workload, 0 ) ) AS budget_workload, + sum( ifnull( t.act_cost, 0 ) ) AS act_cost, + sum( ifnull( t.act_workload, 0 ) ) AS act_workload, + sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) / sum( ifnull( t.budget_workload, 0.00001 ) ) AS rate, + min( t.start_time ) AS start_time, + max( t.end_time ) AS end_time, + min( t.act_start_time ) AS act_start_time, + max( t.act_end_time ) AS act_end_time + FROM + xm_task t + WHERE + t.parent_taskid = #{item} + ) t2 ON t2.parent_taskid = res.id + SET res.budget_cost = t2.budget_cost, + res.budget_workload = t2.budget_workload, + res.act_cost = t2.act_cost, + res.act_workload = t2.act_workload, + res.rate = t2.rate, + res.start_time = t2.start_time, + res.end_time = t2.end_time, + res.act_start_time = t2.act_start_time, + res.act_end_time = t2.act_end_time , + res.children_cnt = ifnull( t2.children_cnt, 0 ) + WHERE + res.id = #{item} + and res.ntype='1'