mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【menu】完善更新菜单树结构接口
parent
18005d4aa2
commit
81e8680de0
|
@ -1,7 +1,9 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.menu.entity;
|
package cn.stylefeng.roses.kernel.sys.modular.menu.entity;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseExpandFieldEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseExpandFieldEntity;
|
||||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.tree.buildpids.BasePidBuildModel;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
@ -21,7 +23,7 @@ import java.util.List;
|
||||||
@TableName(value = "sys_menu", autoResultMap = true)
|
@TableName(value = "sys_menu", autoResultMap = true)
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class SysMenu extends BaseExpandFieldEntity {
|
public class SysMenu extends BaseExpandFieldEntity implements BasePidBuildModel {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主键
|
* 主键
|
||||||
|
@ -143,4 +145,24 @@ public class SysMenu extends BaseExpandFieldEntity {
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private List<SysMenu> children;
|
private List<SysMenu> children;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String pidBuildNodeId() {
|
||||||
|
if (ObjectUtil.isEmpty(menuId)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return menuId.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String pidBuildParentId() {
|
||||||
|
if (ObjectUtil.isEmpty(menuParentId)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return menuParentId.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPidBuildPidStructure(String pids) {
|
||||||
|
this.menuPids = pids;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.menu.factory;
|
package cn.stylefeng.roses.kernel.sys.modular.menu.factory;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -54,4 +55,49 @@ public class MenuTreeFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将指定的树形结构,平行展开,添加到指定的参数totalMenuList
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/15 15:35
|
||||||
|
*/
|
||||||
|
public static void collectTreeTasks(List<SysMenu> sysMenuTree, List<SysMenu> totalMenuList) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(sysMenuTree)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (SysMenu sysMenu : sysMenuTree) {
|
||||||
|
|
||||||
|
totalMenuList.add(sysMenu);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) {
|
||||||
|
collectTreeTasks(sysMenu.getChildren(), totalMenuList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 填充菜单节点的父级id
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/15 15:47
|
||||||
|
*/
|
||||||
|
public static void fillParentId(Long parentMenuId, List<SysMenu> menuTreeList) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(menuTreeList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (SysMenu sysMenu : menuTreeList) {
|
||||||
|
|
||||||
|
sysMenu.setMenuParentId(parentMenuId);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) {
|
||||||
|
fillParentId(sysMenu.getMenuId(), sysMenu.getChildren());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import cn.stylefeng.roses.kernel.db.api.DbOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.rule.constants.SymbolConstant;
|
import cn.stylefeng.roses.kernel.rule.constants.SymbolConstant;
|
||||||
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
|
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
|
||||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.tree.buildpids.PidStructureBuildUtil;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi;
|
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
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.entity.SysMenu;
|
||||||
|
@ -149,15 +150,23 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||||
public void updateMenuTree(SysMenuRequest sysMenuRequest) {
|
public void updateMenuTree(SysMenuRequest sysMenuRequest) {
|
||||||
|
|
||||||
// 获取被更新的应用和菜单树信息
|
// 获取被更新的应用和菜单树信息
|
||||||
Long appId = sysMenuRequest.getAppId();
|
|
||||||
List<SysMenu> updateTree = sysMenuRequest.getUpdateMenuTree();
|
List<SysMenu> updateTree = sysMenuRequest.getUpdateMenuTree();
|
||||||
|
|
||||||
// 更新树节点的菜单顺序
|
// 更新树节点的菜单顺序
|
||||||
MenuTreeFactory.updateSort(updateTree, 1);
|
MenuTreeFactory.updateSort(updateTree, 1);
|
||||||
|
|
||||||
// 从新整理上下级结构
|
// 填充树节点的parentId字段
|
||||||
|
MenuTreeFactory.fillParentId(-1L, updateTree);
|
||||||
|
|
||||||
|
// 平行展开树形结构,准备从新整理pids
|
||||||
|
ArrayList<SysMenu> totalMenuList = new ArrayList<>();
|
||||||
|
MenuTreeFactory.collectTreeTasks(updateTree, totalMenuList);
|
||||||
|
|
||||||
|
// 从新整理上下级结构,整理id和pid关系
|
||||||
|
PidStructureBuildUtil.createPidStructure(totalMenuList);
|
||||||
|
|
||||||
|
// 更新菜单的sort字段、pid字段和pids字段这3个字段
|
||||||
|
this.updateBatchById(totalMenuList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue