1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
| package com.ruoyi.productionPlan.enums;
|
| import lombok.Getter;
|
| import java.util.Arrays;
| import java.util.List;
|
| /**
| * 地址归属地枚举
| * 根据地址关键字自动匹配:银川/石嘴山/吴忠/固原/中卫/自提/内蒙古/其他
| */
| @Getter
| public enum AddressRegionEnum {
|
| /**
| * 银川市
| */
| YINCHUAN("银川", Arrays.asList("兴庆", "西夏", "金凤", "永宁", "贺兰", "灵武")),
|
| /**
| * 石嘴山市
| */
| SHIZUISHAN("石嘴山", Arrays.asList("大武口", "平罗", "惠农", "利通")),
|
| /**
| * 吴忠市
| */
| WUZHONG("吴忠", Arrays.asList("红寺堡", "盐池", "同心", "青铜峡")),
|
| /**
| * 固原市
| */
| GUYUAN("固原",Arrays.asList("原州", "泾源", "彭阳", "中宁", "海原", "隆德", "西吉")),
|
| /**
| * 中卫市
| */
| ZHONGWEI("中卫", Arrays.asList("沙坡头", "中宁", "海原")),
|
| /**
| * 自提
| */
| SELF_PICKUP("自提", Arrays.asList("自提")),
|
| /**
| * 内蒙古(包含你提供的所有区县关键字)
| */
| INNER_MONGOLIA("内蒙古", Arrays.asList(
| // 呼和浩特
| "呼和浩特", "新城", "回民", "玉泉", "赛罕", "土默特左旗", "土默特", "托克托", "和林格尔", "清水河", "武川",
| // 包头
| "包头", "东河", "昆都仑", "青山", "石拐", "白云鄂博", "九原", "土默特右旗", "固阳", "达尔罕茂明安联合旗",
| // 乌海
| "乌海", "海勃湾", "海南", "乌达",
| // 赤峰
| "赤峰", "红山", "元宝山", "松山", "阿鲁科尔沁旗", "巴林左旗", "巴林右旗", "林西", "克什克腾旗", "翁牛特旗", "喀喇沁旗", "宁城", "敖汉旗",
| // 通辽
| "通辽", "科尔沁", "霍林郭勒", "科尔沁左翼中旗", "科尔沁左翼后旗", "开鲁", "库伦旗", "奈曼旗", "扎鲁特旗",
| // 鄂尔多斯(含自定义地址)
| "鄂尔多斯", "东胜", "康巴什", "达拉特旗", "准格尔旗", "鄂托克前旗", "鄂托克旗", "杭锦旗", "乌审旗", "伊金霍洛旗",
| // 呼伦贝尔
| "呼伦贝尔", "海拉尔", "扎赉诺尔", "满洲里", "牙克石", "扎兰屯", "额尔古纳", "根河",
| "阿荣旗", "莫力达瓦达斡尔族自治旗", "鄂伦春自治旗", "鄂温克族自治旗", "陈巴尔虎旗", "新巴尔虎左旗", "新巴尔虎右旗",
| // 巴彦淖尔
| "巴彦淖尔", "临河", "五原", "磴口", "乌拉特前旗", "乌拉特中旗", "乌拉特后旗", "杭锦后旗",
| // 乌兰察布
| "乌兰察布", "集宁", "丰镇", "卓资", "化德", "商都", "兴和", "凉城",
| "察哈尔右翼前旗", "察哈尔右翼中旗", "察哈尔右翼后旗", "四子王旗",
| // 兴安盟
| "兴安盟", "乌兰浩特", "阿尔山", "科尔沁右翼前旗", "科尔沁右翼中旗", "扎赉特旗", "突泉",
| // 锡林郭勒盟
| "锡林郭勒盟", "锡林浩特", "二连浩特", "阿巴嘎旗", "苏尼特左旗", "苏尼特右旗",
| "东乌珠穆沁旗", "西乌珠穆沁旗", "太仆寺旗", "镶黄旗", "正镶白旗", "正蓝旗", "多伦",
| // 阿拉善盟
| "阿拉善盟", "阿拉善左旗", "阿拉善右旗", "额济纳旗",
| //自定义
| "苏里格经济开发区", "杭锦旗伊和乌素苏木草原站", "鄂托克前旗上海庙镇","内蒙"
| )),
|
| /**
| * 其他地区
| */
| OTHER("其他", Arrays.asList());
|
|
| /**
| * 归属地名称
| */
| private final String regionName;
|
| /**
| * 匹配关键字列表
| */
| private final List<String> keyWords;
|
| /**
| * 构造方法
| */
| AddressRegionEnum(String regionName, List<String> keyWords) {
| this.regionName = regionName;
| this.keyWords = keyWords;
| }
|
| // ==================== 核心方法:根据地址字符串匹配归属地 ====================
| /**
| * 根据地址文本自动识别归属地
| * @param address 详细地址字符串
| * @return 匹配到的归属地枚举(默认返回OTHER)
| */
| public static AddressRegionEnum matchRegion(String address) {
| // 地址为空/空字符串,直接返回其他
| if (address == null || address.trim().isEmpty()) {
| return OTHER;
| }
|
| // 按优先级匹配:自提 > 宁夏各地市 > 内蒙古 > 其他
| for (AddressRegionEnum region : values()) {
| // 跳过无关键字的OTHER
| if (region.keyWords.isEmpty()) {
| continue;
| }
| // 遍历关键字,地址包含任意关键字则匹配成功
| for (String keyword : region.keyWords) {
| if (address.contains(keyword)) {
| return region;
| }
| }
| }
|
| // 无匹配关键字,返回其他
| return OTHER;
| }
| }
|
|