ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Region.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RegionController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RegionMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/RegionService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RegionServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Region.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.system.api.domain; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.List; @Data @TableName("sys_region") public class Region { private Integer id; private String name; private String code; private String citycode; private Integer parentId; private String english; @TableField(exist = false) // 表示该字段不在数据库表中 private List<Region> children; // 子节点 } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RegionController.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.system.controller; import com.ruoyi.system.api.domain.Region; import com.ruoyi.system.service.RegionService; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/region") @Tag(name = "区域管理") public class RegionController { @Autowired private RegionService regionService; @GetMapping("/tree") @Tag(name = "获取区域树") public List<Region> getRegionTree() { return regionService.getRegionTree(); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RegionMapper.java
New file @@ -0,0 +1,7 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.api.domain.Region; public interface RegionMapper extends BaseMapper<Region> { } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/RegionService.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.domain.Region; import java.util.List; public interface RegionService extends IService<Region> { List<Region> getRegionTree(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RegionServiceImpl.java
New file @@ -0,0 +1,57 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.Region; import com.ruoyi.system.mapper.RegionMapper; import com.ruoyi.system.service.RegionService; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements RegionService { @Override public List<Region> getRegionTree() { // 查询所有数据 List<Region> allRegions = list(); // 构建树形结构 return buildTree(allRegions); } /** * 构建树形结构 * * @param allRegions 所有地区数据 * @return 树形结构数据 */ private List<Region> buildTree(List<Region> allRegions) { // 1. 找到所有省份(parentId为null或0) List<Region> provinces = allRegions.stream() .filter(region -> region.getParentId() == null || region.getParentId() == 0) .collect(Collectors.toList()); // 2. 递归设置子节点 provinces.forEach(province -> { province.setChildren(getChildren(province, allRegions)); }); return provinces; } /** * 递归获取子节点 * * @param parent 父节点 * @param allRegions 所有地区数据 * @return 子节点列表 */ private List<Region> getChildren(Region parent, List<Region> allRegions) { return allRegions.stream() .filter(region -> parent.getId().equals(region.getParentId())) .peek(region -> region.setChildren(getChildren(region, allRegions))) .collect(Collectors.toList()); } }