From 08d6f9e5a16e982eea6abc333b7ce789c03d53b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Fri, 20 Jan 2023 12:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=A2=E9=98=9F=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/xm/core/ProjectQxTool.java | 66 --------- xm-core/src/main/java/com/xm/core/QxTool.java | 128 ++++++++++++++++++ .../xm/core/ctrl/XmQuestionController.java | 13 +- .../com/xm/core/service/XmGroupService.java | 78 ++++++----- 4 files changed, 179 insertions(+), 106 deletions(-) delete mode 100644 xm-core/src/main/java/com/xm/core/ProjectQxTool.java create mode 100644 xm-core/src/main/java/com/xm/core/QxTool.java diff --git a/xm-core/src/main/java/com/xm/core/ProjectQxTool.java b/xm-core/src/main/java/com/xm/core/ProjectQxTool.java deleted file mode 100644 index f91b7087..00000000 --- a/xm-core/src/main/java/com/xm/core/ProjectQxTool.java +++ /dev/null @@ -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]; - } - } - } - } -} diff --git a/xm-core/src/main/java/com/xm/core/QxTool.java b/xm-core/src/main/java/com/xm/core/QxTool.java new file mode 100644 index 00000000..3c5cd84a --- /dev/null +++ b/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)]; + } + } + } + } +} diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java index 6f27367a..7506782c 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java @@ -377,10 +377,11 @@ public class XmQuestionController { return ResponseHelper.failed("data-0","所有数据已不存在"); } List canDel=new ArrayList<>(); - List noMyCreate=new ArrayList<>(); List noDel=new ArrayList<>(); + List noDelTips=new ArrayList<>(); + /** * 如果有测试计划,有产品编号,走产品团队判断权限 @@ -413,16 +414,18 @@ public class XmQuestionController { if(productsMap.size()>0){ for (String productId : productsMap.keySet()) { XmProduct xmProduct=productService.getProductFromCache(productId); - Tips tips1=groupService.checkProductQx(xmProduct,user); + Tips tips1=groupService.checkProductQx(xmProduct,1,user); if(!tips1.isOk()){ noDel.addAll(productsMap.get(productId)); productsMap.remove(productId); + noDelTips.add(tips1); }else{ List questions=productsMap.get(productId); 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()){ noDel.add(question); + noDelTips.add(tips1); }else { canDel.add(question); } @@ -438,12 +441,14 @@ public class XmQuestionController { if(!tips1.isOk()){ noDel.addAll(projectsMap.get(projectId)); projectsMap.remove(projectId); + noDelTips.add(tips1); }else{ List questions=projectsMap.get(projectId); for (XmQuestion question : questions) { tips1=groupService.checkProjectQx(xmProject,user,question.getCreateUserid(),question.getHandlerUserid()); if(!tips1.isOk()){ noDel.add(question); + noDelTips.add(tips1); }else { canDel.add(question); } @@ -461,7 +466,7 @@ public class XmQuestionController { msgs.add(String.format("删除了%s个缺陷。",canDel.size())); } 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){ tips.setOkMsg(msgs.stream().collect(Collectors.joining())); diff --git a/xm-core/src/main/java/com/xm/core/service/XmGroupService.java b/xm-core/src/main/java/com/xm/core/service/XmGroupService.java index 201c39b2..c9462ff0 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmGroupService.java +++ b/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.safe.client.entity.User; 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.service.cache.XmGroupCacheService; 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(); boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid()); if(headIsPm){ return tips; } - tips=this.checkProductScopeQx(xmProduct,head,head.getUserid()); + tips=this.checkProductScopeQx(xmProduct,teamType,head,head.getUserid()); if(!tips.isOk()){ 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("成功"); boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid()); if(headIsPm){ return tips; } - tips=this.checkProductScopeQx(xmProduct,head,memUserids); + tips=this.checkProductScopeQx(xmProduct,teamType,head,memUserids); if(!tips.isOk()){ 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(); if(memUserids==null || memUserids.length==0){ - return this.checkProductScopeQx(xmProduct,head.getUserid(),head.getBranchId()); + return this.checkProductScopeQx(xmProduct,teamType,head.getUserid(),head.getBranchId()); } Set memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k)&&!k.equals(head.getUserid())).collect(Collectors.toSet()); 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( !head.getBranchId().equals(xmProduct.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); return tips; } boolean isAllNull=true; @@ -211,15 +217,15 @@ public class XmGroupService extends BaseService { if(isAllNull){ return tips; }else{ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); return tips; } - }else if("2".equals(scopeQx)){//同项目 + }else if("2".equals(scopeQx)){//同产品 List groups=this.getProductGroupVoList(xmProduct.getId()); if( !this.checkUserExistsGroup(groups, head.getUserid())){ - tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。"); return tips; }; for (String memUserid : memUseridSet) { @@ -230,14 +236,14 @@ public class XmGroupService extends BaseService { return tips; }; } - tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。"); return tips; }else if("3".equals(scopeQx)){//同小组 List groups=this.getProductGroupVoList(xmProduct.getId()); List headGroups=groups; headGroups=this.getUserGroups(groups,head.getUserid()); if( headGroups==null || headGroups.size()==0 ){ - tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","该产品只开放给同产品同小组人员。请先加入产品团队再操作。"); return tips; } @@ -251,7 +257,7 @@ public class XmGroupService extends BaseService { return tips; } } - tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","该产品只开放给同产品同小组人员。请先加入产品团队再操作。"); 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(); - String transmitQx= ProjectQxTool.getTaskTransmitQx(xmProduct.getQxCode()); + String transmitQx= QxTool.getProductTransmitQx(xmProduct.getQxCode(),teamType); if("0".equals(transmitQx)){//不检查上下级关系 return tips; }else if("1".equals(transmitQx)){//检查上下级关系 @@ -273,22 +279,22 @@ public class XmGroupService extends BaseService { if(memUseridSet.size()==0){ return tips; } - List groups=this.getProjectGroupVoList(xmProduct.getId()); + List groups=this.getProductGroupVoList(xmProduct.getId()); for (String memUserid : memUseridSet) { if(this.checkUserIsOtherUserTeamHeadOrAss(groups,headUserid,memUserid)){ 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; } - public Tips checkProductScopeQx(XmProduct xmProduct,String userid,String ubranchId){ + public Tips checkProductScopeQx(XmProduct xmProduct,int teamType,String userid,String ubranchId){ Tips tips=new Tips(); - String scopeQx= ProjectQxTool.getTaskScopeQx(xmProduct.getQxCode()); + String scopeQx= QxTool.getTaskScopeQx(xmProduct.getQxCode()); boolean isPm=this.checkUserIsProductAdm(xmProduct,userid); if(isPm){ return tips; @@ -298,28 +304,28 @@ public class XmGroupService extends BaseService { User sysUser=sysClient.getUserByUserid(userid); if(sysUser==null || StringUtils.isEmpty(sysUser.getUserid())){ //如果账户不存在,可能已注销,再判断没有意义,会导致企业无法操作遗留数据问题 - //tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + //tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); return tips; } if(!sysUser.getBranchId().equals(xmProduct.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); return tips; } }else{ if(!ubranchId.equals(xmProduct.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); 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; }; }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; } } @@ -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( !head.getBranchId().equals(xmProject.getBranchId())){ 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){ Tips tips=new Tips(); - String transmitQx= ProjectQxTool.getTaskTransmitQx(xmProject.getQxCode()); + String transmitQx= QxTool.getTaskTransmitQx(xmProject.getQxCode()); if("0".equals(transmitQx)){//不检查上下级关系 return tips; }else if("1".equals(transmitQx)){//检查上下级关系 @@ -460,7 +466,7 @@ public class XmGroupService extends BaseService { public Tips checkProjectScopeQx(XmProject xmProject,String userid,String ubranchId){ Tips tips=new Tips(); - String scopeQx= ProjectQxTool.getTaskScopeQx(xmProject.getQxCode()); + String scopeQx= QxTool.getTaskScopeQx(xmProject.getQxCode()); if("1".equals(scopeQx)){//同组织 if(!StringUtils.hasText(ubranchId)){ User sysUser=sysClient.getUserByUserid(userid);