diff --git a/src/main/java/com/cczsa/xinghe/codegen/controller/MenuController.java b/src/main/java/com/cczsa/xinghe/codegen/controller/MenuController.java index 1aeca8f..8551117 100644 --- a/src/main/java/com/cczsa/xinghe/codegen/controller/MenuController.java +++ b/src/main/java/com/cczsa/xinghe/codegen/controller/MenuController.java @@ -65,5 +65,11 @@ public class MenuController { return menuService.bindFun(req); } + @Operation(summary = "删除菜单权限", description = "删除菜单权限") + @DeleteMapping("/delete/fun/{menuBindFunId}") + public XResult deleteFun(@PathVariable Long menuBindFunId) { + return menuService.deleteFun(menuBindFunId); + } + } \ No newline at end of file diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuFunListQueryRes.java b/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuFunListQueryRes.java new file mode 100644 index 0000000..5847cfa --- /dev/null +++ b/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuFunListQueryRes.java @@ -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; + +} diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuQueryRes.java b/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuQueryRes.java index 67d583c..3d33901 100644 --- a/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuQueryRes.java +++ b/src/main/java/com/cczsa/xinghe/codegen/entity/res/menu/MenuQueryRes.java @@ -11,6 +11,7 @@ import java.util.List; /** * 获取菜单列表 响应参数 + * * @author xia * @version 0.0.1 */ @@ -49,8 +50,8 @@ public class MenuQueryRes implements Serializable { @Schema(description = "排序") private Integer sortOrder; - @Schema(description = "功能id列表") - private List funIdList; + @Schema(description = "菜单功能列表") + private List funList; @Schema(description = "子菜单") private List children; diff --git a/src/main/java/com/cczsa/xinghe/codegen/service/MenuService.java b/src/main/java/com/cczsa/xinghe/codegen/service/MenuService.java index 3039cde..39cec21 100644 --- a/src/main/java/com/cczsa/xinghe/codegen/service/MenuService.java +++ b/src/main/java/com/cczsa/xinghe/codegen/service/MenuService.java @@ -42,5 +42,9 @@ public interface MenuService { */ XResult bindFun(MenuBindFunReq req); + /** + * 删除菜单权限 + */ + XResult deleteFun(Long menuBindFunId); } \ No newline at end of file diff --git a/src/main/java/com/cczsa/xinghe/codegen/service/impl/MenuServiceImpl.java b/src/main/java/com/cczsa/xinghe/codegen/service/impl/MenuServiceImpl.java index 63e53fd..cfe04c5 100644 --- a/src/main/java/com/cczsa/xinghe/codegen/service/impl/MenuServiceImpl.java +++ b/src/main/java/com/cczsa/xinghe/codegen/service/impl/MenuServiceImpl.java @@ -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.MenuEditReq; 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.mapper.FunItemMapper; import com.cczsa.xinghe.codegen.mapper.FunOperationMapper; import com.cczsa.xinghe.codegen.mapper.MenuBindFunMapper; 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.MenuDef; import com.cczsa.xinghe.codegen.service.MenuService; @@ -59,20 +61,62 @@ public class MenuServiceImpl implements MenuService { .eq(MenuEntity::getParentId, req.getParentId(), req.getParentId() != null) .orderBy(MenuEntity::getSortOrder, false); List menuEntities = menuMapper.selectListByQueryAs(query, MenuQueryRes.class); + // 获取功能ID for (MenuQueryRes menuEntity : menuEntities) { + FunOperationDef funOperationDef = FunOperationDef.FUN_OPERATION_ENTITY; MenuBindFunDef menuBindFunDef = MenuBindFunDef.MENU_BIND_FUN_ENTITY; 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) + .leftJoin(funOperationDef).on(menuBindFunDef.FUN_ID.eq(funOperationDef.ID)) .eq(MenuBindFunEntity::getMenuId, menuEntity.getId()); - List funIds = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, Long.class); - menuEntity.setFunIdList(funIds); + List menuFunListQueryRes = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, MenuFunListQueryRes.class); + menuEntity.setFunList(menuFunListQueryRes); } + // 为功能列表填充存在个数信息 + fillExistNumForFunList(menuEntities); // 构建树形结构 List treeList = buildMenuTree(menuEntities); return XResult.ok(treeList); } + /** + * 为功能列表填充存在个数信息 + * + * @param menuEntities 菜单实体列表 + */ + private void fillExistNumForFunList(List menuEntities) { + // 统计每个功能ID在整个系统中的出现次数 + Map 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(); } + /** + * 删除菜单权限 + */ + @Override + public XResult deleteFun(Long menuBindFunId) { + QueryWrapper deleteMenuBindFun = new QueryWrapper(); + deleteMenuBindFun.eq(MenuBindFunEntity::getId, menuBindFunId); + menuBindFunMapper.deleteByQuery(deleteMenuBindFun); + return XResult.ok(); + } + } \ No newline at end of file