Browse Source

重构需求权限

master
陈裕财 4 years ago
parent
commit
645aaf4b99
  1. 97
      xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java
  2. 153
      xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java
  3. 28
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  4. 160
      xm-core/src/main/java/com/xm/core/service/XmGroupService.java
  5. 86
      xm-core/src/main/java/com/xm/core/service/XmMenuOperQxService.java
  6. 15
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml

97
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.safe.client.utils.LoginUtils;
import com.mdp.swagger.ApiEntityParams; import com.mdp.swagger.ApiEntityParams;
import com.xm.core.entity.XmGroup; import com.xm.core.entity.XmGroup;
import com.xm.core.entity.XmProduct;
import com.xm.core.entity.XmProject; import com.xm.core.entity.XmProject;
import com.xm.core.service.XmGroupService; import com.xm.core.service.XmGroupService;
import com.xm.core.service.XmProductService; import com.xm.core.service.XmProductService;
@ -94,39 +93,11 @@ public class XmGroupController {
if(groupDb==null){ if(groupDb==null){
return ResponseHelper.failed("data-0","小组已不存在。"); 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); xmGroupService.parentIdPathsCalcBeforeSave(group);
tips= xmGroupService.updateGroup(group,groupDb); //列出XmProjectGroup列表 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()); xmGroupCacheService.clearProjectGroup(groupDb.getProjectId());
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】");
}
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
@ -216,7 +187,6 @@ public class XmGroupController {
Tips tips=new Tips("成功新增一条数据"); Tips tips=new Tips("成功新增一条数据");
try{ try{
User u = LoginUtils.getCurrentUserInfo(); User u = LoginUtils.getCurrentUserInfo();
if(!"1".equals(xmGroup.getPgClass())) {
if(!StringUtils.hasText(xmGroup.getProjectId())){ if(!StringUtils.hasText(xmGroup.getProjectId())){
return ResponseHelper.failed("projectId-0","项目编号不能为空"); return ResponseHelper.failed("projectId-0","项目编号不能为空");
} }
@ -236,26 +206,7 @@ public class XmGroupController {
xmGroup.setBranchId(project.getBranchId()); 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<String,String> productAdmMap=xmGroupService.getProductAdmUsers(product);
if(!productAdmMap.containsKey(u.getUserid())) {
return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能创建小组。产品级助理及以上人员可以创建小组。");
}
xmGroup.setProjectId(null);
}
if (StringUtils.isEmpty(xmGroup.getId())) { if (StringUtils.isEmpty(xmGroup.getId())) {
xmGroup.setId(xmGroupService.createKey("id")); xmGroup.setId(xmGroupService.createKey("id"));
} else { } else {
@ -271,14 +222,9 @@ public class XmGroupController {
} }
this.xmGroupService.parentIdPathsCalcBeforeSave(xmGroup); this.xmGroupService.parentIdPathsCalcBeforeSave(xmGroup);
xmGroupService.insert(xmGroup); xmGroupService.insert(xmGroup);
if("1".equals(xmGroup.getPgClass())){
xmGroupCacheService.clearProductGroup(xmGroup.getProductId());
xmRecordService.addXmProductGroupRecord(xmGroup.getProductId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】");
}else {
xmGroupCacheService.clearProjectGroup(xmGroup.getProjectId()); xmGroupCacheService.clearProjectGroup(xmGroup.getProjectId());
xmRecordService.addXmProductGroupRecord(xmGroup.getProductId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】");
}
xmRecordService.addXmGroupRecord(xmGroup.getProjectId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】");
m.put("data",xmGroup); m.put("data",xmGroup);
}catch (BizException e) { }catch (BizException e) {
tips=e.getTips(); tips=e.getTips();
@ -308,7 +254,6 @@ public class XmGroupController {
if(groupDb==null){ if(groupDb==null){
return ResponseHelper.failed("data-0","小组已不存在"); return ResponseHelper.failed("data-0","小组已不存在");
} }
if(!"1".equals(groupDb.getPgClass())) {
if(StringUtils.hasText(groupDb.getProjectId())){ if(StringUtils.hasText(groupDb.getProjectId())){
XmProject project = xmProjectService.getProjectFromCache(groupDb.getProjectId()); XmProject project = xmProjectService.getProjectFromCache(groupDb.getProjectId());
if(project==null){ if(project==null){
@ -319,21 +264,6 @@ public class XmGroupController {
return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。");
} }
} }
}else{
if(!StringUtils.hasText(xmGroup.getProductId())){
XmProduct product = xmProductService.selectOneObject(new XmProduct(groupDb.getProductId()));
if(product==null){
return ResponseHelper.failed("product-0","产品已不存在");
}
Map<String,String> productAdmMap=xmGroupService.getProductAdmUsers(product);
if(!productAdmMap.containsKey(u.getUserid())) {
return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能删除小组。产品级助理及以上人员可以删除小组。");
}
}
}
XmGroup childrenGroupQuery=new XmGroup(); XmGroup childrenGroupQuery=new XmGroup();
childrenGroupQuery.setPgroupId(xmGroup.getId()); childrenGroupQuery.setPgroupId(xmGroup.getId());
long childrenCnt=this.xmGroupService.countByWhere(childrenGroupQuery); long childrenCnt=this.xmGroupService.countByWhere(childrenGroupQuery);
@ -341,14 +271,9 @@ public class XmGroupController {
return ResponseHelper.failed("childrenCnt-no-0","该小组有下级小组,不能删除。请先删除下级小组。"); return ResponseHelper.failed("childrenCnt-no-0","该小组有下级小组,不能删除。请先删除下级小组。");
} }
xmGroupService.doDeleteByPk(xmGroup,groupDb); 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()); xmGroupCacheService.clearProjectGroup(groupDb.getProjectId());
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】");
}
}catch (BizException e) { }catch (BizException e) {
tips=e.getTips(); tips=e.getTips();
@ -379,27 +304,17 @@ public class XmGroupController {
} }
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
XmGroup groupDb=groupsDb.get(0); XmGroup groupDb=groupsDb.get(0);
String pgClass=groupDb.getPgClass();
String id=groupDb.getProductId(); String id=groupDb.getProductId();
List<XmGroup> hasChildNodes=new ArrayList<>(); List<XmGroup> hasChildNodes=new ArrayList<>();
List<XmGroup> noQxs=new ArrayList<>(); List<XmGroup> noQxs=new ArrayList<>();
List<XmGroup> canDelNodes=new ArrayList<>(); List<XmGroup> canDelNodes=new ArrayList<>();
if("0".equals(pgClass)){
id=groupDb.getProjectId(); id=groupDb.getProjectId();
XmProject prject=this.xmProjectService.getProjectFromCache(id); XmProject prject=this.xmProjectService.getProjectFromCache(id);
Map<String,String> projectAdmMap=xmGroupService.getProjectAdmUsers(prject); Map<String,String> projectAdmMap=xmGroupService.getProjectAdmUsers(prject);
if (!projectAdmMap.containsKey(user.getUserid())) { if (!projectAdmMap.containsKey(user.getUserid())) {
return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); return ResponseHelper.failed("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。");
} }
}else{
id=groupDb.getProductId();
XmProduct product=this.xmProductService.getProductFromCache( id );
Map<String,String> productAdmMap=xmGroupService.getProductAdmUsers(product);
if(!productAdmMap.containsKey(user.getUserid())) {
return ResponseHelper.failed("not-product-adm","您不是产品管理人员,不能删除小组。产品级助理以上人员可以删除小组。");
}
}
if(canDelNodes.size()>0){ if(canDelNodes.size()>0){
for (XmGroup canDelNode : canDelNodes) { for (XmGroup canDelNode : canDelNodes) {
if(!xmGroupService.checkCanDelAllChild(canDelNode,canDelNodes)){ if(!xmGroupService.checkCanDelAllChild(canDelNode,canDelNodes)){
@ -411,18 +326,12 @@ public class XmGroupController {
} }
if(canDelNodes.size()>0){ if(canDelNodes.size()>0){
String groupNames=canDelNodes.stream().map(i->i.getGroupName()).collect(Collectors.joining(",")); 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); xmGroupService.doBatchDeleteProjectGroups(canDelNodes);
xmGroupCacheService.clearProjectGroups(groupDb.getProjectId()); xmGroupCacheService.clearProjectGroups(groupDb.getProjectId());
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】"); xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】");
} }
}
}catch (BizException e) { }catch (BizException e) {
tips=e.getTips(); tips=e.getTips();
logger.error("",e); logger.error("",e);

153
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.mdp.safe.client.utils.LoginUtils;
import com.xm.core.PubTool; import com.xm.core.PubTool;
import com.xm.core.entity.XmMenu; import com.xm.core.entity.XmMenu;
import com.xm.core.entity.XmProduct;
import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTask;
import com.xm.core.queue.XmMenuSumParentsPushService; 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.BatchChangeParentMenuVo;
import com.xm.core.vo.XmGroupVo; import com.xm.core.vo.XmGroupVo;
import com.xm.core.vo.XmMenuVo; import com.xm.core.vo.XmMenuVo;
@ -68,10 +66,17 @@ public class XmMenuController {
private XmGroupService groupService; private XmGroupService groupService;
@Autowired
private XmProductService productService;
@Autowired @Autowired
XmMenuSumParentsPushService pushService; XmMenuSumParentsPushService pushService;
@Autowired
XmMenuOperQxService menuOperQxService;
Map<String,Object> fieldsMap = BaseUtils.toMap(new XmMenu()); Map<String,Object> fieldsMap = BaseUtils.toMap(new XmMenu());
@ApiOperation( value = "查询项目菜单表信息列表",notes="listXmMenu,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiOperation( value = "查询项目菜单表信息列表",notes="listXmMenu,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ -305,7 +310,8 @@ public class XmMenuController {
xmMenu.setMmUserid(user.getUserid()); xmMenu.setMmUserid(user.getUserid());
xmMenu.setMmUsername(user.getUsername()); xmMenu.setMmUsername(user.getUsername());
} }
if(!groupService.calcCanOpMenus(xmMenu)){
XmMenu parentMenu= menuOperQxService.getUserCanOpMenuById(xmMenu.getPmenuId(),user.getUserid(),false);
if(parentMenu==null){
return ResponseHelper.failed("noqx","您无权新增需求。"); return ResponseHelper.failed("noqx","您无权新增需求。");
} }
xmMenuService.parentIdPathsCalcBeforeSave(xmMenu); xmMenuService.parentIdPathsCalcBeforeSave(xmMenu);
@ -343,6 +349,7 @@ public class XmMenuController {
Map<String,Object> m = new HashMap<>(); Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功删除一条数据"); Tips tips=new Tips("成功删除一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo();
XmTask xmTask = new XmTask(); XmTask xmTask = new XmTask();
xmTask.setMenuId(xmMenu.getMenuId()); xmTask.setMenuId(xmMenu.getMenuId());
long taskCount=xmTaskService.countByWhere(xmTask); long taskCount=xmTaskService.countByWhere(xmTask);
@ -351,17 +358,13 @@ public class XmMenuController {
}else { }else {
List<String> ids=new ArrayList<>(); List<String> ids=new ArrayList<>();
ids.add(xmMenu.getMenuId()); ids.add(xmMenu.getMenuId());
List<XmMenu> xmMenus=this.xmMenuService.selectListByIdsWithsChildrenCnt(ids);
if(xmMenus==null || xmMenus.size()==0){
return ResponseHelper.failed("data-0","数据不存在");
XmMenu xmMenuDb=menuOperQxService.getUserCanOpMenuById(xmMenu.getMenuId(),user.getUserid(),true);
if(xmMenuDb==null){
return ResponseHelper.failed("no-qx-0","无权限操作该需求");
} }
xmMenu=xmMenus.get(0);
if(xmMenu.getChildrenCnt()!=null && xmMenu.getChildrenCnt()>0){
if(xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){
return ResponseHelper.failed("hadChild","该需求有子需求,不能删除"); return ResponseHelper.failed("hadChild","该需求有子需求,不能删除");
} }
if(!groupService.calcCanOpMenus(xmMenu)){
return ResponseHelper.failed("noqx","您无权删除此需求。");
}
xmMenuService.deleteByPk(xmMenu); xmMenuService.deleteByPk(xmMenu);
xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"删除产品需求","删除需求"+xmMenu.getMenuName(),"",JSON.toJSONString(xmMenu)); xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"删除产品需求","删除需求"+xmMenu.getMenuName(),"",JSON.toJSONString(xmMenu));
@ -389,20 +392,18 @@ public class XmMenuController {
Map<String,Object> m = new HashMap<>(); Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据"); Tips tips=new Tips("成功更新一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo();
if(!StringUtils.hasText(xmMenu.getMenuId())){ if(!StringUtils.hasText(xmMenu.getMenuId())){
ResponseHelper.failed("menuId-0","menuId不能为空"); 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){ 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("1".equals(xmMenuDb.getNtype())){
if("0".equals(xmMenu.getNtype()) && xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){ 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{ }else{
if(xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){ if(xmMenuDb.getChildrenCnt()!=null && xmMenuDb.getChildrenCnt()>0){
@ -436,19 +437,18 @@ public class XmMenuController {
Map<String,Object> m = new HashMap<>(); Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据"); Tips tips=new Tips("成功更新一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo();
List<String> menuIds= (List<String>) xmMenuMap.get("menuIds"); List<String> menuIds= (List<String>) xmMenuMap.get("menuIds");
if(menuIds==null || menuIds.size()==0){ if(menuIds==null || menuIds.size()==0){
ResponseHelper.failed("menuIds-0","menuIds不能为空"); ResponseHelper.failed("menuIds-0","menuIds不能为空");
} }
XmMenu xmMenu= BaseUtils.fromMap(xmMenuMap,XmMenu.class); XmMenu xmMenu= BaseUtils.fromMap(xmMenuMap,XmMenu.class);
List<XmMenu> xmMenusDb=xmMenuService.selectListByIds(menuIds);
List<XmMenu> xmMenusDb=this.menuOperQxService.getUserCanOpMenusByIds(menuIds,user.getUserid(),false);
if(xmMenusDb==null ||xmMenusDb.size()==0){ if(xmMenusDb==null ||xmMenusDb.size()==0){
ResponseHelper.failed("menus-0","该需求已不存在");
ResponseHelper.failed("menus-0","无权限操作所选需求");
} }
List<XmMenu> can=new ArrayList<>();
List<XmMenu> no=new ArrayList<>();
groupService.calcCanOpMenus(xmMenusDb,can,no);
List<XmMenu> can=xmMenusDb;
if(can.size()<=0){ if(can.size()<=0){
return ResponseHelper.failed("noqx","您无权修改选中的需求。"); return ResponseHelper.failed("noqx","您无权修改选中的需求。");
} }
@ -456,6 +456,7 @@ public class XmMenuController {
fields.add("childrenCnt"); fields.add("childrenCnt");
fields.add("ntype"); fields.add("ntype");
fields.add("pidPaths"); fields.add("pidPaths");
fields.add("pmenuId");
for (String fieldName : xmMenuMap.keySet()) { for (String fieldName : xmMenuMap.keySet()) {
if(fields.contains(fieldName)){ if(fields.contains(fieldName)){
return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改"); return ResponseHelper.failed(fieldName+"-no-edit",fieldName+"不允许修改");
@ -491,10 +492,13 @@ public class XmMenuController {
Map<String,Object> m = new HashMap<>(); Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功删除"+xmMenus.size()+"条数据"); Tips tips=new Tips("成功删除"+xmMenus.size()+"条数据");
try{ try{
List<XmMenu> noExists=new ArrayList<>();
User user=LoginUtils.getCurrentUserInfo();
List<String> hasChildMenus=new ArrayList<>(); List<String> hasChildMenus=new ArrayList<>();
List<XmMenu> canDelList=new ArrayList<>(); List<XmMenu> canDelList=new ArrayList<>();
List<XmMenu> xmMenusDb=this.xmMenuService.selectListByIdsWithsChildrenCnt(xmMenus.stream().map(i->i.getMenuId()).collect(Collectors.toList()));
List<XmMenu> 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) { for (XmMenu xmMenu : xmMenusDb) {
boolean canDel=this.xmMenuService.checkCanDelAllChild(xmMenu,xmMenusDb); boolean canDel=this.xmMenuService.checkCanDelAllChild(xmMenu,xmMenusDb);
if(canDel){ if(canDel){
@ -503,11 +507,9 @@ public class XmMenuController {
hasChildMenus.add(xmMenu.getMenuName()); hasChildMenus.add(xmMenu.getMenuName());
} }
} }
noExists=noExists.stream().filter(i->!xmMenusDb.stream().filter(k->k.getMenuId().equals(i.getMenuId())).findAny().isPresent()).collect(Collectors.toList());
List<XmMenu> canDelResult=new ArrayList<>(); List<XmMenu> canDelResult=new ArrayList<>();
List<XmMenu> noQxResult=new ArrayList<>();
List<XmMenu> noQxResult=xmMenus.stream().filter(i->!xmMenusDb.stream().filter(k->k.getMenuId().equals(i.getMenuId())).findAny().isPresent()).collect(Collectors.toList());
if(canDelList.size()>0) { if(canDelList.size()>0) {
groupService.calcCanOpMenus(canDelList,canDelResult,noQxResult);
if(canDelResult.size()>0){ if(canDelResult.size()>0){
xmMenuService.doBatchDelete(canDelResult); xmMenuService.doBatchDelete(canDelResult);
} }
@ -515,13 +517,10 @@ public class XmMenuController {
List<String> msg=new ArrayList<>(); List<String> msg=new ArrayList<>();
msg.add("成功删除"+canDelResult.size()+"个需求信息。"); msg.add("成功删除"+canDelResult.size()+"个需求信息。");
if(hasChildMenus.size()>0 ) { if(hasChildMenus.size()>0 ) {
msg.add("以下"+hasChildMenus.size()+"个需求存在子需求,不允许删除【"+StringUtils.arrayToDelimitedString(hasChildMenus.toArray(), ",")+"】");
msg.add("以下"+hasChildMenus.size()+"个需求存在子需求,不允许删除,【"+StringUtils.arrayToDelimitedString(hasChildMenus.toArray(), ",")+"】.");
} }
if(noQxResult.size()>0){ 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){ if(canDelResult.size()==0){
tips.setFailureMsg(msg.stream().collect(Collectors.joining(" "))); tips.setFailureMsg(msg.stream().collect(Collectors.joining(" ")));
@ -549,7 +548,6 @@ public class XmMenuController {
if(xmMenus.size()>0) { if(xmMenus.size()>0) {
List<XmMenu> canEdit=new ArrayList<>(); List<XmMenu> canEdit=new ArrayList<>();
List<XmMenu> noQx=new ArrayList<>(); List<XmMenu> noQx=new ArrayList<>();
groupService.calcCanOpMenus(xmMenus,canEdit,noQx);
if(canEdit.size()>0){ if(canEdit.size()>0){
this.xmMenuService.parentIdPathsCalcBeforeSave(canEdit); this.xmMenuService.parentIdPathsCalcBeforeSave(canEdit);
this.xmMenuService.doBatchInsert(canEdit); this.xmMenuService.doBatchInsert(canEdit);
@ -574,35 +572,6 @@ public class XmMenuController {
return m; return m;
} }
@HasQx(value = "xm_core_xmMenu_batchEdit",name = "批量修改用户需求",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchEdit",method=RequestMethod.POST)
public Map<String,Object> batchEditXmMenu(@RequestBody List<XmMenuVo> xmMenus) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功修改"+xmMenus.size()+"条数据");
try{
List<XmMenu> xmMenuList=xmMenus.stream().map(i->(XmMenu)i).collect(Collectors.toList());
List<XmMenu> canEdit=new ArrayList<>();
List<XmMenu> noQx=new ArrayList<>();
groupService.calcCanOpMenus(xmMenuList,canEdit,noQx);
if(canEdit.size()>0) {
List<XmMenuVo> 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,仅需要上传主键字段") @ApiOperation( value = "批量修改需求的上级",notes="batchChangeParentMenu,仅需要上传主键字段")
@ -625,50 +594,36 @@ public class XmMenuController {
if(!StringUtils.hasText(parentMenuVo.getPmenuId())){ if(!StringUtils.hasText(parentMenuVo.getPmenuId())){
return ResponseHelper.failed("parentMenuid-0", "上级编号不能为空"); 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<String> ids=parentMenuVo.getMenuIds().stream().collect(Collectors.toList()); List<String> ids=parentMenuVo.getMenuIds().stream().collect(Collectors.toList());
ids.add(parentMenuVo.getPmenuId()); ids.add(parentMenuVo.getPmenuId());
ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList()); ids=ids.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList());
List<XmMenu> xmMenus=this.xmMenuService.selectListByIds(ids);
Optional<XmMenu> 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<XmMenu> canOpxmMenus=xmMenus.stream().filter(i->!parentMenu.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList());
List<XmMenu> sameParentMenus=xmMenus.stream().filter(i->parentMenu.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList());
List<XmMenu> 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<XmMenu> canOpxmMenus=xmMenus.stream().filter(i->!parentDb.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList());
List<XmMenu> sameParentMenus=xmMenus.stream().filter(i->parentDb.getMenuId().equals(i.getPmenuId())).collect(Collectors.toList());
if(canOpxmMenus.size()==0){ 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", "所有需求必须都是同一个产品之下"); return ResponseHelper.failed("productId-not-same", "所有需求必须都是同一个产品之下");
} }
Map<String,XmMenu> allowMenusDbMap=new HashMap<>(); Map<String,XmMenu> allowMenusDbMap=new HashMap<>();
Map<String,XmMenu> noAllowMenusDbMap=new HashMap<>(); Map<String,XmMenu> noAllowMenusDbMap=new HashMap<>();
List<XmGroupVo> pgroups=groupService.getProductGroupVoList(parentMenu.getProductId());
boolean isAdm=groupService.checkUserIsPmOrAssByPtype(user.getUserid(),"1",null,parentMenu.getProductId());
if(!isAdm){
for (XmMenu menu : canOpxmMenus) { 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); allowMenusDbMap.put(menu.getMenuId(),menu);
} }
}
}else{
for (XmMenu task : canOpxmMenus) {
allowMenusDbMap.put(task.getMenuId(),task);
}
}
Map<String,XmMenu> allowMenusDbMap2=new HashMap<>(); Map<String,XmMenu> allowMenusDbMap2=new HashMap<>();
for (XmMenu t : allowMenusDbMap.values()) { for (XmMenu t : allowMenusDbMap.values()) {
if(!allowMenusDbMap.containsKey(t.getPmenuId())){ if(!allowMenusDbMap.containsKey(t.getPmenuId())){
@ -689,20 +644,20 @@ public class XmMenuController {
} }
} }
if(allowMenusDbMap3.size()>0){ 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<String> msgs=new ArrayList<>(); List<String> msgs=new ArrayList<>();
if(allowMenusDbMap3.size()>0){ if(allowMenusDbMap3.size()>0){
msgs.add("成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentMenu.getMenuName()+"】上");
msgs.add("成功将以下"+allowMenusDbMap3.size()+"个需求及其所有子项挂接到【"+parentDb.getMenuName()+"】上");
} }
if(noAllowMenusDbMap.size()>0){ if(noAllowMenusDbMap.size()>0){
msgs.add("以下"+noAllowMenusDbMap.size()+"个需求无权限操作,【"+noAllowMenusDbMap.values().stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); msgs.add("以下"+noAllowMenusDbMap.size()+"个需求无权限操作,【"+noAllowMenusDbMap.values().stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】");
} }
if(sameParentMenus.size()>0){ 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){ if(allowMenusDbMap3.size()>0){
tips.setOkMsg(msgs.stream().collect(Collectors.joining(" "))); tips.setOkMsg(msgs.stream().collect(Collectors.joining(" ")));

28
xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java

@ -255,7 +255,7 @@ public class XmTaskController {
List<XmTask> no=new ArrayList<>(); List<XmTask> no=new ArrayList<>();
User user = LoginUtils.getCurrentUserInfo(); User user = LoginUtils.getCurrentUserInfo();
for (XmTask xmTaskDb : xmTasksDb) { 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(!tips.isOk()){
if(user.getUserid().equals(xmTaskDb.getExecutorUserid())||user.getUserid().equals(xmTaskDb.getCreateUserid())){ if(user.getUserid().equals(xmTaskDb.getExecutorUserid())||user.getUserid().equals(xmTaskDb.getCreateUserid())){
can.add(xmTaskDb); can.add(xmTaskDb);
@ -350,7 +350,7 @@ public class XmTaskController {
return m; return m;
} }
User user=LoginUtils.getCurrentUserInfo(); 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
} }
@ -468,7 +468,7 @@ public class XmTaskController {
return ResponseHelper.failed("existsExecuser","有待验收、待结算的执行人,不能删除"); 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
} }
@ -509,11 +509,11 @@ public class XmTaskController {
return m; 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); 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){ if(!existsGrouop){
return ResponseHelper.failed("not-member",xmTaskVo.getCreateUsername()+"不是项目组成员,不能作为任务责任人"); return ResponseHelper.failed("not-member",xmTaskVo.getCreateUsername()+"不是项目组成员,不能作为任务责任人");
} }
@ -563,7 +563,7 @@ public class XmTaskController {
xmTaskVo.setNtype("1"); 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
} }
@ -615,7 +615,7 @@ public class XmTaskController {
if(xmTaskDb==null){ if(xmTaskDb==null){
return ResponseHelper.failed("data-0","任务已不存在"); 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()){ if(!tips.isOk()){
boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid());
boolean isExecUser=user.getUserid().equals(xmTaskDb.getExecutorUserid()); boolean isExecUser=user.getUserid().equals(xmTaskDb.getExecutorUserid());
@ -710,7 +710,7 @@ public class XmTaskController {
} }
String projectId=batchImportVo.getProjectId(); String projectId=batchImportVo.getProjectId();
String productId=batchImportVo.getProductId(); 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
} }
@ -947,7 +947,7 @@ public class XmTaskController {
XmProduct xmProductDb=xmProductService.getProductFromCache(xmMenuDb.getProductId()); XmProduct xmProductDb=xmProductService.getProductFromCache(xmMenuDb.getProductId());
boolean hasMenuQx=true; 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()){ if(!tips2.isOk()){
hasMenuQx=false; hasMenuQx=false;
} }
@ -1063,19 +1063,17 @@ public class XmTaskController {
} }
String projectId=xmTaskDb.getProjectId(); String projectId=xmTaskDb.getProjectId();
String productId=xmTaskDb.getProductId(); 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()){ if(!tips.isOk()){
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
} }
List<XmTask> allowDelNodes=new ArrayList<>(); List<XmTask> allowDelNodes=new ArrayList<>();
List<XmTask> noAllowNodes=new ArrayList<>(); List<XmTask> noAllowNodes=new ArrayList<>();
Map<String,XmTask> delNodesDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks); Map<String,XmTask> delNodesDbMap=this.xmTaskService.selectTasksMapByTasks(xmTasks);
List<XmGroupVo> pgroups="0".equals(xmTaskDb.getPtype())? groupService.getProjectGroupVoList(projectId) : groupService.getProductGroupVoList(productId);
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId) ;
for (XmTask node : delNodesDbMap.values()) { 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","所有任务必须同属于一个项目"); 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()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,node.getCreateUserid(),user.getUserid());
@ -1333,7 +1331,7 @@ public class XmTaskController {
if(!"1".equals(parentTask.getNtype())){ if(!"1".equals(parentTask.getNtype())){
return ResponseHelper.failed("parentTask-ntype-not-1", "【"+parentTask.getName()+"】为任务,不能作为上级节点。请另选上级或者变更其为计划节点"); 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()){ if(!tips2.isOk()){
return ResponseHelper.failed(tips2); return ResponseHelper.failed(tips2);
} }

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

@ -63,45 +63,13 @@ public class XmGroupService extends BaseService {
groupCacheService.clearProductGroups(productId); groupCacheService.clearProductGroups(productId);
} }
public boolean calcCanOpMenus(XmMenu menus){
List<XmMenu> menuList=new ArrayList<>();
menuList.add(menus);
List<XmMenu> can=new ArrayList<>();
List<XmMenu> 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<XmGroupVo> pgroups=new ArrayList<>(); List<XmGroupVo> 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","您无权操作!项目经理、组长可以。");
}
}
}else if("0".equals(ptype)){
isAdm=this.checkUserIsProjectAdm(projectId, user.getUserid());
boolean isAdm=this.checkUserIsProjectAdm(projectId, user.getUserid());
if(!isAdm){ if(!isAdm){
pgroups=this.getProjectGroupVoList(projectId); pgroups=this.getProjectGroupVoList(projectId);
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
@ -112,59 +80,10 @@ public class XmGroupService extends BaseService {
return new Tips(false,"not-head","您无权操作!产品经理、组长可以操作。"); return new Tips(false,"not-head","您无权操作!产品经理、组长可以操作。");
} }
} }
}
return tips;
}
public void calcCanOpMenus(List<XmMenu> menus,List<XmMenu> canOpResult,List<XmMenu> noQxOpResult ){
Tips tips=new Tips("成功");
//按产品分组检查权限
Map<String,List<XmMenu>> productMenusMap=new HashMap<>();
for (XmMenu menu : menus) {
List<XmMenu> 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<XmGroupVo> 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);
return tips;
} }
}
}else{
canOpResult.addAll(menuList);
}
}
});
}
/** 请在此类添加自定义函数 */ /** 请在此类添加自定义函数 */
public List<XmGroupVo> getProjectGroupVoList(String projectId) { public List<XmGroupVo> getProjectGroupVoList(String projectId) {
@ -247,40 +166,7 @@ public class XmGroupService extends BaseService {
} }
return false; return false;
} }
public List<XmGroupVo> getProductGroupVoList(String productId) {
List<XmGroupVo> groupVoList=new ArrayList<>();
List<XmGroupVo> groupVoList2 = groupCacheService.getProductGroups(productId);
if(groupVoList2==null||groupVoList2.size()==0) {
XmGroup group = new XmGroup();
group.setProductId(productId);
List<XmGroup> groupList = this.selectListByWhere(group);
if(groupList==null || groupList.size()==0) {
groupCacheService.putProductGroups(productId, groupVoList);
return groupVoList;
}
List<XmGroupUser> groupUserList=this.xmGroupUserService.selectGroupUserListByProductId(productId);
if(groupUserList==null || groupUserList.size()==0) {
}
groupList.forEach(g -> {
XmGroupVo gvo = new XmGroupVo();
BeanUtils.copyProperties(g,gvo);
List<XmGroupUser> 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 * @param projectId
@ -369,16 +255,7 @@ public class XmGroupService extends BaseService {
List<XmGroupVo> xmGroupVoList=this.getProjectGroupVoList(projectId); List<XmGroupVo> xmGroupVoList=this.getProjectGroupVoList(projectId);
return this.getUserGroups(xmGroupVoList, userid); return this.getUserGroups(xmGroupVoList, userid);
} }
/**
* 获取用户在某个项目中的组
* @param productId
* @param userid
* @return
*/
public List<XmGroupVo> getUserGroupsByProductId(String productId, String userid){
List<XmGroupVo> xmGroupVoList=this.getProductGroupVoList(productId);
return this.getUserGroups(xmGroupVoList, userid);
}
/** /**
* 检查用户是否在一些组中任意个组当组长 * 检查用户是否在一些组中任意个组当组长
@ -453,14 +330,9 @@ public class XmGroupService extends BaseService {
} }
return userGroups; return userGroups;
} }
public boolean checkUserExistsGroupByPtype(String ptype,String projectId,String productId, String userid){
if("1".equals(ptype)){
List<XmGroupVo> userGroups= getUserGroupsByProductId(productId,userid);
return userGroups!=null && userGroups.size()>0;
}else {
public boolean checkUserExistsGroup(String projectId, String userid){
List<XmGroupVo> userGroups= getUserGroupsByProjectId(projectId,userid); List<XmGroupVo> userGroups= getUserGroupsByProjectId(projectId,userid);
return userGroups!=null && userGroups.size()>0; return userGroups!=null && userGroups.size()>0;
}
} }
@ -599,16 +471,6 @@ public class XmGroupService extends BaseService {
return datas; return datas;
} }
/**
* 根据产品编号查询团队
* @param productId
* @return
*/
public List<XmGroupVo> getProjectGroupVoListByProductId(String productId) {
List<XmGroupVo> data0=this.getProductGroupVoList(productId);
return data0;
}
public List<XmGroup> parentIdPathsCalcBeforeSave(List<XmGroup> nodes) { public List<XmGroup> parentIdPathsCalcBeforeSave(List<XmGroup> nodes) {
@ -689,15 +551,7 @@ public class XmGroupService extends BaseService {
} }
return tips; 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<String,String> getProductAdmUsers(XmProduct xmProductDb){ public Map<String,String> getProductAdmUsers(XmProduct xmProductDb){

86
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;
/**
* 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br>
* 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块 <br>
* 实体 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<XmMenu> 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<XmMenu> getUserCanOpMenusByIds(List<String> menuIds, String mmUserid,Boolean childrenCnt) {
if(menuIds==null || menuIds.size()==0){
return null;
}
List<XmMenu> xmMenus=super.selectList("getUserCanOpMenusByIds",map("mmUserid",mmUserid,"menuIds",menuIds,"childrenCnt",childrenCnt));
return xmMenus;
}
}

15
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml

@ -211,6 +211,21 @@
</where> </where>
group by ${groupBy} group by ${groupBy}
</select> </select>
<select id="getUserCanOpMenusByIds" parameterType="HashMap">
select
<if test="childrenCnt==true">
(select count(*) from xm_menu m where m.pmenu_id=res.menu_id) as children_cnt,
</if>
res.* from xm_menu res inner join xm_product p on res.product_id=p.id where
res.menu_id in
<foreach collection="menuIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
and ( (p.adm_userid=#{mmUserid} or p.pm_userid=#{mmUserid} or pm.ass_userid=#{mmUserid})
or exists( select 1 from xm_menu m where FIND_IN_SET(m.menu_id,res.pid_paths) and m.mm_userid=#{mmUserid} )
)
</select>
<!--结束 自定义sql函数区域--> <!--结束 自定义sql函数区域-->

Loading…
Cancel
Save