1.0.280.sql 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. -- AIDOP-S6-L1-KPI-CONTRACT-RESOLUTION-1 Phase 1(方案 B:恢复 L1=订单 / L2=工单 分层)。
  2. -- 提交时 rename 为正式 1.0.<next>.sql 并注册 csproj Copy(不预占版本号)。
  3. -- 表列:ado_smart_ops_kpi_calc_config 为 PascalCase(EnableUnderLine=false);kpi_master 亦 PascalCase;
  4. -- ado_s9_kpi_value_l1_day / ado_smart_ops_kpi_atomic_day 为 snake(显式 SQL 建)。
  5. -- 幂等:配置 INSERT ... WHERE NOT EXISTS;数据修正为条件 UPDATE/DELETE(可重复执行)。
  6. -- 租户:工单 L2 KPI 计算落 AIDOP 运行租户 797403760988229。
  7. -- ═════════ 1) 工单 L2 KPI 迁 CONFIG_SQL(S6_L2_002 满足率 / S6_L2_003 人效)═════════
  8. -- 读已准备好的 dwd(数据准备由 S6MdpSyncTransformService 保留),与 legacy 逐项等价。
  9. -- S6_L2_002 工单制造满足率(日;dwd 存 0~1 逐单 rate → ×100)
  10. INSERT INTO ado_smart_ops_kpi_calc_config
  11. (`TenantId`,`MetricCode`,`ModuleCode`,`VersionNo`,`CalcEngineType`,`DataSourceCode`,`SqlScript`,`TimeoutSeconds`,`PublishStatus`,`IsCurrent`,`Remark`,`CreatedBy`,`CreatedAt`)
  12. SELECT 797403760988229,'S6_L2_002','S6',1,'LEGACY_CODE',NULL,NULL,30,'PUBLISHED',0,'legacy 回滚基线:均值-of-逐单(报工/计划)×100','system',NOW()
  13. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM ado_smart_ops_kpi_calc_config WHERE `MetricCode`='S6_L2_002' AND `TenantId`=797403760988229 AND `VersionNo`=1);
  14. INSERT INTO ado_smart_ops_kpi_calc_config
  15. (`TenantId`,`MetricCode`,`ModuleCode`,`VersionNo`,`CalcEngineType`,`DataSourceCode`,`SqlScript`,`TimeoutSeconds`,`PublishStatus`,`IsCurrent`,`Remark`,`CreatedBy`,`CreatedAt`)
  16. SELECT 797403760988229,'S6_L2_002','S6',2,'CONFIG_SQL','MDP_LOCAL',
  17. 'SELECT ROUND(AVG(fulfillment_rate) * 100, 4) AS metric_value, COUNT(*) AS numerator_value
  18. FROM dwd_t8_work_order_mfg_fulfillment
  19. WHERE tenant_id = @tenant_id AND factory_id = @factory_id AND biz_date = @biz_date AND source_ztid = @ztid
  20. AND fulfillment_rate IS NOT NULL',
  21. 30,'PUBLISHED',1,'CONFIG_SQL:读 dwd 逐单 fulfillment_rate(0~1) 均值×100,1:1 复刻 legacy','system',NOW()
  22. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM ado_smart_ops_kpi_calc_config WHERE `MetricCode`='S6_L2_002' AND `TenantId`=797403760988229 AND `VersionNo`=2);
  23. -- S6_L2_003 工单制造人效(月;完成工单数/生产人数,headcount 空/0→NO_DATA 保留 NO_HEADCOUNT)
  24. INSERT INTO ado_smart_ops_kpi_calc_config
  25. (`TenantId`,`MetricCode`,`ModuleCode`,`VersionNo`,`CalcEngineType`,`DataSourceCode`,`SqlScript`,`TimeoutSeconds`,`PublishStatus`,`IsCurrent`,`Remark`,`CreatedBy`,`CreatedAt`)
  26. SELECT 797403760988229,'S6_L2_003','S6',1,'LEGACY_CODE',NULL,NULL,30,'PUBLISHED',0,'legacy 回滚基线:完成工单数/生产人数','system',NOW()
  27. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM ado_smart_ops_kpi_calc_config WHERE `MetricCode`='S6_L2_003' AND `TenantId`=797403760988229 AND `VersionNo`=1);
  28. INSERT INTO ado_smart_ops_kpi_calc_config
  29. (`TenantId`,`MetricCode`,`ModuleCode`,`VersionNo`,`CalcEngineType`,`DataSourceCode`,`SqlScript`,`TimeoutSeconds`,`PublishStatus`,`IsCurrent`,`Remark`,`CreatedBy`,`CreatedAt`)
  30. SELECT 797403760988229,'S6_L2_003','S6',2,'CONFIG_SQL','MDP_LOCAL',
  31. 'SELECT ROUND(done_count / NULLIF(production_headcount, 0), 4) AS metric_value,
  32. done_count AS numerator_value, production_headcount AS denominator_value,
  33. denominator_status AS result_message
  34. FROM dwd_t8_work_order_mfg_efficiency
  35. WHERE tenant_id = @tenant_id AND factory_id = @factory_id
  36. AND biz_month = DATE_FORMAT(@biz_date, ''%Y-%m'') AND source_ztid = @ztid',
  37. 30,'PUBLISHED',1,'CONFIG_SQL:读 dwd 月行 done_count/生产人数,1:1 复刻 legacy','system',NOW()
  38. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM ado_smart_ops_kpi_calc_config WHERE `MetricCode`='S6_L2_003' AND `TenantId`=797403760988229 AND `VersionNo`=2);
  39. -- ═════════ 2) 修正租户 0 的 S6_L1_001/002 元数据:工单(1.0.178所写)→订单 ═════════
  40. -- 从既有订单口径租户 1300000000001 同码行拷贝,保证全租户 L1 统一订单口径。
  41. UPDATE ado_smart_ops_kpi_master t0
  42. JOIN ado_smart_ops_kpi_master src
  43. ON src.`MetricCode` = t0.`MetricCode` AND src.`TenantId` = 1300000000001
  44. SET t0.`MetricName` = src.`MetricName`, t0.`Unit` = src.`Unit`, t0.`Direction` = src.`Direction`,
  45. t0.`Formula` = src.`Formula`, t0.`CalcRule` = src.`CalcRule`, t0.`Description` = src.`Description`,
  46. t0.`UpdatedAt` = NOW()
  47. WHERE t0.`TenantId` = 0 AND t0.`MetricCode` IN ('S6_L1_001','S6_L1_002')
  48. AND t0.`MetricName` NOT LIKE '订单%';
  49. -- ═════════ 3) 清理 atomic_day 中被误写的 S6 排程别名(配合代码删别名,#5/#6)═════════
  50. -- 含 S6_L1_003(订单制造人效同属被 S2 排程别名污染,同一 bug)。
  51. DELETE FROM ado_smart_ops_kpi_atomic_day
  52. WHERE metric_code IN ('S6_L1_001','S6_L1_002','S6_L1_003');
  53. -- ═════════ 4) 隔离 l1_day 的 S6_L1_001/002 历史工单值(误落位,#7/#8)═════════
  54. -- is_deleted=1 隔离(保留行可追溯),看板读 is_deleted=0 → L1 呈现 NO_DATA;
  55. -- 工单历史不搬(按决策 L2 从下次刷新起累积)。
  56. UPDATE ado_s9_kpi_value_l1_day
  57. SET is_deleted = 1, update_time = NOW()
  58. WHERE module_code = 'S6' AND metric_code IN ('S6_L1_001','S6_L1_002') AND is_deleted = 0;