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 84ba0ad3..0f306fe3 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 @@ -465,6 +465,7 @@ public class XmTaskController { return m; } xmTaskService.deleteTask(xmTask); + xmTaskService.sumParents(xmTaskDb); }catch (BizException e) { tips=e.getTips(); @@ -608,7 +609,8 @@ public class XmTaskController { excludeTaskIds.add(xmTaskVo.getId()); Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds); if(judgetTips.isOk()) { - xmTaskService.updateTask(xmTaskVo); + xmTaskService.updateTask(xmTaskVo); + xmTaskService.sumParents(xmTaskDb); if(!StringUtils.isEmpty(xmTaskVo.getExecutorUserid())) { List groups=groupService.getUserGroups(xmTaskVo.getProjectId(), xmTaskVo.getExecutorUserid()); if(groups!=null && groups.size()>0) { @@ -720,7 +722,8 @@ public class XmTaskController { return m; } } - xmTaskService.updateProgress(xmTask); + xmTaskService.updateProgress(xmTask); + xmTaskService.sumParents(xmTaskDb); if(!StringUtils.isEmpty(xmTask.getExecutorUserid())) { if(pgroups!=null && pgroups.size()>0) { for (XmProjectGroupVo g : pgroups) { @@ -825,6 +828,9 @@ 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/XmMenuService.java b/xm-core/src/main/java/com/xm/core/service/XmMenuService.java index 6d9c88e9..129cea05 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmMenuService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmMenuService.java @@ -217,5 +217,6 @@ public class XmMenuService extends BaseService { this.updateChildrenCntByIds(list.stream().map(i->i.getPmenuId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); } } + } 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 29a4f4fe..a60ed92c 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 @@ -7,6 +7,7 @@ import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.entity.XmProjectPhase; import com.xm.core.entity.XmProjectPhase; +import com.xm.core.entity.XmTask; import com.xm.core.vo.XmProjectGroupVo; import com.xm.core.vo.XmProjectPhaseVo; import org.springframework.beans.factory.annotation.Autowired; @@ -15,10 +16,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -348,5 +346,77 @@ public class XmProjectPhaseService extends BaseService { parentList.add(current); } } + + + @Transactional + public void sumParents(XmTask node){ + String id=node.getId(); + String pidPaths=node.getPidPaths(); + if(!StringUtils.hasText(pidPaths)){ + return; + } + if(!pidPaths.startsWith("0,")){ + return; + } + if("0".equals(node.getNtype())){ + pidPaths=pidPaths.substring(2,pidPaths.indexOf(id)); + }else{ + pidPaths=pidPaths.substring(2); + } + + if(!StringUtils.hasText(pidPaths)){ + return; + } + String[] pidPathss=pidPaths.split(","); + List pidPathsList=new ArrayList<>(); + for (int i = pidPathss.length-1; i >=0; i--) { + pidPathsList.add(pidPathss[i]); + } + if(pidPathsList.size()>0){ + super.update("sumParents",pidPathsList ); + } + + } + @Transactional + public void batchSumParents(List xmTasks) { + List> list=new ArrayList<>(); + for (XmTask node : xmTasks) { + String id=node.getId(); + String pidPaths=node.getPidPaths(); + if(!StringUtils.hasText(pidPaths)){ + continue; + } + if(!pidPaths.startsWith("0,")){ + continue; + } + if("0".equals(node.getNtype())){ + pidPaths=pidPaths.substring(2,pidPaths.indexOf(id)); + }else{ + pidPaths=pidPaths.substring(2); + } + + if(!StringUtils.hasText(pidPaths)){ + continue; + } + String[] pidPathss=pidPaths.split(","); + for (int i = 0; i ()); + } + Set set=list.get(i); + set.add(pidPathss[i]); + } + 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())); + } + + + } + + } } 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 a9c4a8f3..b0c1909e 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 @@ -510,27 +510,6 @@ public class XmTaskService extends BaseService { } return tips; } - @Transactional - public void sumParents(XmTask xmTaskDb){ - - String pidPaths=xmTaskDb.getPidPaths(); - if(!StringUtils.hasText(pidPaths)){ - return; - } - if(!pidPaths.startsWith("0,")){ - return; - } - pidPaths=pidPaths.substring(2); - if(!StringUtils.hasText(pidPaths)){ - return; - } - String[] pidPathss=pidPaths.split(","); - List pidPathsList=new ArrayList<>(); - for (int i = pidPathss.length-1; i >=0; i--) { - pidPathsList.add(pidPathss[i]); - } - super.update("sumParents",pidPathsList ); - } private List getParentList(XmTask currNode){ List parentList=new ArrayList<>(); @@ -565,5 +544,77 @@ public class XmTaskService extends BaseService { parentList.add(current); } } + + + @Transactional + public void sumParents(XmTask node){ + String id=node.getId(); + String pidPaths=node.getPidPaths(); + if(!StringUtils.hasText(pidPaths)){ + return; + } + if(!pidPaths.startsWith("0,")){ + return; + } + if("0".equals(node.getNtype())){ + pidPaths=pidPaths.substring(2,pidPaths.indexOf(id)); + }else{ + pidPaths=pidPaths.substring(2); + } + + if(!StringUtils.hasText(pidPaths)){ + return; + } + String[] pidPathss=pidPaths.split(","); + List pidPathsList=new ArrayList<>(); + for (int i = pidPathss.length-1; i >=0; i--) { + pidPathsList.add(pidPathss[i]); + } + if(pidPathsList.size()>0){ + super.update("sumParents",pidPathsList ); + } + + } + @Transactional + public void batchSumParents(List xmTasks) { + List> list=new ArrayList<>(); + for (XmTask node : xmTasks) { + String id=node.getId(); + String pidPaths=node.getPidPaths(); + if(!StringUtils.hasText(pidPaths)){ + continue; + } + if(!pidPaths.startsWith("0,")){ + continue; + } + if("0".equals(node.getNtype())){ + pidPaths=pidPaths.substring(2,pidPaths.indexOf(id)); + }else{ + pidPaths=pidPaths.substring(2); + } + + if(!StringUtils.hasText(pidPaths)){ + continue; + } + String[] pidPathss=pidPaths.split(","); + for (int i = 0; i ()); + } + Set set=list.get(i); + set.add(pidPathss[i]); + } + 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())); + } + + + } + + } } 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 d400dc75..a486b6b9 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 @@ -92,6 +92,41 @@ ( #{item}) + + + + UPDATE XM.xm_project_phase res + LEFT JOIN ( + SELECT + t.project_id, + t.parent_phase_id, + sum(t.phase_act_inner_user_workload) as phase_act_inner_user_workload, + sum(t.phase_act_out_user_workload) as phase_act_out_user_workload, + sum(t.phase_act_workload) as phase_act_workload, + sum(t.act_inner_user_at) as act_inner_user_at, + sum(t.act_out_user_at) as act_out_user_at, + sum(ifnull(t.act_rate,0)*ifnull(t.task_budget_workload,0))/100/ifnull(sum(ifnull(t.task_budget_workload,0.000001)),999999) as act_rate, + sum(t.task_budget_workload) as task_budget_workload, + sum(t.task_budget_at) as task_budget_at + FROM xm_project_phase t + WHERE + t.parent_taskid=#{item} + GROUP BY + t.project_id, + t.parent_phase_id + ) AS tc ON res.project_id = tc.project_id and res.id=tc.parent_phase_id + SET res.phase_act_inner_user_workload = tc.phase_act_inner_user_workload, + res.phase_act_out_user_workload = tc.phase_act_out_user_workload, + res.phase_act_workload = tc.phase_act_workload, + res.act_inner_user_at = tc.act_inner_user_at, + res.act_out_user_at = tc.act_out_user_at, + res.act_rate= tc.act_rate, + res.task_budget_workload=tc.task_budget_workload, + res.task_budget_at=tc.task_budget_at, + res.calc_time=now() + where res.id=#{item} and res.ntype='1' + +