内部工作组树查询逻辑更改

This commit is contained in:
caozhen
2023-09-15 11:58:02 +08:00
parent 2f9262f56c
commit 7d5f16af28
3 changed files with 51 additions and 20 deletions
@@ -43,10 +43,14 @@ public class LawsWorkingGroupController extends JeroController<LawsWorkingGroup,
@AutoLog(value = "内部工作组-列表查询")
@ApiOperation(value="内部工作组-列表查询", notes="内部工作组-列表查询")
@GetMapping(value = "/list")
public Result<List<LawsWorkingGroup>> queryList(LawsWorkingGroup lawsWorkingGroup, HttpServletRequest req) {
lawsWorkingGroup.setDelFlag("0");
List<LawsWorkingGroup> list = lawsWorkingGroupService.queryList(lawsWorkingGroup, req);
List<LawsWorkingGroup> toTree = lawsWorkingGroupService.convertToTree(list);
public Result<List<LawsWorkingGroup>> queryList(LawsWorkingGroup lawsWorkingGroup) {
List<LawsWorkingGroup> list = lawsWorkingGroupService.queryList();
List<LawsWorkingGroup> toTree = new ArrayList<>();
if (StringUtils.isBlank(lawsWorkingGroup.getName())){
toTree = lawsWorkingGroupService.convertToTree(list);
}else {
toTree = lawsWorkingGroupService.convertToTree(list, lawsWorkingGroup.getName());
}
return Result.OK(toTree);
}
@@ -16,12 +16,8 @@ public interface ILawsWorkingGroupService extends IService<LawsWorkingGroup> {
/**
* 列表查询
*
* @param lawsWorkingGroup
* @param req
* @return
*/
List<LawsWorkingGroup> queryList(LawsWorkingGroup lawsWorkingGroup, HttpServletRequest req);
List<LawsWorkingGroup> queryList();
/**
* 保存
@@ -72,6 +68,7 @@ public interface ILawsWorkingGroupService extends IService<LawsWorkingGroup> {
* 对列表数据转树结构列表(pid为空当作开始节点)
*/
List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list);
List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name);
/**
* 对列表数据转树结构列表(指定开始节点)
@@ -9,14 +9,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jero.common.exception.JeroBootException;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.util.*;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.system.query.QueryGenerator;
import javax.servlet.http.HttpServletRequest;
/**
@@ -31,14 +27,12 @@ public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMap
/**
* 列表查询
*
* @param lawsWorkingGroup
* @param req
* @return
*/
@Override
public List<LawsWorkingGroup> queryList(LawsWorkingGroup lawsWorkingGroup, HttpServletRequest req) {
return list(QueryGenerator.initQueryWrapper(lawsWorkingGroup, req.getParameterMap()));
public List<LawsWorkingGroup> queryList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, "0");
return list(wrapper);
}
/**
@@ -112,6 +106,42 @@ public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMap
/**
* 对列表数据转树结构列表(pid为空当作开始节点)
*/
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name) {
List<LawsWorkingGroup> matchedNodes = list.stream().filter(node -> node.getName().contains(name)).collect(Collectors.toList());
if (matchedNodes.isEmpty()) {
return Collections.singletonList(list.get(0));
}
Set<LawsWorkingGroup> nodesSet = new HashSet<>();
for (LawsWorkingGroup matchedNode : matchedNodes) {
nodesSet.addAll(findPathToRoot(list, matchedNode));
nodesSet.addAll(findAllChildren(list, matchedNode));
}
List<LawsWorkingGroup> LawsWorkingGroups = new ArrayList<>(nodesSet);
return this.convertToTree(LawsWorkingGroups);
}
private Set<LawsWorkingGroup> findPathToRoot(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> pathNodes = new HashSet<>();
LawsWorkingGroup currentHolder = node;
while (currentHolder != null) {
pathNodes.add(currentHolder);
LawsWorkingGroup finalCurrentHolder = currentHolder;
currentHolder = list.stream()
.filter(n -> n.getId().equals(finalCurrentHolder.getPid()))
.findFirst().orElse(null);
}
return pathNodes;
}
private Set<LawsWorkingGroup> findAllChildren(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> childrenSet = new HashSet<>();
List<LawsWorkingGroup> directChildren = list.stream().filter(n -> n.getPid().equals(node.getId())).collect(Collectors.toList());
for (LawsWorkingGroup child : directChildren) {
childrenSet.add(child);
childrenSet.addAll(findAllChildren(list, child));
}
return childrenSet;
}
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list) {
if (list == null || list.size() == 0){