From bec4fa9d561f0dd3ae122b1c51d13d1de43d4b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Tue, 29 Mar 2022 23:54:58 +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/XmMenuController.java | 7 +++++ .../xm/core/ctrl/XmQuestionController.java | 20 +++++++++---- .../com/xm/core/ctrl/XmTaskController.java | 14 +++++++-- .../core/ctrl/XmTaskWorkloadController.java | 29 ++++++++++++++++++- .../com/xm/core/service/XmTaskService.java | 15 ++++++++++ .../mapper/xm/core/dao/XmTaskMapper.xml | 27 ++++++++++++++--- 6 files changed, 99 insertions(+), 13 deletions(-) diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java index 66593b82..fd5bb22f 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java @@ -13,6 +13,7 @@ import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.PubTool; import com.xm.core.entity.XmMenu; +import com.xm.core.entity.XmQuestion; import com.xm.core.entity.XmTask; import com.xm.core.service.XmMenuService; import com.xm.core.service.XmGroupService; @@ -65,6 +66,9 @@ public class XmMenuController { @Autowired private XmGroupService groupService; + + + Map fieldsMap = BaseUtils.toMap(new XmMenu()); @ApiOperation( value = "查询项目菜单表信息列表",notes="listXmMenu,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiImplicitParams({ @@ -417,6 +421,9 @@ public class XmMenuController { return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); } } + Set fieldKey=xmMenuMap.keySet().stream().filter(i->fieldsMap.containsKey(i)).collect(Collectors.toSet()); + fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmMenuMap.get(i) )).collect(Collectors.toSet()); + xmMenuService.editSomeFields(xmMenuMap); xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"修改产品需求","修改产品需求"+xmMenu.getMenuName(),"", JSON.toJSONString(xmMenu)); diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java index 81dbbc14..a3a18346 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java @@ -14,6 +14,7 @@ import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.entity.XmMenu; import com.xm.core.entity.XmQuestion; +import com.xm.core.entity.XmTask; import com.xm.core.service.XmQuestionService; import com.xm.core.service.push.XmPushMsgService; import com.xm.core.vo.XmQuestionVo; @@ -25,6 +26,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.*; +import java.util.stream.Collectors; /** * url编制采用rest风格,如对XM.xm_question xm_question的操作有增删改查,对应的url分别为:
@@ -49,7 +51,8 @@ public class XmQuestionController { @Autowired private XmPushMsgService xmPushMsgService; - + + Map fieldsMap = BaseUtils.toMap(new XmQuestion()); @ApiOperation( value = "查询xm_question信息列表",notes="listXmQuestion,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiImplicitParams({ @@ -251,13 +254,18 @@ public class XmQuestionController { if(xmQuestionsDb==null ||xmQuestionsDb.size()==0){ ResponseHelper.failed("bugs-0","该bug已不存在"); } - Set fields=new HashSet<>(); - for (String fieldName : xmQuestionMap.keySet()) { - if(fields.contains(fieldName)){ - return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); + Set fieldKey=xmQuestionMap.keySet().stream().filter(i->fieldsMap.containsKey(i)).collect(Collectors.toSet()); + fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmQuestionMap.get(i) )).collect(Collectors.toSet()); + if(fieldKey.size()>0){ + Set fields=new HashSet<>(); + for (String fieldName : xmQuestionMap.keySet()) { + if(fields.contains(fieldName)){ + return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); + } } + xmQuestionService.editSomeFields(xmQuestionMap); } - xmQuestionService.editSomeFields(xmQuestionMap); + //m.put("data",xmMenu); }catch (BizException e) { 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 d143b9ed..cea26788 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 @@ -76,6 +76,8 @@ public class XmTaskController { @Autowired XmProductService xmProductService; + Map fieldsMap = BaseUtils.toMap(new XmTask()); + @ApiOperation( value = "查询xm_task信息列表",notes="listXmTask,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiImplicitParams({ @ApiImplicitParam(name="id",value="任务编号,主键",required=false), @@ -315,8 +317,16 @@ public class XmTaskController { return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); } } - xmTaskService.editSomeFields(xmTaskMap); - xmRecordService.addXmTaskRecord(xmTask.getProjectId(),xmTask.getId(),"修改项目任务","修改任务"+xmTask.getMenuName(),"", JSON.toJSONString(xmTask)); + Set fieldKey=xmTaskMap.keySet().stream().filter(i-> fieldsMap.containsKey(i)).collect(Collectors.toSet()); + fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmTaskMap.get(i) )).collect(Collectors.toSet()); + + if(fieldKey.size()>0){ + fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmTaskMap.get(i) )).collect(Collectors.toSet()); + + xmTaskService.editSomeFields(xmTaskMap); + xmRecordService.addXmTaskRecord(xmTask.getProjectId(),xmTask.getId(),"修改项目任务","修改任务"+xmTask.getMenuName(),"", JSON.toJSONString(xmTask)); + + } //m.put("data",xmMenu); }catch (BizException e) { diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskWorkloadController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskWorkloadController.java index f791b141..595b80f8 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskWorkloadController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskWorkloadController.java @@ -121,6 +121,9 @@ public class XmTaskWorkloadController { if(xmTaskDb==null ){ return failed("data-0","任务已不存在"); } + if("1".equals(xmTaskDb.getNtype())){ + return failed("ntype-1",xmTaskDb.getName()+"为计划,不是任务,不用登记工时"); + } User user= LoginUtils.getCurrentUserInfo(); if(!(user.getUserid().equals(xmTaskDb.getCreateUserid())|| user.getUserid().equals(xmTaskDb.getExecutorUserid()))){ Tips isCreate=xmGroupService.checkIsAdmOrTeamHeadOrAssByPtype(user,xmTaskDb.getCreateUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); @@ -142,6 +145,8 @@ public class XmTaskWorkloadController { xmTaskWorkload.setWstatus("0"); xmTaskWorkload.setProjectId(xmTaskDb.getProjectId()); xmTaskWorkloadService.insert(xmTaskWorkload); + this.xmTaskService.calcWorkloadByRecord(xmTaskDb.getId()); + this.xmTaskService.sumParents(xmTaskDb); m.put("data",xmTaskWorkload); }catch (BizException e) { tips=e.getTips(); @@ -169,7 +174,28 @@ public class XmTaskWorkloadController { if( xmTaskWorkloadDb == null ){ return failed("data-not-exists","数据不存在,无法修改"); } + XmTask xmTaskDb=this.xmTaskService.selectOneObject(new XmTask(xmTaskWorkloadDb.getTaskId())); + if(xmTaskDb==null ){ + return failed("data-0","任务已不存在"); + } + if("1".equals(xmTaskDb.getNtype())){ + return failed("ntype-1",xmTaskDb.getName()+"为计划,不是任务,不用登记工时"); + } + User user= LoginUtils.getCurrentUserInfo(); + if(!(user.getUserid().equals(xmTaskDb.getCreateUserid())|| user.getUserid().equals(xmTaskDb.getExecutorUserid()))){ + Tips isCreate=xmGroupService.checkIsAdmOrTeamHeadOrAssByPtype(user,xmTaskDb.getCreateUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + if(!isCreate.isOk()){ + Tips isExec=xmGroupService.checkIsAdmOrTeamHeadOrAssByPtype(user,xmTaskDb.getExecutorUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + if(!isExec.isOk()){ + return failed("noqx-0","你无权针对该业务进行报工"); + } + + } + } xmTaskWorkloadService.updateSomeFieldByPk(xmTaskWorkload); + this.xmTaskService.sumParents(xmTaskDb); + this.xmTaskService.calcWorkloadByRecord(xmTaskWorkload.getTaskId()); + m.put("data",xmTaskWorkload); }catch (BizException e) { tips=e.getTips(); @@ -246,13 +272,14 @@ public class XmTaskWorkloadController { List msgs=new ArrayList<>(); if(canDel.size()>0){ xmTaskWorkloadService.batchDelete(canDel); + this.xmTaskService.calcWorkloadByRecord(canDelTaskMap.keySet().stream().collect(Collectors.toList())); + this.xmTaskService.batchSumParents(canDelTaskMap.values().stream().collect(Collectors.toList())); msgs.add("成功删除"+canDel.size()+"条工时单据。"); } if(state1Ndel.size()>0){ msgs.add("以下"+state1Ndel.size()+"条工时单据状态为确认状态,不允许删除。【"+state1Ndel.stream().map(i->i.getUsername()+i.getBizDate()).collect(Collectors.joining(","))+"】"); } if(noQxDel.size()>0){ - xmTaskWorkloadService.batchDelete(canDel); msgs.add("以下"+noQxDel.size()+"条工时单据无权限删除,您只能删除你负责的任务的工时单据,【"+noQxDel.stream().map(i->i.getUsername()+i.getBizDate()).collect(Collectors.joining(","))+"】."); } if(canDel.size()>0){ 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 8a07e633..8661679b 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 @@ -725,5 +725,20 @@ public class XmTaskService extends BaseService { public void editSomeFields(Map xmTaskMap) { super.update("editSomeFields",xmTaskMap); } + public void calcWorkloadByRecord(String id) { + if(!StringUtils.hasText(id)){ + return; + } + List ids=new ArrayList<>(); + ids.add(id); + calcWorkloadByRecord(ids); + } + public void calcWorkloadByRecord(List ids) { + if(ids==null || ids.size()<=0){ + return; + } + ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList()); + super.update("calcWorkloadByRecord",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 f559001e..a3f0477d 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 @@ -240,6 +240,7 @@ 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.rworkload, if(t.budget_workload>0,(t.budget_workload-ifnull(t.act_workload,0)),0) ) ) AS rworkload, sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) AS budget_workload_rate, sum( ifnull(t.rate,0)) as total_rate, min( t.start_time ) AS start_time, @@ -258,7 +259,7 @@ SET res.act_cost = t2.act_cost, res.act_workload = t2.act_workload, - res.rate = case when t2.budget_workload=0 or t2.budget_workload is null then if(t2.children_cnt=0 or t2.children_cnt is null,t2.total_rate,t2.total_rate/t2.children_cnt) else t2.budget_workload_rate / t2.budget_workload end, + res.rate = case when (t2.budget_workload=0 or t2.budget_workload is null) and (t2.act_workload is null or t2.act_workload =0 ) and t2.rworkload is null then if(t2.children_cnt=0 or t2.children_cnt is null,t2.total_rate,t2.total_rate/t2.children_cnt) else ifnull(t2.act_workload,0) / ifnull(t2.act_workload,0)+ifnull(t2.rworkload) 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, @@ -282,7 +283,9 @@ count(1) as children_cnt, 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 ) ) as budget_workload_rate, + sum( ifnull( t.rworkload, if(t.budget_workload>0,(t.budget_workload-ifnull(t.act_workload,0)),0) ) ) AS rworkload, + + sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) as budget_workload_rate, sum( ifnull(t.rate,0)) as total_rate, sum( ifnull( t.budget_workload, 0 )) as budget_workload, min( t.act_start_time ) AS act_start_time, @@ -297,8 +300,8 @@ SET res.act_cost = t2.act_cost, res.act_workload = t2.act_workload, - res.rate = case when t2.budget_workload=0 or t2.budget_workload is null then if(t2.children_cnt=0 or t2.children_cnt is null,t2.total_rate,t2.total_rate/t2.children_cnt) else t2.budget_workload_rate / t2.budget_workload end, - res.start_time = ifnull(res.start_time,t2.start_time), + res.rate = case when (t2.budget_workload=0 or t2.budget_workload is null) and (t2.act_workload is null or t2.act_workload =0 ) and t2.rworkload is null then if(t2.children_cnt=0 or t2.children_cnt is null,t2.total_rate,t2.total_rate/t2.children_cnt) else ifnull(t2.act_workload,0) / ifnull(t2.act_workload,0)+ifnull(t2.rworkload) 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, res.act_end_time = t2.act_end_time , @@ -366,6 +369,22 @@ #{item} + + + update xm_task res left join + (select w.task_id, sum(ifnull(w.workload,0)) as workload from xm_task_workload w where w.task_id in + + #{item} + + group by w.task_id + ) + as w on res.id=w.task_id + set res.act_workload=w.workload,res.rate=if(res.rworkload is null and ifnull(w.workload,0)>0 and res.budget_workload>0,ifnull(res.act_workload,0)*100 / (res.budget_workload),ifnull(w.workload,0)*100/(ifnull(w.workload,0)+res.rworkload)) + where res.id in + + #{item} + +