【7.6.0】【sys】【menu】完善更新菜单树结构接口

pull/55/MERGE
fengshuonan 2023-06-15 15:54:30 +08:00
parent 18005d4aa2
commit 81e8680de0
3 changed files with 80 additions and 3 deletions

View File

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

View File

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

View File

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