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 15b8b8be..24a33702 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 @@ -123,11 +123,28 @@ public class XmTaskController { public Map addTask(@RequestBody XmTaskVo xmTaskVo) { Map m = new HashMap<>(); Tips tips=new Tips("成功新增一条数据"); - try{ - + try{ + + User user=LoginUtils.getCurrentUserInfo(); + xmTaskVo.setCreateUserid(user.getUserid()); + xmTaskVo.setCreateUsername(user.getUsername()); + xmTaskVo.setExecutorUserid(user.getUserid()); + xmTaskVo.setExecutorUsername(user.getUsername()); xmTaskVo.setCreateTime(new Date()); + List pgroups=groupService.getProjectGroupVoList(xmTaskVo.getProjectId()); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + if(!isHead){ + tips.setFailureMsg("您无权新建任务!项目经理、组长可以新建任务。"); + m.put("tips", tips); + return m; + } xmTaskVo.setRate(BigDecimal.ZERO); - if(xmTaskVo.getMilestone() == ""){ + if( !StringUtils.hasText(xmTaskVo.getMilestone()) ){ xmTaskVo.setMilestone("0"); } String projectPhaseId=xmTaskVo.getProjectPhaseId(); @@ -217,66 +234,6 @@ public class XmTaskController { return m; } - - - @ApiOperation( value = "新增一条xm_task信息",notes="addXmTask,主键如果为空,后台自动生成") - @ApiResponses({ - @ApiResponse(code = 200,response=XmTask.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") - }) - @HasQx(value = "xm_core_xmTask_add",name = "新增任务",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") - @RequestMapping(value="/add",method=RequestMethod.POST) - public Map addXmTask(@RequestBody XmTask xmTask) { - Map m = new HashMap<>(); - Tips tips=new Tips("成功新增一条数据"); - try{ - if(StringUtils.isEmpty(xmTask.getId())) { - xmTask.setId(xmTaskService.createKey("id")); - }else{ - XmTask xmTaskQuery = new XmTask(xmTask.getId()); - if(xmTaskService.countByWhere(xmTaskQuery)>0){ - tips.setFailureMsg("编号重复,请修改编号再提交"); - m.put("tips", tips); - return m; - } - } - xmTask.setCreateTime(new Date()); - xmTask.setRate(BigDecimal.ZERO); - if(xmTask.getMilestone() == ""){ - xmTask.setMilestone("0"); - } - String projectPhaseId=xmTask.getProjectPhaseId(); - BigDecimal zero=BigDecimal.ZERO; - BigDecimal taskBudgetCost=BigDecimal.ZERO; - BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO; - BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO; - BigDecimal taskBudgetNouserAt=BigDecimal.ZERO; - List excludePhaseIds=new ArrayList<>(); - if("1".equals(xmTask.getTaskOut())) { - taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(xmTask.getBudgetCost(),zero)); - }else { - taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(xmTask.getBudgetCost(),zero)); - } - taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt); - excludePhaseIds.add(xmTask.getId()); - Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludePhaseIds); - if(judgetTips.isOk()) { - xmTaskService.insert(xmTask); - xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-新增任务", "新增任务"+xmTask.getName(),JSON.toJSONString(xmTask),null); - }else { - tips=judgetTips; - } - m.put("data",xmTask); - }catch (BizException e) { - tips=e.getTips(); - logger.error("",e); - }catch (Exception e) { - tips.setFailureMsg(e.getMessage()); - logger.error("",e); - } - m.put("tips", tips); - return m; - } - @ApiOperation( value = "删除一条xm_task信息",notes="delXmTask,仅需要上传主键字段") @ApiResponses({ @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") @@ -287,6 +244,36 @@ public class XmTaskController { Map m = new HashMap<>(); Tips tips=new Tips("成功删除一条数据"); try{ + User user=LoginUtils.getCurrentUserInfo(); + if(!StringUtils.hasText(xmTask.getProjectId())){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + if(!StringUtils.hasText(xmTask.getId())){ + tips.setFailureMsg("任务编号不能为空"); + m.put("tips", tips); + return m; + } + + List pgroups=groupService.getProjectGroupVoList(xmTask.getProjectId()); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + if(!isHead){ + tips.setFailureMsg("您无权删除该任务!项目经理、组长可以删除任务。"); + m.put("tips", tips); + return m; + } + XmTask xmTaskDb=this.xmTaskService.selectOneObject(xmTask); + if(xmTaskDb==null){ + tips.setFailureMsg("该任务不存在"); + m.put("tips", tips); + return m; + } xmTaskService.deleteTask(xmTask); }catch (BizException e) { tips=e.getTips(); @@ -308,27 +295,55 @@ public class XmTaskController { public Map editXmTask(@RequestBody XmTaskVo xmTaskVo) { Map m = new HashMap<>(); Tips tips=new Tips("成功更新一条数据"); - try{ + try{ + User user=LoginUtils.getCurrentUserInfo(); + if(!StringUtils.hasText(xmTaskVo.getProjectId())){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + if(!StringUtils.hasText(xmTaskVo.getId())){ + tips.setFailureMsg("任务编号不能为空"); + m.put("tips", tips); + return m; + } + List pgroups=groupService.getProjectGroupVoList(xmTaskVo.getProjectId()); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + XmTask xmTaskDb=this.xmTaskService.selectOneObject(xmTaskVo); + if(xmTaskDb==null){ + tips.setFailureMsg("该任务不存在"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); + if(!isHead){ + tips.setFailureMsg("您无权修改该任务基础信息!项目经理、组长可以修改任务的基础信息。"); + m.put("tips", tips); + return m; + } BigDecimal taskBudgetCost=BigDecimal.ZERO; BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO; BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO; BigDecimal taskBudgetNouserAt=BigDecimal.ZERO; String projectPhaseId=null; BigDecimal zero=BigDecimal.ZERO; - List excludePhaseIds=new ArrayList<>(); + List excludeTaskIds=new ArrayList<>(); projectPhaseId=xmTaskVo.getProjectPhaseId(); if("1".equals(xmTaskVo.getTaskOut())) { taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero)); }else { taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero)); } - taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt); - excludePhaseIds.add(xmTaskVo.getId()); - Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludePhaseIds); + taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt); + excludeTaskIds.add(xmTaskVo.getId()); + Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds); if(judgetTips.isOk()) { xmTaskService.updateTask(xmTaskVo); if(!StringUtils.isEmpty(xmTaskVo.getExecutorUserid())) { - User user=LoginUtils.getCurrentUserInfo(); List groups=groupService.getUserGroups(xmTaskVo.getProjectId(), xmTaskVo.getExecutorUserid()); if(groups!=null && groups.size()>0) { for (XmProjectGroupVo g : groups) { @@ -362,12 +377,38 @@ public class XmTaskController { Map m = new HashMap<>(); Tips tips=new Tips("成功更新一条数据"); try{ + User user=LoginUtils.getCurrentUserInfo(); + if(!StringUtils.hasText(xmTask.getProjectId())){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + if(!StringUtils.hasText(xmTask.getId())){ + tips.setFailureMsg("任务编号不能为空"); + m.put("tips", tips); + return m; + } + List pgroups=groupService.getProjectGroupVoList(xmTask.getProjectId()); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask); + boolean isHead=groupService.checkUserIsHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); + if(!isHead){ + boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); + boolean isExecUser=user.getUserid().equals(xmTaskDb.getExecutorUserid()); + if( !isCreateUser && !isExecUser ){ + tips.setFailureMsg("您无权修改该任务的进度!只有任务执行人、任务负责人、组长、项目经理可以修改任务的进度。"); + m.put("tips", tips); + return m; + } + } xmTaskService.updateProgress(xmTask); if(!StringUtils.isEmpty(xmTask.getExecutorUserid())) { - User user=LoginUtils.getCurrentUserInfo(); - List groups=groupService.getUserGroups(xmTask.getProjectId(), xmTask.getExecutorUserid()); - if(groups!=null && groups.size()>0) { - for (XmProjectGroupVo g : groups) { + 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()+"%"); } } @@ -394,28 +435,71 @@ public class XmTaskController { public Map batchImportFromTemplate(@RequestBody List xmTasks) { Map m = new HashMap<>(); Tips tips=new Tips("成功导入"+xmTasks.size()+"条数据"); - try{ - - + try{ + + User user=LoginUtils.getCurrentUserInfo(); BigDecimal taskBudgetCost=BigDecimal.ZERO; BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO; BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO; BigDecimal taskBudgetNouserAt=BigDecimal.ZERO; - String projectPhaseId=null; + if(xmTasks==null || xmTasks.size()==0){ + tips.setFailureMsg("任务列表不能为空"); + m.put("tips", tips); + return m; + } + XmTask xmTask=xmTasks.get(0); + String projectPhaseId=xmTask.getProjectPhaseId(); + String projectId=xmTask.getProjectId(); + if( !StringUtils.hasText(projectId) ){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + if( !StringUtils.hasText(projectPhaseId) ){ + tips.setFailureMsg("阶段计划编号不能为空"); + m.put("tips", tips); + return m; + } + + List pgroups=groupService.getProjectGroupVoList(projectId); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + if(!isHead){ + tips.setFailureMsg("您无权批量导入任务!项目经理、组长可以批量导入任务。"); + m.put("tips", tips); + return m; + } BigDecimal zero=BigDecimal.ZERO; - List excludePhaseIds=new ArrayList<>(); + List excludeTaskIds=new ArrayList<>(); for (XmTask g : xmTasks) { - projectPhaseId=g.getProjectPhaseId(); + if(!projectPhaseId.equals(g.getProjectPhaseId())){ + tips.setFailureMsg("只能在同一个阶段计划下批量导入任务"); + m.put("tips", tips); + return m; + } + if(!projectId.equals(g.getProjectId())){ + tips.setFailureMsg("只能在同一个项目下批量导入任务"); + m.put("tips", tips); + return m; + } + g.setCreateUserid(user.getUserid()); + g.setCreateUsername(user.getUsername()); + g.setExecutorUserid(user.getUserid()); + g.setExecutorUsername(user.getUsername()); if("1".equals(g.getTaskOut())) { taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero)); }else { taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero)); - } - excludePhaseIds.add(g.getId()); + } + excludeTaskIds.add(g.getId()); } taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt); - Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludePhaseIds); + Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds); if(judgetTips.isOk()) { xmTaskService.batchImportFromTemplate(xmTasks); for (XmTask t : xmTasks) { @@ -440,18 +524,71 @@ public class XmTaskController { @ApiResponses({ @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") }) - @HasQx(value = "xm_core_xmTask_batchRelTasksWithMenu",name = "从故事导入任务",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") + @HasQx(value = "xm_core_xmTask_batchRelTasksWithMenu",name = "批量将任务与一个用户故事关联",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") @RequestMapping(value="/batchRelTasksWithMenu",method=RequestMethod.POST) public Map batchRelTasksWithMenu(@RequestBody List xmTasks) { Map m = new HashMap<>(); - Tips tips=new Tips("成功导入"+xmTasks.size()+"条数据"); - try{ - - xmTaskService.batchRelTasksWithMenu(xmTasks); - for (XmTask t : xmTasks) { + Tips tips=new Tips("成功"+xmTasks.size()+"条任务数据与用户故事关联"); + try{ + User user=LoginUtils.getCurrentUserInfo(); + + if(xmTasks==null || xmTasks.size()==0){ + tips.setFailureMsg("任务列表不能为空"); + m.put("tips", tips); + return m; + } + XmTask xmTask=xmTasks.get(0); + String projectId=xmTask.getProjectId(); + if( !StringUtils.hasText(projectId) ){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + + List pgroups=groupService.getProjectGroupVoList(projectId); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + List allowTasks=new ArrayList<>(); + List noAllowTasks=new ArrayList<>(); + Map xmTaskDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks); + for (XmTask task : xmTaskDbMap.values()) { + if( !projectId.equals(task.getProjectId()) ){ + tips.setFailureMsg("所有任务必须同属于一个项目"); + m.put("tips", tips); + return m; + } + boolean isMyCreate=user.getUserid().equals(task.getCreateUserid()); + if(isMyCreate){ + allowTasks.add(task); + }else{ + boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + if(!isHead){ + noAllowTasks.add(task); + }else { + allowTasks.add(task); + } + } + + } + if(allowTasks.size()>0){ + xmTaskService.batchRelTasksWithMenu(allowTasks); + for (XmTask t : allowTasks) { xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量更新任务", "将任务"+t.getName()+"与故事【"+t.getMenuId()+"-"+t.getMenuName()+"】关联",JSON.toJSONString(t),null); - - } + + } + if(noAllowTasks.size()>0){ + tips.setOkMsg(allowTasks.size()+"个任务成功关联用户故事,另外有"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长可以批量将任务与用户故事进行关联"); + } + + }else{ + if(noAllowTasks.size()>0){ + tips.setFailureMsg(allowTasks.size()+"个任务成功关联用户故事,另外有"+noAllowTasks.size()+"个任务无权操作,只有任务负责人、项目经理、组长可以批量将任务与用户故事进行关联"); + } + } + }catch (BizException e) { tips=e.getTips(); @@ -474,21 +611,60 @@ public class XmTaskController { public Map batchDelXmTask(@RequestBody List xmTasks) { Map m = new HashMap<>(); Tips tips=new Tips("成功删除"+xmTasks.size()+"条数据"); - try{ + try{ + + User user=LoginUtils.getCurrentUserInfo(); + + if(xmTasks==null || xmTasks.size()==0){ + tips.setFailureMsg("任务列表不能为空"); + m.put("tips", tips); + return m; + } + XmTask xmTask=xmTasks.get(0); + String projectId=xmTask.getProjectId(); + if( !StringUtils.hasText(projectId) ){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + + List pgroups=groupService.getProjectGroupVoList(projectId); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + List allowTasks=new ArrayList<>(); + List noAllowTasks=new ArrayList<>(); + Map xmTaskMap=this.xmTaskService.selectTasksMapByTasks(xmTasks); + for (XmTask task : xmTaskMap.values()) { + if( !projectId.equals(task.getProjectId()) ){ + tips.setFailureMsg("所有任务必须同属于一个项目"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + if(!isHead){ + noAllowTasks.add(task); + }else { + allowTasks.add(task); + } + + } List noDelList=new ArrayList<>(); - xmTasks.forEach(t->{ + allowTasks.forEach(t->{ try { xmTaskService.deleteTask(t); } catch (BizException e) { noDelList.add(t.getName()); } }); - if(noDelList.size()>0 && xmTasks.size()>noDelList.size()) { - tips.setOkMsg("成功删除"+(xmTasks.size()-noDelList.size())+"条任务,其中以下任务可能存在未结算的执行人或者存在子任务,不允许删除"+StringUtils.arrayToCommaDelimitedString(noDelList.toArray())); - }if(noDelList.size()>0 && xmTasks.size()==noDelList.size()) { + if(noDelList.size()>0 && allowTasks.size()>noDelList.size()) { + tips.setOkMsg("成功删除"+(allowTasks.size()-noDelList.size())+"条任务,其中以下任务可能存在未结算的执行人或者存在子任务,不允许删除"+StringUtils.arrayToCommaDelimitedString(noDelList.toArray())); + }if(noDelList.size()>0 && allowTasks.size()==noDelList.size()) { tips.setFailureMsg("无法删除,所选任务都存在未结算执行人或者子任务"); }else { - tips.setOkMsg("成功删除"+xmTasks.size()+"条任务"); + tips.setOkMsg("成功删除"+allowTasks.size()+"条任务"); } }catch (BizException e) { tips=e.getTips(); @@ -509,34 +685,125 @@ public class XmTaskController { }) @HasQx(value = "xm_core_xmTask_batchSaveBudget",name = "批量修改任务预算",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") @RequestMapping(value="/batchSaveBudget",method=RequestMethod.POST) - public Map batchSaveBudget(@RequestBody List xmTasks) { + public Map batchSaveBudget(@RequestBody List xmTasks) { Map m = new HashMap<>(); Tips tips=new Tips("成功修改"+xmTasks.size()+"条数据"); - try{ + try{ + User user=LoginUtils.getCurrentUserInfo(); + + if(xmTasks==null || xmTasks.size()==0){ + tips.setFailureMsg("任务列表不能为空"); + m.put("tips", tips); + return m; + } + XmTask xmTask=xmTasks.get(0); + String projectId=xmTask.getProjectId(); + String projectPhaseId=xmTask.getProjectPhaseId(); + if( !StringUtils.hasText(projectId) ){ + tips.setFailureMsg("项目编号不能为空"); + m.put("tips", tips); + return m; + } + if( !StringUtils.hasText(projectPhaseId) ){ + tips.setFailureMsg("阶段计划编号不能为空"); + m.put("tips", tips); + return m; + } + List pgroups=groupService.getProjectGroupVoList(projectId); + if(pgroups==null || pgroups.size()==0){ + tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); + m.put("tips", tips); + return m; + } + + Map allowTasksDbMap=new HashMap<>(); + Map noAllowTasksDbMap=new HashMap<>(); + Map xmTaskDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks); + + Map frontParamsTaskMap=new HashMap<>(); + List insertTasks=new ArrayList<>(); + List updateTasks=new ArrayList<>(); + for (XmTask task : xmTasks) { + if( !projectId.equals(task.getProjectId()) ){ + tips.setFailureMsg("所有任务必须同属于一个项目"); + m.put("tips", tips); + return m; + } + if(!projectPhaseId.equals(task.getProjectPhaseId())){ + tips.setFailureMsg("只能在同一个阶段计划下批量修改任务"); + m.put("tips", tips); + return m; + } + frontParamsTaskMap.put(task.getId(),task); + if(xmTaskDbMap.containsKey(task.getId())){ + updateTasks.add(task); + }else { + task.setCreateUsername(user.getUsername()); + task.setCreateUserid(user.getUserid()); + task.setExecutorUserid(user.getUserid()); + task.setExecutorUsername(user.getUsername()); + task.setCreateTime(new Date()); + insertTasks.add(task); + } + } + for (XmTask task : xmTaskDbMap.values()) { + if( !projectId.equals(task.getProjectId()) ){ + tips.setFailureMsg("所有任务必须同属于一个项目"); + m.put("tips", tips); + return m; + } + if(!projectPhaseId.equals(task.getProjectPhaseId())){ + tips.setFailureMsg("只能在同一个阶段计划下批量修改任务"); + m.put("tips", tips); + return m; + } + boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + if(!isHead){ + noAllowTasksDbMap.put(task.getId(),task); + }else { + allowTasksDbMap.put(task.getId(),task); + } + + } + BigDecimal taskBudgetCost=BigDecimal.ZERO; BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO; BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO; BigDecimal taskBudgetNouserAt=BigDecimal.ZERO; - String projectPhaseId=null; BigDecimal zero=BigDecimal.ZERO; - List excludePhaseIds=new ArrayList<>(); + List excludeTaskIds=new ArrayList<>(); for (XmTask g : xmTasks) { - projectPhaseId=g.getProjectPhaseId(); + if(noAllowTasksDbMap.containsKey(g.getId())){ + continue; + } if("1".equals(g.getTaskOut())) { taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero)); }else { taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero)); } - excludePhaseIds.add(g.getId()); + excludeTaskIds.add(g.getId()); } taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt); - Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludePhaseIds); + Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds); if(judgetTips.isOk()) { - xmTaskService.batchInsertOrUpdate(xmTasks); - for (XmTask t : xmTasks) { + + //过滤掉我没有权限的 + List canUpdateTasks=new ArrayList<>(); + List canInsertTasks=new ArrayList<>(); + for (XmTask task : updateTasks) { + if(allowTasksDbMap.containsKey(task.getId())){ + canUpdateTasks.add(task); + } + } + xmTaskService.batchInsertOrUpdate(insertTasks,canUpdateTasks); + for (XmTask t : canUpdateTasks) { xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null); - + + } + for (XmTask t : canInsertTasks) { + xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null); + } }else { tips=judgetTips; diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java index bfc960a1..965f4d62 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskExecuserController.java @@ -13,6 +13,7 @@ import com.xm.core.entity.XmTaskExecuser; import com.xm.core.service.XmProjectGroupService; import com.xm.core.service.XmProjectGroupUserService; import com.xm.core.service.XmTaskExecuserService; +import com.xm.core.service.XmTaskService; import com.xm.core.vo.XmProjectGroupVo; import io.swagger.annotations.*; import org.apache.commons.logging.Log; @@ -46,6 +47,9 @@ public class XmTaskExecuserController { @Autowired private XmTaskExecuserService xmTaskExecuserService; + + @Autowired + private XmTaskService xmTaskService; @Autowired XmProjectGroupUserService xmProjectGroupUserService; @@ -106,14 +110,16 @@ public class XmTaskExecuserController { Tips tips=new Tips("成功新增一条数据"); try{ String projectId=xmTaskExecuser.getProjectId(); - User user=LoginUtils.getCurrentUserInfo(); - if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { - List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); - if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + User user=LoginUtils.getCurrentUserInfo(); + List pgroups=groupService.getProjectGroupVoList(projectId); + boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + if(!isHead ) { + if(user.getUserid().equals(xmTaskExecuser.getUserid())){ + tips.setFailureMsg(user.getUsername()+"不是组长,无权进行新增任务执行人、候选人等操作"); + }else { + tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权进行新增任务执行人、候选人等操作"); } - } + } if(tips.isOk()) { xmTaskExecuserService.addExecuser(xmTaskExecuser); @@ -146,7 +152,7 @@ public class XmTaskExecuserController { List pgroups=groupService.getProjectGroupVoList(projectId); List noAllowUsers=new ArrayList<>(); List allowUsers=new ArrayList<>(); - + List allowUserNames=new ArrayList<>(); for (XmTaskExecuser xmTaskExecuser : xmTaskExecusers) { if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); @@ -156,17 +162,27 @@ public class XmTaskExecuserController { continue; }else { allowUsers.add(xmTaskExecuser); + allowUserNames.add(xmTaskExecuser.getUsername()); } }else { allowUsers.add(xmTaskExecuser); + allowUserNames.add(xmTaskExecuser.getUsername()); } } if(allowUsers.size()>0) { - xmTaskExecuserService.batchLeave(allowUsers); + xmTaskExecuserService.batchLeave(allowUsers); + if(noAllowUsers.size()>0){ + String usernamestr=StringUtils.arrayToDelimitedString(noAllowUsers.toArray(), "、"); + String allowUserNamesStr=StringUtils.arrayToDelimitedString(allowUserNames.toArray(), "、"); + tips.setOkMsg("成功将【"+allowUserNamesStr+"】请离任务,另外您不是【"+usernamestr+"】的组长,不允许将其请离任务"); + }else{ + String allowUserNamesStr=StringUtils.arrayToDelimitedString(allowUserNames.toArray(), "、"); + tips.setOkMsg("成功将【"+allowUserNamesStr+"】请离任务"); + } }else { String usernamestr=StringUtils.arrayToDelimitedString(noAllowUsers.toArray(), "、"); - tips.setFailureMsg("你不是【"+usernamestr+"】的组长,不允许变更"); + tips.setFailureMsg("成功将0个人请离任务,您不是【"+usernamestr+"】的组长,不允许将其请离任务"); } }catch (BizException e) { tips=e.getTips(); @@ -196,7 +212,12 @@ public class XmTaskExecuserController { User user=LoginUtils.getCurrentUserInfo(); boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + if(user.getUserid().equals(xmTaskExecuser.getUserid())){ + tips.setFailureMsg("组长可以把候选人变更为任务执行人,"+user.getUsername()+"不是组长,无权变更"); + }else { + + tips.setFailureMsg("组长可以把候选人变更为任务执行人,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权变更"); + } } if(tips.isOk()) { @@ -208,7 +229,7 @@ public class XmTaskExecuserController { xmTaskExecuserService.becomeExecute(xmTaskExecuser); } if(!exists) { - tips.setFailureMsg("变更不成功,原因:候选人不在项目组中,请先加入项目团队中。"); + tips.setFailureMsg("变更不成功,原因:候选人不在项目组中,请先将候选人加入项目团队中。"); }else { tips.setOkMsg("变更成功"); } @@ -246,7 +267,7 @@ public class XmTaskExecuserController { List pgroups=groupService.getProjectGroupVoList(projectId); boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + tips.setFailureMsg("自己或者组长可以提交任务到测试,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权提交"); } } @@ -280,9 +301,9 @@ public class XmTaskExecuserController { boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())) { - tips.setFailureMsg(user.getUsername()+"不是组长,无权修改"); + tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是组长,无权提交"); }else { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权提交"); } } @@ -318,9 +339,9 @@ public class XmTaskExecuserController { boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())) { - tips.setFailureMsg(user.getUsername()+"不是组长,无权修改"); + tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是组长,无权修改"); }else { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权提交"); } } @@ -377,10 +398,9 @@ public class XmTaskExecuserController { User user=LoginUtils.getCurrentUserInfo(); if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + tips.setFailureMsg("自己或者组长可以修改任务的报价信息,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); } } if(tips.isOk()) { @@ -389,7 +409,7 @@ public class XmTaskExecuserController { xmTaskExecuserService.quotePrice(xmTaskExecuser); m.put("data",xmTaskExecuser); }else { - tips.setFailureMsg("只有候选状态时可以修改报价信息"); + tips.setFailureMsg("只有任务处于候选状态时可以修改报价信息"); } @@ -421,7 +441,7 @@ public class XmTaskExecuserController { boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); + tips.setFailureMsg("自己申请成为该任务候选人或者组长邀请您成为任务候选人,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权操作"); } } if(tips.isOk()) { @@ -458,7 +478,7 @@ public class XmTaskExecuserController { List pgroups=groupService.getProjectGroupVoList(projectId); boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { - tips.setFailureMsg(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权删除"); + tips.setFailureMsg("只有自己或者组长可以删除任务执行人,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权删除"); } } if(tips.isOk()) { 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 4643078a..42f243b1 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 @@ -123,7 +123,7 @@ public class XmTaskService extends BaseService { List> mapList = this.selectListMapByWhere(xmTask);//所有数据 return mapList; } - + @Transactional public XmTaskVo addTask(XmTaskVo xmTaskVo){ Tips tips = new Tips(); if(StringUtils.isEmpty(xmTaskVo.getId())) { @@ -177,6 +177,7 @@ public class XmTaskService extends BaseService { * 有执行人,有子任务都不允许删除 * @param xmTask */ + @Transactional public void deleteTask(XmTask xmTask) { if(checkExistsChildren(xmTask.getId())) { throw new BizException("有子任务,不允许删除"); @@ -193,6 +194,7 @@ public class XmTaskService extends BaseService { Long i= this.selectOne("checkExistsExecuser", taskId); return i; } + @Transactional public void updateTask(XmTaskVo xmTaskVo) { XmTask xmTask = new XmTask(); BeanUtils.copyProperties(xmTaskVo,xmTask); @@ -203,7 +205,7 @@ public class XmTaskService extends BaseService { this.updateSomeFieldByPk(xmTask); xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-更新任务基础信息", "更新任务"+xmTask.getName(),JSONObject.toJSONString(xmTask),null); } - + @Transactional public void updateProgress(XmTask xmTask) { //XmTask oldValue = this.selectOneObject(new XmTask(xmTask.getId())); XmTask xmTask2=new XmTask(); @@ -215,7 +217,28 @@ public class XmTaskService extends BaseService { //updateParentProgress(xmTask.getParentTaskid()); xmRecordService.addXmTaskRecord(xmTask.getProjectId(), xmTask.getId(), "项目-任务-进度", "更新任务进度为"+xmTask2.getRate()); } - + public Map selectTasksMapByTasks(List xmTasks){ + List ids=new ArrayList<>(); + for (XmTask xmTask : xmTasks) { + ids.add(xmTask.getId()); + } + List tasks= this.selectTaskListByIds(ids); + Map map=new HashMap<>(); + for (XmTask task : tasks) { + map.put(task.getId(),task); + } + return map; + } + public List selectTaskListByTasks(List xmTasks){ + List ids=new ArrayList<>(); + for (XmTask xmTask : xmTasks) { + ids.add(xmTask.getId()); + } + return this.selectTaskListByIds(ids); + } + public List selectTaskListByIds(List ids){ + return super.selectList("selectTaskListByIds",map("ids",ids)); + } /** @@ -236,6 +259,7 @@ public class XmTaskService extends BaseService { * @param flowVars {flowBranchId,agree,procInstId,startUserid,assignee,actId,taskName,mainTitle,branchId,bizKey,commentMsg,eventName,modelKey} 等 * @return 如果tips.isOk==false,将影响流程提交 **/ + @Transactional public void processApprova(Map flowVars) { String eventName=(String) flowVars.get("eventName"); String agree=(String) flowVars.get("agree"); @@ -287,12 +311,12 @@ public class XmTaskService extends BaseService { } } } - + @Transactional private void updateFlowStateByProcInstForDeleteSuccess(Map flowVars) { this.update("updateFlowStateByProcInstForDeleteSuccess", flowVars); } - + @Transactional public void updateFlowStateByProcInst(String flowState,Map flowVars) { flowVars.put("flowState", flowState); flowVars.put("bizFlowState", flowState); @@ -301,8 +325,9 @@ public class XmTaskService extends BaseService { } this.update("updateProcessApprova", flowVars); } - + @Transactional public void batchImportFromTemplate(List xmTasks) { + this.batchInsert(xmTasks); List xmTaskSkillList=new ArrayList<>(); xmTasks.forEach(new Consumer() { @@ -329,7 +354,10 @@ public class XmTaskService extends BaseService { } } }); - xmTaskSkillService.batchInsert(xmTaskSkillList); + if(xmTaskSkillList.size()>0){ + + xmTaskSkillService.batchInsert(xmTaskSkillList); + } } @@ -337,6 +365,7 @@ public class XmTaskService extends BaseService { * 批量更新任务的故事为新的故事或者更新为空 * @param xmTasks */ + @Transactional public void batchRelTasksWithMenu(List xmTasks) { for (XmTask xmTask : xmTasks) { this.update("relTaskWithMenu", xmTask); @@ -344,21 +373,12 @@ public class XmTaskService extends BaseService { } @Transactional - public void batchInsertOrUpdate(List xmTasks) { - List addList=new ArrayList<>(); - List editList=new ArrayList<>(); - for (XmTaskVo vo : xmTasks) { - if("addSub".equals(vo.getOpType())||"add".equals(vo.getOpType())) { - addList.add(vo); - }else { - editList.add(vo); - } - } - if(addList.size()>0) { - this.batchInsert(addList); + public void batchInsertOrUpdate(List insertXmTasks,List editXmTasks) { + if(insertXmTasks!=null && insertXmTasks.size()>0) { + this.batchInsert(insertXmTasks); } - if(editList.size()>0) { - this.batchUpdate(editList); + if(editXmTasks!=null && editXmTasks.size()>0) { + this.batchUpdate(editXmTasks); } } 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 bbacb5a2..764f7f8f 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 @@ -91,6 +91,15 @@ + + +