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<String> CITY_LIST = Arrays.asList(
|
"武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市",
|
"孝感市", "荆州市", "黄冈市", "咸宁市", "随州市", "恩施州",
|
"仙桃市", "潜江市", "天门市", "神农架林区");
|
|
/** 区划代码前缀 -> 市州名 */
|
private static final Map<String, String> CODE_PREFIX_MAP = new HashMap<>();
|
|
/** 别名 -> 规范名 */
|
private static final Map<String, String> 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<String> cityList() {
|
return CITY_LIST;
|
}
|
|
/** 生成空市州统计Map */
|
public static Map<String, BigDecimalStat> emptyStatMap() {
|
Map<String, BigDecimalStat> 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;
|
}
|
}
|
}
|