diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/controller/SysMenuController.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/controller/SysMenuController.java index 56fc3f43f..d1f1da543 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/controller/SysMenuController.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/controller/SysMenuController.java @@ -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 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 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<>(); + } + } diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/entity/SysMenu.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/entity/SysMenu.java index 38df85723..0f0572389 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/entity/SysMenu.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/entity/SysMenu.java @@ -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; + /** + * 当前菜单的子菜单 + *

+ * 这个参数一般用在更新菜单树的顺序和上下级结构中 + */ + @TableField(exist = false) + private List children; + } diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuTreeFactory.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuTreeFactory.java new file mode 100644 index 000000000..411f7e76e --- /dev/null +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuTreeFactory.java @@ -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; + +/** + * 菜单树的相关信息创建工厂 + *

+ * 用在更新菜单树的结构接口上 + * + * @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 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 children = sysMenu.getChildren(); + if (children != null && children.size() > 0) { + updateSort(children, level + 1); + } + } + } + +} diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java index c6ed07a49..710137362 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java @@ -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 updateMenuTree; + + /** + * 参数校验分组:更新菜单树 + */ + public @interface updateMenuTree { + } + } diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java index e96d87e84..fd71c6214 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java @@ -85,4 +85,12 @@ public interface SysMenuService extends IService { */ List getTotalMenus(); + /** + * 调整菜单上下级结构和菜单的顺序 + * + * @author fengshuonan + * @since 2023/6/15 11:28 + */ + void updateMenuTree(SysMenuRequest sysMenuRequest); + } \ No newline at end of file diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java index adf6e8e05..383fb1725 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java @@ -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 impl return this.list(menuLambdaQueryWrapper); } + @Override + public void updateMenuTree(SysMenuRequest sysMenuRequest) { + + // 获取被更新的应用和菜单树信息 + Long appId = sysMenuRequest.getAppId(); + List updateTree = sysMenuRequest.getUpdateMenuTree(); + + // 更新树节点的菜单顺序 + MenuTreeFactory.updateSort(updateTree, 1); + + // 从新整理上下级结构 + + + } + @Override public List getAppMenuGroupDetail(SysMenuRequest sysMenuRequest) {