diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java index 3055f483..cbb987f3 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java @@ -10,7 +10,6 @@ import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.mdp.swagger.ApiEntityParams; import com.xm.core.entity.XmGroup; -import com.xm.core.entity.XmProduct; import com.xm.core.entity.XmProject; import com.xm.core.service.XmGroupService; import com.xm.core.service.XmProductService; @@ -94,38 +93,10 @@ public class XmGroupController { if(groupDb==null){ return ResponseHelper.failed("data-0","小组已不存在。"); } - if("1".equals(groupDb.getPgClass())){ - XmProduct xmProduct=this.xmProductService.selectOneObject(new XmProduct(groupDb.getProductId())); - tips=this.xmGroupService.checkProductStatus(xmProduct); - if(tips.isOk()==false){ - return ResponseHelper.failed(tips); - } - tips=this.xmGroupService.checkHasEditProdcutGroupQx(user,group,groupDb,xmProduct); - if(tips.isOk()==false){ - return ResponseHelper.failed(tips); - } - }else{ - XmProject xmProject=this.xmProjectService.getProjectFromCache(groupDb.getProjectId()); - tips=this.xmGroupService.checkProjectStatus(xmProject); - if(tips.isOk()==false){ - return ResponseHelper.failed(tips); - } - tips=this.xmGroupService.checkHasEditProjectGroupQx(user,group,groupDb,xmProject); - if(tips.isOk()==false){ - return ResponseHelper.failed(tips); - } - } xmGroupService.parentIdPathsCalcBeforeSave(group); tips= xmGroupService.updateGroup(group,groupDb); //列出XmProjectGroup列表 - if("1".equals(groupDb.getPgClass())){ - xmGroupCacheService.clearProductGroup(groupDb.getProductId()); - xmRecordService.addXmProductGroupRecord(groupDb.getProductId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); - }else { - xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); - xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); - - } - + xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); + xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); m.put("tips", tips); return m; @@ -216,7 +187,6 @@ public class XmGroupController { Tips tips=new Tips("成功新增一条数据"); try{ User u = LoginUtils.getCurrentUserInfo(); - if(!"1".equals(xmGroup.getPgClass())) { if(!StringUtils.hasText(xmGroup.getProjectId())){ return ResponseHelper.failed("projectId-0","项目编号不能为空"); } @@ -236,26 +206,7 @@ public class XmGroupController { xmGroup.setBranchId(project.getBranchId()); - }else{ - if(!StringUtils.hasText(xmGroup.getProductId())){ - return ResponseHelper.failed("productId-0","产品编号不能为空"); - } - XmProduct product = xmProductService.selectOneObject(new XmProduct(xmGroup.getProductId())); - if(product==null){ - return ResponseHelper.failed("product-0","产品已不存在"); - } - tips=this.xmGroupService.checkProductStatus(product); - if(!tips.isOk()){ - return ResponseHelper.failed(tips); - } - xmGroup.setBranchId(product.getBranchId()); - Map productAdmMap=xmGroupService.getProductAdmUsers(product); - if(!productAdmMap.containsKey(u.getUserid())) { - return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能创建小组。产品级助理及以上人员可以创建小组。"); - } - xmGroup.setProjectId(null); - } if (StringUtils.isEmpty(xmGroup.getId())) { xmGroup.setId(xmGroupService.createKey("id")); } else { @@ -271,14 +222,9 @@ public class XmGroupController { } this.xmGroupService.parentIdPathsCalcBeforeSave(xmGroup); xmGroupService.insert(xmGroup); - if("1".equals(xmGroup.getPgClass())){ - xmGroupCacheService.clearProductGroup(xmGroup.getProductId()); - xmRecordService.addXmProductGroupRecord(xmGroup.getProductId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】"); + xmGroupCacheService.clearProjectGroup(xmGroup.getProjectId()); + xmRecordService.addXmGroupRecord(xmGroup.getProjectId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】"); - }else { - xmGroupCacheService.clearProjectGroup(xmGroup.getProjectId()); - xmRecordService.addXmProductGroupRecord(xmGroup.getProductId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】"); - } m.put("data",xmGroup); }catch (BizException e) { tips=e.getTips(); @@ -308,31 +254,15 @@ public class XmGroupController { if(groupDb==null){ return ResponseHelper.failed("data-0","小组已不存在"); } - if(!"1".equals(groupDb.getPgClass())) { - if(StringUtils.hasText(groupDb.getProjectId())){ - XmProject project = xmProjectService.getProjectFromCache(groupDb.getProjectId()); - if(project==null){ - return ResponseHelper.failed("project-0","项目已不存在"); - } - Map projectAdmMap=xmGroupService.getProjectAdmUsers(project); - if(!projectAdmMap.containsKey(u.getUserid())) { - return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); - } + if(StringUtils.hasText(groupDb.getProjectId())){ + XmProject project = xmProjectService.getProjectFromCache(groupDb.getProjectId()); + if(project==null){ + return ResponseHelper.failed("project-0","项目已不存在"); } - - - }else{ - if(!StringUtils.hasText(xmGroup.getProductId())){ - XmProduct product = xmProductService.selectOneObject(new XmProduct(groupDb.getProductId())); - if(product==null){ - return ResponseHelper.failed("product-0","产品已不存在"); - } - Map productAdmMap=xmGroupService.getProductAdmUsers(product); - if(!productAdmMap.containsKey(u.getUserid())) { - return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能删除小组。产品级助理及以上人员可以删除小组。"); - } + Map projectAdmMap=xmGroupService.getProjectAdmUsers(project); + if(!projectAdmMap.containsKey(u.getUserid())) { + return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); } - } XmGroup childrenGroupQuery=new XmGroup(); childrenGroupQuery.setPgroupId(xmGroup.getId()); @@ -341,14 +271,9 @@ public class XmGroupController { return ResponseHelper.failed("childrenCnt-no-0","该小组有下级小组,不能删除。请先删除下级小组。"); } xmGroupService.doDeleteByPk(xmGroup,groupDb); - if("1".equals(groupDb.getPgClass())){ - xmGroupCacheService.clearProductGroup(groupDb.getProductId()); - xmRecordService.addXmProductGroupRecord(groupDb.getProductId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); - }else { - xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); - xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); + xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); + xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); - } }catch (BizException e) { tips=e.getTips(); @@ -379,27 +304,17 @@ public class XmGroupController { } User user=LoginUtils.getCurrentUserInfo(); XmGroup groupDb=groupsDb.get(0); - String pgClass=groupDb.getPgClass(); - String id=groupDb.getProductId(); - + String id=groupDb.getProductId(); List hasChildNodes=new ArrayList<>(); List noQxs=new ArrayList<>(); List canDelNodes=new ArrayList<>(); - if("0".equals(pgClass)){ - id=groupDb.getProjectId(); - XmProject prject=this.xmProjectService.getProjectFromCache(id); - Map projectAdmMap=xmGroupService.getProjectAdmUsers(prject); - if (!projectAdmMap.containsKey(user.getUserid())) { - return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); - } - }else{ - id=groupDb.getProductId(); - XmProduct product=this.xmProductService.getProductFromCache( id ); - Map productAdmMap=xmGroupService.getProductAdmUsers(product); - if(!productAdmMap.containsKey(user.getUserid())) { - return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能删除小组。产品级助理以上人员可以删除小组。"); - } + id=groupDb.getProjectId(); + XmProject prject=this.xmProjectService.getProjectFromCache(id); + Map projectAdmMap=xmGroupService.getProjectAdmUsers(prject); + if (!projectAdmMap.containsKey(user.getUserid())) { + return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); } + if(canDelNodes.size()>0){ for (XmGroup canDelNode : canDelNodes) { if(!xmGroupService.checkCanDelAllChild(canDelNode,canDelNodes)){ @@ -411,17 +326,11 @@ public class XmGroupController { } if(canDelNodes.size()>0){ String groupNames=canDelNodes.stream().map(i->i.getGroupName()).collect(Collectors.joining(",")); - if("1".equals(pgClass)){ - xmGroupService.doBatchDeleteProductGroups(canDelNodes); - xmGroupCacheService.clearProductGroups(groupDb.getProductId()); - xmRecordService.addXmProductGroupRecord(groupDb.getProductId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】"); - }else { - xmGroupService.doBatchDeleteProjectGroups(canDelNodes); - xmGroupCacheService.clearProjectGroups(groupDb.getProjectId()); - xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】"); + xmGroupService.doBatchDeleteProjectGroups(canDelNodes); + xmGroupCacheService.clearProjectGroups(groupDb.getProjectId()); + xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】"); - } } }catch (BizException e) { tips=e.getTips(); diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java index 9edf9e4f..a551b2d3 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java @@ -13,12 +13,10 @@ import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.PubTool; import com.xm.core.entity.XmMenu; +import com.xm.core.entity.XmProduct; import com.xm.core.entity.XmTask; import com.xm.core.queue.XmMenuSumParentsPushService; -import com.xm.core.service.XmGroupService; -import com.xm.core.service.XmMenuService; -import com.xm.core.service.XmRecordService; -import com.xm.core.service.XmTaskService; +import com.xm.core.service.*; import com.xm.core.vo.BatchChangeParentMenuVo; import com.xm.core.vo.XmGroupVo; import com.xm.core.vo.XmMenuVo; @@ -68,10 +66,17 @@ public class XmMenuController { private XmGroupService groupService; + @Autowired + private XmProductService productService; + @Autowired XmMenuSumParentsPushService pushService; + @Autowired + XmMenuOperQxService menuOperQxService; + + Map fieldsMap = BaseUtils.toMap(new XmMenu()); @ApiOperation( value = "查询项目菜单表信息列表",notes="listXmMenu,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @@ -305,7 +310,8 @@ public class XmMenuController { xmMenu.setMmUserid(user.getUserid()); xmMenu.setMmUsername(user.getUsername()); } - if(!groupService.calcCanOpMenus(xmMenu)){ + XmMenu parentMenu= menuOperQxService.getUserCanOpMenuById(xmMenu.getPmenuId(),user.getUserid(),false); + if(parentMenu==null){ return ResponseHelper.failed("noqx","您无权新增需求。"); } xmMenuService.parentIdPathsCalcBeforeSave(xmMenu); @@ -343,6 +349,7 @@ public class XmMenuController { Map m = new HashMap<>(); Tips tips=new Tips("成功删除一条数据"); try{ + User user=LoginUtils.getCurrentUserInfo(); XmTask xmTask = new XmTask(); xmTask.setMenuId(xmMenu.getMenuId()); long taskCount=xmTaskService.countByWhere(xmTask); @@ -351,19 +358,15 @@ public class XmMenuController { }else { List ids=new ArrayList<>(); ids.add(xmMenu.getMenuId()); - List xmMenus=this.xmMenuService.selectListByIdsWithsChildrenCnt(ids); - if(xmMenus==null || xmMenus.size()==0){ - return ResponseHelper.failed("data-0","数据不存在"); - } - xmMenu=xmMenus.get(0); - if(xmMenu.getChildrenCnt()!=null && xmMenu.getChildrenCnt()>0){ - return ResponseHelper.failed("hadChild","该需求有子需求,不能删除"); - } - if(!groupService.calcCanOpMenus(xmMenu)){ - return ResponseHelper.failed("noqx","您无权删除此需求。"); - } - xmMenuService.deleteByPk(xmMenu); - xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"删除产品需求","删除需求"+xmMenu.getMenuName(),"",JSON.toJSONString(xmMenu)); + XmMenu xmMenuDb=menuOperQxService.getUserCanOpMenuById(xmMenu.getMenuId(),user.getUserid(),true); + if(xmMenuDb==null){ + return ResponseHelper.failed("no-qx-0","无权限操作该需求"); + } + if(xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){ + return ResponseHelper.failed("hadChild","该需求有子需求,不能删除"); + } + xmMenuService.deleteByPk(xmMenu); + xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"删除产品需求","删除需求"+xmMenu.getMenuName(),"",JSON.toJSONString(xmMenu)); } }catch (BizException e) { @@ -389,20 +392,18 @@ public class XmMenuController { Map m = new HashMap<>(); Tips tips=new Tips("成功更新一条数据"); try{ + User user=LoginUtils.getCurrentUserInfo(); if(!StringUtils.hasText(xmMenu.getMenuId())){ ResponseHelper.failed("menuId-0","menuId不能为空"); } - XmMenu xmMenuDb=xmMenuService.selectOneObject(new XmMenu(xmMenu.getMenuId())); + XmMenu xmMenuDb=menuOperQxService.getUserCanOpMenuById(xmMenu.getMenuId(),user.getUserid(),true); if(xmMenuDb==null){ - ResponseHelper.failed("menu-0","该需求不存在"); - } - if(!groupService.calcCanOpMenus(xmMenuDb)){ - return ResponseHelper.failed("noqx","您无权修改此需求。"); + ResponseHelper.failed("menu-0","该需求不存在或您无权修改。"); } if("1".equals(xmMenuDb.getNtype())){ if("0".equals(xmMenu.getNtype()) && xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){ - return ResponseHelper.failed("ntype-not-right","当前为需求池,并且具有"+xmMenuDb.getChildrenCnt()+"个子需求池或子需求,不能变更为需求"); + return ResponseHelper.failed("ntype-not-right","当前为"+("1".equals(xmMenuDb.getDclass())?"史诗":"特性")+",并且具有"+xmMenuDb.getChildrenCnt()+"个子项,不能变更为故事"); } }else{ if(xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){ @@ -436,19 +437,18 @@ public class XmMenuController { Map m = new HashMap<>(); Tips tips=new Tips("成功更新一条数据"); try{ + User user=LoginUtils.getCurrentUserInfo(); List menuIds= (List) xmMenuMap.get("menuIds"); if(menuIds==null || menuIds.size()==0){ ResponseHelper.failed("menuIds-0","menuIds不能为空"); } XmMenu xmMenu= BaseUtils.fromMap(xmMenuMap,XmMenu.class); - List xmMenusDb=xmMenuService.selectListByIds(menuIds); + List xmMenusDb=this.menuOperQxService.getUserCanOpMenusByIds(menuIds,user.getUserid(),false); if(xmMenusDb==null ||xmMenusDb.size()==0){ - ResponseHelper.failed("menus-0","该需求已不存在"); + ResponseHelper.failed("menus-0","无权限操作所选需求"); } - List can=new ArrayList<>(); - List no=new ArrayList<>(); - groupService.calcCanOpMenus(xmMenusDb,can,no); + List can=xmMenusDb; if(can.size()<=0){ return ResponseHelper.failed("noqx","您无权修改选中的需求。"); } @@ -456,6 +456,7 @@ public class XmMenuController { fields.add("childrenCnt"); fields.add("ntype"); fields.add("pidPaths"); + fields.add("pmenuId"); for (String fieldName : xmMenuMap.keySet()) { if(fields.contains(fieldName)){ return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); @@ -491,10 +492,13 @@ public class XmMenuController { Map m = new HashMap<>(); Tips tips=new Tips("成功删除"+xmMenus.size()+"条数据"); try{ - List noExists=new ArrayList<>(); + User user=LoginUtils.getCurrentUserInfo(); List hasChildMenus=new ArrayList<>(); List canDelList=new ArrayList<>(); - List xmMenusDb=this.xmMenuService.selectListByIdsWithsChildrenCnt(xmMenus.stream().map(i->i.getMenuId()).collect(Collectors.toList())); + List xmMenusDb=this.menuOperQxService.getUserCanOpMenusByIds(xmMenus.stream().map(i->i.getMenuId()).collect(Collectors.toList()),user.getUserid(),true); + if(xmMenusDb==null || xmMenusDb.size()>0){ + return ResponseHelper.failed("data-0-or-no-qx","您不是产品级管理人员、需求负责人、上级需求负责人,无权限操作"); + } for (XmMenu xmMenu : xmMenusDb) { boolean canDel=this.xmMenuService.checkCanDelAllChild(xmMenu,xmMenusDb); if(canDel){ @@ -503,11 +507,9 @@ public class XmMenuController { hasChildMenus.add(xmMenu.getMenuName()); } } - noExists=noExists.stream().filter(i->!xmMenusDb.stream().filter(k->k.getMenuId().equals(i.getMenuId())).findAny().isPresent()).collect(Collectors.toList()); - List canDelResult=new ArrayList<>(); - List noQxResult=new ArrayList<>(); + List canDelResult=new ArrayList<>(); + List noQxResult=xmMenus.stream().filter(i->!xmMenusDb.stream().filter(k->k.getMenuId().equals(i.getMenuId())).findAny().isPresent()).collect(Collectors.toList()); if(canDelList.size()>0) { - groupService.calcCanOpMenus(canDelList,canDelResult,noQxResult); if(canDelResult.size()>0){ xmMenuService.doBatchDelete(canDelResult); } @@ -515,13 +517,10 @@ public class XmMenuController { List msg=new ArrayList<>(); msg.add("成功删除"+canDelResult.size()+"个需求信息。"); if(hasChildMenus.size()>0 ) { - msg.add("以下"+hasChildMenus.size()+"个需求存在子需求,不允许删除。【"+StringUtils.arrayToDelimitedString(hasChildMenus.toArray(), ",")+"】"); + msg.add("以下"+hasChildMenus.size()+"个需求存在子需求,不允许删除,【"+StringUtils.arrayToDelimitedString(hasChildMenus.toArray(), ",")+"】."); } if(noQxResult.size()>0){ - msg.add("无权限操作以下"+noQxResult.size()+"个需求.【"+noQxResult.stream().map(i->i.getMenuName()).collect(Collectors.joining(",")) +"】"); - } - if(noExists.size()>0){ - msg.add("以下"+noExists.size()+"个需求已不存在,【"+noExists.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); + msg.add("无权限操作以下"+noQxResult.size()+"个需求,【"+noQxResult.stream().map(i->i.getMenuName()).collect(Collectors.joining(",")) +"】."); } if(canDelResult.size()==0){ tips.setFailureMsg(msg.stream().collect(Collectors.joining(" "))); @@ -549,7 +548,6 @@ public class XmMenuController { if(xmMenus.size()>0) { List canEdit=new ArrayList<>(); List noQx=new ArrayList<>(); - groupService.calcCanOpMenus(xmMenus,canEdit,noQx); if(canEdit.size()>0){ this.xmMenuService.parentIdPathsCalcBeforeSave(canEdit); this.xmMenuService.doBatchInsert(canEdit); @@ -574,35 +572,6 @@ public class XmMenuController { return m; } - @HasQx(value = "xm_core_xmMenu_batchEdit",name = "批量修改用户需求",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") - @RequestMapping(value="/batchEdit",method=RequestMethod.POST) - public Map batchEditXmMenu(@RequestBody List xmMenus) { - Map m = new HashMap<>(); - Tips tips=new Tips("成功修改"+xmMenus.size()+"条数据"); - try{ - List xmMenuList=xmMenus.stream().map(i->(XmMenu)i).collect(Collectors.toList()); - List canEdit=new ArrayList<>(); - List noQx=new ArrayList<>(); - groupService.calcCanOpMenus(xmMenuList,canEdit,noQx); - if(canEdit.size()>0) { - List xmMenuVos=xmMenus.stream().filter(i->canEdit.stream().filter(k->k.getMenuId().equals(i.getMenuId())).findAny().isPresent()).collect(Collectors.toList()); - this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenuVos.stream().map(i->(XmMenu)i).collect(Collectors.toList())); - this.xmMenuService.batchInsertOrUpdate(xmMenuVos); - xmRecordService.addXmMenuRecord(xmMenuList,"批量修改产品需求","批量修改产品需求 "); - }else { - tips.setFailureMsg("您无权限修改数据"); - } - - }catch (BizException e) { - tips=e.getTips(); - logger.error("",e); - }catch (Exception e) { - tips.setFailureMsg(e.getMessage()); - logger.error("",e); - } - m.put("tips", tips); - return m; - } @ApiOperation( value = "批量修改需求的上级",notes="batchChangeParentMenu,仅需要上传主键字段") @@ -625,49 +594,35 @@ public class XmMenuController { if(!StringUtils.hasText(parentMenuVo.getPmenuId())){ return ResponseHelper.failed("parentMenuid-0", "上级编号不能为空"); } + XmMenu parentDb=menuOperQxService.getUserCanOpMenuById(parentMenuVo.getPmenuId(), user.getUserid(),true); + if(parentDb==null){ + return ResponseHelper.failed("no-qx-parent","您无权限将需求挂到别人负责的需求下"); + } + if(!"1".equals(parentDb.getNtype())){ + return ResponseHelper.failed("parentMenu-ntype-not-1", "【"+parentDb.getMenuName()+"】为故事,不能作为上级节点。请另选上级。"); + } List ids=parentMenuVo.getMenuIds().stream().collect(Collectors.toList()); ids.add(parentMenuVo.getPmenuId()); ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList()); - List xmMenus=this.xmMenuService.selectListByIds(ids); - Optional optional=xmMenus.stream().filter(i->i.getMenuId().equals(parentMenuVo.getPmenuId())).findAny(); - if(!optional.isPresent()){ - return ResponseHelper.failed("parentMenu-0", "上级不存在"); - } - XmMenu parentMenu=optional.get(); - if(!"1".equals(parentMenu.getNtype())){ - return ResponseHelper.failed("parentMenu-ntype-not-1", "【"+parentMenu.getMenuName()+"】为需求,不能作为上级节点。请另选上级或者变更其为需求池节点"); - } - Tips tips2=this.groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),"1",parentMenu.getProductId(),null); - if(!tips2.isOk()){ - return ResponseHelper.failed(tips2); - } - xmMenus=xmMenus.stream().filter(i->!i.getMenuId().equals(parentMenu.getMenuId())).collect(Collectors.toList()); - List canOpxmMenus=xmMenus.stream().filter(i->!parentMenu.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList()); - List sameParentMenus=xmMenus.stream().filter(i->parentMenu.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList()); + List xmMenus=this.menuOperQxService.getUserCanOpMenusByIds(ids,user.getUserid(),false); + if(xmMenus==null || xmMenus.size()==0){ + return ResponseHelper.failed("no-qx", "所需需求不是您负责,无权限操作"); + } + + xmMenus=xmMenus.stream().filter(i->!i.getMenuId().equals(parentDb.getMenuId())).collect(Collectors.toList()); + List canOpxmMenus=xmMenus.stream().filter(i->!parentDb.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList()); + List sameParentMenus=xmMenus.stream().filter(i->parentDb.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList()); if(canOpxmMenus.size()==0){ - return ResponseHelper.failed("same-parent","所有需求均属于【"+parentMenu.getMenuName()+"】,无需再变更"); + return ResponseHelper.failed("same-parent","所有需求均属于【"+parentDb.getMenuName()+"】,无需再变更"); } - if(canOpxmMenus.stream().filter(i->!i.getProductId().equals(parentMenu.getProductId())).findAny().isPresent()){ + if(canOpxmMenus.stream().filter(i->!i.getProductId().equals(parentDb.getProductId())).findAny().isPresent()){ return ResponseHelper.failed("productId-not-same", "所有需求必须都是同一个产品之下"); } Map allowMenusDbMap=new HashMap<>(); Map noAllowMenusDbMap=new HashMap<>(); - List pgroups=groupService.getProductGroupVoList(parentMenu.getProductId()); - boolean isAdm=groupService.checkUserIsPmOrAssByPtype(user.getUserid(),"1",null,parentMenu.getProductId()); - if(!isAdm){ - for (XmMenu menu : canOpxmMenus) { - boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,menu.getMmUserid(),user.getUserid()); - if(!isHead){ - noAllowMenusDbMap.put(menu.getMenuId(),menu); - }else { - allowMenusDbMap.put(menu.getMenuId(),menu); - } - } - }else{ - for (XmMenu task : canOpxmMenus) { - allowMenusDbMap.put(task.getMenuId(),task); - } + for (XmMenu menu : canOpxmMenus) { + allowMenusDbMap.put(menu.getMenuId(),menu); } Map allowMenusDbMap2=new HashMap<>(); for (XmMenu t : allowMenusDbMap.values()) { @@ -689,20 +644,20 @@ public class XmMenuController { } } if(allowMenusDbMap3.size()>0){ - this.xmMenuService.batchChangeParent(allowMenusDbMap3.values().stream().collect(Collectors.toList()),parentMenu); - this.xmRecordService.addXmMenuRecord(parentMenu.getProductId(),parentMenu.getMenuId(),"批量挂接子节点","成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentMenu.getMenuName()+"】上,【"+allowMenusDbMap3.values().stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】;"); + this.xmMenuService.batchChangeParent(allowMenusDbMap3.values().stream().collect(Collectors.toList()),parentDb); + this.xmRecordService.addXmMenuRecord(parentDb.getProductId(),parentDb.getMenuId(),"批量挂接子节点","成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentMenu.getMenuName()+"】上,【"+allowMenusDbMap3.values().stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】;"); } List msgs=new ArrayList<>(); if(allowMenusDbMap3.size()>0){ - msgs.add("成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentMenu.getMenuName()+"】上"); + msgs.add("成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentDb.getMenuName()+"】上"); } if(noAllowMenusDbMap.size()>0){ msgs.add("以下"+noAllowMenusDbMap.size()+"个需求无权限操作,【"+noAllowMenusDbMap.values().stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); } if(sameParentMenus.size()>0){ - msgs.add("以下"+sameParentMenus.size()+"个需求已属于【"+parentMenu.getMenuName()+"】之下,无需变更,【"+sameParentMenus.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); + msgs.add("以下"+sameParentMenus.size()+"个需求已属于【"+parentDb.getMenuName()+"】之下,无需变更,【"+sameParentMenus.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); } if(allowMenusDbMap3.size()>0){ tips.setOkMsg(msgs.stream().collect(Collectors.joining(" "))); diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java index 3d8886ef..143c5376 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java @@ -255,7 +255,7 @@ public class XmTaskController { List no=new ArrayList<>(); User user = LoginUtils.getCurrentUserInfo(); for (XmTask xmTaskDb : xmTasksDb) { - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ if(user.getUserid().equals(xmTaskDb.getExecutorUserid())||user.getUserid().equals(xmTaskDb.getCreateUserid())){ can.add(xmTaskDb); @@ -350,7 +350,7 @@ public class XmTaskController { return m; } User user=LoginUtils.getCurrentUserInfo(); - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskVo.getPtype(),xmTaskVo.getProductId(),xmTaskVo.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskVo.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } @@ -468,7 +468,7 @@ public class XmTaskController { return ResponseHelper.failed("existsExecuser","有待验收、待结算的执行人,不能删除"); }; - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } @@ -509,11 +509,11 @@ public class XmTaskController { return m; } - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } - boolean existsGrouop=groupService.checkUserExistsGroupByPtype(xmTaskDb.getPtype(),xmTaskDb.getProjectId(),xmTaskDb.getProductId(),xmTaskVo.getCreateUserid()); + boolean existsGrouop=groupService.checkUserExistsGroup(xmTaskDb.getProjectId(),xmTaskVo.getCreateUserid()); if(!existsGrouop){ return ResponseHelper.failed("not-member",xmTaskVo.getCreateUsername()+"不是项目组成员,不能作为任务责任人"); } @@ -563,7 +563,7 @@ public class XmTaskController { xmTaskVo.setNtype("1"); } } - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } @@ -615,7 +615,7 @@ public class XmTaskController { if(xmTaskDb==null){ return ResponseHelper.failed("data-0","任务已不存在"); } - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); boolean isExecUser=user.getUserid().equals(xmTaskDb.getExecutorUserid()); @@ -710,7 +710,7 @@ public class XmTaskController { } String projectId=batchImportVo.getProjectId(); String productId=batchImportVo.getProductId(); - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),batchImportVo.getPtype(),batchImportVo.getProductId(),batchImportVo.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),batchImportVo.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } @@ -947,7 +947,7 @@ public class XmTaskController { XmProduct xmProductDb=xmProductService.getProductFromCache(xmMenuDb.getProductId()); boolean hasMenuQx=true; - Tips tips2=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),"1",xmProductDb.getId(),null); + Tips tips2=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),"1",xmProductDb.getId(),null); if(!tips2.isOk()){ hasMenuQx=false; } @@ -1063,19 +1063,17 @@ public class XmTaskController { } String projectId=xmTaskDb.getProjectId(); String productId=xmTaskDb.getProductId(); - tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTaskDb.getPtype(),xmTaskDb.getProductId(),xmTaskDb.getProjectId()); + tips=groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),xmTaskDb.getProjectId()); if(!tips.isOk()){ return ResponseHelper.failed(tips); } List allowDelNodes=new ArrayList<>(); List noAllowNodes=new ArrayList<>(); Map delNodesDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks); - List pgroups="0".equals(xmTaskDb.getPtype())? groupService.getProjectGroupVoList(projectId) : groupService.getProductGroupVoList(productId); + List pgroups=groupService.getProjectGroupVoList(projectId) ; for (XmTask node : delNodesDbMap.values()) { - if("0".equals(xmTaskDb.getPtype()) && !projectId.equals(node.getProjectId()) ){ + if(!projectId.equals(node.getProjectId()) ){ return ResponseHelper.failed("not-same-project","所有任务必须同属于一个项目"); - }else if("1".equals(xmTaskDb.getPtype()) && !productId.equals(node.getProductId()) ){ - return ResponseHelper.failed("not-same-productId","所有任务必须同属于一个产品"); } boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,node.getCreateUserid(),user.getUserid()); @@ -1333,7 +1331,7 @@ public class XmTaskController { if(!"1".equals(parentTask.getNtype())){ return ResponseHelper.failed("parentTask-ntype-not-1", "【"+parentTask.getName()+"】为任务,不能作为上级节点。请另选上级或者变更其为计划节点"); } - Tips tips2=this.groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),parentTask.getPtype(),parentTask.getProductId(),parentTask.getProjectId()); + Tips tips2=this.groupService.checkIsAdmOrTeamHeadOrAss(user,user.getUserid(),parentTask.getProjectId()); if(!tips2.isOk()){ return ResponseHelper.failed(tips2); } 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 5777b3d6..99e114ee 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 @@ -63,108 +63,27 @@ public class XmGroupService extends BaseService { groupCacheService.clearProductGroups(productId); } - public boolean calcCanOpMenus(XmMenu menus){ - List menuList=new ArrayList<>(); - menuList.add(menus); - List can=new ArrayList<>(); - List no=new ArrayList<>(); - Tips tips = new Tips(); - calcCanOpMenus(menuList,can,no); - return can.size()>0; - } - public Tips checkIsAdmOrTeamHeadOrAssByPtype(User user,String tardgetUserid,String ptype,String productId,String projectId){ - Tips tips = new Tips("成功"); - if(!"0".equals(ptype) && !"1".equals(ptype)){ - throw new BizException( new Tips(false,"ptype-not-0|1","类型不正确")); - } - if("0".equals(ptype) && !StringUtils.hasText(projectId)){ - throw new BizException( new Tips(false,"projectId-0","项目编号不能为空")); - } - if("1".equals(ptype) && !StringUtils.hasText(productId)){ - throw new BizException( new Tips(false,"productId-0","产品编号不能为空")); - } + public Tips checkIsAdmOrTeamHeadOrAss(User user,String tardgetUserid,String projectId){ + Tips tips = new Tips("成功"); List pgroups=new ArrayList<>(); - boolean isAdm=false; - if("1".equals(ptype)){ - isAdm=this.checkUserIsProductAdm(productId, user.getUserid()); - if(!isAdm){ - pgroups=this.getProductGroupVoList(productId); - if(pgroups==null || pgroups.size()==0){ - return new Tips(false,"group-0","该项目还未建立项目团队,请先进行团队成员维护"); - } - boolean isHead=this.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),tardgetUserid); - if(!isHead){ - return new Tips(false,"not-head","您无权操作!项目经理、组长可以。"); - } + boolean isAdm=this.checkUserIsProjectAdm(projectId, user.getUserid()); + if(!isAdm){ + pgroups=this.getProjectGroupVoList(projectId); + if(pgroups==null || pgroups.size()==0){ + return new Tips(false,"group-0","该产品还未建立产品团队,请先进行团队成员维护"); } - }else if("0".equals(ptype)){ - isAdm=this.checkUserIsProjectAdm(projectId, user.getUserid()); - if(!isAdm){ - pgroups=this.getProjectGroupVoList(projectId); - if(pgroups==null || pgroups.size()==0){ - return new Tips(false,"group-0","该产品还未建立产品团队,请先进行团队成员维护"); - } - boolean isHead=this.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),tardgetUserid); - if(!isHead){ - return new Tips(false,"not-head","您无权操作!产品经理、组长可以操作。"); - } + boolean isHead=this.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),tardgetUserid); + if(!isHead){ + return new Tips(false,"not-head","您无权操作!产品经理、组长可以操作。"); } } + return tips; } - - public void calcCanOpMenus(List menus,List canOpResult,List noQxOpResult ){ - Tips tips=new Tips("成功"); - //按产品分组检查权限 - Map> productMenusMap=new HashMap<>(); - for (XmMenu menu : menus) { - List menus0=productMenusMap.get(menu.getProductId()); - if(menus0==null){ - menus0=new ArrayList<>(); - productMenusMap.put(menu.getProductId(),menus0); - } - menus0.add(menu); - } - User user= LoginUtils.getCurrentUserInfo(); - productMenusMap.forEach((key,menuList)->{ - XmProduct xmProduct=this.xmProductService.getProductFromCache(key); - if(xmProduct==null||"3".equals(xmProduct.getPstatus())){ - noQxOpResult.addAll(menuList); - }else{ - if(!this.checkUserIsProductAdm(xmProduct,user.getUserid())){ - List groupVoList=this.getProductGroupVoList(xmProduct.getId()); - for (XmMenu xmMenu : menuList) { - boolean canOp=false; - if(user.getUserid().equals(xmMenu.getMmUserid())){ - canOp=true; - }else{ - if(StringUtils.hasText(xmMenu.getMmUserid())){ - if(this.checkUserIsOtherUserTeamHeadOrAss(groupVoList,xmMenu.getMmUserid(),user.getUserid())){ - canOp=true; - } - }else{ - if(this.checkUserIsOtherUserTeamHeadOrAss(groupVoList,user.getUserid(),user.getUserid())){ - canOp=true; - } - } - } - if(canOp){ - canOpResult.add(xmMenu); - }else{ - noQxOpResult.add(xmMenu); - } - - } - }else{ - canOpResult.addAll(menuList); - } - } - }); - } /** 请在此类添加自定义函数 */ public List getProjectGroupVoList(String projectId) { @@ -247,40 +166,7 @@ public class XmGroupService extends BaseService { } return false; } - public List getProductGroupVoList(String productId) { - List groupVoList=new ArrayList<>(); - List groupVoList2 = groupCacheService.getProductGroups(productId); - if(groupVoList2==null||groupVoList2.size()==0) { - - XmGroup group = new XmGroup(); - group.setProductId(productId); - List groupList = this.selectListByWhere(group); - if(groupList==null || groupList.size()==0) { - groupCacheService.putProductGroups(productId, groupVoList); - return groupVoList; - } - List groupUserList=this.xmGroupUserService.selectGroupUserListByProductId(productId); - if(groupUserList==null || groupUserList.size()==0) { - } - groupList.forEach(g -> { - XmGroupVo gvo = new XmGroupVo(); - BeanUtils.copyProperties(g,gvo); - List groupUsers=new ArrayList<>(); - groupUserList.forEach(gu -> { - if(g.getId().equals(gu.getGroupId())) { - groupUsers.add(gu); - } - }); - gvo.setGroupUsers(groupUsers ); - groupVoList.add(gvo); - }); - groupCacheService.putProductGroups(productId, groupVoList); - return groupVoList; - }else { - return groupVoList2; - } - } /** * 新增项目时,同时新增项目团队及小组组员等 * @param projectId @@ -369,16 +255,7 @@ public class XmGroupService extends BaseService { List xmGroupVoList=this.getProjectGroupVoList(projectId); return this.getUserGroups(xmGroupVoList, userid); } - /** - * 获取用户在某个项目中的组 - * @param productId - * @param userid - * @return - */ - public List getUserGroupsByProductId(String productId, String userid){ - List xmGroupVoList=this.getProductGroupVoList(productId); - return this.getUserGroups(xmGroupVoList, userid); - } + /** * 检查用户是否在一些组中任意个组当组长 @@ -453,14 +330,9 @@ public class XmGroupService extends BaseService { } return userGroups; } - public boolean checkUserExistsGroupByPtype(String ptype,String projectId,String productId, String userid){ - if("1".equals(ptype)){ - List userGroups= getUserGroupsByProductId(productId,userid); - return userGroups!=null && userGroups.size()>0; - }else { - List userGroups= getUserGroupsByProjectId(projectId,userid); - return userGroups!=null && userGroups.size()>0; - } + public boolean checkUserExistsGroup(String projectId, String userid){ + List userGroups= getUserGroupsByProjectId(projectId,userid); + return userGroups!=null && userGroups.size()>0; } @@ -599,16 +471,6 @@ public class XmGroupService extends BaseService { return datas; } - /** - * 根据产品编号查询团队 - * @param productId - * @return - */ - public List getProjectGroupVoListByProductId(String productId) { - List data0=this.getProductGroupVoList(productId); - return data0; - } - public List parentIdPathsCalcBeforeSave(List nodes) { @@ -689,15 +551,7 @@ public class XmGroupService extends BaseService { } return tips; } - public Tips checkProductStatus( XmProduct xmProductDb) { - Tips tips=new Tips("成功"); - if(xmProductDb==null){ - tips.setFailureMsg("product-0","产品已不存在"); - } else if("3".equals(xmProductDb.getPstatus())){ - tips.setFailureMsg("pstatus-3","产品已经关闭,不能再操作"); - } - return tips; - } + public Map getProductAdmUsers(XmProduct xmProductDb){ diff --git a/xm-core/src/main/java/com/xm/core/service/XmMenuOperQxService.java b/xm-core/src/main/java/com/xm/core/service/XmMenuOperQxService.java new file mode 100644 index 00000000..b5ce5faa --- /dev/null +++ b/xm-core/src/main/java/com/xm/core/service/XmMenuOperQxService.java @@ -0,0 +1,86 @@ +package com.xm.core.service; + +import com.mdp.core.entity.Tips; +import com.mdp.core.service.BaseService; +import com.xm.core.entity.XmMenu; +import com.xm.core.entity.XmProduct; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.List; + +/** + * 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.
+ * 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块
+ * 实体 XmMenu 表 XM.xm_menu 当前主键(包括多主键): menu_id; + ***/ +@Service("xm.core.xmProductOperQxService") +public class XmMenuOperQxService extends BaseService { + + + @Override + public String getNameSpace() { + return XmMenu.class.getName(); + } + + public Tips checkProductStatus(XmProduct xmProductDb) { + Tips tips=new Tips("成功"); + if(xmProductDb==null){ + tips.setFailureMsg("product-0","产品已不存在"); + } else if("3".equals(xmProductDb.getPstatus())){ + tips.setFailureMsg("pstatus-3","产品已经关闭,不能再操作"); + } + return tips; + } + + /** + * 检查某个人是否为产品级管理人员 + * @param productDb + * @param userid + * @return + */ + public boolean checkIsProductAdmOrAss(XmProduct productDb,String userid){ + if(!StringUtils.hasText(userid)){ + return false; + }else { + if(userid.equals(productDb.getPmUserid())||userid.equals(productDb.getAdmUserid())||userid.equals(productDb.getAssUserid())){ + return true; + } + } + return false; + } + + /** + * 检查某个人是否故事的具有管理权限的人 + * 1.如果是需求负责人、创建人,可以 + * 2.如果是需求的上级(多级)负责人,可以 + * @param menuId 需求、故事编号 + * @param mmUserid + * @return + */ + public XmMenu getUserCanOpMenuById(String menuId, String mmUserid,Boolean childrenCnt) { + if(!StringUtils.hasText(menuId) || !StringUtils.hasText(mmUserid)){ + return null; + } + List xmMenus=this.getUserCanOpMenusByIds(Arrays.asList(menuId),mmUserid,childrenCnt); + return xmMenus!=null && xmMenus.size()>0?xmMenus.get(0):null; + } + + /** + * 检查某个人是否故事的具有管理权限的人 + * 1.如果是需求负责人、创建人,可以 + * 2.如果是需求的上级(多级)负责人,可以 + * @param menuIds 需求、故事编号列表 + * @param mmUserid + * @return + */ + public List getUserCanOpMenusByIds(List menuIds, String mmUserid,Boolean childrenCnt) { + if(menuIds==null || menuIds.size()==0){ + return null; + } + List xmMenus=super.selectList("getUserCanOpMenusByIds",map("mmUserid",mmUserid,"menuIds",menuIds,"childrenCnt",childrenCnt)); + return xmMenus; + } +} + diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml index e71f90a9..ba51edd0 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml @@ -211,6 +211,21 @@ group by ${groupBy} + +