update:修改代码社团管理左侧查询树
This commit is contained in:
+3
-1
@@ -8,6 +8,7 @@ import com.jero.common.aspect.annotation.Translation;
|
|||||||
import com.jero.common.system.base.controller.JeroController;
|
import com.jero.common.system.base.controller.JeroController;
|
||||||
import com.jero.modules.laws.club.entity.LawsClub;
|
import com.jero.modules.laws.club.entity.LawsClub;
|
||||||
import com.jero.modules.laws.club.service.ILawsClubService;
|
import com.jero.modules.laws.club.service.ILawsClubService;
|
||||||
|
import com.jero.modules.laws.club.vo.LawsClubTreeNodeModel;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -43,9 +44,10 @@ public class LawsClubController extends JeroController<LawsClub, ILawsClubServic
|
|||||||
@AutoLog(value = "社团管理-树形查询所有")
|
@AutoLog(value = "社团管理-树形查询所有")
|
||||||
@ApiOperation(value="社团管理-树形查询所有", notes="社团管理-树形查询所有")
|
@ApiOperation(value="社团管理-树形查询所有", notes="社团管理-树形查询所有")
|
||||||
@GetMapping(value = "/queryTreeAll")
|
@GetMapping(value = "/queryTreeAll")
|
||||||
|
@Translation
|
||||||
@RequiresPermissions("clubManagement:clubManagement:treeSearch")
|
@RequiresPermissions("clubManagement:clubManagement:treeSearch")
|
||||||
public Result<?> queryTreeAll(@RequestParam(name = "nodeType", required = false, defaultValue = "") String nodeType) {
|
public Result<?> queryTreeAll(@RequestParam(name = "nodeType", required = false, defaultValue = "") String nodeType) {
|
||||||
List<LawsClub> tree = lawsClubService.getTreeStructure("Part", nodeType);
|
List<LawsClubTreeNodeModel> tree = lawsClubService.getTreeStructure("Part", nodeType);
|
||||||
return Result.OK(tree);
|
return Result.OK(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
package com.jero.modules.laws.club.entity;
|
package com.jero.modules.laws.club.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import com.jero.common.aspect.annotation.Dict;
|
import com.jero.common.aspect.annotation.Dict;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
@@ -85,10 +81,6 @@ public class LawsClub implements Serializable {
|
|||||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否是叶子节点")
|
|
||||||
@TableField(exist = false)
|
|
||||||
private boolean leafFlag;
|
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@ApiModelProperty(value = "入团信息列表数据")
|
@ApiModelProperty(value = "入团信息列表数据")
|
||||||
@ExcelCollection(name = "入团信息")
|
@ExcelCollection(name = "入团信息")
|
||||||
@@ -112,10 +104,6 @@ public class LawsClub implements Serializable {
|
|||||||
@ExcelCollection(name = "征集调研信息")
|
@ExcelCollection(name = "征集调研信息")
|
||||||
private List<LawsClubResearchInformation> lawsClubResearchInformations;
|
private List<LawsClubResearchInformation> lawsClubResearchInformations;
|
||||||
|
|
||||||
@TableField(exist = false)
|
|
||||||
@ApiModelProperty(value = "子节点")
|
|
||||||
private List<LawsClub> children;
|
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@ApiModelProperty(value = "公钥")
|
@ApiModelProperty(value = "公钥")
|
||||||
private String rsaPublicKey;
|
private String rsaPublicKey;
|
||||||
|
|||||||
@@ -3,13 +3,10 @@ package com.jero.modules.laws.club.entity;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.jero.common.aspect.annotation.Dict;
|
import com.jero.common.aspect.annotation.Dict;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
@@ -18,7 +15,6 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||||
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,17 +42,21 @@ public class LawsClubMeeting implements Serializable {
|
|||||||
private String clubId;
|
private String clubId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "会议名称")
|
@ApiModelProperty(value = "会议名称")
|
||||||
|
@Excel(name = "会议名称", width = 20)
|
||||||
private String meetingName;
|
private String meetingName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "会议日期")
|
@ApiModelProperty(value = "会议日期")
|
||||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||||
|
@Excel(name = "会议日期", width = 20, format = "yyyy-MM-dd")
|
||||||
private Date meetingDate;
|
private Date meetingDate;
|
||||||
|
|
||||||
@ApiModelProperty(value = "会议费用")
|
@ApiModelProperty(value = "会议费用")
|
||||||
|
@Excel(name = "会议费用", width = 20)
|
||||||
private String meetingCost;
|
private String meetingCost;
|
||||||
|
|
||||||
@ApiModelProperty(value = "线下/线上地点")
|
@ApiModelProperty(value = "线下/线上地点")
|
||||||
|
@Excel(name = "线下/线上地点", width = 20)
|
||||||
private String meetingPlace;
|
private String meetingPlace;
|
||||||
|
|
||||||
@ApiModelProperty(value = "计划完成日期")
|
@ApiModelProperty(value = "计划完成日期")
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ public class LawsClubMeetingMember implements Serializable {
|
|||||||
private String departId;
|
private String departId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "参会报告文件id")
|
@ApiModelProperty(value = "参会报告文件id")
|
||||||
@Excel(name = "参会报告文件", width = 20)
|
@Excel(name = "参会报告文件", width = 20, dictTable = "oss_file", dicCode = "id", dicText = "file_name")
|
||||||
@Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name")
|
@Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name")
|
||||||
private String meetingFileId;
|
private String meetingFileId;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.jero.common.api.vo.Result;
|
import com.jero.common.api.vo.Result;
|
||||||
import com.jero.modules.laws.club.entity.LawsClub;
|
import com.jero.modules.laws.club.entity.LawsClub;
|
||||||
|
import com.jero.modules.laws.club.vo.LawsClubTreeNodeModel;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -38,5 +39,5 @@ public interface ILawsClubService extends IService<LawsClub> {
|
|||||||
|
|
||||||
Result<?> importExcel(HttpServletRequest request);
|
Result<?> importExcel(HttpServletRequest request);
|
||||||
|
|
||||||
List<LawsClub> getTreeStructure(String part, String nodeType);
|
List<LawsClubTreeNodeModel> getTreeStructure(String part, String nodeType);
|
||||||
}
|
}
|
||||||
|
|||||||
+112
-46
@@ -18,8 +18,7 @@ import com.jero.modules.laws.club.entity.*;
|
|||||||
import com.jero.modules.laws.club.mapper.LawsClubMapper;
|
import com.jero.modules.laws.club.mapper.LawsClubMapper;
|
||||||
import com.jero.modules.laws.club.service.*;
|
import com.jero.modules.laws.club.service.*;
|
||||||
import com.jero.modules.laws.club.vo.LawsClubMeetingExcel;
|
import com.jero.modules.laws.club.vo.LawsClubMeetingExcel;
|
||||||
import com.jero.modules.system.service.ISysDepartService;
|
import com.jero.modules.laws.club.vo.LawsClubTreeNodeModel;
|
||||||
import com.jero.modules.system.service.ISysUserService;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
||||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||||
@@ -60,61 +59,104 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
|
|||||||
@Resource
|
@Resource
|
||||||
private ILawsClubResearchInformationService lawsClubResearchInformationService;
|
private ILawsClubResearchInformationService lawsClubResearchInformationService;
|
||||||
@Resource
|
@Resource
|
||||||
private ISysUserService sysUserService;
|
|
||||||
@Resource
|
|
||||||
private ISysDepartService sysDepartService;
|
|
||||||
@Resource
|
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LawsClub> getTreeStructure(String parentId, String nodeType) {
|
public List<LawsClubTreeNodeModel> getTreeStructure(String parentId, String nodeType) {
|
||||||
// 查询所有节点
|
// 查询所有节点
|
||||||
List<LawsClub> allNodes = list();
|
List<LawsClub> clubList = list();
|
||||||
// 构建节点映射
|
List<LawsClubTreeNodeModel> allNode = clubList.stream()
|
||||||
Map<String, LawsClub> nodeMap = allNodes.parallelStream()
|
.map(lawsClub -> {
|
||||||
.collect(Collectors.toConcurrentMap(LawsClub::getId, Function.identity()));
|
LawsClubTreeNodeModel model = new LawsClubTreeNodeModel();
|
||||||
// 构建父子关系映射
|
BeanUtils.copyProperties(lawsClub, model);
|
||||||
Map<String, List<LawsClub>> parentChildMap = allNodes.parallelStream()
|
return model;
|
||||||
.collect(Collectors.groupingBy(LawsClub::getParentId));
|
}).collect(Collectors.toList());
|
||||||
|
// 构建节点映射和父子关系映射
|
||||||
|
Map<String, LawsClubTreeNodeModel> nodeMap = allNode.stream()
|
||||||
|
.collect(Collectors.toMap(LawsClubTreeNodeModel::getId, Function.identity()));
|
||||||
|
Map<String, List<LawsClubTreeNodeModel>> parentChildMap = allNode.stream()
|
||||||
|
.collect(Collectors.groupingBy(LawsClubTreeNodeModel::getParentId));
|
||||||
// 如果 nodeType 为空,则返回完整树结构
|
// 如果 nodeType 为空,则返回完整树结构
|
||||||
if (StringUtils.isBlank(nodeType)) {
|
if (StringUtils.isBlank(nodeType)) {
|
||||||
return buildTreeStructure(parentId, parentChildMap, nodeMap); // 构建并返回完整的树形结构
|
return buildTreeStructure(parentId, parentChildMap, nodeMap);
|
||||||
}
|
}
|
||||||
// 查找 nodeType 对应的目标节点
|
// 查找 nodeType 对应的目标节点
|
||||||
List<LawsClub> targetNodes = allNodes.stream()
|
List<LawsClubTreeNodeModel> targetNodes = allNode.stream()
|
||||||
.filter(node -> node.getNodeType() != null && node.getNodeType().contains(nodeType))
|
.filter(node -> node.getNodeType() != null && node.getNodeType().contains(nodeType))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
if (targetNodes.isEmpty()) {
|
if (targetNodes.isEmpty()) {
|
||||||
// 如果没有找到与 nodeType 模糊匹配的节点,返回空列表
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
// 创建结果列表
|
// 创建结果列表
|
||||||
List<LawsClub> result = new ArrayList<>();
|
Set<LawsClubTreeNodeModel> nodesSet = new HashSet<>();
|
||||||
// 处理每个匹配到的目标节点
|
for (LawsClubTreeNodeModel targetNode : targetNodes) {
|
||||||
for (LawsClub targetNode : targetNodes) {
|
nodesSet.addAll(findPathToRoot(allNode, targetNode));
|
||||||
// 查找目标节点的直接上级节点
|
}
|
||||||
LawsClub parentNode = nodeMap.get(targetNode.getParentId());
|
// 如果结果集中只有根节点,则仅返回根节点
|
||||||
|
List<LawsClubTreeNodeModel> result = new ArrayList<>();
|
||||||
|
if (nodesSet.size() <= 1) {
|
||||||
|
LawsClubTreeNodeModel parentNode = allNode.stream().filter(node -> "Part".equals(node.getParentId()))
|
||||||
|
.collect(Collectors.toList()).get(0);
|
||||||
|
result.add(parentNode);
|
||||||
|
} else {
|
||||||
|
result = new ArrayList<>(nodesSet);
|
||||||
|
}
|
||||||
|
// 生成树结构
|
||||||
|
return buildTree(result);
|
||||||
|
}
|
||||||
|
|
||||||
if (parentNode != null) {
|
public static List<LawsClubTreeNodeModel> buildTree(List<LawsClubTreeNodeModel> recordList) {
|
||||||
// 如果上级节点未添加到结果中,添加上级节点
|
// 创建节点映射,方便快速查找节点
|
||||||
if (!result.contains(parentNode)) {
|
Map<String, LawsClubTreeNodeModel> nodeMap = recordList.stream()
|
||||||
// 初始化上级节点的children列表
|
.collect(Collectors.toMap(LawsClubTreeNodeModel::getId, Function.identity()));
|
||||||
parentNode.setChildren(new ArrayList<>());
|
// 用于存储树结构
|
||||||
result.add(parentNode);
|
List<LawsClubTreeNodeModel> tree = new ArrayList<>();
|
||||||
}
|
// 遍历节点列表,构建树结构
|
||||||
// 将目标节点添加到上级节点的children列表中
|
for (LawsClubTreeNodeModel node : recordList) {
|
||||||
if (parentNode.getChildren() == null) {
|
if ("Part".equals(node.getParentId())) {
|
||||||
parentNode.setChildren(new ArrayList<>());
|
// 根节点
|
||||||
}
|
tree.add(node);
|
||||||
if (!parentNode.getChildren().contains(targetNode)) {
|
} else {
|
||||||
parentNode.getChildren().add(targetNode);
|
// 将子节点添加到其父节点的子列表中
|
||||||
|
LawsClubTreeNodeModel parent = nodeMap.get(node.getParentId());
|
||||||
|
if (parent != null) {
|
||||||
|
if (parent.getChildren() == null) {
|
||||||
|
parent.setChildren(new ArrayList<>());
|
||||||
|
}
|
||||||
|
parent.getChildren().add(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 返回结果
|
// 设置叶子节点标志
|
||||||
return result;
|
setLeafFlags(tree);
|
||||||
|
return tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setLeafFlags(List<LawsClubTreeNodeModel> treeList) {
|
||||||
|
for (LawsClubTreeNodeModel node : treeList) {
|
||||||
|
if (node.getChildren() == null || node.getChildren().isEmpty()) {
|
||||||
|
node.setLeafFlag(true);
|
||||||
|
} else {
|
||||||
|
node.setLeafFlag(false);
|
||||||
|
setLeafFlags(node.getChildren());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<LawsClubTreeNodeModel> findPathToRoot(List<LawsClubTreeNodeModel> allNodes, LawsClubTreeNodeModel node) {
|
||||||
|
Set<LawsClubTreeNodeModel> pathNodes = new HashSet<>();
|
||||||
|
LawsClubTreeNodeModel[] currentHolder = new LawsClubTreeNodeModel[1];
|
||||||
|
currentHolder[0] = node;
|
||||||
|
while (currentHolder[0] != null) {
|
||||||
|
pathNodes.add(currentHolder[0]);
|
||||||
|
currentHolder[0] = allNodes.stream()
|
||||||
|
.filter(n -> n.getId().equals(currentHolder[0].getParentId()))
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
return pathNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归构建树结构
|
* 递归构建树结构
|
||||||
* @param parentId 父节点ID
|
* @param parentId 父节点ID
|
||||||
@@ -122,30 +164,33 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
|
|||||||
* @param nodeMap 节点映射
|
* @param nodeMap 节点映射
|
||||||
* @return 树结构的根节点列表
|
* @return 树结构的根节点列表
|
||||||
*/
|
*/
|
||||||
private List<LawsClub> buildTreeStructure(String parentId, Map<String, List<LawsClub>> parentChildMap, Map<String, LawsClub> nodeMap) {
|
private List<LawsClubTreeNodeModel> buildTreeStructure(String parentId, Map<String, List<LawsClubTreeNodeModel>> parentChildMap, Map<String, LawsClubTreeNodeModel> nodeMap) {
|
||||||
// 获取当前父节点下的所有子节点
|
// 获取当前父节点下的所有子节点
|
||||||
List<LawsClub> children = parentChildMap.get(parentId);
|
List<LawsClubTreeNodeModel> children = parentChildMap.get(parentId);
|
||||||
|
|
||||||
if (children == null || children.isEmpty()) {
|
if (children == null || children.isEmpty()) {
|
||||||
return Collections.emptyList(); // 没有子节点,返回空列表
|
return Collections.emptyList(); // 没有子节点,返回空列表
|
||||||
}
|
}
|
||||||
|
|
||||||
// 遍历所有子节点,递归设置其子节点
|
// 遍历所有子节点,递归设置其子节点
|
||||||
children.parallelStream().forEach(child -> {
|
children.parallelStream().forEach(child -> {
|
||||||
List<LawsClub> grandChildren = buildTreeStructure(child.getId(), parentChildMap, nodeMap);
|
List<LawsClubTreeNodeModel> grandChildren = buildTreeStructure(child.getId(), parentChildMap, nodeMap);
|
||||||
child.setChildren(grandChildren); // 设置当前节点的子节点列表
|
child.setChildren(grandChildren); // 设置当前节点的子节点列表
|
||||||
child.setLeafFlag(grandChildren.isEmpty()); // 如果没有子节点则设置为叶子节点
|
child.setLeafFlag(grandChildren.isEmpty()); // 如果没有子节点则设置为叶子节点
|
||||||
});
|
});
|
||||||
|
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<LawsClub> queryPageList(LawsClub lawsClub, Integer pageNo, Integer pageSize, HttpServletRequest req) {
|
public IPage<LawsClub> queryPageList(LawsClub lawsClub, Integer pageNo, Integer pageSize, HttpServletRequest req) {
|
||||||
String parentId = req.getParameter("parentId");
|
String parentId = req.getParameter("parentId");
|
||||||
|
if (StringUtils.isBlank(parentId)) {
|
||||||
|
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "parentId");
|
||||||
|
}
|
||||||
|
// 1. 查找 parentId 及所有子孙节点的 ID 列表
|
||||||
|
Set<String> descendantIds = findDescendantsIds(parentId);
|
||||||
|
// 2. 创建 LambdaQueryWrapper 来查询符合条件的记录
|
||||||
LambdaQueryWrapper<LawsClub> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<LawsClub> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
lambdaQueryWrapper.and(wrapper ->
|
lambdaQueryWrapper.and(wrapper ->
|
||||||
wrapper.eq(LawsClub::getParentId, parentId)
|
wrapper.in(LawsClub::getParentId, descendantIds)
|
||||||
.or().eq(LawsClub::getId, parentId));
|
.or().eq(LawsClub::getId, parentId));
|
||||||
if (StringUtils.isNotBlank(lawsClub.getClubName())) {
|
if (StringUtils.isNotBlank(lawsClub.getClubName())) {
|
||||||
lambdaQueryWrapper.like(LawsClub::getClubName, lawsClub.getClubName());
|
lambdaQueryWrapper.like(LawsClub::getClubName, lawsClub.getClubName());
|
||||||
@@ -153,10 +198,11 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
|
|||||||
if (StringUtils.isNotBlank(lawsClub.getNodeType())) {
|
if (StringUtils.isNotBlank(lawsClub.getNodeType())) {
|
||||||
lambdaQueryWrapper.like(LawsClub::getNodeType, lawsClub.getNodeType());
|
lambdaQueryWrapper.like(LawsClub::getNodeType, lawsClub.getNodeType());
|
||||||
}
|
}
|
||||||
lambdaQueryWrapper.orderByDesc(LawsClub::getCreateTime);
|
lambdaQueryWrapper.orderByAsc(LawsClub::getCreateTime);
|
||||||
// 查找 parentId 对应的所有子孙节点的 ID 列表
|
// 3. 执行分页查询
|
||||||
Page<LawsClub> page = new Page<>(pageNo, pageSize);
|
Page<LawsClub> page = new Page<>(pageNo, pageSize);
|
||||||
Page<LawsClub> pageResult = page(page, lambdaQueryWrapper);
|
Page<LawsClub> pageResult = page(page, lambdaQueryWrapper);
|
||||||
|
// 4. 解密联系方式
|
||||||
List<LawsClub> records = pageResult.getRecords();
|
List<LawsClub> records = pageResult.getRecords();
|
||||||
for (LawsClub record : records) {
|
for (LawsClub record : records) {
|
||||||
// 解密联系方式
|
// 解密联系方式
|
||||||
@@ -168,6 +214,26 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
|
|||||||
return pageResult;
|
return pageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<String> findDescendantsIds(String parentId) {
|
||||||
|
Set<String> ids = new HashSet<>();
|
||||||
|
List<LawsClub> allNodes = list(); // 获取所有节点
|
||||||
|
collectDescendantIds(allNodes, parentId, ids);
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void collectDescendantIds(List<LawsClub> allNodes, String parentId, Set<String> ids) {
|
||||||
|
// 添加当前节点的 ID
|
||||||
|
ids.add(parentId);
|
||||||
|
// 查找子节点并递归调用
|
||||||
|
List<LawsClub> children = allNodes.stream()
|
||||||
|
.filter(node -> parentId.equals(node.getParentId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
for (LawsClub child : children) {
|
||||||
|
collectDescendantIds(allNodes, child.getId(), ids);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<?> addOrEdit(LawsClub lawsClub) {
|
public Result<?> addOrEdit(LawsClub lawsClub) {
|
||||||
if (Objects.isNull(lawsClub)) {
|
if (Objects.isNull(lawsClub)) {
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.jero.modules.laws.club.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class LawsClubTreeNodeModel {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "主键id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "上级节点id")
|
||||||
|
private String parentId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "节点类型")
|
||||||
|
private String nodeType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否是叶子节点")
|
||||||
|
private boolean leafFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "子节点")
|
||||||
|
private List<LawsClubTreeNodeModel> children;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user