diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupController.java index f03c62e7..286430c9 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.mdp.core.entity.Tips; import com.mdp.core.err.BizException; import com.mdp.core.utils.RequestUtils; +import com.mdp.core.utils.ResponseHelper; import com.mdp.mybatis.PageUtils; import com.mdp.qx.HasQx; import com.mdp.safe.client.entity.User; @@ -63,22 +64,38 @@ public class XmProjectGroupController { }) @HasQx(value = "xm_core_xmProjectGroup_updateGroup",name = "批量更新修改项目团队信息",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") @RequestMapping(value="/updateGroup",method=RequestMethod.POST) - public Map updateGroup(@RequestBody List xmProjectGroupVo) { + public Map updateGroup(@RequestBody XmProjectGroup xmProjectGroup) { Tips tips=new Tips("团队更新成功"); Map m = new HashMap<>(); - if(xmProjectGroupVo==null || xmProjectGroupVo.size()==0){ - tips.setFailureMsg("团队列表不能为空"); + if(xmProjectGroup==null){ + tips.setFailureMsg("团队信息不能为空"); m.put("tips", tips); return m; } - String projectId = xmProjectGroupVo.get(0).getProjectId(); - if(!StringUtils.hasText(projectId)){ - tips.setFailureMsg("项目编号projectId不能为空"); - m.put("tips", tips); - return m; + if(StringUtils.hasText(xmProjectGroup.getId())){ + return ResponseHelper.failed("id-0","团队编号不能为空"); + } + XmProjectGroup groupDb=this.xmProjectGroupService.selectOneObject(new XmProjectGroup(xmProjectGroup.getId())); + if(groupDb==null){ + return ResponseHelper.failed("data-0","该团队已不存在"); + } + XmProject xmProject=this.xmProjectService.getProjectFromCache(groupDb.getProjectId()); + if(xmProject==null){ + return ResponseHelper.failed("prj-0","项目已不存在"); + } + if("4".equals(xmProject.getStatus())){ + return ResponseHelper.failed("prj-status-4","项目暂停中,不能操作"); + } + if("9".equals(xmProject.getStatus())){ + return ResponseHelper.failed("prj-status-9","项目已关闭,不能操作"); + } + User user=LoginUtils.getCurrentUserInfo(); + if(!xmProject.getCreateUserid().equals(user.getUserid())&& user.getUserid().equals(xmProject.get)){ + } - tips= xmProjectGroupService.updateGroup(projectId,xmProjectGroupVo); //列出XmProjectGroup列表 + xmProjectGroupService.parentIdPathsCalcBeforeSave(xmProjectGroup); + tips= xmProjectGroupService.updateGroup(xmProjectGroup,groupDb); //列出XmProjectGroup列表 //m.put("data",xmProjectGroupVo); m.put("tips", tips); return m; diff --git a/xm-core/src/main/java/com/xm/core/entity/XmProject.java b/xm-core/src/main/java/com/xm/core/entity/XmProject.java index 8e62d1b0..7366e752 100644 --- a/xm-core/src/main/java/com/xm/core/entity/XmProject.java +++ b/xm-core/src/main/java/com/xm/core/entity/XmProject.java @@ -252,7 +252,17 @@ public class XmProject implements java.io.Serializable { this.assessRemarks = assessRemarks; } /** - * 项目状态,cs-初始,lxz-立项中,ssz-执行中,jxz-结项中,yjx-已结项,ztz-暂停,sq-售前,sh-售后 + * 项目状态, + * 0|初始 + * 1|售前 + * 2|立项中 + * 3|实施中 + * 4|暂停中 + * 5|结项中 + * 6|已结项 + * 7|售后 + * 8|已完成 + * 9|已关闭 **/ public void setStatus(String status) { this.status = status; @@ -511,7 +521,17 @@ public class XmProject implements java.io.Serializable { return this.assessRemarks; } /** - * 项目状态,cs-初始,lxz-立项中,ssz-执行中,jxz-结项中,yjx-已结项,ztz-暂停,sq-售前,sh-售后 + * 项目状态, + * 0|初始 + * 1|售前 + * 2|立项中 + * 3|实施中 + * 4|暂停中 + * 5|结项中 + * 6|已结项 + * 7|售后 + * 8|已完成 + * 9|已关闭 **/ public String getStatus() { return this.status; 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 e6b799b1..8b9431d8 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 @@ -156,307 +156,18 @@ public class XmProjectGroupService extends BaseService { * 4.项目管理者、创建人可以调整小组组长 */ @Transactional - public Tips updateGroup(String projectId,List xmProjectGroupVoList) { - XmProjectGroup group = new XmProjectGroup(); - group.setProjectId(projectId); - List groupListDb = this.selectListByWhere(group); - List delGroups=new ArrayList<>(); - User user=LoginUtils.getCurrentUserInfo(); - XmProject project = xmProjectService.getProjectFromCache(projectId); - List projectGroupVos=this.getProjectGroupVoList(projectId); - Map groupVoMap=new HashMap<>(); - if(projectGroupVos!=null && projectGroupVos.size()>0){ - for (XmProjectGroupVo projectGroupVo : projectGroupVos) { - groupVoMap.put(projectGroupVo.getId(),projectGroupVo); - } - } - List tipsList=new ArrayList<>(); - - boolean isProjectCreate=user.getUserid().equals(project.getCreateUserid()); - boolean isPm = this.checkUserIsProjectManager(projectGroupVos, user.getUserid()); - boolean isHeadPm=this.checkUserIsHeadProjectManager(projectGroupVos,user.getUserid()); - - //查出需要删除的组进行删除组及关联组成员 - groupListDb.forEach(g->{ - - if(xmProjectGroupVoList.stream().noneMatch(new Predicate() { - - @Override - 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; - } - } - })) { - if(!isProjectCreate) { - if(!isPm) { - - throw new BizException("无权操作!只有项目创建人、项目管理者可以删除小组"); - } - } - if("nbxmjl".equals(g.getPgTypeId()) ){ - throw new BizException("无权操作!"+g.getGroupName()+"小组性质属于"+g.getPgTypeName()+",永远不能删除。"); - } - delGroups.add(g); - } - - }); - - - //查询新增的组进行增加并添加组成员,同时查出修改的组进行更新组及成员 - List xmProjectGroupVoAdd=new ArrayList<>(); - List xmProjectGroupVoEdit=new ArrayList<>(); - xmProjectGroupVoList.forEach(vo->{ - if(groupListDb.stream().noneMatch(new Predicate() { - @Override - public boolean test(XmProjectGroup t) { - return t.getGroupName().equals(vo.getGroupName()); - } - })) { - if( isProjectCreate || isPm ) { - xmProjectGroupVoAdd.add(vo); - }else{ - throw new BizException("您无权操作!只有项目创建人、项目管理人员可创建小组"); - } - }else { - xmProjectGroupVoEdit.add(vo); - } - }); - List allUsersFromUi=new ArrayList<>(); - - - if(xmProjectGroupVoEdit.size()>0) { - xmProjectGroupVoEdit.forEach(gvo -> { - gvo.setProjectId(projectId); - XmProjectGroup g = new XmProjectGroup(); - BeanUtils.copyProperties(gvo,g); - //xmProjectGroupService.updateSomeFieldByPk(g); - List guser = gvo.getGroupUsers(); - if( guser !=null && guser.size()>0) { - for (XmProjectGroupUser guser2 : guser) { - guser2.setGroupId(gvo.getId()); - allUsersFromUi.add(guser2); - } - } - }); - - if(allUsersFromUi.size()>0) { - List groupUserDbList=this.xmProjectGroupUserService.selectGroupUserListByProjectId(projectId); - List allUsersAdd=new ArrayList<>(); - List allUsersDel=new ArrayList<>(); - List allUsersEdit=new ArrayList<>(); - //找出新增的用户插入 - //找出删除的用户进行删除 - - allUsersFromUi.forEach(gu->{ - boolean existsInDb=false; - XmProjectGroupUser currDbUser=null; - for (XmProjectGroupUser t : groupUserDbList) { - if(t.getGroupId().equals(gu.getGroupId()) && t.getUserid().equals(gu.getUserid())) { - existsInDb=true; - currDbUser=t; - break; - } - } - if(!existsInDb) { - gu.setJoinTime(new Date()); - gu.setStatus("0"); - if(isPm || isProjectCreate ){ //项目创建者、管理者平躺 - allUsersAdd.add(gu); - }else{ - //小组长可以添加人,但是不能设置组长 - if(!gu.getUserid().equals(user.getUserid())){//不允许自己加自己 - XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId()); - if (this.checkUserIsTeamHead(xmProjectGroupVo, user.getUserid())) { - allUsersAdd.add(gu); - }else{ - tipsList.add(gu.getUsername()+"添加到小组"+xmProjectGroupVo.getGroupName()+"不成功!只有项目创建人、管理者、组长可以添加人员。"); - } - }else{ - tipsList.add("普通用户不允许自己添加自己"); - } - } - - }else { - if(!StringUtils.hasText(currDbUser.getIsHead())){ - currDbUser.setIsHead("0"); - } - if(!StringUtils.hasText(gu.getIsHead())){ - gu.setIsHead("0"); - } - if(!currDbUser.getIsHead().equals(gu.getIsHead())){ - //需要判断我是不是项目创建者、管理者,如果不是则无权利去指定小组组长 - XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId()); - if("nbxmjl".equals(xmProjectGroupVo.getPgTypeId())){ - if(isProjectCreate || isHeadPm ){ - currDbUser.setIsHead(gu.getIsHead()); - allUsersEdit.add(currDbUser); - }else{ - tipsList.add(currDbUser.getUsername()+"组长身份变更被忽略,只有项目创建者、项目经理可以变更项目经理身份"); - } - - }else{ - if(isPm || isProjectCreate){ - currDbUser.setIsHead(gu.getIsHead()); - allUsersEdit.add(currDbUser); - }else{ - tipsList.add(currDbUser.getUsername()+"组长身份变更被忽略,只有项目创建者、管理者可以变更组长身份"); - } - } - - - } - } - }); - groupUserDbList.forEach(gu->{ - if(allUsersFromUi.stream().noneMatch(new Predicate() { - @Override - public boolean test(XmProjectGroupUser t) { - return t.getGroupId().equals(gu.getGroupId()) && t.getUserid().equals(gu.getUserid()); - } - - })) { - // 普通用户不允许删除任何人包括自己,组长可以删除小组除了自己外所有人员。项目创建人、管理者可以删除任何人 - if(isProjectCreate || isPm || isHeadPm ){ - XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId()); - if(!gu.getUserid().equals(user.getUserid())){ - if("nbxmjl".equals(xmProjectGroupVo.getPgTypeId())){ - if(isHeadPm || isProjectCreate ){ - allUsersDel.add(gu); - }else{ - tipsList.add(gu.getUsername()+"移出小组"+xmProjectGroupVo.getGroupName()+"不成功,只有项目经理、项目创建者可以把其他管理者请出内部管理组"); - } - }else{ - allUsersDel.add(gu); - } - }else{ - - if("nbxmjl".equals(xmProjectGroupVo.getPgTypeId())){ - tipsList.add("项目管理者不允许把自己从内部项目经理组中删除"); - }else{ - allUsersDel.add(gu); - } - } - }else{ - if(!gu.getUserid().equals(user.getUserid())) {//删除自己也是不可以的 - XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId()); - if (this.checkUserIsTeamHead(xmProjectGroupVo, user.getUserid())) { - allUsersDel.add(gu); - }else{ - tipsList.add("您不是"+gu.getUsername()+"组长,无权将其移出小组"+xmProjectGroupVo.getGroupName()+"!"); - } - }else{ - tipsList.add("普通用户不允许删除自己"); - } - } - - } - }); - - - - - if(allUsersAdd.size()>0) { - xmProjectGroupUserService.batchInsert(allUsersAdd); - allUsersAdd.forEach(u->{ - Map usermap=new HashMap<>(); - usermap.put("userid", u.getUserid()); - usermap.put("username", u.getUsername()); - List> users=new ArrayList<>(); - users.add(usermap); - pushMsgService.pushJoinChannelGroupMsg(user.getBranchId(), u.getGroupId(), users); - xmRecordService.addXmGroupRecord(projectId,u.getGroupId(), "项目-团队-新增小组成员", "增加组员["+u.getUsername()+"]",u.getUserid(),null); - }); - - - } - if(allUsersDel.size()>0) { - xmProjectGroupUserService.batchDelete(allUsersDel); - allUsersDel.forEach(u->{ - Map usermap=new HashMap<>(); - usermap.put("userid", u.getUserid()); - usermap.put("username", u.getUsername()); - List> users=new ArrayList<>(); - users.add(usermap); - pushMsgService.pushLeaveChannelGroupMsg(user.getBranchId(), u.getGroupId(), users); - xmRecordService.addXmGroupRecord(projectId,u.getGroupId(), "项目-团队-删除小组成员", "删除组员["+u.getUsername()+"]",u.getUserid(),null); - }); - - } - if(allUsersEdit.size()>0) { - List allUsersEdit2=new ArrayList<>(); - allUsersEdit.forEach(u->{ - XmProjectGroupUser u2=new XmProjectGroupUser(); - allUsersEdit2.add(u2); - xmProjectGroupUserService.updateSomeFieldByPk(u2); - xmRecordService.addXmGroupRecord(projectId, u2.getGroupId(),"项目-团队-变更小组成员状态", "变更["+u.getUsername()+"]为 "+("0".equals(u2.getIsHead())?"普通组员":"组长"),u2.getUserid(),null); - }); - } - - } - } - - if(delGroups.size()>0) { - delGroups.forEach(g->{ - - XmProjectGroupUser UserDel = new XmProjectGroupUser(); - UserDel.setGroupId(g.getId()); - xmProjectGroupUserService.delete("deleteByGroupId",UserDel); - XmProjectGroup delGroup=new XmProjectGroup(); - delGroup.setId(g.getId()); - this.deleteByPk(delGroup); - pushMsgService.pushChannelGroupRemoveMsg(user.getBranchId(), g.getId()); - xmRecordService.addXmGroupRecord(projectId, g.getId(),"项目-团队-删除小组", "删除小组["+g.getGroupName()+"]",g.getId(),null); - }); - - } - if(xmProjectGroupVoAdd.size()>0) { - xmProjectGroupVoAdd.forEach(gvo -> { - gvo.setId(xmProjectGroupService.createKey("id")); - gvo.setProjectId(projectId); - XmProjectGroup g = new XmProjectGroup(); - BeanUtils.copyProperties(gvo,g); - xmProjectGroupService.insert(g); - List guser = gvo.getGroupUsers(); - List addGroupUsernames=new ArrayList<>(); - List> users=new ArrayList<>(); - if(guser != null && guser.size() > 0) { - guser.forEach(u -> { - Map userMap=new HashMap<>(); - userMap.put("userid", u.getUserid()); - userMap.put("username", u.getUsername()); - users.add(userMap); - u.setGroupId(gvo.getId()); - u.setJoinTime(new Date()); - u.setStatus("0"); - addGroupUsernames.add(u.getUsername()); - xmProjectGroupUserService.insert(u); - allUsersFromUi.add(u); - }); - } - pushMsgService.pushChannelGroupCreateMsg(user.getBranchId(),g.getProjectId(),g.getId(), g.getId(), g.getGroupName(), user.getUserid(), user.getUsername(), users,"新增小组["+gvo.getGroupName()+"]及以下组员:"+StringUtils.arrayToDelimitedString(addGroupUsernames.toArray(), ",")); + public Tips updateGroup(XmProjectGroup group,XmProjectGroup groupDb) { + Tips tips=new Tips("成功"); + super.updateSomeFieldByPk(group); + this.sumParents(group); + return tips; + } - xmRecordService.addXmGroupRecord(projectId, gvo.getId(),"项目-团队-新增小组", "新增小组["+gvo.getGroupName()+"]及以下组员:"+StringUtils.arrayToDelimitedString(addGroupUsernames.toArray(), ","),JSON.toJSONString(gvo),null); - }); - } - groupCacheService.putGroups(projectId, null); + public void pushMsg(User user,XmProjectGroup g,List> users){ + pushMsgService.pushChannelGroupCreateMsg(user.getBranchId(),g.getProjectId(),g.getId(), g.getId(), g.getGroupName(), user.getUserid(), user.getUsername(), users,"新增小组["+g.getGroupName()+"]及以下组员:"+ users.stream().map(i->(String)i.get("username")).collect(Collectors.joining(","))); - Tips tips=new Tips("全部更新成功"); - if(tipsList.size()>0){ - String tipsMsg=StringUtils.arrayToDelimitedString(tipsList.toArray(),";"); - tips.setOkMsg("更新成功,但是有部分更新被忽略,原因如下:"+tipsMsg); - return tips; - }else{ - return tips; - } - } + } /** * 获取用户在某个项目中的组