1.0.125.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. -- 1.0.125.sql
  2. -- S8-ORDER-CHAIN-MATERIAL-PROCUREMENT-BASELINE-FIELD-ALIGN-1
  3. -- 给既有库 ado_s8_order_flow_procurement_pivot 表补两列:impact_count(影响台次)/ kit_rate(准时齐套率),
  4. -- 并为 BASELINE_PPT 的 XX / YY / ZZ 关键材料 grand 单元(supplier_code=TOTAL && spec_code=TOTAL)回填业务基线值。
  5. --
  6. -- 修正范围:
  7. -- ado_s8_order_flow_procurement_pivot:
  8. -- 1) 幂等加列 impact_count INT NULL;
  9. -- 2) 幂等加列 kit_rate DECIMAL(5,4) NULL;
  10. -- 3) 限定 order_id IS NULL && supplier_code='TOTAL' && spec_code='TOTAL' && is_deleted=0
  11. -- 分别 UPDATE XX(55, 0.8500) / YY(23, 0.8400) / ZZ(10, 0.9700) 三行。
  12. --
  13. -- 安全边界:
  14. -- * 仅 ALTER TABLE ADD COLUMN(幂等)+ UPDATE(精确 4 条件限定单行)
  15. -- * 禁 DELETE / TRUNCATE / DROP;表行数保持原 48 行不变
  16. -- * 不动 cycle_days / status / scenario_code / data_source 等既有字段值
  17. -- * 不动 ado_s8_order_flow_order / stage / substep / substep_unit / snapshot
  18. -- * 不动 ado_s8_order_flow_product_design_drawing(产品设计阶段)
  19. -- * 不动 S0 / .vscode / Database.json / SysMenu
  20. -- * 不引入 TOTAL material 行(保持现有 3 material × 4 supplier × 4 spec = 48 行结构)
  21. --
  22. -- 幂等性:
  23. -- * ALTER:通过 information_schema.COLUMNS 判断列是否存在,PREPARE/EXECUTE 条件执行
  24. -- * UPDATE:四条件复合 WHERE 唯一定位 grand 单元,二次执行得到同样结果
  25. --
  26. -- 兼容性:
  27. -- * MySQL 5.7+ / 8.x 通用语法
  28. --
  29. -- 验证(阶段 4 重演后必查):
  30. -- SELECT material_code, impact_count, kit_rate
  31. -- FROM ado_s8_order_flow_procurement_pivot
  32. -- WHERE order_id IS NULL
  33. -- AND supplier_code = 'TOTAL'
  34. -- AND spec_code = 'TOTAL'
  35. -- AND is_deleted = 0
  36. -- ORDER BY material_code;
  37. -- → 3 行:XX=55/0.8500,YY=23/0.8400,ZZ=10/0.9700
  38. -- 2026-05-25
  39. -- ─── 1) 幂等加列:impact_count ───
  40. SET @col_exists := (
  41. SELECT COUNT(*) FROM information_schema.COLUMNS
  42. WHERE TABLE_SCHEMA = DATABASE()
  43. AND TABLE_NAME = 'ado_s8_order_flow_procurement_pivot'
  44. AND COLUMN_NAME = 'impact_count'
  45. );
  46. SET @sql := IF(@col_exists = 0,
  47. 'ALTER TABLE `ado_s8_order_flow_procurement_pivot` ADD COLUMN `impact_count` INT NULL COMMENT ''影响台次''',
  48. 'SELECT 1');
  49. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  50. -- ─── 2) 幂等加列:kit_rate ───
  51. SET @col_exists := (
  52. SELECT COUNT(*) FROM information_schema.COLUMNS
  53. WHERE TABLE_SCHEMA = DATABASE()
  54. AND TABLE_NAME = 'ado_s8_order_flow_procurement_pivot'
  55. AND COLUMN_NAME = 'kit_rate'
  56. );
  57. SET @sql := IF(@col_exists = 0,
  58. 'ALTER TABLE `ado_s8_order_flow_procurement_pivot` ADD COLUMN `kit_rate` DECIMAL(5,4) NULL COMMENT ''准时齐套率''',
  59. 'SELECT 1');
  60. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  61. -- ─── 3) 回填 BASELINE_PPT grand 单元(每条 UPDATE 精确命中 1 行) ───
  62. UPDATE `ado_s8_order_flow_procurement_pivot`
  63. SET `impact_count` = 55,
  64. `kit_rate` = 0.8500
  65. WHERE `order_id` IS NULL
  66. AND `material_code` = 'XX'
  67. AND `supplier_code` = 'TOTAL'
  68. AND `spec_code` = 'TOTAL'
  69. AND `is_deleted` = 0;
  70. UPDATE `ado_s8_order_flow_procurement_pivot`
  71. SET `impact_count` = 23,
  72. `kit_rate` = 0.8400
  73. WHERE `order_id` IS NULL
  74. AND `material_code` = 'YY'
  75. AND `supplier_code` = 'TOTAL'
  76. AND `spec_code` = 'TOTAL'
  77. AND `is_deleted` = 0;
  78. UPDATE `ado_s8_order_flow_procurement_pivot`
  79. SET `impact_count` = 10,
  80. `kit_rate` = 0.9700
  81. WHERE `order_id` IS NULL
  82. AND `material_code` = 'ZZ'
  83. AND `supplier_code` = 'TOTAL'
  84. AND `spec_code` = 'TOTAL'
  85. AND `is_deleted` = 0;