diff --git a/agt-framework/agt-spring-boot-starter-biz-ip/src/main/java/org/agt/framework/ip/core/utils/AreaUtils.java b/agt-framework/agt-spring-boot-starter-biz-ip/src/main/java/org/agt/framework/ip/core/utils/AreaUtils.java index ed9212b..b638a30 100644 --- a/agt-framework/agt-spring-boot-starter-biz-ip/src/main/java/org/agt/framework/ip/core/utils/AreaUtils.java +++ b/agt-framework/agt-spring-boot-starter-biz-ip/src/main/java/org/agt/framework/ip/core/utils/AreaUtils.java @@ -4,13 +4,14 @@ import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.csv.CsvRow; import cn.hutool.core.text.csv.CsvUtil; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; import org.agt.framework.common.util.object.ObjectUtils; import org.agt.framework.ip.core.Area; import org.agt.framework.ip.core.enums.AreaTypeEnum; -import lombok.NonNull; -import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -172,6 +173,34 @@ public class AreaUtils { return sb.toString(); } + /** + * 根据子区域编号返回其父区域编号列表 + * + * @param id 区域编号 + * @return 格式化后的区域编号 + */ + public static List formatToIdList(Integer id) { + // 获得区域 + Area area = areas.get(id); + if (area == null) { + return null; + } + + // 格式化 + List ids = new ArrayList<>(); + for (int i = 0; i < AreaTypeEnum.values().length; i++) { // 避免死循环 + ids.add(area.getId()); + // “递归”父节点 + area = area.getParent(); + if (area == null + || ObjectUtils.equalsAny(area.getId(), Area.ID_GLOBAL, Area.ID_CHINA)) { // 跳过父节点为中国的情况 + break; + } + } + Collections.reverse(ids); + return ids; + } + /** * 获取指定类型的区域列表 *