修改菜单角色慢的问题

This commit is contained in:
WenG 2021-06-23 23:54:09 +08:00
parent 8b3e256aaf
commit 581e8b098a
7 changed files with 142 additions and 32 deletions

View File

@ -172,8 +172,6 @@ public class RoleController extends BaseController {
@PathVariable("roleId") String roleId, @PathVariable("roleId") String roleId,
@PathVariable("type") String type) throws SearchException, ParamsException { @PathVariable("type") String type) throws SearchException, ParamsException {
Map<String, Object> params = requestParams(); Map<String, Object> params = requestParams();
params.put("menuParentId", menuParentId);
params.put("roleId", roleId);
if (!IRoleService.AUTH_TYPE_INSERT.equals(type) && if (!IRoleService.AUTH_TYPE_INSERT.equals(type) &&
!IRoleService.AUTH_TYPE_DELETE.equals(type) && !IRoleService.AUTH_TYPE_DELETE.equals(type) &&
!IRoleService.AUTH_TYPE_UPDATE.equals(type) && !IRoleService.AUTH_TYPE_UPDATE.equals(type) &&
@ -181,11 +179,7 @@ public class RoleController extends BaseController {
!IRoleService.AUTH_TYPE_MENU.equals(type)) { !IRoleService.AUTH_TYPE_MENU.equals(type)) {
throw new ParamsException("授权类型错误"); throw new ParamsException("授权类型错误");
} }
params.put("type", type); return menuService.listMenuByRoleIdAndType(roleId, type);
if (IRoleService.AUTH_TYPE_MENU.equals(type)) {
params.put("menuType", 1);
}
return menuService.listMenuAllJson(params);
} }
@ApiOperation(value = "执行授权", notes = "执行授权接口") @ApiOperation(value = "执行授权", notes = "执行授权接口")

View File

@ -53,7 +53,7 @@ public class MenuResourceController extends BaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listmenubyclientid/{clientId}/{userId}") @GetMapping("listmenubyclientid/{clientId}/{userId}")
public Callable<SuccessResultData<List<MenuDTO>>> listMenuByClientId(@PathVariable("clientId") String clientId, @PathVariable("userId") String userId, HttpServletRequest httpServletRequest) throws Exception { public Callable<SuccessResultData<List<MenuDTO>>> listMenuByClientId(@PathVariable("clientId") String clientId, @PathVariable("userId") String userId, HttpServletRequest httpServletRequest) throws Exception {
return () -> menuService.listMenuByClientIdAndUserId(clientId, userId); return () -> new SuccessResultData<>(menuService.listMenuByClientIdAndUserId(clientId, userId));
} }
} }

View File

