优化了获取角色权限的方法

This commit is contained in:
zhangke 2025-09-03 12:33:36 +08:00
parent 9eb7ffbe02
commit ecfe26d708
8 changed files with 107 additions and 14 deletions

View File

@ -58,6 +58,32 @@ public class CeneterOutboundControlelr {
@Resource @Resource
private IWmsModelService wmsModelService; private IWmsModelService wmsModelService;
@Resource
private IRoleButtonMapService roleButtonMapService ;
@Resource
private IMenuButtonService menuButtonService;
@GetMapping("idGenery")
public ApiResult<Long> idGenery() {
return ApiResult.success(IdUtil.getSnowflakeNextId());
}
@GetMapping("initrole")
public ApiResult<Void> initRole() {
List<RoleButtonMap> roleButtonMaps = new ArrayList<>();
List<MenuButton> menuButtons = menuButtonService.list();
for (MenuButton menuButton : menuButtons) {
RoleButtonMap roleButtonMap = new RoleButtonMap();
roleButtonMap.setRoleId(1L);
roleButtonMap.setId(IdUtil.getSnowflakeNextId());
roleButtonMap.setButtonId(menuButton.getId());
roleButtonMaps.add(roleButtonMap);
}
roleButtonMapService.saveBatch(roleButtonMaps);
return ApiResult.success();
}
@GetMapping("syncData") @GetMapping("syncData")
public ApiResult<Void> syncData(@RequestParam String orderId) { public ApiResult<Void> syncData(@RequestParam String orderId) {

View File

@ -37,7 +37,8 @@ public class MenuControllerService {
private IMenuButtonApiMapService menuButtonApiMapService; private IMenuButtonApiMapService menuButtonApiMapService;
public List<MenuAuthorizeVO> getMenuForAuthorize(Long roleId) { public List<MenuAuthorizeVO> getMenuForAuthorize(Long roleId) {
return menuService.getMenuForAuthorize(roleId); return menuService.getNodeForAuthorize(roleId);
// return menuService.getMenuForAuthorize(roleId);
} }
public IPage<MenuVO> searchMenu(@Valid MenuSearchQO request) { public IPage<MenuVO> searchMenu(@Valid MenuSearchQO request) {

View File

@ -7,7 +7,7 @@ import lombok.experimental.Accessors;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class UserAddQO{ public class UserAddQO {
/** /**
* 用户名称 * 用户名称
@ -39,7 +39,7 @@ public class UserAddQO{
/** /**
* 部门id * 部门id
*/ */
@NotBlank @NotNull
private Long deptId; private Long deptId;
/** /**
@ -62,12 +62,10 @@ public class UserAddQO{
/** /**
* 初始化密码后是否强制要求登录后重设密码 * 初始化密码后是否强制要求登录后重设密码
*/ */
@NotNull
private Boolean enableMustResetPwd; private Boolean enableMustResetPwd;
/** /**
* 默认语言 * 默认语言
*/ */
@NotBlank
private String languageCode; private String languageCode;
} }

View File

@ -11,6 +11,8 @@ public class MenuAuthorizeVO {
private Long id; private Long id;
private Long parentId;
private String key; private String key;
//名称 //名称
@ -22,6 +24,8 @@ public class MenuAuthorizeVO {
//是否已授权 //是否已授权
private Boolean selected; private Boolean selected;
//排序
private Short sort;
//下级 //下级
private List<MenuAuthorizeVO> children; private List<MenuAuthorizeVO> children;
} }

View File

@ -2,6 +2,7 @@ package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.common.pojo.vo.ButtonVO; import com.nflg.wms.common.pojo.vo.ButtonVO;
import com.nflg.wms.common.pojo.vo.MenuAuthorizeVO;
import com.nflg.wms.repository.entity.Menu; import com.nflg.wms.repository.entity.Menu;
import java.util.List; import java.util.List;
@ -19,4 +20,6 @@ public interface MenuMapper extends BaseMapper<Menu> {
List<ButtonVO> getButtonsByMenuId(Long userId, Long menuId); List<ButtonVO> getButtonsByMenuId(Long userId, Long menuId);
Boolean menuIsSelected(Long roleId, Long menuId); Boolean menuIsSelected(Long roleId, Long menuId);
List<MenuAuthorizeVO> getAllDataForAuthorize(Long roleId);
} }

View File

@ -38,4 +38,6 @@ public interface IMenuService extends IService<Menu> {
void enableMenu(@Valid EnableMenuQO request); void enableMenu(@Valid EnableMenuQO request);
List<ButtonVO> getButtonsByMenuId(Long userId, @Valid @NotNull Long menuId); List<ButtonVO> getButtonsByMenuId(Long userId, @Valid @NotNull Long menuId);
List<MenuAuthorizeVO> getNodeForAuthorize(Long roleId);
} }

View File

@ -54,12 +54,46 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
.eq(Menu::getEnable, true) .eq(Menu::getEnable, true)
.list(); .list();
List<MenuAuthorizeVO> vos = datas.stream() List<MenuAuthorizeVO> vos = datas.stream()
.map(d -> new MenuAuthorizeVO().setType(1).setId(d.getId()).setKey("menu-"+d.getId()).setName(d.getName()).setSelected(menuIsSelected(roleId, d.getId()))) .map(d -> new MenuAuthorizeVO().setType(1).setId(d.getId()).setKey("menu-" + d.getId()).setName(d.getName()).setSelected(menuIsSelected(roleId, d.getId())))
.collect(Collectors.toList()); .collect(Collectors.toList());
vos.forEach(v -> bindMenuChildren(roleId, v)); vos.forEach(v -> bindMenuChildren(roleId, v));
return vos; return vos;
} }
@Override
public List<MenuAuthorizeVO> getNodeForAuthorize(Long roleId) {
List<MenuAuthorizeVO> nodes = baseMapper.getAllDataForAuthorize(roleId);
List<MenuAuthorizeVO> rootNodes = nodes.stream().filter(v ->
v.getType() == 1 && v.getParentId() == 0
).toList();
for (MenuAuthorizeVO node : rootNodes) {
List<MenuAuthorizeVO> childNodes = getChildNode(node.getId(), nodes);
if (CollectionUtil.isNotEmpty(childNodes)) {
node.setChildren(new ArrayList<>());
node.getChildren().addAll(childNodes);
}
}
// rootNodes.sort(Comparator.comparing(MenuAuthorizeVO::getSort));
return rootNodes;
}
private List<MenuAuthorizeVO> getChildNode(Long parentId, List<MenuAuthorizeVO> nodes) {
List<MenuAuthorizeVO> rootNodes = nodes.stream().filter(v -> v.getParentId().equals(parentId)
).toList();
if (CollectionUtil.isNotEmpty(rootNodes)) {
for (MenuAuthorizeVO node : rootNodes) {
List<MenuAuthorizeVO> childNodes = getChildNode(node.getId(), nodes);
if (CollectionUtil.isNotEmpty(childNodes)) {
node.setChildren(new ArrayList<>());
node.getChildren().addAll(childNodes);
}
}
}
// rootNodes.sort(Comparator.comparing(MenuAuthorizeVO::getSort));
return rootNodes;
}
@Override @Override
public IPage<MenuVO> search(MenuSearchQO request) { public IPage<MenuVO> search(MenuSearchQO request) {
if (StrUtil.isBlank(request.getName())) { if (StrUtil.isBlank(request.getName())) {
@ -146,19 +180,19 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
@Override @Override
public void enableMenu(EnableMenuQO request) { public void enableMenu(EnableMenuQO request) {
if (request.isEnable()){ if (request.isEnable()) {
enable(request.getIds()); enable(request.getIds());
}else { } else {
disable(request.getIds()); disable(request.getIds());
} }
} }
@Override @Override
public List<ButtonVO> getButtonsByMenuId(Long userId, Long menuId) { public List<ButtonVO> getButtonsByMenuId(Long userId, Long menuId) {
return baseMapper.getButtonsByMenuId(userId,menuId); return baseMapper.getButtonsByMenuId(userId, menuId);
} }
private void disable(List<Long> ids){ private void disable(List<Long> ids) {
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
lambdaUpdate() lambdaUpdate()
.set(Menu::getEnable, false) .set(Menu::getEnable, false)
@ -176,7 +210,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
} }
} }
private void enable(List<Long> ids){ private void enable(List<Long> ids) {
lambdaUpdate() lambdaUpdate()
.set(Menu::getEnable, true) .set(Menu::getEnable, true)
.set(Menu::getUpdateBy, UserUtil.getUserName()) .set(Menu::getUpdateBy, UserUtil.getUserName())
@ -250,7 +284,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
} }
private Boolean menuIsSelected(Long roleId, Long menuId) { private Boolean menuIsSelected(Long roleId, Long menuId) {
return baseMapper.menuIsSelected(roleId,menuId); return baseMapper.menuIsSelected(roleId, menuId);
} }
private List<MenuVO> getChildren(Long parentId) { private List<MenuVO> getChildren(Long parentId) {
@ -265,7 +299,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
private void bindMenuChildren(Long roleId, MenuAuthorizeVO menu) { private void bindMenuChildren(Long roleId, MenuAuthorizeVO menu) {
List<Menu> datas = lambdaQuery().eq(Menu::getParentId, menu.getId()).eq(Menu::getEnable, true).list(); List<Menu> datas = lambdaQuery().eq(Menu::getParentId, menu.getId()).eq(Menu::getEnable, true).list();
if (CollectionUtil.isNotEmpty(datas)) { if (CollectionUtil.isNotEmpty(datas)) {
List<MenuAuthorizeVO> vos = datas.stream().map(d -> new MenuAuthorizeVO().setType(1).setId(d.getId()).setKey("menu-"+d.getId()).setName(d.getName()).setSelected(menuIsSelected(roleId, d.getId()))).collect(Collectors.toList()); List<MenuAuthorizeVO> vos = datas.stream().map(d -> new MenuAuthorizeVO().setType(1).setId(d.getId()).setKey("menu-" + d.getId()).setName(d.getName()).setSelected(menuIsSelected(roleId, d.getId()))).collect(Collectors.toList());
menu.setChildren(vos); menu.setChildren(vos);
vos.forEach(v -> bindMenuChildren(roleId, v)); vos.forEach(v -> bindMenuChildren(roleId, v));
} else { } else {
@ -276,7 +310,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
.orderByAsc(MenuButton::getId) .orderByAsc(MenuButton::getId)
.list(); .list();
menu.setChildren(vos.stream() menu.setChildren(vos.stream()
.map(d -> new MenuAuthorizeVO().setType(2).setId(d.getId()).setKey("button-"+d.getId()).setName(d.getName()).setSelected(buttonIsSelected(roleId, d.getId()))) .map(d -> new MenuAuthorizeVO().setType(2).setId(d.getId()).setKey("button-" + d.getId()).setName(d.getName()).setSelected(buttonIsSelected(roleId, d.getId())))
.collect(Collectors.toList())); .collect(Collectors.toList()));
} }
} }

View File

@ -19,4 +19,29 @@
WHERE menu_id = #{menuId} WHERE menu_id = #{menuId}
AND role_id = #{roleId}) AND role_id = #{roleId})
</select> </select>
<select id="getAllDataForAuthorize" resultType="com.nflg.wms.common.pojo.vo.MenuAuthorizeVO">
select id,
parent_id,
"name",
CONCAT('menu-', id) as key,
sort,
1 as type,
case when b.menu_id is null then false else true end as selected
from menu a
left join (select menu_id from role_menu_map where role_id = #{roleId}) b on a.id = b.menu_id
where "enable" = true
UNION
select id,
menu_id,
"name",
CONCAT('button-', id) as key,
sort,
2 as type,
case when b.button_id is null then false else true end as selected
from menu_button a
left join (select button_id from role_button_map where role_id = #{roleId}) b on a.id = b.button_id
where "enable" = true
order by sort;
</select>
</mapper> </mapper>