mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-10-26 20:57:11 +08:00
重构:🔥 重构查询树列表相关 API,并抽取到后端 CRUD 公共组件中
1.基于 Hutool TreeUtil 重构查询树列表相关 API 2.抽取查询树列表 API 到后端 CRUD 公共组件中,大大简化部门管理和菜单管理部分代码
This commit is contained in:
@@ -16,13 +16,12 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.vo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import top.charles7c.cnadmin.common.annotation.TreeField;
|
||||
import top.charles7c.cnadmin.common.base.BaseVO;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
|
||||
@@ -34,6 +33,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@TreeField(value = "deptId", nameKey = "deptName", weightKey = "deptSort")
|
||||
@Schema(description = "部门信息")
|
||||
public class DeptVO extends BaseVO {
|
||||
|
||||
@@ -74,10 +74,4 @@ public class DeptVO extends BaseVO {
|
||||
*/
|
||||
@Schema(description = "状态(1启用 2禁用)")
|
||||
private DisEnableStatusEnum status;
|
||||
|
||||
/**
|
||||
* 子部门列表
|
||||
*/
|
||||
@Schema(description = "子部门列表")
|
||||
private List<DeptVO> children;
|
||||
}
|
||||
|
||||
@@ -16,13 +16,12 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.vo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import top.charles7c.cnadmin.common.annotation.TreeField;
|
||||
import top.charles7c.cnadmin.common.base.BaseVO;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
|
||||
@@ -35,6 +34,7 @@ import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@TreeField(value = "menuId", nameKey = "menuName", weightKey = "menuSort")
|
||||
@Schema(description = "菜单信息")
|
||||
public class MenuVO extends BaseVO {
|
||||
|
||||
@@ -123,10 +123,4 @@ public class MenuVO extends BaseVO {
|
||||
*/
|
||||
@Schema(description = "状态(1启用 2禁用)")
|
||||
private DisEnableStatusEnum status;
|
||||
|
||||
/**
|
||||
* 子菜单列表
|
||||
*/
|
||||
@Schema(description = "子菜单列表")
|
||||
private List<MenuVO> children;
|
||||
}
|
||||
|
||||
@@ -16,10 +16,6 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseService;
|
||||
import top.charles7c.cnadmin.system.model.query.DeptQuery;
|
||||
import top.charles7c.cnadmin.system.model.request.DeptRequest;
|
||||
@@ -32,23 +28,4 @@ import top.charles7c.cnadmin.system.model.vo.DeptVO;
|
||||
* @author Charles7c
|
||||
* @since 2023/1/22 17:54
|
||||
*/
|
||||
public interface DeptService extends BaseService<DeptVO, DeptDetailVO, DeptQuery, DeptRequest> {
|
||||
|
||||
/**
|
||||
* 构建树
|
||||
*
|
||||
* @param list
|
||||
* 原始列表数据
|
||||
* @return 树列表
|
||||
*/
|
||||
List<DeptVO> buildListTree(List<DeptVO> list);
|
||||
|
||||
/**
|
||||
* 构建树
|
||||
*
|
||||
* @param list
|
||||
* 原始列表数据
|
||||
* @return 树列表
|
||||
*/
|
||||
List<Tree<Long>> buildTree(List<DeptVO> list);
|
||||
}
|
||||
public interface DeptService extends BaseService<DeptVO, DeptDetailVO, DeptQuery, DeptRequest> {}
|
||||
|
||||
@@ -16,10 +16,6 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseService;
|
||||
import top.charles7c.cnadmin.system.model.query.MenuQuery;
|
||||
import top.charles7c.cnadmin.system.model.request.MenuRequest;
|
||||
@@ -31,23 +27,4 @@ import top.charles7c.cnadmin.system.model.vo.MenuVO;
|
||||
* @author Charles7c
|
||||
* @since 2023/2/15 20:30
|
||||
*/
|
||||
public interface MenuService extends BaseService<MenuVO, MenuVO, MenuQuery, MenuRequest> {
|
||||
|
||||
/**
|
||||
* 构建树
|
||||
*
|
||||
* @param list
|
||||
* 原始列表数据
|
||||
* @return 树列表
|
||||
*/
|
||||
List<MenuVO> buildListTree(List<MenuVO> list);
|
||||
|
||||
/**
|
||||
* 构建树
|
||||
*
|
||||
* @param list
|
||||
* 原始列表数据
|
||||
* @return 树列表
|
||||
*/
|
||||
List<Tree<Long>> buildTree(List<MenuVO> list);
|
||||
}
|
||||
public interface MenuService extends BaseService<MenuVO, MenuVO, MenuQuery, MenuRequest> {}
|
||||
|
||||
@@ -16,11 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@@ -29,13 +25,9 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||
import top.charles7c.cnadmin.common.util.TreeUtils;
|
||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
||||
import top.charles7c.cnadmin.system.mapper.DeptMapper;
|
||||
import top.charles7c.cnadmin.system.model.entity.DeptDO;
|
||||
@@ -90,68 +82,6 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
|
||||
super.lambdaUpdate().in(DeptDO::getParentId, ids).remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeptVO> buildListTree(List<DeptVO> list) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 去除重复子部门列表
|
||||
List<DeptVO> deDuplicationList = deDuplication(list);
|
||||
return deDuplicationList.stream().map(d -> d.setChildren(this.getChildren(d, list)))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据去重(去除重复子部门列表)
|
||||
*
|
||||
* @param list
|
||||
* 部门列表
|
||||
* @return 去重后部门列表
|
||||
*/
|
||||
private List<DeptVO> deDuplication(List<DeptVO> list) {
|
||||
List<DeptVO> deDuplicationList = new ArrayList<>();
|
||||
for (DeptVO outer : list) {
|
||||
boolean flag = true;
|
||||
for (DeptVO inner : list) {
|
||||
// 忽略重复子列表
|
||||
if (Objects.equals(inner.getDeptId(), outer.getParentId())) {
|
||||
flag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
deDuplicationList.add(outer);
|
||||
}
|
||||
}
|
||||
return deDuplicationList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定部门的子部门列表
|
||||
*
|
||||
* @param deptVO
|
||||
* 指定部门
|
||||
* @param list
|
||||
* 部门列表
|
||||
* @return 子部门列表
|
||||
*/
|
||||
private List<DeptVO> getChildren(DeptVO deptVO, List<DeptVO> list) {
|
||||
return list.stream().filter(d -> Objects.equals(d.getParentId(), deptVO.getDeptId()))
|
||||
.map(d -> d.setChildren(this.getChildren(d, list))).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Tree<Long>> buildTree(List<DeptVO> list) {
|
||||
return TreeUtils.build(list, (d, tree) -> {
|
||||
tree.setId(d.getDeptId());
|
||||
tree.setName(d.getDeptName());
|
||||
tree.setParentId(d.getParentId());
|
||||
tree.setWeight(d.getDeptSort());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查名称是否存在
|
||||
*
|
||||
|
||||
@@ -16,23 +16,15 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.util.TreeUtils;
|
||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
||||
import top.charles7c.cnadmin.system.mapper.MenuMapper;
|
||||
import top.charles7c.cnadmin.system.model.entity.MenuDO;
|
||||
@@ -71,6 +63,7 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO,
|
||||
boolean isExists = this.checkNameExists(menuName, request.getParentId(), request.getMenuId());
|
||||
CheckUtils.throwIf(() -> isExists, String.format("修改失败,'%s'已存在", menuName));
|
||||
|
||||
// 更新信息
|
||||
super.update(request);
|
||||
}
|
||||
|
||||
@@ -81,68 +74,6 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO,
|
||||
super.lambdaUpdate().in(MenuDO::getParentId, ids).remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuVO> buildListTree(List<MenuVO> list) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 去除重复子菜单列表
|
||||
List<MenuVO> deDuplicationList = deDuplication(list);
|
||||
return deDuplicationList.stream().map(m -> m.setChildren(this.getChildren(m, list)))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据去重(去除重复子菜单列表)
|
||||
*
|
||||
* @param list
|
||||
* 菜单列表
|
||||
* @return 去重后菜单列表
|
||||
*/
|
||||
private List<MenuVO> deDuplication(List<MenuVO> list) {
|
||||
List<MenuVO> deDuplicationList = new ArrayList<>();
|
||||
for (MenuVO outer : list) {
|
||||
boolean flag = true;
|
||||
for (MenuVO inner : list) {
|
||||
// 忽略重复子列表
|
||||
if (Objects.equals(inner.getMenuId(), outer.getParentId())) {
|
||||
flag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
deDuplicationList.add(outer);
|
||||
}
|
||||
}
|
||||
return deDuplicationList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定菜单的子菜单列表
|
||||
*
|
||||
* @param menuVO
|
||||
* 指定菜单
|
||||
* @param list
|
||||
* 菜单列表
|
||||
* @return 子菜单列表
|
||||
*/
|
||||
private List<MenuVO> getChildren(MenuVO menuVO, List<MenuVO> list) {
|
||||
return list.stream().filter(m -> Objects.equals(m.getParentId(), menuVO.getMenuId()))
|
||||
.map(m -> m.setChildren(this.getChildren(m, list))).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Tree<Long>> buildTree(List<MenuVO> list) {
|
||||
return TreeUtils.build(list, (m, tree) -> {
|
||||
tree.setId(m.getMenuId());
|
||||
tree.setName(m.getMenuName());
|
||||
tree.setParentId(m.getParentId());
|
||||
tree.setWeight(m.getMenuSort());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查名称是否存在
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user