@ -77,7 +77,7 @@ public class MenuDTO implements Serializable {
} }
public Boolean getParent() { public Boolean getParent() {
return isParent; return isParent == null ? false : isParent;
} }
public void setParent(Boolean parent) { public void setParent(Boolean parent) {
@ -173,7 +173,7 @@ public class MenuDTO implements Serializable {
} }
public Boolean getRight() { public Boolean getRight() {
return isRight; return isRight == null ? false : isRight;
} }
public void setRight(Boolean right) { public void setRight(Boolean right) {

View File

@ -121,7 +121,16 @@ public interface IMenuService {
* @return * @return
* @throws SearchException * @throws SearchException
*/ */
SuccessResultData<List<MenuDTO>> listMenuByClientIdAndUserId(String clientId, String userId) throws Exception; List<MenuDTO> listMenuByClientIdAndUserId(String clientId, String userId) throws Exception;
/**
* 通过角色和类型获取菜单列表
*
* @param roleId
* @param type
* @return
*/
List<MenuDTO> listMenuByRoleIdAndType(String roleId, String type);
/** /**
* 通过用户获取菜单 * 通过用户获取菜单
@ -131,4 +140,5 @@ public interface IMenuService {
* @throws SearchException * @throws SearchException
*/ */
List<String> listMenuIdByUser(Map<String, Object> params) throws SearchException; List<String> listMenuIdByUser(Map<String, Object> params) throws SearchException;
} }

View File

@ -1,7 +1,6 @@
package com.cm.serviceusercenter.service.system.menu.impl; package com.cm.serviceusercenter.service.system.menu.impl;
import com.cm.common.component.SecurityComponent; import com.cm.common.component.SecurityComponent;
import com.cm.common.constants.ISystemConstant;
import com.cm.common.exception.RemoveException; import com.cm.common.exception.RemoveException;
import com.cm.common.exception.SaveException; import com.cm.common.exception.SaveException;
import com.cm.common.exception.SearchException; import com.cm.common.exception.SearchException;
@ -12,12 +11,12 @@ import com.cm.common.pojo.dtos.ZTreeDTO;
import com.cm.common.result.SuccessResult; import com.cm.common.result.SuccessResult;
import com.cm.common.result.SuccessResultData; import com.cm.common.result.SuccessResultData;
import com.cm.common.result.SuccessResultList; import com.cm.common.result.SuccessResultList;
import com.cm.common.utils.ArrayListUtil;
import com.cm.common.utils.UUIDUtil; import com.cm.common.utils.UUIDUtil;
import com.cm.serviceusercenter.dao.system.menu.IMenuDao; import com.cm.serviceusercenter.dao.system.menu.IMenuDao;
import com.cm.serviceusercenter.dao.system.role.IRoleDao; import com.cm.serviceusercenter.dao.system.role.IRoleDao;
import com.cm.serviceusercenter.pojo.dtos.MenuDTO; import com.cm.serviceusercenter.pojo.dtos.MenuDTO;
import com.cm.serviceusercenter.pojo.dtos.OauthClientDTO; import com.cm.serviceusercenter.pojo.dtos.OauthClientDTO;
import com.cm.serviceusercenter.pojo.pos.UserPO;
import com.cm.serviceusercenter.service.BaseService; import com.cm.serviceusercenter.service.BaseService;
import com.cm.serviceusercenter.service.system.menu.IMenuService; import com.cm.serviceusercenter.service.system.menu.IMenuService;
import com.cm.serviceusercenter.service.system.oauthclient.IOauthClientService; import com.cm.serviceusercenter.service.system.oauthclient.IOauthClientService;
@ -149,7 +148,7 @@ public class MenuServiceImpl extends BaseService implements IMenuService {
} }
@Override @Override
public SuccessResultData<List<MenuDTO>> listMenuByClientIdAndUserId(String clientId, String userId) throws Exception { public List<MenuDTO> listMenuByClientIdAndUserId(String clientId, String userId) throws Exception {
Map<String, Object> params = new HashMap<>(1); Map<String, Object> params = new HashMap<>(1);
params.put("clientId", clientId); params.put("clientId", clientId);
OauthClientDTO oauthClientDTO = oauthClientService.getOauthClient(params); OauthClientDTO oauthClientDTO = oauthClientService.getOauthClient(params);
@ -158,24 +157,127 @@ public class MenuServiceImpl extends BaseService implements IMenuService {
} }
String menuId = oauthClientDTO.getMenuId(); String menuId = oauthClientDTO.getMenuId();
if (StringUtils.isBlank(menuId)) { if (StringUtils.isBlank(menuId)) {
return new SuccessResultData<>(new ArrayList<>()); return new ArrayList<>();
} }
List<String> userMenuIds; List<MenuDTO> menuDTOs;
// 如果是管理员获取管理员配置的菜单管理员的ID是1 // 如果是管理员获取管理员配置的菜单管理员的ID是1
if (StringUtils.equalsIgnoreCase(userId, "1")) { if (StringUtils.equalsIgnoreCase(userId, "1")) {
userMenuIds = listAdminMenuId(); List<String> userMenuIds = listAdminMenuId();
menuDTOs = listMenuTree(userMenuIds, true);
} else { } else {
params.put("userId", userId); params.put("userId", userId);
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_MENU); params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_MENU);
userMenuIds = listMenuIdByUser(params); List<String> userMenuIds = listMenuIdByUser(params);
menuDTOs = listMenuTree(userMenuIds, false);
} }
// 获取全部菜单 // 老方法
params.clear(); // List<MenuDTO> menuDTOs = listMenusAll(params);
params.put("menuParentId", menuId); // 新方法
// 返回客户端菜单
List<MenuDTO> clientMenuDTOs = new ArrayList<>();
for (MenuDTO menuDTO : menuDTOs) {
if (StringUtils.equals(menuId, menuDTO.getMenuId())) {
clientMenuDTOs.addAll(menuDTO.getSubMenus());
}
}
return clientMenuDTOs;
}
@Override
public List<MenuDTO> listMenuByRoleIdAndType(String roleId, String type) {
Map<String, Object> params = getHashMap(4);
// 全部菜单
params.put("menuStatus", 0); params.put("menuStatus", 0);
params.put("menuIds", userMenuIds); List<MenuDTO> menuDTOs = ArrayListUtil.deepClone(menuDao.listMenus(params), MenuDTO.class);
List<MenuDTO> menuDTOs = listMenusAll(params); List<MenuDTO> resultMenuDTOs = new ArrayList<>();
return new SuccessResultData<>(menuDTOs); params.clear();
params.put("roleId", roleId);
if (IRoleService.AUTH_TYPE_INSERT.equals(type)) {
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_INSERT);
} else if (IRoleService.AUTH_TYPE_DELETE.equals(type)) {
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_DELETE);
} else if (IRoleService.AUTH_TYPE_UPDATE.equals(type)) {
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_UPDATE);
} else if (IRoleService.AUTH_TYPE_QUERY.equals(type)) {
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_QUERY);
} else {
params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_MENU);
}
// 角色菜单
List<RoleMenuBO> roleMenuBOs = roleDao.listRoleMenuInfo(params);
// 勾选权限
for (MenuDTO menuDTO : menuDTOs) {
for (RoleMenuBO roleMenuBO : roleMenuBOs) {
if (StringUtils.equals(roleMenuBO.getMenuId(), menuDTO.getMenuId())) {
menuDTO.setRight(true);
break;
}
}
}
buildMenuTree(resultMenuDTOs, menuDTOs, "0");
return resultMenuDTOs;
}
/**
* 菜单树列表
*
* @param userMenuIds
* @param isAdmin
* @return
*/
private List<MenuDTO> listMenuTree(List<String> userMenuIds, boolean isAdmin) {
Map<String, Object> params = getHashMap(6);
params.put("menuStatus", 0);
List<MenuDTO> menuDTOs = ArrayListUtil.deepClone(menuDao.listMenus(params), MenuDTO.class);
List<MenuDTO> resultMenuDTOs = new ArrayList<>();
if (isAdmin && userMenuIds.isEmpty()) {
buildMenuTree(resultMenuDTOs, menuDTOs, "0");
return resultMenuDTOs;
}
// 得到用户菜单
for (int i = 0; i < menuDTOs.size(); i++) {
MenuDTO menuDTO = menuDTOs.get(i);
boolean isUserMenu = false;
for (String menuId : userMenuIds) {
if (StringUtils.equals(menuDTO.getMenuId(), menuId)) {
isUserMenu = true;
break;
}
}
if (!isUserMenu) {
menuDTOs.remove(i);
i--;
}
}
// 构建树形结构
buildMenuTree(resultMenuDTOs, menuDTOs, "0");
return resultMenuDTOs;
}
/**
* 构建菜单树
*
* @param parentMenuDTOs
* @param menuDTOs
* @param menuParentId
*/
private void buildMenuTree(List<MenuDTO> parentMenuDTOs, List<MenuDTO> menuDTOs, String menuParentId) {
for (int i = 0; i < menuDTOs.size(); i++) {
MenuDTO menuDTO = menuDTOs.get(i);
if (StringUtils.equals(menuDTO.getMenuParentId(), menuParentId)) {
parentMenuDTOs.add(menuDTO);
menuDTOs.remove(i);
i--;
}
}
for (MenuDTO menuDTO : parentMenuDTOs) {
List<MenuDTO> subMenuDTOs = new ArrayList<>();
menuDTO.setSubMenus(subMenuDTOs);
buildMenuTree(subMenuDTOs, menuDTOs, menuDTO.getMenuId());
if (!subMenuDTOs.isEmpty()) {
menuDTO.setParent(true);
}
}
} }
@Override @Override

