diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupUserController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupUserController.java index b192b6e3..d64a3843 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupUserController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProjectGroupUserController.java @@ -14,7 +14,6 @@ import com.xm.core.entity.XmProjectGroupUser; import com.xm.core.service.*; import com.xm.core.service.cache.XmProjectGroupCacheService; import com.xm.core.service.push.XmPushMsgService; -import com.xm.core.vo.XmProjectGroupUserVo; import com.xm.core.vo.XmProjectGroupVo; import io.swagger.annotations.*; import org.apache.commons.logging.Log; @@ -23,10 +22,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; + +import static com.mdp.core.utils.BaseUtils.map; /** * url编制采用rest风格,如对XM.xm_project_group_user xm_project_group_user的操作有增删改查,对应的url分别为:
@@ -110,7 +109,7 @@ public class XmProjectGroupUserController { @ApiResponse(code = 200,response=XmProjectGroupUser.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") }) @RequestMapping(value="/add",method=RequestMethod.POST) - public Map addXmProjectGroupUser(@RequestBody XmProjectGroupUserVo gu) { + public Map addXmProjectGroupUser(@RequestBody XmProjectGroupUser gu) { Map m = new HashMap<>(); Tips tips=new Tips("成功新增一条数据"); try{ @@ -175,8 +174,8 @@ public class XmProjectGroupUserController { List> users=new ArrayList<>(); users.add(usermap); pushMsgService.pushJoinChannelGroupMsg(user.getBranchId(), gu.getGroupId(), users); - if("1".equals(0)){ - xmRecordService.addXmGroupRecord("",gu.getGroupId(), "产品-团队-新增小组成员", "增加组员["+gu.getUsername()+"]",gu.getUserid(),null); + if("1".equals(pgClass)){ + xmRecordService.addXmGroupRecord(gu.getProductId(),gu.getGroupId(), "产品-团队-新增小组成员", "增加组员["+gu.getUsername()+"]",gu.getUserid(),null); }else{ xmRecordService.addXmGroupRecord(gu.getProjectId(),gu.getGroupId(), "项目-团队-新增小组成员", "增加组员["+gu.getUsername()+"]",gu.getUserid(),null); } @@ -198,7 +197,7 @@ public class XmProjectGroupUserController { @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") }) @RequestMapping(value="/del",method=RequestMethod.POST) - public Map delXmProjectGroupUser(@RequestBody XmProjectGroupUserVo gu){ + public Map delXmProjectGroupUser(@RequestBody XmProjectGroupUser gu){ Map m = new HashMap<>(); Tips tips=new Tips("成功删除一条数据"); try{ @@ -206,7 +205,10 @@ public class XmProjectGroupUserController { return ResponseHelper.failed("pk-0","请上送小组编号,用户编号groupId,userid"); } gu=this.xmProjectGroupUserService.selectOneObject(gu); - + if(gu==null){ + return ResponseHelper.failed("data-0","小组已不存在"); + } + String pgClass=gu.getPgClass(); User user=LoginUtils.getCurrentUserInfo(); if("1".equals(pgClass)){ @@ -224,7 +226,7 @@ public class XmProjectGroupUserController { } boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); if(isHead==false){ - return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以添加小组成员。"); + return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以删除小组成员。"); } } }else{ @@ -243,11 +245,24 @@ public class XmProjectGroupUserController { } boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); if(isHead==false){ - return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以添加小组成员。"); + return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以删除小组成员。"); } } } xmProjectGroupUserService.deleteByPk(gu); + Map usermap=new HashMap<>(); + usermap.put("userid", gu.getUserid()); + usermap.put("username", gu.getUsername()); + List> users=new ArrayList<>(); + users.add(usermap); + pushMsgService.pushLeaveChannelGroupMsg(user.getBranchId(), gu.getGroupId(), users); + if("1".equals(pgClass)){ + xmRecordService.addXmGroupRecord(gu.getProductId(),gu.getGroupId(), "项目-团队-删除小组成员", "删除组员["+gu.getUsername()+"]",gu.getUserid(),null); + }else{ + xmRecordService.addXmGroupRecord(gu.getProjectId(),gu.getGroupId(), "项目-团队-删除小组成员", "删除组员["+gu.getUsername()+"]",gu.getUserid(),null); + } + + }catch (BizException e) { tips=e.getTips(); logger.error("",e); @@ -264,12 +279,66 @@ public class XmProjectGroupUserController { @ApiResponse(code = 200,response=XmProjectGroupUser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") }) @RequestMapping(value="/edit",method=RequestMethod.POST) - public Map editXmProjectGroupUser(@RequestBody XmProjectGroupUser xmProjectGroupUser) { + public Map editXmProjectGroupUser(@RequestBody XmProjectGroupUser gu0) { Map m = new HashMap<>(); Tips tips=new Tips("成功更新一条数据"); try{ - xmProjectGroupUserService.updateByPk(xmProjectGroupUser); - m.put("data",xmProjectGroupUser); + if(!StringUtils.hasText(gu0.getGroupId())||!StringUtils.hasText(gu0.getUserid())){ + return ResponseHelper.failed("pk-0","请上送小组编号,用户编号groupId,userid"); + } + XmProjectGroupUser gu=this.xmProjectGroupUserService.selectOneObject(gu0); + if(gu==null){ + return ResponseHelper.failed("data-0","小组已不存在"); + } + String pgClass=gu.getPgClass(); + User user=LoginUtils.getCurrentUserInfo(); + if("1".equals(pgClass)){ + + if(!StringUtils.hasText(gu.getProductId())){ + return ResponseHelper.failed("productId-0","请上送小组归属产品编号"); + } + XmProduct xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); + if(xmProduct==null){ + return ResponseHelper.failed("product-0","产品已不存在"); + } + if(!xmProjectGroupService.checkUserIsProductAdm(xmProduct, user.getUserid())){ + XmProjectGroupVo xmProjectGroupVo=this.xmProjectGroupService.getProductGroupFromCache(xmProduct.getId(),gu.getGroupId()); + if(xmProjectGroupVo==null){ + return ResponseHelper.failed("group-0","小组已不存在"); + } + boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); + if(isHead==false){ + return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以修改小组成员。"); + } + } + }else{ + if(!StringUtils.hasText(gu.getProjectId())){ + return ResponseHelper.failed("projectId-0","请上送小组归属项目编号"); + } + + XmProject xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); + if(xmProject==null){ + return ResponseHelper.failed("product-0","产品已不存在"); + } + if(!xmProjectGroupService.checkUserIsProjectAdm(xmProject, user.getUserid())){ + XmProjectGroupVo xmProjectGroupVo=this.xmProjectGroupService.getProductGroupFromCache(xmProject.getId(),gu.getGroupId()); + if(xmProjectGroupVo==null){ + return ResponseHelper.failed("group-0","小组已不存在"); + } + boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); + if(isHead==false){ + return ResponseHelper.failed("not-leader-ass","组长、副组长、组长助理以上人员可以修改小组成员。"); + } + } + } + xmProjectGroupUserService.updateSomeFieldByPk(gu0); + if("0".equals(pgClass)){ + xmRecordService.addXmGroupRecord(gu.getProjectId(), gu.getGroupId(),"项目-团队-修改小组成员信息", "变更["+gu.getUsername()+"]"); + }else { + xmRecordService.addXmGroupRecord(gu.getProductId(), gu.getGroupId(),"项目-团队-修改小组成员信息", "变更["+gu.getUsername()+"]"); + } + + m.put("data",gu); }catch (BizException e) { tips=e.getTips(); logger.error("",e); @@ -288,11 +357,109 @@ public class XmProjectGroupUserController { @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") }) @RequestMapping(value="/batchDel",method=RequestMethod.POST) - public Map batchDelXmProjectGroupUser(@RequestBody List xmProjectGroupUsers) { + public Map batchDelXmProjectGroupUser(@RequestBody List gus) { Map m = new HashMap<>(); - Tips tips=new Tips("成功删除"+xmProjectGroupUsers.size()+"条数据"); - try{ - xmProjectGroupUserService.batchDelete(xmProjectGroupUsers); + if(gus==null || gus.size()==0){ + return ResponseHelper.failed("data-0","请上送要删除的小组成员"); + } + Tips tips=new Tips("成功删除"+gus.size()+"条数据"); + try{ + List gusDb=this.xmProjectGroupUserService.selectListByIds(gus); + if(gusDb.size()==0){ + return ResponseHelper.failed("data-0","要删除的数据已不存在。"); + } + User user=LoginUtils.getCurrentUserInfo(); + XmProjectGroupUser gu=gusDb.get(0); + String productId=gu.getProductId(); + String projectId=gu.getProjectId(); + String pgClass=gu.getPgClass(); + List gus2=new ArrayList<>(); + XmProduct xmProduct=null; + XmProject xmProject=null; + if("1".equals(pgClass)){ + xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); + if(xmProduct==null){ + return ResponseHelper.failed("product-0","产品已不存在"); + } + gus2=gusDb.stream().filter(i->productId.equals(i.getProductId())).collect(Collectors.toList()); + if(gus2.size()projectId.equals(i.getProductId())).collect(Collectors.toList()); + if(gus2.size() groupIds=gusDb.stream().map(i->i.getGroupId()).collect(Collectors.toSet()); + List canDelUsers=new ArrayList<>(); + Map> groupUsersMap=new HashMap<>(); + for (String groupId : groupIds) { + if("1".equals(pgClass)){ + boolean isPm=xmProjectGroupService.checkUserIsProductAdm(xmProduct,user.getUserid()); + if(!isPm){ + XmProjectGroupVo xmProjectGroupVo=this.xmProjectGroupService.getProductGroupFromCache(xmProduct.getId(),groupId); + if(xmProjectGroupVo==null){ + continue; + } + boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); + if(isHead==false){ + continue; + } + } + }else { + boolean isPm=xmProjectGroupService.checkUserIsProjectAdm(xmProject,user.getUserid()); + if(!isPm){ + XmProjectGroupVo xmProjectGroupVo=this.xmProjectGroupService.getProjectGroupFromCache(xmProduct.getId(),groupId); + if(xmProjectGroupVo==null){ + continue; + } + boolean isHead=xmProjectGroupService.checkUserIsTeamHeadOrAss(xmProjectGroupVo,user.getUserid()); + if(isHead==false){ + continue; + } + } + } + List cdus=gus2.stream().filter(i->groupId.equals(i.getGroupId())).collect(Collectors.toList()); + canDelUsers.addAll(cdus); + groupUsersMap.put(groupId,cdus); + } + List msg=new ArrayList<>(); + msg.add("成功删除"+canDelUsers.size()+"个小组用户."); + if(canDelUsers.size()>0){ + xmProjectGroupUserService.doBatchDelete(canDelUsers); + } + List noDelUsers=new ArrayList<>(); + if(canDelUsers.size()i.getUserid().equals(gu0.getUserid())&&i.getGroupId().equals(gu0.getGroupId())).findAny().isPresent()){ + noDelUsers.add(gu0.getUsername()); + } + } + msg.add("以下"+noDelUsers.size()+"个小组用户无权限删除。【"+noDelUsers.stream().collect(Collectors.toSet()).stream().collect(Collectors.joining(","))+"】"); + } + if(canDelUsers.size()!=0){ + tips.setOkMsg(msg.stream().collect(Collectors.joining("\n"))); + }else{ + tips.setFailureMsg(msg.stream().collect(Collectors.joining("\n"))); + } + groupUsersMap.forEach((groupId,groupUsers)->{ + List> users=groupUsers.stream().map(i->map("userid",i.getUserid(),"username",i.getUsername())).collect(Collectors.toList()); + pushMsgService.pushLeaveChannelGroupMsg(user.getBranchId(),groupId, users); + if("0".equals(pgClass)){ + xmRecordService.addXmGroupRecord(projectId,groupId, "项目-团队-删除小组成员", "删除组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); + }else{ + xmRecordService.addXmGroupRecord(productId,groupId, "产品-团队-删除小组成员", "删除组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); + } + }); + + }catch (BizException e) { tips=e.getTips(); logger.error("",e); 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 73411b79..b410501a 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 @@ -878,5 +878,25 @@ public class XmProjectGroupService extends BaseService { return groupVo; } } + public XmProjectGroupVo getProjectGroupFromCache(String projectId, String groupId) { + XmProjectGroupVo groupVo=groupCacheService.getProjectGroup(projectId,groupId); + if(groupVo==null){ + XmProjectGroup group=this.selectOneObject(new XmProjectGroup(groupId)); + if(group==null){ + return null; + }else{ + XmProjectGroupUser xmProjectGroupUser=new XmProjectGroupUser(); + xmProjectGroupUser.setGroupId(groupId); + List users=this.xmProjectGroupUserService.selectListByWhere(xmProjectGroupUser); + XmProjectGroupVo xmProjectGroupVo=new XmProjectGroupVo(); + BeanUtils.copyProperties(group,xmProjectGroupVo); + xmProjectGroupVo.setGroupUsers(users); + this.groupCacheService.putProjectGroup(xmProjectGroupVo); + return xmProjectGroupVo; + } + }else { + return groupVo; + } + } } diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectGroupUserService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectGroupUserService.java index d9aa9232..cc758c35 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectGroupUserService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProjectGroupUserService.java @@ -26,6 +26,14 @@ public class XmProjectGroupUserService extends BaseService { return this.selectList("selectGroupUserListByProductId", productId); } + public List selectListByIds(List gus) { + return super.selectList("selectListByIds",gus); + } + + public void doBatchDelete(List canDelUsers) { + super.batchDelete(canDelUsers); + } + /** 请在此类添加自定义函数 */ } diff --git a/xm-core/src/main/java/com/xm/core/vo/XmProjectGroupUserVo.java b/xm-core/src/main/java/com/xm/core/vo/XmProjectGroupUserVo.java deleted file mode 100644 index e19c7de6..00000000 --- a/xm-core/src/main/java/com/xm/core/vo/XmProjectGroupUserVo.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xm.core.vo; - -import com.xm.core.entity.XmProjectGroupUser; - -public class XmProjectGroupUserVo extends XmProjectGroupUser { - - String pgClass; - - public String getPgClass() { - return pgClass; - } - - public void setPgClass(String pgClass) { - this.pgClass = pgClass; - } - - -}