|
|
@ -7,7 +7,6 @@ import com.mdp.core.service.BaseService; |
|
|
import com.mdp.mybatis.PageUtils; |
|
|
import com.mdp.mybatis.PageUtils; |
|
|
import com.mdp.safe.client.entity.User; |
|
|
import com.mdp.safe.client.entity.User; |
|
|
import com.mdp.safe.client.utils.LoginUtils; |
|
|
import com.mdp.safe.client.utils.LoginUtils; |
|
|
import com.xm.core.QxTool; |
|
|
|
|
|
import com.xm.core.entity.*; |
|
|
import com.xm.core.entity.*; |
|
|
import com.xm.core.service.cache.XmGroupCacheService; |
|
|
import com.xm.core.service.cache.XmGroupCacheService; |
|
|
import com.xm.core.service.client.SysClient; |
|
|
import com.xm.core.service.client.SysClient; |
|
|
@ -151,206 +150,6 @@ public class XmGroupService extends BaseService { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
List<XmGroupVo> getProjectGroupsFromLocalCache(Map<String,List<XmGroupVo>> groupsMap,String projectId){ |
|
|
|
|
|
List<XmGroupVo> groupVoList=null; |
|
|
|
|
|
if(groupsMap!=null && groupsMap.containsKey(projectId)){ |
|
|
|
|
|
groupVoList=groupsMap.get(projectId); |
|
|
|
|
|
}else{ |
|
|
|
|
|
groupVoList=xmGroupService.getProjectGroupVoList(projectId); |
|
|
|
|
|
if(groupsMap!=null){ |
|
|
|
|
|
groupsMap.put(projectId,groupVoList); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return groupVoList; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* |
|
|
|
|
|
* @param xmProject |
|
|
|
|
|
* @param head |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
public Tips checkProjectQx(XmProject xmProject,User head){ |
|
|
|
|
|
Tips tips=new Tips("成功"); |
|
|
|
|
|
boolean headIsPm=this.checkUserIsProjectAdm(xmProject,head.getUserid()); |
|
|
|
|
|
if(headIsPm){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
tips=this.checkProjectScopeQx(xmProject,head); |
|
|
|
|
|
if(!tips.isOk()){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
return this.checkProjectTransmitQx(xmProject,head.getUserid(),head.getUserid()); |
|
|
|
|
|
} |
|
|
|
|
|
public Tips checkProjectQx(XmProject xmProject,User head,String ...memUserids){ |
|
|
|
|
|
Tips tips=new Tips("成功"); |
|
|
|
|
|
boolean headIsPm=this.checkUserIsProjectAdm(xmProject,head.getUserid()); |
|
|
|
|
|
if(headIsPm){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
tips=this.checkProjectScopeQx(xmProject,head,memUserids); |
|
|
|
|
|
if(!tips.isOk()){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
return this.checkProjectTransmitQx(xmProject,head.getUserid(),memUserids); |
|
|
|
|
|
} |
|
|
|
|
|
public Tips checkProjectScopeQx(XmProject xmProject,User head,String ...memUserids){ |
|
|
|
|
|
Tips tips=new Tips("成功"); |
|
|
|
|
|
|
|
|
|
|
|
if(memUserids==null || memUserids.length==0){ |
|
|
|
|
|
return this.checkProjectScopeQx(xmProject,head.getUserid(),head.getUsername(),head.getBranchId()); |
|
|
|
|
|
} |
|
|
|
|
|
Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k)&&!k.equals(head.getUserid())).collect(Collectors.toSet()); |
|
|
|
|
|
if(memUseridSet.size()==0){ |
|
|
|
|
|
return this.checkProjectScopeQx(xmProject,head.getUserid(),head.getUsername(),head.getBranchId()); |
|
|
|
|
|
} |
|
|
|
|
|
String username=head.getUsername(); |
|
|
|
|
|
String scopeQx= QxTool.getProjectScopeQx(xmProject.getQxCode()); |
|
|
|
|
|
boolean headIsPm=xmGroupService.checkUserIsProjectAdm(xmProject,head.getUserid()); |
|
|
|
|
|
if("1".equals(scopeQx)){//同组织 |
|
|
|
|
|
if( !headIsPm && !head.getBranchId().equals(xmProject.getBranchId())){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-branch-0",String.format("项目【%s】只开放给同企业人员,【%s】不在企业【%s】中。",xmProject.getId(),username,xmProject.getBranchId())); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
boolean isAllNull=true; |
|
|
|
|
|
for (String memUserid : memUseridSet) {//只要有一个满足条件即可 |
|
|
|
|
|
if(this.checkUserIsProjectAdm(xmProject,memUserid)){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
User sysU=sysClient.getUserByUserid(memUserid); |
|
|
|
|
|
if(sysU==null || StringUtils.isEmpty(sysU.getUserid())){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
isAllNull=false; |
|
|
|
|
|
if(sysU.getBranchId().equals(xmProject.getBranchId())){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if(isAllNull){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
}else{ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-branch-1",String.format("项目【%s】只开放给同企业人员,【%s】不在企业【%s】中。",xmProject.getId(),memUseridSet.stream().collect(Collectors.joining(",")),xmProject.getBranchId())); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else if("2".equals(scopeQx)){//同项目 |
|
|
|
|
|
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProject.getId()); |
|
|
|
|
|
if( !headIsPm && !this.checkUserExistsGroup(groups, head.getUserid())){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-project-0",String.format("项目【%s】只开放给同项目团队人员,【%s】不在项目团队中。",xmProject.getId(),username)); |
|
|
|
|
|
return tips; |
|
|
|
|
|
}; |
|
|
|
|
|
for (String memUserid : memUseridSet) { |
|
|
|
|
|
if(this.checkUserIsProjectAdm(xmProject,memUserid)){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
if( this.checkUserExistsGroup(groups,memUserid) ){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-project-1",String.format("项目【%s】只开放给同项目团队人员,【%s】不在项目团队中。",xmProject.getId(),memUseridSet.stream().collect(Collectors.joining(",")))); |
|
|
|
|
|
return tips; |
|
|
|
|
|
}else if("3".equals(scopeQx)){//同小组 |
|
|
|
|
|
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProject.getId()); |
|
|
|
|
|
List<XmGroupVo> headGroups=groups; |
|
|
|
|
|
|
|
|
|
|
|
if( !headIsPm ){ |
|
|
|
|
|
headGroups=this.getUserGroups(groups,head.getUserid()); |
|
|
|
|
|
if( headGroups==null || headGroups.size()==0 ){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-team-1",String.format("项目【%s】只开放给同项目同小组人员,【%s】不在项目团队中。",xmProject.getId(),username)); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
for (String memUserid : memUseridSet) { |
|
|
|
|
|
if(this.checkUserIsProjectAdm(xmProject,memUserid)){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
List<XmGroupVo> memGroups=this.getUserGroups(headGroups,memUserid); |
|
|
|
|
|
if( memGroups!=null && memGroups.size()>0 ){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-team-2",String.format("项目【%s】只开放给同项目同小组人员,【%s】不在项目团队中。",xmProject.getId(),memUseridSet.stream().collect(Collectors.joining(",")))); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 检查用户是否满足项目权限控制要求 |
|
|
|
|
|
* @param xmProject |
|
|
|
|
|
* @param userid |
|
|
|
|
|
* @param username 只用于显示 |
|
|
|
|
|
* @param ubranchId |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
public Tips checkProjectScopeQx(XmProject xmProject,String userid,String username,String ubranchId){ |
|
|
|
|
|
Tips tips=new Tips("成功"); |
|
|
|
|
|
String scopeQx= QxTool.getProjectScopeQx(xmProject.getQxCode()); |
|
|
|
|
|
boolean isPm=this.checkUserIsProjectAdm(xmProject,userid); |
|
|
|
|
|
if(isPm){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
username=StringUtils.hasText(username)?username:userid; |
|
|
|
|
|
if("1".equals(scopeQx)){//同组织 |
|
|
|
|
|
if(!StringUtils.hasText(ubranchId)){ |
|
|
|
|
|
User sysUser=sysClient.getUserByUserid(userid); |
|
|
|
|
|
if(sysUser==null || StringUtils.isEmpty(sysUser.getUserid())){ |
|
|
|
|
|
//如果账户不存在,可能已注销,再判断没有意义,会导致企业无法操作遗留数据问题 |
|
|
|
|
|
//tips.setFailureMsg("no-qx-branchId","项目【"+xmProject.getId()+"】只开放给同企业人员。"); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
ubranchId=sysUser.getBranchId(); |
|
|
|
|
|
if(!sysUser.getBranchId().equals(xmProject.getBranchId())){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-branch-0",String.format("项目【%s】只开放给同企业人员,【%s】不在企业【%s】中。",xmProject.getId(),username,xmProject.getBranchId())); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
}else{ |
|
|
|
|
|
if(!ubranchId.equals(xmProject.getBranchId())){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-branch-0",String.format("项目【%s】只开放给同企业人员,【%s】不在企业【%s】中。",xmProject.getId(),username,xmProject.getBranchId())); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}else if("2".equals(scopeQx)){//同项目 |
|
|
|
|
|
if(!this.checkUserExistsGroup(this.getProjectGroupVoList(xmProject.getId()), userid)){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-project-0",String.format("项目【%s】只开放给同项目团队人员,【%s】不在项目团队中。",xmProject.getId(),username)); |
|
|
|
|
|
return tips; |
|
|
|
|
|
}; |
|
|
|
|
|
}else if("3".equals(scopeQx)){//同小组 |
|
|
|
|
|
if(!this.checkUserExistsProjectGroup(xmProject.getId(), userid)){ |
|
|
|
|
|
tips.setFailureMsg("prjqx-scope-team-0",String.format("项目【%s】只开放给同项目同小组人员,【%s】不在项目团队中。",xmProject.getId(),username)); |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Tips checkProjectTransmitQx(XmProject xmProject,String headUserid,String ...memUserids){ |
|
|
|
|
|
Tips tips=new Tips("成功"); |
|
|
|
|
|
String transmitQx= QxTool.getProjectTransmitQx(xmProject.getQxCode()); |
|
|
|
|
|
if("0".equals(transmitQx)){//不检查上下级关系 |
|
|
|
|
|
return tips; |
|
|
|
|
|
}else if("1".equals(transmitQx)){//检查上下级关系 |
|
|
|
|
|
if(memUserids==null || memUserids.length==0){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k) && !k.equals(headUserid)).collect(Collectors.toSet()); |
|
|
|
|
|
if(memUseridSet.size()==0){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProject.getId()); |
|
|
|
|
|
for (String memUserid : memUseridSet) { |
|
|
|
|
|
if(this.checkUserIsOtherUserTeamHeadOrAss(groups,headUserid,memUserid)){ |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
tips.setFailureMsg("prjqx-transmit-0", |
|
|
|
|
|
String.format("项目【%s】开启了上下级关系检查,您当前账户不属于【%s】中任意账户的上级,无权操作。",xmProject.getId(),memUseridSet.stream().collect(Collectors.joining(",")))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
return tips; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** 请在此类添加自定义函数 */ |
|
|
/** 请在此类添加自定义函数 */ |
|
|
public List<XmGroupVo> getProjectGroupVoList(String projectId) { |
|
|
public List<XmGroupVo> getProjectGroupVoList(String projectId) { |
|
|
|