删除菜单权限,菜单列表加已有的功能

This commit is contained in:
2026-01-15 09:38:16 +08:00
parent c62225c34a
commit a7e8259fb2
5 changed files with 107 additions and 5 deletions

View File

@@ -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);
}
} }

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -42,5 +42,9 @@ public interface MenuService {
*/ */
XResult<Void> bindFun(MenuBindFunReq req); XResult<Void> bindFun(MenuBindFunReq req);
/**
* 删除菜单权限
*/
XResult<Void> deleteFun(Long menuBindFunId);
} }

View File

@@ -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();
}
} }