From 4ede95ddb18592761d6553e20fa67852d1adecb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Fri, 1 Apr 2022 03:06:34 +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 | 10 ++++++- .../com/xm/core/service/XmTaskService.java | 4 +++ .../mapper/xm/core/dao/XmTaskMapper.xml | 27 ++++++++++++++++--- 3 files changed, 36 insertions(+), 5 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 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} + +