Browse Source

团队重构

master
陈裕财 3 years ago
parent
commit
08d6f9e5a1
  1. 66
      xm-core/src/main/java/com/xm/core/ProjectQxTool.java
  2. 128
      xm-core/src/main/java/com/xm/core/QxTool.java
  3. 13
      xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java
  4. 78
      xm-core/src/main/java/com/xm/core/service/XmGroupService.java

66
xm-core/src/main/java/com/xm/core/ProjectQxTool.java

@ -1,66 +0,0 @@
package com.xm.core;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@Service
/**
*
权限码0,1,2,3,4,5,67,8,9逗号分割
共10位,不定长暂时只启用前2个位
第0位代表计划及任务指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
第1位代表计划及任务指派及crud时是否检查上下级关系0-默认1是
*/
public class ProjectQxTool {
/**
* 获取
第0位代表计划及任务指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
* @param qxCode
* @return
*/
public static String getTaskScopeQx(String qxCode){
String def="2";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<1){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<1){
return def;
}else{
return qxCodeArr[0];
}
}
}
}
/**
* 获取
第1位代表计划及任务指派及crud时是否检查上下级关系0-默认1是
* @param qxCode
* @return
*/
public static String getTaskTransmitQx(String qxCode){
String def="0";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<2){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<2){
return def;
}else{
return qxCodeArr[1];
}
}
}
}
}

128
xm-core/src/main/java/com/xm/core/QxTool.java

@ -0,0 +1,128 @@
package com.xm.core;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@Service
/**
*
权限码0,1,2,3,4,5,67,8,9逗号分割
共10位,不定长暂时只启用前2个位
第0位代表计划及任务指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
第1位代表计划及任务指派及crud时是否检查上下级关系0-默认1是
*/
public class QxTool {
/**
* 获取
第0位代表计划及任务指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
* @param qxCode
* @return
*/
public static String getTaskScopeQx(String qxCode){
String def="2";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<1){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<1){
return def;
}else{
return qxCodeArr[0];
}
}
}
}
/**
* 获取
第1位代表计划及任务指派及crud时是否检查上下级关系0-默认1是
* @param qxCode
* @return
*/
public static String getTaskTransmitQx(String qxCode){
String def="0";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<2){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<2){
return def;
}else{
return qxCodeArr[1];
}
}
}
}
/**
权限码0,1,2,3,4,5,67,8,9逗号分割
共10位,不定长暂时只启用前6个位
第0位代表需求指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
第1位代表需求指派及crud时是否检查上下级关系0-默认1是
第2位代表测试相关(包括测试用例测试库测试计划测试报告)指派及crud权限同第0位
第3位代表测试相关(包括测试用例测试库测试计划测试报告)指派及crud时是否检查上下级关系同第1位
第4位代表迭代指派及crud时权限同第0位
第5位代表迭代指派及crud时是否检查上下级关系同第1位
* @param qxCode
* @param teamType 0 代表需求相关1代表测试2代表迭代
* @return
*/
public static String getProductScopeQx(String qxCode,int teamType){
String def="2";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<(teamType*2)){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<(teamType*2)){
return def;
}else{
return qxCodeArr[teamType*2];
}
}
}
}
/**
权限码0,1,2,3,4,5,67,8,9逗号分割
共10位,不定长暂时只启用前6个位
第0位代表需求指派及crud权限
0-代表不限制,1-同组织2-同项目组默认3-同小组
第1位代表需求指派及crud时是否检查上下级关系0-默认1是
第2位代表测试相关(包括测试用例测试库测试计划测试报告)指派及crud权限同第0位
第3位代表测试相关(包括测试用例测试库测试计划测试报告)指派及crud时是否检查上下级关系同第1位
第4位代表迭代指派及crud时权限同第0位
第5位代表迭代指派及crud时是否检查上下级关系同第1位
* @param qxCode
* @param teamType 0 代表需求相关1代表测试2代表迭代
* @return
*/
public static String getProductTransmitQx(String qxCode,int teamType){
String def="0";
if(StringUtils.isEmpty(qxCode)){
return def;
}else{
if(qxCode.length()<(2*teamType+1)){
return def;
}else{
String[] qxCodeArr=qxCode.split(",");
if(qxCodeArr.length<(2*teamType+1)){
return def;
}else{
return qxCodeArr[(2*teamType+1)];
}
}
}
}
}

13
xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java

