You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
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 需显式设置)。