1 Commits

Author SHA1 Message Date
2995840376
0ff9103089 fix(H): 修复 product_property 驼峰遗留列导致后台产品页面 500
问题:后台「产品中心 - 产品列表/详情/物模型」报
      Unknown column 'completion_mode' in 'field list'(BadSqlGrammarException)

根因:V19(面板 P2 迁移)建列时把 completionMode 直接当作列名写入 product_property(驼峰),
      而 MyBatis-Plus 默认把实体字段 completionMode 映射为下划线形式 completion_mode,
      实体查询/写入时找不到列。
      注:V22 已把 completion_mode 的权威归属判定为 product_action 维度,
      product_property 上的同名列属于历史兼容,保留但统一为下划线命名。

修复:新增 V23 迁移,将 product_property.completionMode 重命名为 completion_mode
  - 幂等可重复执行,三种情形分别处理:
      1) 仅有驼峰列   -> 直接 RENAME COLUMN
      2) 两列都存在   -> 先回填旧列非空值到新列,再 DROP 旧列
      3) 仅有下划线列 -> 跳过
  - 无存储过程、无 DELIMITER(MySQL batch 管道模式下 DELIMITER 失效)
  - 全库扫描(COLUMN_NAME <> LOWER(COLUMN_NAME))确认驼峰遗留列仅此一处

上线过程:全库备份 /opt/iotsaas/backup/iot_platform_before_v23.sql
          -> 克隆库 iot_v23_test 演练两遍(重命名成功 + 幂等无副作用)-> 生产执行 -> 克隆库 DROP

验证:/api/v1/products、/api/v1/products/{id}、/api/v1/products/{id}/spec、
      /api/v1/products/{id}/control-schema 全部返回 200,物模型属性正常返回。
2026-10-27 19:12:13 +08:00