@ -377,10 +377,11 @@ public class XmQuestionController {
return ResponseHelper.failed("data-0","所有数据已不存在"); return ResponseHelper.failed("data-0","所有数据已不存在");
} }
List<XmQuestion> canDel=new ArrayList<>(); List<XmQuestion> canDel=new ArrayList<>();
List<XmQuestion> noMyCreate=new ArrayList<>();
List<XmQuestion> noDel=new ArrayList<>(); List<XmQuestion> noDel=new ArrayList<>();
List<Tips> noDelTips=new ArrayList<>();
/** /**
* 如果有测试计划有产品编号走产品团队判断权限 * 如果有测试计划有产品编号走产品团队判断权限
@ -413,16 +414,18 @@ public class XmQuestionController {
if(productsMap.size()>0){ if(productsMap.size()>0){
for (String productId : productsMap.keySet()) { for (String productId : productsMap.keySet()) {
XmProduct xmProduct=productService.getProductFromCache(productId); XmProduct xmProduct=productService.getProductFromCache(productId);
Tips tips1=groupService.checkProductQx(xmProduct,user);
Tips tips1=groupService.checkProductQx(xmProduct,1,user);
if(!tips1.isOk()){ if(!tips1.isOk()){
noDel.addAll(productsMap.get(productId)); noDel.addAll(productsMap.get(productId));
productsMap.remove(productId); productsMap.remove(productId);
noDelTips.add(tips1);
}else{ }else{
List<XmQuestion> questions=productsMap.get(productId); List<XmQuestion> questions=productsMap.get(productId);
for (XmQuestion question : questions) { for (XmQuestion question : questions) {
tips1=groupService.checkProductQx(xmProduct,user,question.getCreateUserid(),question.getHandlerUserid());
tips1=groupService.checkProductQx(xmProduct,1,user,question.getCreateUserid(),question.getHandlerUserid());
if(!tips1.isOk()){ if(!tips1.isOk()){
noDel.add(question); noDel.add(question);
noDelTips.add(tips1);
}else { }else {
canDel.add(question); canDel.add(question);
} }
@ -438,12 +441,14 @@ public class XmQuestionController {
if(!tips1.isOk()){ if(!tips1.isOk()){
noDel.addAll(projectsMap.get(projectId)); noDel.addAll(projectsMap.get(projectId));
projectsMap.remove(projectId); projectsMap.remove(projectId);
noDelTips.add(tips1);
}else{ }else{
List<XmQuestion> questions=projectsMap.get(projectId); List<XmQuestion> questions=projectsMap.get(projectId);
for (XmQuestion question : questions) { for (XmQuestion question : questions) {
tips1=groupService.checkProjectQx(xmProject,user,question.getCreateUserid(),question.getHandlerUserid()); tips1=groupService.checkProjectQx(xmProject,user,question.getCreateUserid(),question.getHandlerUserid());
if(!tips1.isOk()){ if(!tips1.isOk()){
noDel.add(question); noDel.add(question);
noDelTips.add(tips1);
}else { }else {
canDel.add(question); canDel.add(question);
} }
@ -461,7 +466,7 @@ public class XmQuestionController {
msgs.add(String.format("删除了%s个缺陷。",canDel.size())); msgs.add(String.format("删除了%s个缺陷。",canDel.size()));
} }
if(noDel.size()>0){ if(noDel.size()>0){
msgs.add(String.format("其中%s个缺陷,无权限删除。",noDel.size()));
msgs.add(String.format("其中%s个缺陷,无权限删除。原因【%s】",noDel.size(),noDelTips.stream().map(k->k.getMsg()).collect(Collectors.joining(";"))));
} }
if(canDel.size()>0){ if(canDel.size()>0){
tips.setOkMsg(msgs.stream().collect(Collectors.joining())); tips.setOkMsg(msgs.stream().collect(Collectors.joining()));

78
xm-core/src/main/java/com/xm/core/service/XmGroupService.java

@ -7,7 +7,7 @@ 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.ProjectQxTool;
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;
@ -152,46 +152,52 @@ public class XmGroupService extends BaseService {
} }
public Tips checkProductQx(XmProduct xmProduct,User head){
/**
*
* @param xmProduct
* @param teamType 1-需求人员 2-测试人员
* @param head
* @return
*/
public Tips checkProductQx(XmProduct xmProduct,int teamType,User head){
Tips tips=new Tips(); Tips tips=new Tips();
boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid()); boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid());
if(headIsPm){ if(headIsPm){
return tips; return tips;
} }
tips=this.checkProductScopeQx(xmProduct,head,head.getUserid());
tips=this.checkProductScopeQx(xmProduct,teamType,head,head.getUserid());
if(!tips.isOk()){ if(!tips.isOk()){
return tips; return tips;
} }
return this.checkProductTransmitQx(xmProduct,head.getUserid(),head.getUserid());
return this.checkProductTransmitQx(xmProduct,teamType,head.getUserid(),head.getUserid());
} }
public Tips checkProductQx(XmProduct xmProduct,User head,String ...memUserids){
public Tips checkProductQx(XmProduct xmProduct,int teamType,User head,String ...memUserids){
Tips tips=new Tips("成功"); Tips tips=new Tips("成功");
boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid()); boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid());
if(headIsPm){ if(headIsPm){
return tips; return tips;
} }
tips=this.checkProductScopeQx(xmProduct,head,memUserids);
tips=this.checkProductScopeQx(xmProduct,teamType,head,memUserids);
if(!tips.isOk()){ if(!tips.isOk()){
return tips; return tips;
} }
return this.checkProductTransmitQx(xmProduct,head.getUserid(),memUserids);
return this.checkProductTransmitQx(xmProduct,teamType,head.getUserid(),memUserids);
} }
public Tips checkProductScopeQx(XmProduct xmProduct,User head,String ...memUserids){
public Tips checkProductScopeQx(XmProduct xmProduct,int teamType,User head,String ...memUserids){
Tips tips=new Tips(); Tips tips=new Tips();
if(memUserids==null || memUserids.length==0){ if(memUserids==null || memUserids.length==0){
return this.checkProductScopeQx(xmProduct,head.getUserid(),head.getBranchId());
return this.checkProductScopeQx(xmProduct,teamType,head.getUserid(),head.getBranchId());
} }
Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k)&&!k.equals(head.getUserid())).collect(Collectors.toSet()); Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k)&&!k.equals(head.getUserid())).collect(Collectors.toSet());
if(memUseridSet.size()==0){ if(memUseridSet.size()==0){
return this.checkProductScopeQx(xmProduct,head.getUserid(),head.getBranchId());
return this.checkProductScopeQx(xmProduct,teamType,head.getUserid(),head.getBranchId());
} }
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProduct.getQxCode());
String scopeQx= QxTool.getProductScopeQx(xmProduct.getQxCode(),teamType);
if("1".equals(scopeQx)){//同组织 if("1".equals(scopeQx)){//同组织
if( !head.getBranchId().equals(xmProduct.getBranchId())){ if( !head.getBranchId().equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。");
return tips; return tips;
} }
boolean isAllNull=true; boolean isAllNull=true;
@ -211,15 +217,15 @@ public class XmGroupService extends BaseService {
if(isAllNull){ if(isAllNull){
return tips; return tips;
}else{ }else{
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。");
return tips; return tips;
} }
}else if("2".equals(scopeQx)){//项目
}else if("2".equals(scopeQx)){//产品
List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId()); List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId());
if( !this.checkUserExistsGroup(groups, head.getUserid())){ if( !this.checkUserExistsGroup(groups, head.getUserid())){
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。");
return tips; return tips;
}; };
for (String memUserid : memUseridSet) { for (String memUserid : memUseridSet) {
@ -230,14 +236,14 @@ public class XmGroupService extends BaseService {
return tips; return tips;
}; };
} }
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。");
return tips; return tips;
}else if("3".equals(scopeQx)){//同小组 }else if("3".equals(scopeQx)){//同小组
List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId()); List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId());
List<XmGroupVo> headGroups=groups; List<XmGroupVo> headGroups=groups;
headGroups=this.getUserGroups(groups,head.getUserid()); headGroups=this.getUserGroups(groups,head.getUserid());
if( headGroups==null || headGroups.size()==0 ){ if( headGroups==null || headGroups.size()==0 ){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
tips.setFailureMsg("no-qx-no-same-team","该产品只开放给同产品同小组人员。请先加入产品团队再操作。");
return tips; return tips;
} }
@ -251,7 +257,7 @@ public class XmGroupService extends BaseService {
return tips; return tips;
} }
} }
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
tips.setFailureMsg("no-qx-no-same-team","该产品只开放给同产品同小组人员。请先加入产品团队再操作。");
return tips; return tips;
@ -260,9 +266,9 @@ public class XmGroupService extends BaseService {
} }
public Tips checkProductTransmitQx(XmProduct xmProduct,String headUserid,String ...memUserids){
public Tips checkProductTransmitQx(XmProduct xmProduct,int teamType,String headUserid,String ...memUserids){
Tips tips=new Tips(); Tips tips=new Tips();
String transmitQx= ProjectQxTool.getTaskTransmitQx(xmProduct.getQxCode());
String transmitQx= QxTool.getProductTransmitQx(xmProduct.getQxCode(),teamType);
if("0".equals(transmitQx)){//不检查上下级关系 if("0".equals(transmitQx)){//不检查上下级关系
return tips; return tips;
}else if("1".equals(transmitQx)){//检查上下级关系 }else if("1".equals(transmitQx)){//检查上下级关系
@ -273,22 +279,22 @@ public class XmGroupService extends BaseService {
if(memUseridSet.size()==0){ if(memUseridSet.size()==0){
return tips; return tips;
} }
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProduct.getId());
List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId());
for (String memUserid : memUseridSet) { for (String memUserid : memUseridSet) {
if(this.checkUserIsOtherUserTeamHeadOrAss(groups,headUserid,memUserid)){ if(this.checkUserIsOtherUserTeamHeadOrAss(groups,headUserid,memUserid)){
return tips; return tips;
} }
} }
tips.setFailureMsg("no-qx-transmit-0","该项目开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。");
tips.setFailureMsg("no-qx-transmit-0","该产品开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。");
} }
return tips; return tips;
} }
public Tips checkProductScopeQx(XmProduct xmProduct,String userid,String ubranchId){
public Tips checkProductScopeQx(XmProduct xmProduct,int teamType,String userid,String ubranchId){
Tips tips=new Tips(); Tips tips=new Tips();
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProduct.getQxCode());
String scopeQx= QxTool.getTaskScopeQx(xmProduct.getQxCode());
boolean isPm=this.checkUserIsProductAdm(xmProduct,userid); boolean isPm=this.checkUserIsProductAdm(xmProduct,userid);
if(isPm){ if(isPm){
return tips; return tips;
@ -298,28 +304,28 @@ public class XmGroupService extends BaseService {
User sysUser=sysClient.getUserByUserid(userid); User sysUser=sysClient.getUserByUserid(userid);
if(sysUser==null || StringUtils.isEmpty(sysUser.getUserid())){ if(sysUser==null || StringUtils.isEmpty(sysUser.getUserid())){
//如果账户不存在可能已注销再判断没有意义会导致企业无法操作遗留数据问题 //如果账户不存在可能已注销再判断没有意义会导致企业无法操作遗留数据问题
//tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
//tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。");
return tips; return tips;
} }
if(!sysUser.getBranchId().equals(xmProduct.getBranchId())){ if(!sysUser.getBranchId().equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。");
return tips; return tips;
} }
}else{ }else{
if(!ubranchId.equals(xmProduct.getBranchId())){ if(!ubranchId.equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。");
return tips; return tips;
} }
} }
}else if("2".equals(scopeQx)){//项目
if(!this.checkUserExistsGroup(this.getProjectGroupVoList(xmProduct.getId()), userid)){
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
}else if("2".equals(scopeQx)){//产品
if(!this.checkUserExistsGroup(this.getProductGroupVoList(xmProduct.getId()), userid)){
tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。");
return tips; return tips;
}; };
}else if("3".equals(scopeQx)){//同小组 }else if("3".equals(scopeQx)){//同小组
if(!this.checkUserExistsProjectGroup(xmProduct.getId(), userid)){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
if(!this.checkUserExistsProductGroup(xmProduct.getId(), userid)){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同产品同小组人员。请先加入产品团队再操作。");
return tips; return tips;
} }
} }
@ -361,7 +367,7 @@ public class XmGroupService extends BaseService {
} }
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProject.getQxCode());
String scopeQx= QxTool.getTaskScopeQx(xmProject.getQxCode());
if("1".equals(scopeQx)){//同组织 if("1".equals(scopeQx)){//同组织
if( !head.getBranchId().equals(xmProject.getBranchId())){ if( !head.getBranchId().equals(xmProject.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
@ -434,7 +440,7 @@ public class XmGroupService extends BaseService {
public Tips checkProjectTransmitQx(XmProject xmProject,String headUserid,String ...memUserids){ public Tips checkProjectTransmitQx(XmProject xmProject,String headUserid,String ...memUserids){
Tips tips=new Tips(); Tips tips=new Tips();
String transmitQx= ProjectQxTool.getTaskTransmitQx(xmProject.getQxCode());
String transmitQx= QxTool.getTaskTransmitQx(xmProject.getQxCode());
if("0".equals(transmitQx)){//不检查上下级关系 if("0".equals(transmitQx)){//不检查上下级关系
return tips; return tips;
}else if("1".equals(transmitQx)){//检查上下级关系 }else if("1".equals(transmitQx)){//检查上下级关系
@ -460,7 +466,7 @@ public class XmGroupService extends BaseService {
public Tips checkProjectScopeQx(XmProject xmProject,String userid,String ubranchId){ public Tips checkProjectScopeQx(XmProject xmProject,String userid,String ubranchId){
Tips tips=new Tips(); Tips tips=new Tips();
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProject.getQxCode());
String scopeQx= QxTool.getTaskScopeQx(xmProject.getQxCode());
if("1".equals(scopeQx)){//同组织 if("1".equals(scopeQx)){//同组织
if(!StringUtils.hasText(ubranchId)){ if(!StringUtils.hasText(ubranchId)){
User sysUser=sysClient.getUserByUserid(userid); User sysUser=sysClient.getUserByUserid(userid);

Loading…
Cancel
Save