View File

@ -1,6 +1,6 @@
server: server:
port: 7001 port: 7001
url: http://192.168.0.103:7001/usercenter url: http://127.0.0.1:7001/usercenter
# ws: ws://192.168.0.103:7001/usercenter/ws # ws: ws://192.168.0.103:7001/usercenter/ws
title: 统一用户管理平台 title: 统一用户管理平台
login-page-name: 统一用户管理平台 login-page-name: 统一用户管理平台
@ -28,14 +28,14 @@ spring:
max-request-size: 1GB max-request-size: 1GB
datasource: datasource:
druid: druid:
url: jdbc:mysql://49.233.36.36:6688/db_cloud?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=UTC # url: jdbc:mysql://49.233.36.36:6688/db_cloud?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=UTC
# url: jdbc:mysql://127.0.0.1:3306/db_cloud_v2_inspection?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=UTC url: jdbc:mysql://127.0.0.1:3306/db_cloud_v2_city?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=UTC
db-type: mysql db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
username: wanggeng # username: wanggeng
# username: root username: root
password: WenG>2132997 # password: WenG>2132997
# password: root password: root
initial-size: 2 initial-size: 2
min-idle: 2 min-idle: 2
max-active: 10 max-active: 10
@ -99,7 +99,7 @@ swagger:
swagger-base-package: com.cm swagger-base-package: com.cm
file: file:
uploadPath: /Users/wanggeng/Desktop/UploadFiles/ uploadPath: C:\Users\wenc0\Desktop\UploadFiles\
imageTypes: png,jpg,jpeg,gif,blob imageTypes: png,jpg,jpeg,gif,blob
videoTypes: mp4,rmvb videoTypes: mp4,rmvb
audioTypes: mp3,wmv audioTypes: mp3,wmv

View File

@ -141,6 +141,10 @@
AND AND
menu_parent_id = #{menuParentId} menu_parent_id = #{menuParentId}
</if> </if>
<if test="menuStatus != null">
AND
menu_status = #{menuStatus}
</if>
ORDER BY ORDER BY
menu_order asc menu_order asc
</select> </select>