1.0.572.sql 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. -- 1.0.572 · N-3 岗位映射、E-4 指标结果状态与来源能力。幂等。不删行。
  2. CREATE TABLE IF NOT EXISTS mdp_employee_position_map (
  3. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  4. tenant_id BIGINT NOT NULL,
  5. source_system VARCHAR(50) NOT NULL,
  6. domain VARCHAR(50) NOT NULL DEFAULT '',
  7. src_position_raw VARCHAR(200) NOT NULL COMMENT '源岗位原文',
  8. src_position_field VARCHAR(32) NOT NULL COMMENT 'JobTitle/Post/WorkCtr/gw/Position',
  9. position_code VARCHAR(24) NOT NULL DEFAULT 'UNKNOWN' COMMENT 'WAREHOUSE/PRODUCTION/PLANNER/OTHER/UNKNOWN',
  10. role_source VARCHAR(24) NOT NULL DEFAULT 'AUTO_KEYWORD' COMMENT 'AUTO_KEYWORD/MANUAL',
  11. remark VARCHAR(500) NULL,
  12. create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  13. update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  14. UNIQUE KEY uk_emp_pos_map (tenant_id, source_system, domain, src_position_raw)
  15. );
  16. CREATE TABLE IF NOT EXISTS mdp_source_capability (
  17. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  18. source_system VARCHAR(50) NOT NULL,
  19. semantic_code VARCHAR(48) NOT NULL COMMENT '附录 F 字段类语义码',
  20. supported TINYINT NOT NULL,
  21. reason VARCHAR(300) NOT NULL COMMENT '面向业务用户的原因文本',
  22. evidence VARCHAR(500) NULL COMMENT '核实依据',
  23. verified_at DATETIME NOT NULL,
  24. UNIQUE KEY uk_source_capability (source_system, semantic_code)
  25. );
  26. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l1_day' AND COLUMN_NAME='result_status')=0, 'ALTER TABLE `ado_s9_kpi_value_l1_day` ADD COLUMN `result_status` VARCHAR(24) NULL COMMENT ''OK/NO_DATA/SOURCE_UNSUPPORTED/FAILED''', 'DO 0');
  27. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  28. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l1_day' AND COLUMN_NAME='result_reason')=0, 'ALTER TABLE `ado_s9_kpi_value_l1_day` ADD COLUMN `result_reason` VARCHAR(300) NULL COMMENT ''非 OK 时的原因''', 'DO 0');
  29. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  30. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l2_day' AND COLUMN_NAME='result_status')=0, 'ALTER TABLE `ado_s9_kpi_value_l2_day` ADD COLUMN `result_status` VARCHAR(24) NULL COMMENT ''OK/NO_DATA/SOURCE_UNSUPPORTED/FAILED''', 'DO 0');
  31. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  32. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l2_day' AND COLUMN_NAME='result_reason')=0, 'ALTER TABLE `ado_s9_kpi_value_l2_day` ADD COLUMN `result_reason` VARCHAR(300) NULL COMMENT ''非 OK 时的原因''', 'DO 0');
  33. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  34. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l3_day' AND COLUMN_NAME='result_status')=0, 'ALTER TABLE `ado_s9_kpi_value_l3_day` ADD COLUMN `result_status` VARCHAR(24) NULL COMMENT ''OK/NO_DATA/SOURCE_UNSUPPORTED/FAILED''', 'DO 0');
  35. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  36. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l3_day' AND COLUMN_NAME='result_reason')=0, 'ALTER TABLE `ado_s9_kpi_value_l3_day` ADD COLUMN `result_reason` VARCHAR(300) NULL COMMENT ''非 OK 时的原因''', 'DO 0');
  37. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  38. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l4_day' AND COLUMN_NAME='result_status')=0, 'ALTER TABLE `ado_s9_kpi_value_l4_day` ADD COLUMN `result_status` VARCHAR(24) NULL COMMENT ''OK/NO_DATA/SOURCE_UNSUPPORTED/FAILED''', 'DO 0');
  39. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  40. SET @sql := IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s9_kpi_value_l4_day' AND COLUMN_NAME='result_reason')=0, 'ALTER TABLE `ado_s9_kpi_value_l4_day` ADD COLUMN `result_reason` VARCHAR(300) NULL COMMENT ''非 OK 时的原因''', 'DO 0');
  41. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  42. UPDATE ado_s9_kpi_value_l1_day
  43. SET result_status=IF(metric_value IS NULL,'NO_DATA','OK'),
  44. result_reason=IF(metric_value IS NULL,'窗口内无业务数据',NULL)
  45. WHERE result_status IS NULL;
  46. UPDATE ado_s9_kpi_value_l2_day
  47. SET result_status=IF(metric_value IS NULL,'NO_DATA','OK'),
  48. result_reason=IF(metric_value IS NULL,'窗口内无业务数据',NULL)
  49. WHERE result_status IS NULL;
  50. UPDATE ado_s9_kpi_value_l3_day
  51. SET result_status=IF(metric_value IS NULL,'NO_DATA','OK'),
  52. result_reason=IF(metric_value IS NULL,'窗口内无业务数据',NULL)
  53. WHERE result_status IS NULL;
  54. UPDATE ado_s9_kpi_value_l4_day
  55. SET result_status=IF(metric_value IS NULL,'NO_DATA','OK'),
  56. result_reason=IF(metric_value IS NULL,'窗口内无业务数据',NULL)
  57. WHERE result_status IS NULL;
  58. INSERT INTO mdp_source_capability (source_system, semantic_code, supported, reason, evidence, verified_at)
  59. SELECT 'T8', 'FG_RECEIPT_TIME', 0, '源系统没有客户签收时间', 'Q2:T8 无客户签收时间字段', NOW()
  60. FROM DUAL
  61. WHERE NOT EXISTS (SELECT 1 FROM mdp_source_capability WHERE source_system='T8' AND semantic_code='FG_RECEIPT_TIME');
  62. INSERT INTO mdp_source_capability (source_system, semantic_code, supported, reason, evidence, verified_at)
  63. SELECT 'DOPDEMORQ_SQLSERVER', 'FG_RECEIPT_TIME', 0, '源系统没有客户签收时间', 'Q2:165 无客户签收时间字段', NOW()
  64. FROM DUAL
  65. WHERE NOT EXISTS (SELECT 1 FROM mdp_source_capability WHERE source_system='DOPDEMORQ_SQLSERVER' AND semantic_code='FG_RECEIPT_TIME');
  66. INSERT INTO mdp_source_capability (source_system, semantic_code, supported, reason, evidence, verified_at)
  67. SELECT 'DOPDEMORQ_SQLSERVER', 'DOC_QTY_CLOSE', 0, '165 工单行没有关闭标志来源列', 'R9.4:165 无对应列,不把状态码猜成关闭', NOW()
  68. FROM DUAL
  69. WHERE NOT EXISTS (SELECT 1 FROM mdp_source_capability WHERE source_system='DOPDEMORQ_SQLSERVER' AND semantic_code='DOC_QTY_CLOSE');
  70. INSERT INTO mdp_employee_position_map
  71. (tenant_id, source_system, domain, src_position_raw, src_position_field, position_code, role_source)
  72. SELECT p.tenant_id, 'T8', IFNULL(p.ztid,''), p.gw, 'gw',
  73. CASE
  74. WHEN p.gw='计划' THEN 'PLANNER'
  75. WHEN p.gw='仓管' THEN 'WAREHOUSE'
  76. WHEN p.gw='生产' THEN 'PRODUCTION'
  77. WHEN p.gw LIKE '%仓%' OR p.gw LIKE '%库管%' OR p.gw LIKE '%保管%' OR p.gw LIKE '%物料员%' OR p.gw LIKE '%WMS%' THEN 'WAREHOUSE'
  78. WHEN p.gw LIKE '%生产%' OR p.gw LIKE '%操作%' OR p.gw LIKE '%装配%' OR p.gw LIKE '%车间%' OR p.gw LIKE '%班组%' OR p.gw LIKE '%产线%' OR p.gw LIKE '%工段%' THEN 'PRODUCTION'
  79. WHEN p.gw LIKE '%计划%' OR p.gw LIKE '%PMC%' OR p.gw LIKE '%调度%' THEN 'PLANNER'
  80. ELSE 'UNKNOWN' END,
  81. 'AUTO_KEYWORD'
  82. FROM (
  83. SELECT DISTINCT tenant_id, IFNULL(ztid,'') AS ztid, gw
  84. FROM mdp_std_t8_sys_pelist
  85. WHERE gw IS NOT NULL AND gw<>''
  86. ) p
  87. ON DUPLICATE KEY UPDATE
  88. position_code=IF(role_source='MANUAL', position_code, VALUES(position_code)),
  89. src_position_field=IF(role_source='MANUAL', src_position_field, VALUES(src_position_field));
  90. INSERT INTO mdp_employee_position_map
  91. (tenant_id, source_system, domain, src_position_raw, src_position_field, position_code, role_source)
  92. SELECT e.tenant_id, 'AIDOP_NATIVE', IFNULL(e.Domain,''), e.raw_pos, 'JobTitle',
  93. CASE
  94. WHEN e.raw_pos='计划' THEN 'PLANNER'
  95. WHEN e.raw_pos='仓管' THEN 'WAREHOUSE'
  96. WHEN e.raw_pos='生产' THEN 'PRODUCTION'
  97. WHEN e.raw_pos LIKE '%仓%' OR e.raw_pos LIKE '%库管%' OR e.raw_pos LIKE '%保管%' OR e.raw_pos LIKE '%物料员%' OR e.raw_pos LIKE '%WMS%' THEN 'WAREHOUSE'
  98. WHEN e.raw_pos LIKE '%生产%' OR e.raw_pos LIKE '%操作%' OR e.raw_pos LIKE '%装配%' OR e.raw_pos LIKE '%车间%' OR e.raw_pos LIKE '%班组%' OR e.raw_pos LIKE '%产线%' OR e.raw_pos LIKE '%工段%' THEN 'PRODUCTION'
  99. WHEN e.raw_pos LIKE '%计划%' OR e.raw_pos LIKE '%PMC%' OR e.raw_pos LIKE '%调度%' THEN 'PLANNER'
  100. ELSE 'UNKNOWN' END,
  101. 'AUTO_KEYWORD'
  102. FROM (
  103. SELECT DISTINCT tenant_id, Domain, COALESCE(NULLIF(JobTitle,''), NULLIF(WorkCtr,'')) AS raw_pos
  104. FROM EmployeeMaster
  105. WHERE COALESCE(NULLIF(JobTitle,''), NULLIF(WorkCtr,'')) IS NOT NULL
  106. ) e
  107. ON DUPLICATE KEY UPDATE
  108. position_code=IF(role_source='MANUAL', position_code, VALUES(position_code)),
  109. src_position_field=IF(role_source='MANUAL', src_position_field, VALUES(src_position_field));
  110. ALTER TABLE mdp_std_employee
  111. MODIFY COLUMN position_code VARCHAR(32) NOT NULL DEFAULT 'OTHER' COMMENT 'WAREHOUSE/PRODUCTION/PLANNER/OTHER/UNKNOWN';