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;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseExpandFieldEntity;
|
||||
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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
@ -21,7 +23,7 @@ import java.util.List;
|
|||
@TableName(value = "sys_menu", autoResultMap = true)
|
||||
@Data
|
||||
@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)
|
||||
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;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||
|
||||
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.TreeConstants;
|
||||
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.modular.app.service.SysAppService;
|
||||
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) {
|
||||
|
||||
// 获取被更新的应用和菜单树信息
|
||||
Long appId = sysMenuRequest.getAppId();
|
||||
List<SysMenu> updateTree = sysMenuRequest.getUpdateMenuTree();
|
||||
|
||||
// 更新树节点的菜单顺序
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue