2.3 KiB
行政区划全量种子导入
Label: wayfinder:task Type: task Status: resolved Blocked by: (无)
Question
在 crm-rule 实现行政区划 seeder(与 crm-dict 的 DictDataInitializer 同款 CommandLineRunner 幂等模式),把国标 GB/T 2260 省/市/区三级全量数据(约 3200 行)导入 sys_region 表,使 /api/rule/region/list 与 /api/rule/region/level 级联下拉有完整数据。
要点:
- 数据源:民政部/国家统计局官方区划 CSV(需获取最新年度全量数据,内嵌到 resources 或构建期拉取)
- 幂等:重复执行不重复插入;code 唯一
parentId正确挂载三级树;直辖市的市辖区层级按国标处理- 注意
.java文件 UTF-8 无 BOM 规范(见 AGENTS.md)
Answer
已完成(编译 + 单测通过):
数据:crm-rule/src/main/resources/data/pca-code.json(china-division 2.7.0 npm 包,国家统计局口径)——34 省(31 大陆 + 港澳台省级 810000/820000/710000)/ 342 市 / 3056 区县镇街,共 3432 行。GitHub raw 限流,改走 npmmirror tgz 下载。
实现:RegionDataInitializer(@Order(12) CommandLineRunner,与 DictDataInitializer 同款模式):
- 编码规范化:省/市/区补零到 6 位国标码("11"→"110000");东莞/中山等直辖县级市的镇街 9 位码补零到 12 位(与实体注释「6 位或 12 位」对齐),前缀嵌套不破
- 幂等:每层整体走
batchUpsert(INSERT ... ON DUPLICATE KEY UPDATE,命中 uk_region_code),存在则刷新名称、不存在则插入,永不删除 - 父子挂接分三层「upsert → 回查拿 id → 下一层」(upsert 不回填主键),省级 parentId=null
- 顺手修正:
ISysRegionService改为继承IBaseService<SysRegion>(原本违反「所有业务 Service 必须继承本接口」约定,且借此获得 batchUpsert 能力)
验证:RegionDataInitializerTest 4 个用例(数据文件完整性/港澳台/补零规则/实体构建)全部通过;全量编译通过。本地 :8081 连 8.129.84.155 开发库两次启动实测:首次「存量 0 行,新增 3432 行」,二次「存量 3432 行,新增 0 行」——写入与幂等均已验证。
构建环境备注:本机无 mvn/PATH JDK,已在 tmp/apache-maven-3.9.9 解压 Maven,JDK 用 ~/.jdks/ms-17.0.18(JAVA_HOME 需显式设置)。