package com.trafficaudit.common.util; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 湖北省行政区划工具类 */ public class RegionUtil { /** 规范市州名(顺序即展示顺序) */ public static final List CITY_LIST = Arrays.asList( "武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市", "孝感市", "荆州市", "黄冈市", "咸宁市", "随州市", "恩施州", "仙桃市", "潜江市", "天门市", "神农架林区"); /** 区划代码前缀 -> 市州名 */ private static final Map CODE_PREFIX_MAP = new HashMap<>(); /** 别名 -> 规范名 */ private static final Map ALIAS_MAP = new HashMap<>(); static { CODE_PREFIX_MAP.put("4201", "武汉市"); CODE_PREFIX_MAP.put("4202", "黄石市"); CODE_PREFIX_MAP.put("4203", "十堰市"); CODE_PREFIX_MAP.put("4205", "宜昌市"); CODE_PREFIX_MAP.put("4206", "襄阳市"); CODE_PREFIX_MAP.put("4207", "鄂州市"); CODE_PREFIX_MAP.put("4208", "荆门市"); CODE_PREFIX_MAP.put("4209", "孝感市"); CODE_PREFIX_MAP.put("4210", "荆州市"); CODE_PREFIX_MAP.put("4211", "黄冈市"); CODE_PREFIX_MAP.put("4212", "咸宁市"); CODE_PREFIX_MAP.put("4213", "随州市"); CODE_PREFIX_MAP.put("4228", "恩施州"); CODE_PREFIX_MAP.put("429004", "仙桃市"); CODE_PREFIX_MAP.put("429005", "潜江市"); CODE_PREFIX_MAP.put("429006", "天门市"); CODE_PREFIX_MAP.put("429021", "神农架林区"); ALIAS_MAP.put("恩施", "恩施州"); ALIAS_MAP.put("恩施市", "恩施州"); ALIAS_MAP.put("天门", "天门市"); ALIAS_MAP.put("林区", "神农架林区"); ALIAS_MAP.put("神农架", "神农架林区"); ALIAS_MAP.put("湖北省", "湖北省"); ALIAS_MAP.put("全省", "湖北省"); ALIAS_MAP.put("仙桃", "仙桃市"); ALIAS_MAP.put("潜江", "潜江市"); } /** 行政区划代码 -> 市州名,无法识别返回 null */ public static String cityByCode(String regionCode) { if (regionCode == null || regionCode.isEmpty()) return null; String code = regionCode.trim(); // 先匹配完整的4290xx直管市代码 if (code.startsWith("4290")) { String city = CODE_PREFIX_MAP.get(code); if (city != null) return city; } for (int len = 4; len >= 2; len--) { if (code.length() < len) continue; String city = CODE_PREFIX_MAP.get(code.substring(0, len)); if (city != null) return city; } return null; } /** 名称规范化(全省/恩施市/天门/林区 -> 规范名),无法识别原样返回 */ public static String normalizeCityName(String name) { if (name == null) return null; String trimmed = name.trim(); if (trimmed.isEmpty()) return trimmed; if (CITY_LIST.contains(trimmed)) return trimmed; String alias = ALIAS_MAP.get(trimmed); if (alias != null) return alias; // 去掉可能的空白 String noSpace = trimmed.replaceAll("\\s+", ""); alias = ALIAS_MAP.get(noSpace); if (alias != null) return alias; return trimmed; } /** 短名(用于排名报表):武汉市->武汉, 恩施州->恩施, 神农架林区->林区 */ public static String shortName(String cityName) { if (cityName == null) return null; String name = normalizeCityName(cityName); if (name == null) return null; if ("神农架林区".equals(name)) return "林区"; if ("恩施州".equals(name)) return "恩施"; if (name.endsWith("市")) return name.substring(0, name.length() - 1); if (name.endsWith("州")) return name.substring(0, name.length() - 1); return name; } /** 规范市州列表(按展示顺序) */ public static List cityList() { return CITY_LIST; } /** 生成空市州统计Map */ public static Map emptyStatMap() { Map map = new LinkedHashMap<>(); for (String city : CITY_LIST) { map.put(city, new BigDecimalStat()); } return map; } public static class BigDecimalStat { private java.math.BigDecimal value = java.math.BigDecimal.ZERO; public void add(java.math.BigDecimal v) { if (v != null) value = value.add(v); } public java.math.BigDecimal getValue() { return value; } public void setValue(java.math.BigDecimal value) { this.value = value == null ? java.math.BigDecimal.ZERO : value; } } }