# 行政区划全量种子导入 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`(原本违反「所有业务 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 需显式设置)。