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.
 
 
 
 
 
 

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