From 2269d92c6bb34dd79850d2ed4e3909cfbdd29aff Mon Sep 17 00:00:00 2001 From: fuhao Date: Tue, 3 Sep 2024 16:21:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=B7=AF=E6=AE=B5=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=B1=82=E8=8E=B7=E5=8F=96=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/board/RoadGroupController.java | 9 +++ .../com/ruoyi/board/domain/RoadGroup.java | 10 ++- .../ruoyi/board/service/IPlanTypeService.java | 1 - .../board/service/IRoadGroupService.java | 4 + .../service/impl/RoadGroupServiceImpl.java | 73 +++++++++++++++++++ 5 files changed, 94 insertions(+), 3 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/board/RoadGroupController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/board/RoadGroupController.java index 355a4109..27da5972 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/board/RoadGroupController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/board/RoadGroupController.java @@ -86,4 +86,13 @@ public class RoadGroupController extends BaseController { public AjaxResult remove(@PathVariable List ids) { return toAjax(roadGroupService.removeByIds(ids)); } + + /** + * 获取路段分组树列表 + */ + @PreAuthorize("@ss.hasPermi('road:group:list')") + @GetMapping("/roadTree") + public AjaxResult deptTree(RoadGroup roadGroup) { + return success(roadGroupService.listRoadTree(roadGroup)); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/board/domain/RoadGroup.java b/ruoyi-system/src/main/java/com/ruoyi/board/domain/RoadGroup.java index baabd9dc..0d488617 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/board/domain/RoadGroup.java +++ b/ruoyi-system/src/main/java/com/ruoyi/board/domain/RoadGroup.java @@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import java.util.ArrayList; +import java.util.List; + /** * 路段分组 */ @@ -13,7 +16,7 @@ import lombok.Data; @TableName(value = "pub_road_group") public class RoadGroup { @TableId(value = "id", type = IdType.AUTO) - private Integer id; + private Long id; /** * 路段名称 @@ -25,5 +28,8 @@ public class RoadGroup { * 路段父id */ @TableField(value = "parent_id") - private Integer parentId; + private Long parentId; + + @TableField(select = false) + private List children = new ArrayList<>(); } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/board/service/IPlanTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/board/service/IPlanTypeService.java index 17027aa2..1f754bdd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/board/service/IPlanTypeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/board/service/IPlanTypeService.java @@ -7,6 +7,5 @@ import com.ruoyi.common.core.domain.TreeSelect; import java.util.List; public interface IPlanTypeService extends MPJBaseService{ - List listPlanTree(PlanType planType); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/board/service/IRoadGroupService.java b/ruoyi-system/src/main/java/com/ruoyi/board/service/IRoadGroupService.java index 3b5c589d..8c40a2a8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/board/service/IRoadGroupService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/board/service/IRoadGroupService.java @@ -2,6 +2,10 @@ package com.ruoyi.board.service; import com.github.yulichang.base.MPJBaseService; import com.ruoyi.board.domain.RoadGroup; +import com.ruoyi.common.core.domain.TreeSelect; + +import java.util.List; public interface IRoadGroupService extends MPJBaseService { + List listRoadTree(RoadGroup roadGroup); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/board/service/impl/RoadGroupServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/board/service/impl/RoadGroupServiceImpl.java index 1a9679a7..ec28db88 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/board/service/impl/RoadGroupServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/board/service/impl/RoadGroupServiceImpl.java @@ -4,9 +4,82 @@ import com.github.yulichang.base.MPJBaseServiceImpl; import com.ruoyi.board.domain.RoadGroup; import com.ruoyi.board.mapper.RoadGroupMapper; import com.ruoyi.board.service.IRoadGroupService; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.utils.StringUtils; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @Service public class RoadGroupServiceImpl extends MPJBaseServiceImpl implements IRoadGroupService { + @Override + public List listRoadTree(RoadGroup roadGroup) { + List list = list(); + List roadGroups = buildRoadTree(list); + return roadGroups.stream().map(this::buildTreeSelect).collect(Collectors.toList()); + } + + + private TreeSelect buildTreeSelect(RoadGroup roadGroup) { + List childTreeSelectList = roadGroup.getChildren().stream().map(this::buildTreeSelect).collect(Collectors.toList()); + TreeSelect treeSelect = new TreeSelect(); + treeSelect.setId(roadGroup.getId()); + treeSelect.setLabel(roadGroup.getRoadName()); + treeSelect.setChildren(childTreeSelectList); + return treeSelect; + } + + private List buildRoadTree(List list) { + List returnList = new ArrayList<>(); + List tempList = list.stream().map(RoadGroup::getId).collect(Collectors.toList()); + for (RoadGroup roadGroup : list) { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(roadGroup.getParentId())) { + recursionFn(list, roadGroup); + returnList.add(roadGroup); + } + } + if (returnList.isEmpty()) { + returnList = list; + } + return returnList; + + } + + /** + * 递归列表 + */ + private void recursionFn(List list, RoadGroup t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (RoadGroup tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, RoadGroup t) { + List tlist = new ArrayList<>(); + for (RoadGroup n : list) { + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, RoadGroup t) { + return !getChildList(list, t).isEmpty(); + } }