【7.6.0】【sys】【menu】更新菜单调整上下级功能的方法

pull/55/MERGE
fengshuonan 2023-06-15 14:50:06 +08:00
parent 1295c9a373
commit 64461f71da
6 changed files with 127 additions and 9 deletions

View File

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

View File

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

View File

@ -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 level1
* @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层级是110120130
// 第2层级是101010201030
// 第3层级是100101002010030
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);
}
}
}
}

View File

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

View File

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

View File

@ -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) {