From b42ffc27df167cf83fd8a351c1676c09a01da3da Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Sun, 7 Apr 2024 23:55:15 +0800 Subject: [PATCH] init --- .../controller/app/SettingAppController.java | 9 +++++ .../xq/dto/app/areacode/AreaCodeTree.java | 39 +++++++++++++++++++ .../com/ruoyi/xq/service/AreaCodeService.java | 4 ++ .../xq/service/impl/AreaCodeServiceImpl.java | 29 +++++++++++++- 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/areacode/AreaCodeTree.java diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java index 425dcd9..61727ff 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.xq.domain.AreaCode; import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery; +import com.ruoyi.xq.dto.app.areacode.AreaCodeTree; import com.ruoyi.xq.dto.app.setting.AgreementDTO; import com.ruoyi.xq.service.AgreementSettingService; import com.ruoyi.xq.service.AreaCodeService; @@ -61,4 +62,12 @@ public class SettingAppController { return R.ok(list); } + @GetMapping("/areaCode/tree") + @Operation(summary = "获取所有省市区编码") + @Log(title = "获取所有省市区编码", businessType = BusinessType.OTHER, isSaveDb = false) + public R> areaCodeTree(){ + List node = areaCodeService.tree(); + return R.ok(node); + } + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/areacode/AreaCodeTree.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/areacode/AreaCodeTree.java new file mode 100644 index 0000000..c30d894 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/areacode/AreaCodeTree.java @@ -0,0 +1,39 @@ +package com.ruoyi.xq.dto.app.areacode; + +import com.ruoyi.xq.domain.AreaCode; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class AreaCodeTree extends AreaCode { + + private Integer code; + /** + * 名字 + */ + private String name; + /** + * country:国家、province:省份(直辖市会在province和city显示)、city:市(直辖市会在province和city显示)、district:区县 + */ + private String level; + /** + * 所属上级行政区划代码 + */ + private Integer pcode; + /** + * 所属行政区划名字 + */ + private String pname; + + private List childrenArea; + public void addChild(AreaCodeTree child) { + if (childrenArea == null) { + childrenArea = new ArrayList<>(); + } + childrenArea.add(child); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/AreaCodeService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/AreaCodeService.java index 1cba3bd..5c71e28 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/AreaCodeService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/AreaCodeService.java @@ -3,6 +3,7 @@ package com.ruoyi.xq.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.xq.domain.AreaCode; import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery; +import com.ruoyi.xq.dto.app.areacode.AreaCodeTree; import java.util.List; @@ -15,4 +16,7 @@ import java.util.List; public interface AreaCodeService extends IService { List listAreaCode(AreaCodeQuery query); + + List tree(); + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/AreaCodeServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/AreaCodeServiceImpl.java index ac0aecc..513b060 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/AreaCodeServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/AreaCodeServiceImpl.java @@ -3,13 +3,17 @@ package com.ruoyi.xq.service.impl; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.BeanConvertUtil; import com.ruoyi.xq.domain.AreaCode; import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery; +import com.ruoyi.xq.dto.app.areacode.AreaCodeTree; import com.ruoyi.xq.mapper.AreaCodeMapper; import com.ruoyi.xq.service.AreaCodeService; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 行政区划Service业务层处理 @@ -27,4 +31,27 @@ public class AreaCodeServiceImpl extends ServiceImpl im .eq(StringUtils.isNotBlank(query.getLevel()),AreaCode::getLevel,query.getLevel())); return list; } + + @Override + public List tree() { + List list = this.list(); + List nodeList = BeanConvertUtil.convertListTo(list, AreaCodeTree::new); + Map nodeMap = new HashMap<>(); + Set roots = new HashSet<>(); + // 遍历列表构建节点映射表 + for (AreaCodeTree node : nodeList) { + nodeMap.put(node.getCode(), node); + if (node.getPcode() == 0 || !nodeMap.containsKey(node.getPcode())) { + roots.add(node); + } + } + // 建立父子关系 + for (AreaCodeTree node : nodeList) { + if (nodeMap.containsKey(node.getPcode())) { + AreaCodeTree parentNode = nodeMap.get(node.getPcode()); + parentNode.addChild(node); + } + } + return new ArrayList<>(roots); + } }