删除菜单权限,菜单列表加已有的功能
This commit is contained in:
@@ -65,5 +65,11 @@ public class MenuController {
|
|||||||
return menuService.bindFun(req);
|
return menuService.bindFun(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "删除菜单权限", description = "删除菜单权限")
|
||||||
|
@DeleteMapping("/delete/fun/{menuBindFunId}")
|
||||||
|
public XResult<Void> deleteFun(@PathVariable Long menuBindFunId) {
|
||||||
|
return menuService.deleteFun(menuBindFunId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.cczsa.xinghe.codegen.entity.res.menu;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单功能列表 响应参数
|
||||||
|
*
|
||||||
|
* @author xia
|
||||||
|
* @version 0.0.1
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Schema(description = "菜单功能列表-响应")
|
||||||
|
public class MenuFunListQueryRes implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "菜单绑定功能ID")
|
||||||
|
private Long menuBindFunId;
|
||||||
|
|
||||||
|
@Schema(description = "功能ID")
|
||||||
|
private Long funId;
|
||||||
|
|
||||||
|
@Schema(description = "功能名称")
|
||||||
|
private String funName;
|
||||||
|
|
||||||
|
@Schema(description = "存在个数")
|
||||||
|
private Integer existNum;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单列表 响应参数
|
* 获取菜单列表 响应参数
|
||||||
|
*
|
||||||
* @author xia
|
* @author xia
|
||||||
* @version 0.0.1
|
* @version 0.0.1
|
||||||
*/
|
*/
|
||||||
@@ -49,8 +50,8 @@ public class MenuQueryRes implements Serializable {
|
|||||||
@Schema(description = "排序")
|
@Schema(description = "排序")
|
||||||
private Integer sortOrder;
|
private Integer sortOrder;
|
||||||
|
|
||||||
@Schema(description = "功能id列表")
|
@Schema(description = "菜单功能列表")
|
||||||
private List<Long> funIdList;
|
private List<MenuFunListQueryRes> funList;
|
||||||
|
|
||||||
@Schema(description = "子菜单")
|
@Schema(description = "子菜单")
|
||||||
private List<MenuQueryRes> children;
|
private List<MenuQueryRes> children;
|
||||||
|
|||||||
@@ -42,5 +42,9 @@ public interface MenuService {
|
|||||||
*/
|
*/
|
||||||
XResult<Void> bindFun(MenuBindFunReq req);
|
XResult<Void> bindFun(MenuBindFunReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除菜单权限
|
||||||
|
*/
|
||||||
|
XResult<Void> deleteFun(Long menuBindFunId);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,11 +8,13 @@ import com.cczsa.xinghe.codegen.entity.req.menu.MenuAddReq;
|
|||||||
import com.cczsa.xinghe.codegen.entity.req.menu.MenuBindFunReq;
|
import com.cczsa.xinghe.codegen.entity.req.menu.MenuBindFunReq;
|
||||||
import com.cczsa.xinghe.codegen.entity.req.menu.MenuEditReq;
|
import com.cczsa.xinghe.codegen.entity.req.menu.MenuEditReq;
|
||||||
import com.cczsa.xinghe.codegen.entity.req.menu.MenuQueryReq;
|
import com.cczsa.xinghe.codegen.entity.req.menu.MenuQueryReq;
|
||||||
|
import com.cczsa.xinghe.codegen.entity.res.menu.MenuFunListQueryRes;
|
||||||
import com.cczsa.xinghe.codegen.entity.res.menu.MenuQueryRes;
|
import com.cczsa.xinghe.codegen.entity.res.menu.MenuQueryRes;
|
||||||
import com.cczsa.xinghe.codegen.mapper.FunItemMapper;
|
import com.cczsa.xinghe.codegen.mapper.FunItemMapper;
|
||||||
import com.cczsa.xinghe.codegen.mapper.FunOperationMapper;
|
import com.cczsa.xinghe.codegen.mapper.FunOperationMapper;
|
||||||
import com.cczsa.xinghe.codegen.mapper.MenuBindFunMapper;
|
import com.cczsa.xinghe.codegen.mapper.MenuBindFunMapper;
|
||||||
import com.cczsa.xinghe.codegen.mapper.MenuMapper;
|
import com.cczsa.xinghe.codegen.mapper.MenuMapper;
|
||||||
|
import com.cczsa.xinghe.codegen.mapper.def.FunOperationDef;
|
||||||
import com.cczsa.xinghe.codegen.mapper.def.MenuBindFunDef;
|
import com.cczsa.xinghe.codegen.mapper.def.MenuBindFunDef;
|
||||||
import com.cczsa.xinghe.codegen.mapper.def.MenuDef;
|
import com.cczsa.xinghe.codegen.mapper.def.MenuDef;
|
||||||
import com.cczsa.xinghe.codegen.service.MenuService;
|
import com.cczsa.xinghe.codegen.service.MenuService;
|
||||||
@@ -59,20 +61,62 @@ public class MenuServiceImpl implements MenuService {
|
|||||||
.eq(MenuEntity::getParentId, req.getParentId(), req.getParentId() != null)
|
.eq(MenuEntity::getParentId, req.getParentId(), req.getParentId() != null)
|
||||||
.orderBy(MenuEntity::getSortOrder, false);
|
.orderBy(MenuEntity::getSortOrder, false);
|
||||||
List<MenuQueryRes> menuEntities = menuMapper.selectListByQueryAs(query, MenuQueryRes.class);
|
List<MenuQueryRes> menuEntities = menuMapper.selectListByQueryAs(query, MenuQueryRes.class);
|
||||||
|
// 获取功能ID
|
||||||
for (MenuQueryRes menuEntity : menuEntities) {
|
for (MenuQueryRes menuEntity : menuEntities) {
|
||||||
|
FunOperationDef funOperationDef = FunOperationDef.FUN_OPERATION_ENTITY;
|
||||||
MenuBindFunDef menuBindFunDef = MenuBindFunDef.MENU_BIND_FUN_ENTITY;
|
MenuBindFunDef menuBindFunDef = MenuBindFunDef.MENU_BIND_FUN_ENTITY;
|
||||||
QueryWrapper queryMenuBindFun = new QueryWrapper();
|
QueryWrapper queryMenuBindFun = new QueryWrapper();
|
||||||
queryMenuBindFun.select(menuBindFunDef.FUN_ID)
|
queryMenuBindFun.select(
|
||||||
|
menuBindFunDef.ID.as("menuBindFunId"),
|
||||||
|
funOperationDef.ID.as("funId"),
|
||||||
|
funOperationDef.FUN_NAME.as("funName")
|
||||||
|
)
|
||||||
.from(menuBindFunDef)
|
.from(menuBindFunDef)
|
||||||
|
.leftJoin(funOperationDef).on(menuBindFunDef.FUN_ID.eq(funOperationDef.ID))
|
||||||
.eq(MenuBindFunEntity::getMenuId, menuEntity.getId());
|
.eq(MenuBindFunEntity::getMenuId, menuEntity.getId());
|
||||||
List<Long> funIds = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, Long.class);
|
List<MenuFunListQueryRes> menuFunListQueryRes = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, MenuFunListQueryRes.class);
|
||||||
menuEntity.setFunIdList(funIds);
|
menuEntity.setFunList(menuFunListQueryRes);
|
||||||
}
|
}
|
||||||
|
// 为功能列表填充存在个数信息
|
||||||
|
fillExistNumForFunList(menuEntities);
|
||||||
// 构建树形结构
|
// 构建树形结构
|
||||||
List<MenuQueryRes> treeList = buildMenuTree(menuEntities);
|
List<MenuQueryRes> treeList = buildMenuTree(menuEntities);
|
||||||
return XResult.ok(treeList);
|
return XResult.ok(treeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为功能列表填充存在个数信息
|
||||||
|
*
|
||||||
|
* @param menuEntities 菜单实体列表
|
||||||
|
*/
|
||||||
|
private void fillExistNumForFunList(List<MenuQueryRes> menuEntities) {
|
||||||
|
// 统计每个功能ID在整个系统中的出现次数
|
||||||
|
Map<Long, Integer> funIdCountMap = new HashMap<>();
|
||||||
|
// 遍历所有菜单及其功能列表,统计功能ID出现次数
|
||||||
|
for (MenuQueryRes menu : menuEntities) {
|
||||||
|
if (menu.getFunList() != null && !menu.getFunList().isEmpty()) {
|
||||||
|
for (MenuFunListQueryRes fun : menu.getFunList()) {
|
||||||
|
if (fun.getFunId() != null) {
|
||||||
|
funIdCountMap.put(fun.getFunId(),
|
||||||
|
funIdCountMap.getOrDefault(fun.getFunId(), 0) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 更新每个菜单中的功能列表的 existNum 字段
|
||||||
|
for (MenuQueryRes menu : menuEntities) {
|
||||||
|
if (menu.getFunList() != null && !menu.getFunList().isEmpty()) {
|
||||||
|
for (MenuFunListQueryRes fun : menu.getFunList()) {
|
||||||
|
if (fun.getFunId() != null) {
|
||||||
|
// 设置该功能在整个系统中的存在个数
|
||||||
|
fun.setExistNum(funIdCountMap.get(fun.getFunId()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建树形结构
|
* 构建树形结构
|
||||||
*/
|
*/
|
||||||
@@ -249,4 +293,15 @@ public class MenuServiceImpl implements MenuService {
|
|||||||
return XResult.ok();
|
return XResult.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除菜单权限
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public XResult<Void> deleteFun(Long menuBindFunId) {
|
||||||
|
QueryWrapper deleteMenuBindFun = new QueryWrapper();
|
||||||
|
deleteMenuBindFun.eq(MenuBindFunEntity::getId, menuBindFunId);
|
||||||
|
menuBindFunMapper.deleteByQuery(deleteMenuBindFun);
|
||||||
|
return XResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user