| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- -- 1.0.125.sql
- -- S8-ORDER-CHAIN-MATERIAL-PROCUREMENT-BASELINE-FIELD-ALIGN-1
- -- 给既有库 ado_s8_order_flow_procurement_pivot 表补两列:impact_count(影响台次)/ kit_rate(准时齐套率),
- -- 并为 BASELINE_PPT 的 XX / YY / ZZ 关键材料 grand 单元(supplier_code=TOTAL && spec_code=TOTAL)回填业务基线值。
- --
- -- 修正范围:
- -- ado_s8_order_flow_procurement_pivot:
- -- 1) 幂等加列 impact_count INT NULL;
- -- 2) 幂等加列 kit_rate DECIMAL(5,4) NULL;
- -- 3) 限定 order_id IS NULL && supplier_code='TOTAL' && spec_code='TOTAL' && is_deleted=0
- -- 分别 UPDATE XX(55, 0.8500) / YY(23, 0.8400) / ZZ(10, 0.9700) 三行。
- --
- -- 安全边界:
- -- * 仅 ALTER TABLE ADD COLUMN(幂等)+ UPDATE(精确 4 条件限定单行)
- -- * 禁 DELETE / TRUNCATE / DROP;表行数保持原 48 行不变
- -- * 不动 cycle_days / status / scenario_code / data_source 等既有字段值
- -- * 不动 ado_s8_order_flow_order / stage / substep / substep_unit / snapshot
- -- * 不动 ado_s8_order_flow_product_design_drawing(产品设计阶段)
- -- * 不动 S0 / .vscode / Database.json / SysMenu
- -- * 不引入 TOTAL material 行(保持现有 3 material × 4 supplier × 4 spec = 48 行结构)
- --
- -- 幂等性:
- -- * ALTER:通过 information_schema.COLUMNS 判断列是否存在,PREPARE/EXECUTE 条件执行
- -- * UPDATE:四条件复合 WHERE 唯一定位 grand 单元,二次执行得到同样结果
- --
- -- 兼容性:
- -- * MySQL 5.7+ / 8.x 通用语法
- --
- -- 验证(阶段 4 重演后必查):
- -- SELECT material_code, impact_count, kit_rate
- -- FROM ado_s8_order_flow_procurement_pivot
- -- WHERE order_id IS NULL
- -- AND supplier_code = 'TOTAL'
- -- AND spec_code = 'TOTAL'
- -- AND is_deleted = 0
- -- ORDER BY material_code;
- -- → 3 行:XX=55/0.8500,YY=23/0.8400,ZZ=10/0.9700
- -- 2026-05-25
- -- ─── 1) 幂等加列:impact_count ───
- SET @col_exists := (
- SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'ado_s8_order_flow_procurement_pivot'
- AND COLUMN_NAME = 'impact_count'
- );
- SET @sql := IF(@col_exists = 0,
- 'ALTER TABLE `ado_s8_order_flow_procurement_pivot` ADD COLUMN `impact_count` INT NULL COMMENT ''影响台次''',
- 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- -- ─── 2) 幂等加列:kit_rate ───
- SET @col_exists := (
- SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'ado_s8_order_flow_procurement_pivot'
- AND COLUMN_NAME = 'kit_rate'
- );
- SET @sql := IF(@col_exists = 0,
- 'ALTER TABLE `ado_s8_order_flow_procurement_pivot` ADD COLUMN `kit_rate` DECIMAL(5,4) NULL COMMENT ''准时齐套率''',
- 'SELECT 1');
- PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- -- ─── 3) 回填 BASELINE_PPT grand 单元(每条 UPDATE 精确命中 1 行) ───
- UPDATE `ado_s8_order_flow_procurement_pivot`
- SET `impact_count` = 55,
- `kit_rate` = 0.8500
- WHERE `order_id` IS NULL
- AND `material_code` = 'XX'
- AND `supplier_code` = 'TOTAL'
- AND `spec_code` = 'TOTAL'
- AND `is_deleted` = 0;
- UPDATE `ado_s8_order_flow_procurement_pivot`
- SET `impact_count` = 23,
- `kit_rate` = 0.8400
- WHERE `order_id` IS NULL
- AND `material_code` = 'YY'
- AND `supplier_code` = 'TOTAL'
- AND `spec_code` = 'TOTAL'
- AND `is_deleted` = 0;
- UPDATE `ado_s8_order_flow_procurement_pivot`
- SET `impact_count` = 10,
- `kit_rate` = 0.9700
- WHERE `order_id` IS NULL
- AND `material_code` = 'ZZ'
- AND `supplier_code` = 'TOTAL'
- AND `spec_code` = 'TOTAL'
- AND `is_deleted` = 0;
|