-- 1.0.123.sql
-- S8-ORDER-CHAIN-PRODUCT-DESIGN-PPT-STATIC-AND-SINGLE-ORDER-ALIGN-1
-- 修正既有产品设计阶段数据，使其与本批次业务口径一致。仅 UPDATE，禁 DELETE / TRUNCATE / DROP。
--
-- 修正范围：
--   1) ado_s8_order_flow_product_design_drawing：
--      a) 非标 (NON_STANDARD) 图号 KPI 从 12 改为 3，对应 actual_days 全部 > 3 → is_achieved=0 / status='red'
--      b) responsible_person 由责任单位（研发中心 / 结构设计组 / 电气设计组 / 工艺设计组 / 设计审核组）
--         改为 6 位设计师姓名（李海峰 / 陈思远 / 王明华 / 赵建国 / 刘振宇 / 周启明），按 sort_no 循环分配
--   2) ado_s8_order_flow_snapshot：
--      BASELINE_PPT 中 PRODUCT_DESIGN 行 actualAvgDays 2.6→2.5、onTimeRate 96→98
--
-- 安全边界：
--   * 不动 ado_s8_order_flow_order / stage / substep / substep_unit
--   * 不动 ORDER_REVIEW_PLAN_CALC / MATERIAL_PURCHASE / BODY_PRODUCTION / FINAL_ASSEMBLY_DELIVERY 任何数据
--   * 不动 S0 / .vscode / Database.json
--   * 仅触发 product_type='NON_STANDARD' 的图号行，与无人工修改过的责任人行
--   * snapshot UPDATE 限定 scope_code='BASELINE_PPT' + snapshot_code='CHAIN_AGGREGATE_BASELINE'
--
-- 幂等性：
--   * 非标行 UPDATE 带 WHERE (kpi_days<>3 OR is_achieved<>0 OR status<>'red')，重复执行命中行数为 0
--   * 责任人 UPDATE 带 WHERE responsible_person NOT IN (6 设计师姓名)，已对齐后不再触发
--   * snapshot REPLACE 函数对已替换字符串无效，重复执行结果一致
--
-- 兼容性：
--   * 仅使用 UPDATE / REPLACE / CASE / % 运算符，全部 MySQL 5.x / 8.x 通用语法，无需检查 MySQL 版本
--   * 未使用 JSON_REPLACE / JSON_SET，避免依赖 MySQL 5.7.8+
--
-- Rollback：
--   * 由 SeedData 与本脚本共同维护目标态。如需回滚业务口径，git revert 同 commit 并重新跑一次本脚本以外的 UPDATE 即可
--   * 本脚本本身无数据破坏性操作
-- 2026-05-21


-- ─── 1) 非标图号 kpi_days / is_achieved / status 联动 ───
UPDATE ado_s8_order_flow_product_design_drawing
   SET kpi_days = 3.00,
       is_achieved = 0,
       status = 'red'
 WHERE product_type = 'NON_STANDARD'
   AND is_deleted = 0
   AND (kpi_days <> 3.00 OR is_achieved <> 0 OR status <> 'red');


-- ─── 2) 责任人按 sort_no 循环 6 位设计师 ───
UPDATE ado_s8_order_flow_product_design_drawing
   SET responsible_person = CASE ((sort_no - 1) % 6)
       WHEN 0 THEN '李海峰'
       WHEN 1 THEN '陈思远'
       WHEN 2 THEN '王明华'
       WHEN 3 THEN '赵建国'
       WHEN 4 THEN '刘振宇'
       WHEN 5 THEN '周启明'
   END
 WHERE is_deleted = 0
   AND responsible_person NOT IN ('李海峰','陈思远','王明华','赵建国','刘振宇','周启明');


-- ─── 3) snapshot PRODUCT_DESIGN actualAvgDays 2.6→2.5 与 onTimeRate 96→98 ───
-- 用片段 '"actualAvgDays":2.6,"onTimeRate":96' 作为整体替换键，该字符串在 BASELINE_PPT JSON 中
-- 仅出现于 PRODUCT_DESIGN 行（其他阶段 actualAvgDays 分别是 6.2 / 15.5 / 6.7 / 2.9），不会误伤。
UPDATE ado_s8_order_flow_snapshot
   SET stage_snapshots_json = REPLACE(
       stage_snapshots_json,
       '"actualAvgDays":2.6,"onTimeRate":96',
       '"actualAvgDays":2.5,"onTimeRate":98')
 WHERE scope_code = 'BASELINE_PPT'
   AND snapshot_code = 'CHAIN_AGGREGATE_BASELINE'
   AND is_deleted = 0;
