|  | @ -2,8 +2,10 @@ package com.yihu.jw.base.endpoint.role;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.jw.base.contant.CommonContant;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.service.role.MenuService;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.service.role.RoleMenuService;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.util.ErrorCodeUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.role.MenuDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.role.RoleMenuDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.exception.code.BaseErrorCode;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.base.role.MenuVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.web.Envelop;
 | 
	
	
		
			
				|  | @ -38,6 +40,9 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ErrorCodeUtil errorCodeUtil;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private RoleMenuService roleMenuService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @PostMapping(value = BaseRequestMapping.Menu.CREATE)
 | 
	
		
			
				|  |  |     @ApiOperation(value = "创建")
 | 
	
		
			
				|  |  |     public ObjEnvelop<MenuVO> create (
 | 
	
	
		
			
				|  | @ -170,6 +175,7 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |         Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         menuVOs.forEach(menu->{
 | 
	
		
			
				|  |  |             List<MenuVO> tmp = map.get(menu.getId());
 | 
	
		
			
				|  |  |             menu.setChildren(tmp);
 | 
	
	
		
			
				|  | @ -204,4 +210,74 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return success(menuVOs);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @GetMapping(value = BaseRequestMapping.Menu.findRoleMenuTree)
 | 
	
		
			
				|  |  |     @ApiOperation(value = "获取角色菜单列表")
 | 
	
		
			
				|  |  |     public ListEnvelop<MenuVO> findRoleMenuTree (
 | 
	
		
			
				|  |  |             @ApiParam(name = "status", value = "状态")
 | 
	
		
			
				|  |  |             @RequestParam(value = "status", required = false) String status,
 | 
	
		
			
				|  |  |             @ApiParam(name = "name", value = "名称")
 | 
	
		
			
				|  |  |             @RequestParam(value = "name", required = false) String name,
 | 
	
		
			
				|  |  |             @ApiParam(name = "roleId", value = "角色id")
 | 
	
		
			
				|  |  |             @RequestParam(value = "roleId", required = false)String roleId) throws Exception {
 | 
	
		
			
				|  |  |         String filters = "";
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(status)){
 | 
	
		
			
				|  |  |             filters = "status="+status+";";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(name)){
 | 
	
		
			
				|  |  |             filters += "name?"+name+";";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //获取所有选择树
 | 
	
		
			
				|  |  |         List<RoleMenuDO> roleMenus = roleMenuService.findRoleMenu(roleId);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
 | 
	
		
			
				|  |  |         List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
 | 
	
		
			
				|  |  |         menuVOs.forEach(menuVO -> {
 | 
	
		
			
				|  |  |             if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
 | 
	
		
			
				|  |  |                 menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
 | 
	
		
			
				|  |  |             }else {
 | 
	
		
			
				|  |  |                 MenuDO menuDO = menuService.findOne(menuVO.getParentId());
 | 
	
		
			
				|  |  |                 menuVO.setParentName(menuDO.getName());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             //对比树是否被选择
 | 
	
		
			
				|  |  |             if(checkedTree(menuVO.getId(),roleMenus)){
 | 
	
		
			
				|  |  |                 menuVO.setChecked(true);
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 menuVO.setChecked(false);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         menuVOs.forEach(menu->{
 | 
	
		
			
				|  |  |             List<MenuVO> tmp = map.get(menu.getId());
 | 
	
		
			
				|  |  |             menu.setChildren(tmp);
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |         if(StringUtils.isBlank(name)){
 | 
	
		
			
				|  |  |             menuVOs = menuVOs.stream()
 | 
	
		
			
				|  |  |                     .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
 | 
	
		
			
				|  |  |                     .collect(Collectors.toList());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return success(menuVOs);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 验证树是否被选择
 | 
	
		
			
				|  |  |      * @param menuId
 | 
	
		
			
				|  |  |      * @param roleMenus
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Boolean checkedTree(String menuId,List<RoleMenuDO> roleMenus){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(roleMenus!=null&&roleMenus.size()>0){
 | 
	
		
			
				|  |  |             for(RoleMenuDO roleMenuDO:roleMenus){
 | 
	
		
			
				|  |  |                 if(menuId.equals(roleMenuDO.getMenuId())){
 | 
	
		
			
				|  |  |                     return true;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return false;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |