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 24a33702..b4b52b65 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 @@ -137,7 +137,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,user.getUserid(),user.getUserid()); if(!isHead){ tips.setFailureMsg("您无权新建任务!项目经理、组长可以新建任务。"); m.put("tips", tips); @@ -262,7 +262,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,user.getUserid(),user.getUserid()); if(!isHead){ tips.setFailureMsg("您无权删除该任务!项目经理、组长可以删除任务。"); m.put("tips", tips); @@ -319,7 +319,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); if(!isHead){ tips.setFailureMsg("您无权修改该任务基础信息!项目经理、组长可以修改任务的基础信息。"); m.put("tips", tips); @@ -395,7 +395,7 @@ public class XmTaskController { return m; } XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask); - boolean isHead=groupService.checkUserIsHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); if(!isHead){ boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); boolean isExecUser=user.getUserid().equals(xmTaskDb.getExecutorUserid()); @@ -467,7 +467,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,user.getUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,user.getUserid(),user.getUserid()); if(!isHead){ tips.setFailureMsg("您无权批量导入任务!项目经理、组长可以批量导入任务。"); m.put("tips", tips); @@ -564,7 +564,7 @@ public class XmTaskController { if(isMyCreate){ allowTasks.add(task); }else{ - boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,task.getCreateUserid(),user.getUserid()); if(!isHead){ noAllowTasks.add(task); }else { @@ -643,7 +643,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,task.getCreateUserid(),user.getUserid()); if(!isHead){ noAllowTasks.add(task); }else { @@ -757,7 +757,7 @@ public class XmTaskController { m.put("tips", tips); return m; } - boolean isHead=groupService.checkUserIsHead(pgroups,task.getCreateUserid(),user.getUserid()); + boolean isHead=groupService.checkUserIsOtherUserTeamHead(pgroups,task.getCreateUserid(),user.getUserid()); if(!isHead){ noAllowTasksDbMap.put(task.getId(),task); }else { 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 965f4d62..e801a287 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 @@ -112,7 +112,7 @@ public class XmTaskExecuserController { String projectId=xmTaskExecuser.getProjectId(); User user=LoginUtils.getCurrentUserInfo(); List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())){ tips.setFailureMsg(user.getUsername()+"不是组长,无权进行新增任务执行人、候选人等操作"); @@ -155,7 +155,7 @@ public class XmTaskExecuserController { List allowUserNames=new ArrayList<>(); for (XmTaskExecuser xmTaskExecuser : xmTaskExecusers) { if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { //throw new BizException(user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); noAllowUsers.add(xmTaskExecuser.getUsername()); @@ -210,7 +210,7 @@ public class XmTaskExecuserController { String projectId=xmTaskExecuser.getProjectId(); List pgroups=groupService.getProjectGroupVoList(projectId); User user=LoginUtils.getCurrentUserInfo(); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())){ tips.setFailureMsg("组长可以把候选人变更为任务执行人,"+user.getUsername()+"不是组长,无权变更"); @@ -265,7 +265,7 @@ public class XmTaskExecuserController { if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { String projectId=xmTaskExecuser.getProjectId(); List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { tips.setFailureMsg("自己或者组长可以提交任务到测试,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权提交"); } @@ -298,7 +298,7 @@ public class XmTaskExecuserController { User user=LoginUtils.getCurrentUserInfo(); String projectId=xmTaskExecuser.getProjectId(); List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())) { tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是组长,无权提交"); @@ -336,7 +336,7 @@ public class XmTaskExecuserController { User user=LoginUtils.getCurrentUserInfo(); String projectId=xmTaskExecuser.getProjectId(); List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { if(user.getUserid().equals(xmTaskExecuser.getUserid())) { tips.setFailureMsg("组长可以提交该任务的测试结果,"+user.getUsername()+"不是组长,无权修改"); @@ -398,7 +398,7 @@ 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()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { tips.setFailureMsg("自己或者组长可以修改任务的报价信息,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权修改"); } @@ -439,7 +439,7 @@ public class XmTaskExecuserController { if(!user.getUserid().equals(xmTaskExecuser.getUserid())) { List pgroups=groupService.getProjectGroupVoList(projectId); - boolean isHead= groupService.checkUserIsHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { tips.setFailureMsg("自己申请成为该任务候选人或者组长邀请您成为任务候选人,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权操作"); } @@ -476,7 +476,7 @@ 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()); + boolean isHead= groupService.checkUserIsOtherUserTeamHead(pgroups, xmTaskExecuser.getUserid(), user.getUserid()); if(!isHead ) { tips.setFailureMsg("只有自己或者组长可以删除任务执行人,"+user.getUsername()+"不是"+xmTaskExecuser.getUsername()+"的组长,无权删除"); } diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java index b20528af..b49d461b 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java @@ -143,8 +143,14 @@ public class XmProjectGroupService extends BaseService { } groupCacheService.putGroups(projectId, null); } - //更新项目团队 - @Transactional + /* + * 更新项目团队 + * 1.项目经理、项目创建人可以添加项目小组 + * 2.小组长可以添加本小组成员、清空本小组所有成员 + * 3.项目经理、创建人可以任意添加删除成员 + * 4.项目经理、创建人可以调整小组组长 + */ + //@Transactional 无须事务 public List updateGroup(String projectId,List xmProjectGroupVoList) { XmProjectGroup group = new XmProjectGroup(); group.setProjectId(projectId); @@ -156,7 +162,8 @@ public class XmProjectGroupService extends BaseService { List myGroupVos=this.getUserGroups(projectGroupVos, user.getUserid()); boolean isProjectCreate=user.getUserid().equals(project.getCreateUserid()); - boolean isPm = this.checkUserIsProjectManager(projectGroupVos, user.getUserid()); + boolean isPm = this.checkUserIsProjectManager(projectGroupVos, user.getUserid()); + boolean isHeadPm=this.checkUserIsHeadProjectManager(projectGroupVos,user.getUserid()); //查出需要删除的组进行删除组及关联组成员 groupListDb.forEach(g->{ @@ -167,8 +174,11 @@ public class XmProjectGroupService extends BaseService { public boolean test(XmProjectGroupVo t) { if(t.getGroupName().equals(g.getGroupName())) { t.setId(g.getId()); + t.setPgTypeId(g.getPgTypeId()); + t.setPgTypeName(g.getPgTypeName()); return true; }else { + return false; } } @@ -184,7 +194,13 @@ public class XmProjectGroupService extends BaseService { throw new BizException("无权操作!只有项目创建人、项目经理可以删除小组"); } } + for (XmProjectGroup delGroup : delGroups) { + if("nbxmjl".equals(delGroup.getPgTypeId()) && !isProjectCreate ){ + throw new BizException("无权操作!只有项目创建人可以删除内部管理组"); + } + } delGroups.forEach(g->{ + XmProjectGroupUser UserDel = new XmProjectGroupUser(); UserDel.setGroupId(g.getId()); xmProjectGroupUserService.delete("deleteByGroupId",UserDel); @@ -254,6 +270,8 @@ public class XmProjectGroupService extends BaseService { }); } + + List canDelUserByGroupIds=new ArrayList<>(); if(xmProjectGroupVoEdit.size()>0) { xmProjectGroupVoEdit.forEach(gvo -> { @@ -272,24 +290,43 @@ public class XmProjectGroupService extends BaseService { } if(guser==null || guser.size()==0) { + boolean isTeamHead=false; if(!isProjectCreate) { if(!isPm) { - - throw new BizException("无权操作!只有项目创建人、项目经理可以清空小组成员"); + + for (XmProjectGroupVo myGroupVo : myGroupVos) { + if(myGroupVo.getId().equals(gvo.getId())){ + List groupUsers=myGroupVo.getGroupUsers(); + for (XmProjectGroupUser groupUser : groupUsers) { + if("1".equals(groupUser.getIsHead())){ + isTeamHead=true; + break; + } + } + } + + } + } } - - XmProjectGroupUser userDel = new XmProjectGroupUser(); - userDel.setGroupId(gvo.getId()); - int i=xmProjectGroupUserService.delete("deleteByGroupId",userDel); - if(i>0) { - xmRecordService.addXmGroupRecord(projectId,gvo.getId(), "项目-团队-删除小组成员", "删除小组["+gvo.getGroupName()+"]中所有组员["+i+"]个",JSON.toJSONString(gvo),null); - } + if(isProjectCreate || isPm || isTeamHead){ + canDelUserByGroupIds.add(gvo); + } } - }); + }); + if(canDelUserByGroupIds.size()>0){ + for (XmProjectGroupVo gvo : canDelUserByGroupIds) { + XmProjectGroupUser userDel=new XmProjectGroupUser(); + userDel.setGroupId(gvo.getId()); + int i=xmProjectGroupUserService.delete("deleteByGroupId",userDel); + if(i>0) { + xmRecordService.addXmGroupRecord(projectId,gvo.getId(), "项目-团队-删除小组成员", "删除小组["+gvo.getGroupName()+"]中所有组员["+i+"]个",JSON.toJSONString(gvo),null); + } + } + } if(allUsersFromUi.size()>0) { - List groupUserList=this.xmProjectGroupUserService.selectGroupUserListByProjectId(projectId); + List groupUserDbList=this.xmProjectGroupUserService.selectGroupUserListByProjectId(projectId); List allUsersAdd=new ArrayList<>(); List allUsersDel=new ArrayList<>(); List allUsersEdit=new ArrayList<>(); @@ -299,7 +336,7 @@ public class XmProjectGroupService extends BaseService { allUsersFromUi.forEach(gu->{ boolean existsInDb=false; XmProjectGroupUser currDbUser=null; - for (XmProjectGroupUser t : groupUserList) { + for (XmProjectGroupUser t : groupUserDbList) { if(t.getGroupId().equals(gu.getGroupId()) && t.getUserid().equals(gu.getUserid())) { existsInDb=true; currDbUser=t; @@ -329,7 +366,7 @@ public class XmProjectGroupService extends BaseService { } }); - groupUserList.forEach(gu->{ + groupUserDbList.forEach(gu->{ if(allUsersFromUi.stream().noneMatch(new Predicate() { @Override @@ -482,7 +519,7 @@ public class XmProjectGroupService extends BaseService { } public boolean checkUserExistsGroup(String projectId,String userid){ List userGroups=getUserGroups(projectId,userid); - return userGroups.size()>0; + return userGroups!=null && userGroups.size()>0; } /** @@ -492,7 +529,7 @@ public class XmProjectGroupService extends BaseService { * @param headUserid * @return */ - public boolean checkUserIsHead( List xmProjectGroupVoList,String memUserid,String headUserid){ + public boolean checkUserIsOtherUserTeamHead(List xmProjectGroupVoList, String memUserid, String headUserid){ if(xmProjectGroupVoList==null || xmProjectGroupVoList.size()==0) { return false; } @@ -530,8 +567,13 @@ public class XmProjectGroupService extends BaseService { return null; } - - public XmProjectGroupUser getHeadProjectManager( List xmProjectGroupVoList){ + + /** + * 找到项目经理 + * @param xmProjectGroupVoList + * @return + */ + public XmProjectGroupUser getHeadProjectManager( List xmProjectGroupVoList){ List getProjectManagers=this.getProjectManagers(xmProjectGroupVoList); if(getProjectManagers==null || getProjectManagers.size()==0) { return null; @@ -544,8 +586,30 @@ public class XmProjectGroupService extends BaseService { } return null; } - - public boolean checkUserIsProjectManager( List xmProjectGroupVoList ,String headUserid) { + + /** + * 检测某个用户是否项目经理 + * @param xmProjectGroupVoList + * @param headPmUserid + * @return + */ + public boolean checkUserIsHeadProjectManager( List xmProjectGroupVoList,String headPmUserid){ + XmProjectGroupUser groupUser=this.getHeadProjectManager(xmProjectGroupVoList); + if(groupUser!=null){ + if(groupUser.getUserid().equals(headPmUserid)){ + return true; + } + } + return false; + } + + /** + * 检测某个用户是否属于项目组的内部管理团队成员,内部管理组成员 + * @param xmProjectGroupVoList + * @param pmUserid + * @return + */ + public boolean checkUserIsProjectManager( List xmProjectGroupVoList ,String pmUserid) { if(xmProjectGroupVoList==null || xmProjectGroupVoList.size()==0) { return false; } @@ -554,7 +618,7 @@ public class XmProjectGroupService extends BaseService { return false; } for (XmProjectGroupUser user : getProjectManagers) { - if( user.getUserid().equals(headUserid)) { + if( user.getUserid().equals(pmUserid)) { return true; }