:区域编码迁移与补偿接口设计)
为什么区域迁移复杂区域看起来只是一个字段实际影响很多业务设备归属抄表册选表抄表任务范围数据权限统计报表页面树形展示如果区域迁错数据可能还能落库但业务使用会出问题。老系统和新系统的差异遗留系统常见区域字段是长编码例如国家 城市 区域 小区 楼栋新系统可能有自己的区域表region_id parent_id region_code level tenant_id两边不一定一一对应。为什么需要补偿接口一开始可以在主流程中直接转换区域但后来发现不够灵活。原因是区域数据可能先迁也可能后修某些非核心区域在新系统里没有映射WalkBy 册子区域关系和设备区域关系不完全一样历史数据可能存在脏区域所以最终采用主迁移流程先落库 区域补偿接口后修正这样主流程更稳区域问题可以单独处理和验证。补偿接口做什么区域补偿主要处理几类数据dev_device_instance.region_code rm_record.region_code rm_record_hi.region_code rm_rela_book_region province_id / city_id / region_id核心目标是把老系统区域编码转换成新系统区域编码 并修复依赖区域的业务关系非核心区域无法映射怎么办迁移中经常遇到源库区域无法映射到目标区域。这不一定是失败。需要区分核心业务区域无法映射非核心历史区域无法映射如果是非核心历史区域可能只影响历史册子记录不影响当前设备和业务使用可以作为non_core_unmapped_region_codes返回。这样接口返回更清楚core_unmapped_region_codes [] non_core_unmapped_region_codes [...] business_region_ready true这比简单返回“有 unmapped”更容易验收。为什么不强行创建区域自动创建区域看起来方便但风险很高。区域是权限和业务范围的基础数据。如果自动创建错层级、错租户、错父级会导致更严重的问题。更稳妥的做法是核心区域必须提前准备好 迁移只做映射和补偿 找不到的区域显式返回 由人工确认是否需要补区域省市区层级字段怎么补有些业务表不仅有region_code还有province_id city_id region_id补偿时可以通过当前区域向上递归父级当前区域 - parent_id - parent_id - ...找到 level 为 1、2、3 的节点后分别回写到对应字段。如果某一级找不到不应该清空原字段而是保留原值。为什么保留原值区域补偿应该尽量是低风险操作。如果某一级找不到就清空可能把原本正确的数据破坏掉。保留原值意味着能补的补 不能补的不破坏这更适合生产迁移。总结区域补偿接口的核心设计原则是主流程不被区域细节阻塞 核心区域必须正确 非核心区域显式返回 能补则补不能补不破坏区域迁移不是简单字段映射而是组织、权限、设备和业务记录之间的一次关系重建。