删除菜单权限,菜单列表加已有的功能
This commit is contained in:
@@ -65,5 +65,11 @@ public class MenuController {
|
||||
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
|
||||
* @version 0.0.1
|
||||
*/
|
||||
@@ -49,8 +50,8 @@ public class MenuQueryRes implements Serializable {
|
||||
@Schema(description = "排序")
|
||||
private Integer sortOrder;
|
||||
|
||||
@Schema(description = "功能id列表")
|
||||
private List<Long> funIdList;
|
||||
@Schema(description = "菜单功能列表")
|
||||
private List<MenuFunListQueryRes> funList;
|
||||
|
||||
@Schema(description = "子菜单")
|
||||
private List<MenuQueryRes> children;
|
||||
|
||||
@@ -42,5 +42,9 @@ public interface MenuService {
|
||||
*/
|
||||
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.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<MenuQueryRes> 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<Long> funIds = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, Long.class);
|
||||
menuEntity.setFunIdList(funIds);
|
||||
List<MenuFunListQueryRes> menuFunListQueryRes = menuBindFunMapper.selectListByQueryAs(queryMenuBindFun, MenuFunListQueryRes.class);
|
||||
menuEntity.setFunList(menuFunListQueryRes);
|
||||
}
|
||||
// 为功能列表填充存在个数信息
|
||||
fillExistNumForFunList(menuEntities);
|
||||
// 构建树形结构
|
||||
List<MenuQueryRes> treeList = buildMenuTree(menuEntities);
|
||||
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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单权限
|
||||
*/
|
||||
@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