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 7506782c..da4922bf 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 @@ -290,6 +290,91 @@ public class XmQuestionController { if(xmQuestionsDb==null ||xmQuestionsDb.size()==0){ ResponseHelper.failed("bugs-0","该bug已不存在"); } + + + List canDel=new ArrayList<>(); + + List noDel=new ArrayList<>(); + + List noDelTips=new ArrayList<>(); + + + /** + * 如果有测试计划,有产品编号,走产品团队判断权限 + * 如果未通过,继续走项目权限判断 + */ + Map> productsMap=new HashMap<>();//有产品的数据 + Map> projectsMap=new HashMap<>();//没有产品、但有项目的数据 + for (XmQuestion xmQuestion : xmQuestionsDb) { + if(StringUtils.hasText(xmQuestion.getProductId())){ + List datas=productsMap.get(xmQuestion.getProductId()); + if(datas==null){ + datas=new ArrayList<>(); + datas.add(xmQuestion); + productsMap.put(xmQuestion.getProductId(),datas); + }else { + datas.add(xmQuestion); + } + }else if(StringUtils.hasText(xmQuestion.getProjectId())) { + List datas=projectsMap.get(xmQuestion.getProjectId()); + if(datas==null){ + datas=new ArrayList<>(); + datas.add(xmQuestion); + projectsMap.put(xmQuestion.getProjectId(),datas); + }else { + datas.add(xmQuestion); + } + } + } + + if(productsMap.size()>0){ + for (String productId : productsMap.keySet()) { + XmProduct xmProduct=productService.getProductFromCache(productId); + 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,1,user,question.getCreateUserid(),question.getHandlerUserid()); + if(!tips1.isOk()){ + noDel.add(question); + noDelTips.add(tips1); + }else { + canDel.add(question); + } + } + + } + } + } + if(projectsMap.size()>0){ + for (String projectId : projectsMap.keySet()) { + XmProject xmProject=projectService.getProjectFromCache(projectId); + Tips tips1=groupService.checkProjectQx(xmProject,user); + 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); + } + } + } + } + } + + + Set fieldKey=xmQuestionMap.keySet().stream().filter(i->fieldsMap.containsKey(i)).collect(Collectors.toSet()); fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmQuestionMap.get(i) )).collect(Collectors.toSet()); if(fieldKey.size()>0){ @@ -380,7 +465,7 @@ public class XmQuestionController { List noDel=new ArrayList<>(); - List noDelTips=new ArrayList<>(); + Map noDelTips=new HashMap<>(); /** @@ -411,21 +496,24 @@ public class XmQuestionController { } } + List productNoDel=new ArrayList<>(); if(productsMap.size()>0){ for (String productId : productsMap.keySet()) { XmProduct xmProduct=productService.getProductFromCache(productId); Tips tips1=groupService.checkProductQx(xmProduct,1,user); if(!tips1.isOk()){ - noDel.addAll(productsMap.get(productId)); + productNoDel.addAll(productsMap.get(productId)); + for (XmQuestion xmQuestion : productsMap.get(productId)) { + noDelTips.put(xmQuestion.getId(),tips1); + } productsMap.remove(productId); - noDelTips.add(tips1); }else{ List questions=productsMap.get(productId); for (XmQuestion question : questions) { tips1=groupService.checkProductQx(xmProduct,1,user,question.getCreateUserid(),question.getHandlerUserid()); if(!tips1.isOk()){ - noDel.add(question); - noDelTips.add(tips1); + productNoDel.add(question); + noDelTips.put(question.getId(),tips1); }else { canDel.add(question); } @@ -434,21 +522,40 @@ public class XmQuestionController { } } } + for (XmQuestion xmQuestion : productNoDel) { + if(StringUtils.hasText(xmQuestion.getProjectId())){ + List ques=projectsMap.get(xmQuestion.getProjectId()); + if(ques!=null){ + if(!ques.stream().filter(k->k.getId().equals(xmQuestion.getId())).findAny().isPresent()){ + ques.add(xmQuestion); + } + }else{ + ques=new ArrayList<>(); + ques.add(xmQuestion); + projectsMap.put(xmQuestion.getProjectId(),ques); + } + + }else{ + noDel.add(xmQuestion); + } + } if(projectsMap.size()>0){ for (String projectId : projectsMap.keySet()) { XmProject xmProject=projectService.getProjectFromCache(projectId); Tips tips1=groupService.checkProjectQx(xmProject,user); if(!tips1.isOk()){ noDel.addAll(projectsMap.get(projectId)); + for (XmQuestion xmQuestion : projectsMap.get(projectId)) { + noDelTips.put(xmQuestion.getId(),tips1); + } 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); + noDelTips.put(question.getId(),tips1); }else { canDel.add(question); } @@ -463,10 +570,18 @@ public class XmQuestionController { List msgs=new ArrayList<>(); if(canDel.size()>0){ + for (XmQuestion xmQuestion : canDel) { + noDelTips.remove(xmQuestion.getId()); + } msgs.add(String.format("删除了%s个缺陷。",canDel.size())); } if(noDel.size()>0){ - msgs.add(String.format("其中%s个缺陷,无权限删除。原因【%s】",noDel.size(),noDelTips.stream().map(k->k.getMsg()).collect(Collectors.joining(";")))); + Set noDelTips2=new HashSet<>(); + for (XmQuestion xmQuestion : noDel) { + Tips tips1=noDelTips.get(xmQuestion.getId()); + noDelTips2.add(tips1.getMsg()); + } + msgs.add(String.format("其中%s个缺陷,无权限删除。原因【%s】",noDel.size(),noDelTips2.stream().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 c9462ff0..8cdf2070 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 @@ -77,7 +77,7 @@ public class XmGroupService extends BaseService { if(!isAdm){ pgroups=this.getProductGroupVoList(productId); if(pgroups==null || pgroups.size()==0){ - return new Tips(false,"group-0","该产品还未建立产品团队,请先进行团队成员维护"); + return new Tips(false,"group-0","产品【"+productId+"】还未建立产品团队,请先进行团队成员维护"); } boolean isHead=this.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),tardgetUserid); if(!isHead){ @@ -96,7 +96,7 @@ public class XmGroupService extends BaseService { if(!isAdm){ pgroups=this.getProjectGroupVoList(projectId); if(pgroups==null || pgroups.size()==0){ - return new Tips(false,"group-0","该项目还未建立项目团队,请先进行团队成员维护"); + return new Tips(false,"group-0","项目【"+projectId+"】还未建立项目团队,请先进行团队成员维护"); } boolean isHead=this.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),tardgetUserid); if(!isHead){ @@ -197,7 +197,7 @@ public class XmGroupService extends BaseService { 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","产品【"+xmProduct.getId()+"】只开放给同企业人员。"); return tips; } boolean isAllNull=true; @@ -217,7 +217,7 @@ public class XmGroupService extends BaseService { if(isAllNull){ return tips; }else{ - tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","产品【"+xmProduct.getId()+"】只开放给同企业人员。"); return tips; } @@ -225,7 +225,7 @@ public class XmGroupService extends BaseService { }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","产品【"+xmProduct.getId()+"】只开放给同产品组人员。请先加入产品团队再操作。"); return tips; }; for (String memUserid : memUseridSet) { @@ -236,14 +236,14 @@ public class XmGroupService extends BaseService { return tips; }; } - tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","产品【"+xmProduct.getId()+"】只开放给同产品组人员。请先加入产品团队再操作。"); 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","产品【"+xmProduct.getId()+"】只开放给同产品同小组人员。请先加入产品团队再操作。"); return tips; } @@ -257,7 +257,7 @@ public class XmGroupService extends BaseService { return tips; } } - tips.setFailureMsg("no-qx-no-same-team","该产品只开放给同产品同小组人员。请先加入产品团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","产品【"+xmProduct.getId()+"】只开放给同产品同小组人员。请先加入产品团队再操作。"); return tips; @@ -285,7 +285,7 @@ public class XmGroupService extends BaseService { return tips; } } - tips.setFailureMsg("no-qx-transmit-0","该产品开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。"); + tips.setFailureMsg("no-qx-transmit-0","产品【"+xmProduct.getId()+"】开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。"); } @@ -304,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","产品【"+xmProduct.getId()+"】只开放给同企业人员。"); return tips; } if(!sysUser.getBranchId().equals(xmProduct.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","产品【"+xmProduct.getId()+"】只开放给同企业人员。"); return tips; } }else{ if(!ubranchId.equals(xmProduct.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该产品只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","产品【"+xmProduct.getId()+"】只开放给同企业人员。"); return tips; } } }else if("2".equals(scopeQx)){//同产品 if(!this.checkUserExistsGroup(this.getProductGroupVoList(xmProduct.getId()), userid)){ - tips.setFailureMsg("no-qx-no-same-project","该产品只开放给同产品组人员。请先加入产品团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","产品【"+xmProduct.getId()+"】只开放给同产品组人员。请先加入产品团队再操作。"); return tips; }; }else if("3".equals(scopeQx)){//同小组 if(!this.checkUserExistsProductGroup(xmProduct.getId(), userid)){ - tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同产品同小组人员。请先加入产品团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","产品【"+xmProduct.getId()+"】只开放给同产品同小组人员。请先加入产品团队再操作。"); return tips; } } @@ -370,7 +370,7 @@ public class XmGroupService extends BaseService { String scopeQx= QxTool.getTaskScopeQx(xmProject.getQxCode()); if("1".equals(scopeQx)){//同组织 if( !head.getBranchId().equals(xmProject.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","项目【"+xmProject.getId()+"】只开放给同企业人员。"); return tips; } boolean isAllNull=true; @@ -390,7 +390,7 @@ public class XmGroupService extends BaseService { if(isAllNull){ return tips; }else{ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","项目【"+xmProject.getId()+"】只开放给同企业人员。"); return tips; } @@ -398,7 +398,7 @@ public class XmGroupService extends BaseService { }else if("2".equals(scopeQx)){//同项目 List groups=this.getProjectGroupVoList(xmProject.getId()); if(!this.checkUserExistsGroup(groups, head.getUserid())){ - tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","项目【"+xmProject.getId()+"】只开放给同项目组人员。请先加入项目团队再操作。"); return tips; }; for (String memUserid : memUseridSet) { @@ -409,14 +409,14 @@ public class XmGroupService extends BaseService { return tips; }; } - tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","项目【"+xmProject.getId()+"】只开放给同项目组人员。请先加入项目团队再操作。"); return tips; }else if("3".equals(scopeQx)){//同小组 List groups=this.getProjectGroupVoList(xmProject.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","项目【"+xmProject.getId()+"】只开放给同项目同小组人员。请先加入项目团队再操作。"); return tips; } @@ -429,7 +429,7 @@ public class XmGroupService extends BaseService { return tips; } } - tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","项目【"+xmProject.getId()+"】只开放给同项目同小组人员。请先加入项目团队再操作。"); return tips; @@ -457,7 +457,7 @@ public class XmGroupService extends BaseService { return tips; } } - tips.setFailureMsg("no-qx-transmit-0","该项目开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。"); + tips.setFailureMsg("no-qx-transmit-0","项目【"+xmProject.getId()+"】开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。"); } @@ -472,28 +472,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","项目【"+xmProject.getId()+"】只开放给同企业人员。"); return tips; } if(!sysUser.getBranchId().equals(xmProject.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","项目【"+xmProject.getId()+"】只开放给同企业人员。"); return tips; } }else{ if(!ubranchId.equals(xmProject.getBranchId())){ - tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。"); + tips.setFailureMsg("no-qx-no-same-branchId","项目【"+xmProject.getId()+"】只开放给同企业人员。"); return tips; } } }else if("2".equals(scopeQx)){//同项目 if(!this.checkUserExistsGroup(this.getProjectGroupVoList(xmProject.getId()), userid)){ - tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-project","项目【"+xmProject.getId()+"】只开放给同项目组人员。请先加入项目团队再操作。"); return tips; }; }else if("3".equals(scopeQx)){//同小组 if(!this.checkUserExistsProjectGroup(xmProject.getId(), userid)){ - tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。"); + tips.setFailureMsg("no-qx-no-same-team","项目【"+xmProject.getId()+"】只开放给同项目同小组人员。请先加入项目团队再操作。"); return tips; } }