mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【menu】更新菜单调整上下级功能的方法
parent
1295c9a373
commit
64461f71da
|
@ -42,50 +42,62 @@ public class SysMenuController {
|
|||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
* 添加菜单
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2023/06/10 21:28
|
||||
*/
|
||||
@PostResource(name = "添加", path = "/sysMenu/add")
|
||||
@PostResource(name = "添加菜单", path = "/sysMenu/add")
|
||||
public ResponseData<SysMenu> add(@RequestBody @Validated(SysMenuRequest.add.class) SysMenuRequest sysMenuRequest) {
|
||||
sysMenuService.add(sysMenuRequest);
|
||||
return new SuccessResponseData<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* 删除菜单
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2023/06/10 21:28
|
||||
*/
|
||||
@PostResource(name = "删除", path = "/sysMenu/delete")
|
||||
@PostResource(name = "删除菜单", path = "/sysMenu/delete")
|
||||
public ResponseData<?> delete(@RequestBody @Validated(SysMenuRequest.delete.class) SysMenuRequest sysMenuRequest) {
|
||||
sysMenuService.del(sysMenuRequest);
|
||||
return new SuccessResponseData<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* 编辑菜单
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2023/06/10 21:28
|
||||
*/
|
||||
@PostResource(name = "编辑", path = "/sysMenu/edit")
|
||||
@PostResource(name = "编辑菜单", path = "/sysMenu/edit")
|
||||
public ResponseData<?> edit(@RequestBody @Validated(SysMenuRequest.edit.class) SysMenuRequest sysMenuRequest) {
|
||||
sysMenuService.edit(sysMenuRequest);
|
||||
return new SuccessResponseData<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
* 查看菜单详情
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2023/06/10 21:28
|
||||
*/
|
||||
@GetResource(name = "查看详情", path = "/sysMenu/detail")
|
||||
@GetResource(name = "查看菜单详情", path = "/sysMenu/detail")
|
||||
public ResponseData<SysMenu> detail(@Validated(SysMenuRequest.detail.class) SysMenuRequest sysMenuRequest) {
|
||||
return new SuccessResponseData<>(sysMenuService.detail(sysMenuRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 调整菜单上下级机构和菜单的顺序
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/15 11:28
|
||||
*/
|
||||
@PostResource(name = "调整菜单上下级机构和菜单的顺序", path = "/sysMenu/updateMenuTree")
|
||||
public ResponseData<?> updateMenuTree(@RequestBody @Validated(SysMenuRequest.updateMenuTree.class) SysMenuRequest sysMenuRequest) {
|
||||
sysMenuService.updateMenuTree(sysMenuRequest);
|
||||
return new SuccessResponseData<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import lombok.Data;
|
|||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统菜单实例类
|
||||
|
@ -134,4 +135,12 @@ public class SysMenu extends BaseExpandFieldEntity {
|
|||
@ChineseDescription("是否可见(分离版用):Y-是,N-否")
|
||||
private String antdvVisible;
|
||||
|
||||
/**
|
||||
* 当前菜单的子菜单
|
||||
* <p>
|
||||
* 这个参数一般用在更新菜单树的顺序和上下级结构中
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List<SysMenu> children;
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.menu.factory;
|
||||
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单树的相关信息创建工厂
|
||||
* <p>
|
||||
* 用在更新菜单树的结构接口上
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/15 14:30
|
||||
*/
|
||||
public class MenuTreeFactory {
|
||||
|
||||
/**
|
||||
* 更新菜单的排序
|
||||
*
|
||||
* @param tree 被更新的菜单树
|
||||
* @param level 当前被更新的菜单的层级(level从1开始)
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/15 14:30
|
||||
*/
|
||||
public static void updateSort(List<SysMenu> tree, Integer level) {
|
||||
|
||||
// 初始的排序值
|
||||
int i = 1;
|
||||
|
||||
// 倍数,第1层级从100开始排列
|
||||
// 第2层是1000开始
|
||||
int beishu = 10;
|
||||
|
||||
for (int integer = 0; integer < level; integer++) {
|
||||
beishu = beishu * 10;
|
||||
}
|
||||
|
||||
// 第1层级是110,120,130
|
||||
// 第2层级是1010,1020,1030
|
||||
// 第3层级是10010,10020,10030
|
||||
for (SysMenu sysMenu : tree) {
|
||||
BigDecimal bigDecimal = new BigDecimal(1);
|
||||
bigDecimal = bigDecimal.multiply(new BigDecimal(beishu));
|
||||
bigDecimal = bigDecimal.add(new BigDecimal(i * 10));
|
||||
sysMenu.setMenuSort(bigDecimal);
|
||||
i++;
|
||||
|
||||
// 递归修改子树
|
||||
List<SysMenu> children = sysMenu.getChildren();
|
||||
if (children != null && children.size() > 0) {
|
||||
updateSort(children, level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -2,12 +2,15 @@ package cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request;
|
|||
|
||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统菜单封装类
|
||||
|
@ -56,7 +59,7 @@ public class SysMenuRequest extends BaseRequest {
|
|||
/**
|
||||
* 所属应用id
|
||||
*/
|
||||
@NotNull(message = "所属应用id不能为空", groups = {add.class})
|
||||
@NotNull(message = "所属应用id不能为空", groups = {add.class, updateMenuTree.class})
|
||||
@ChineseDescription("所属应用id")
|
||||
private Long appId;
|
||||
|
||||
|
@ -122,4 +125,17 @@ public class SysMenuRequest extends BaseRequest {
|
|||
@ChineseDescription("是否可见(分离版用):Y-是,N-否")
|
||||
private String antdvVisible;
|
||||
|
||||
/**
|
||||
* 指定应用的所有菜单集合(树结构)
|
||||
*/
|
||||
@ChineseDescription("指定应用的所有菜单集合(树结构)")
|
||||
@NotEmpty(message = "指定应用的所有菜单集合不能为空", groups = updateMenuTree.class)
|
||||
private List<SysMenu> updateMenuTree;
|
||||
|
||||
/**
|
||||
* 参数校验分组:更新菜单树
|
||||
*/
|
||||
public @interface updateMenuTree {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -85,4 +85,12 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||
*/
|
||||
List<SysMenu> getTotalMenus();
|
||||
|
||||
/**
|
||||
* 调整菜单上下级结构和菜单的顺序
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/15 11:28
|
||||
*/
|
||||
void updateMenuTree(SysMenuRequest sysMenuRequest);
|
||||
|
||||
}
|
|
@ -13,6 +13,7 @@ import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
|||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuFactory;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuTreeFactory;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuValidateFactory;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.mapper.SysMenuMapper;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest;
|
||||
|
@ -144,6 +145,21 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return this.list(menuLambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMenuTree(SysMenuRequest sysMenuRequest) {
|
||||
|
||||
// 获取被更新的应用和菜单树信息
|
||||
Long appId = sysMenuRequest.getAppId();
|
||||
List<SysMenu> updateTree = sysMenuRequest.getUpdateMenuTree();
|
||||
|
||||
// 更新树节点的菜单顺序
|
||||
MenuTreeFactory.updateSort(updateTree, 1);
|
||||
|
||||
// 从新整理上下级结构
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AppGroupDetail> getAppMenuGroupDetail(SysMenuRequest sysMenuRequest) {
|
||||
|
||||
|
|
Loading…
Reference in New Issue