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 94a9eb3a..ec038a5e 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 @@ -323,7 +323,15 @@ public class XmTaskController { if(fieldKey.size()>0){ fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmTaskMap.get(i) )).collect(Collectors.toSet()); - xmTaskService.editSomeFields(xmTaskMap); + + if(fieldKey.contains("budgetWorkload")){//如果调整了预估工时,需要重新计算进度数据 + if(xmTasksDb.size()>0){ + this.xmTaskService.batchUpdateBudgetWorkloadAndRate(xmTasksDb.stream().map(i->i.getId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); + this.xmTaskService.batchSumParents(xmTasksDb); + } + }else{ + xmTaskService.editSomeFields(xmTaskMap); + } xmRecordService.addXmTaskRecord(xmTask.getProjectId(),xmTask.getId(),"修改项目任务","修改任务"+xmTask.getMenuName(),"", JSON.toJSONString(xmTask)); } 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 8661679b..ef8c8b9e 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 @@ -740,5 +740,9 @@ public class XmTaskService extends BaseService { ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList()); super.update("calcWorkloadByRecord",ids); } + + public void batchUpdateBudgetWorkloadAndRate(List ids) { + super.update("batchUpdateBudgetWorkloadAndRate",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 91859a98..875a84a8 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 @@ -263,7 +263,8 @@ res.act_workload = t2.act_workload, res.rate = case when (ifnull(t2.budget_workload,0) >0) then ifnull(t2.act_workload,0)*100/(ifnull(t2.budget_workload,0) ) when t2.act_workload >0 100 - else 0 end, + when res.task_state in('2','3','4') then 100 + else res.rate end, res.start_time = ifnull(res.start_time,t2.start_time), res.end_time = ifnull(t2.end_time,t2.end_time), res.act_start_time = t2.act_start_time, @@ -307,7 +308,8 @@ res.act_workload = t2.act_workload, res.rate = case when ( ifnull(t2.budget_workload,0)>0) then ifnull(t2.act_workload,0)*100/( ifnull(t2.budget_workload,0)) when t2.act_workload >0 then 100 - else 0 end, + when res.task_state in('2','3','4') then 100 + else res.rate end, res.start_time = ifnull(res.start_time,t2.start_time), res.end_time = ifnull(t2.end_time,t2.end_time), res.act_start_time = t2.act_start_time, @@ -386,14 +388,31 @@ group by w.task_id ) as w on res.id=w.task_id - set res.act_workload=w.workload,res.rate=case when res.budget_workload>0 then ifnull(w.workload,0)*100/ res.budget_workload + set res.act_workload=w.workload,res.rate=case when res.status in('2','3','4') then 100 + when res.budget_workload>0 then ifnull(w.workload,0)*100/ res.budget_workload when w.workload>0 then 100 - else 0 end + else res.rate end where res.id in #{item} + + + + update xm_task res + set + res.init_budget_workload=ifnull(res.init_budget_workload,res.budget_workload), + res.budget_workload=#{budgetWorkload}, + res.rate=case when res.status in('2','3','4') then 100 + when #{budgetWorkload}>0 then ifnull(res.act_workload,0)*100/ #{budgetWorkload} + when res.act_workload>0 then 100 + else res.rate end + where id in + + #{item} + +