1.0.346.sql 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. -- 1.0.346 S1 看板重算进度字段与租户级锁。
  2. SET NAMES utf8mb4;
  3. SET @ddl := (
  4. SELECT IF(
  5. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s1_dashboard_rebuild_job' AND COLUMN_NAME='current_stage'),
  6. 'SELECT 1',
  7. 'ALTER TABLE `ado_s1_dashboard_rebuild_job`
  8. ADD COLUMN `current_stage` VARCHAR(32) NOT NULL DEFAULT ''QUEUED'' AFTER `atomic_rows`,
  9. ADD COLUMN `stage_index` TINYINT NOT NULL DEFAULT 0 AFTER `current_stage`,
  10. ADD COLUMN `stage_total` TINYINT NOT NULL DEFAULT 5 AFTER `stage_index`,
  11. ADD COLUMN `progress_percent` TINYINT NOT NULL DEFAULT 0 AFTER `stage_total`,
  12. ADD COLUMN `progress_message` VARCHAR(255) NULL AFTER `progress_percent`,
  13. ADD COLUMN `last_progress_at` DATETIME(3) NULL AFTER `progress_message`,
  14. ADD COLUMN `failed_stage` VARCHAR(32) NULL AFTER `last_progress_at`'
  15. )
  16. );
  17. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  18. UPDATE `ado_s1_dashboard_rebuild_job`
  19. SET `current_stage`='QUEUED', `progress_percent`=0, `stage_index`=0, `stage_total`=5
  20. WHERE `status`='QUEUED' AND (`current_stage` IS NULL OR `current_stage`='QUEUED') AND `progress_percent`=0;
  21. UPDATE `ado_s1_dashboard_rebuild_job`
  22. SET `current_stage`='PREPARING', `progress_percent`=5, `stage_total`=5
  23. WHERE `status`='RUNNING' AND (`current_stage` IS NULL OR `current_stage` IN ('QUEUED',''));
  24. UPDATE `ado_s1_dashboard_rebuild_job`
  25. SET `current_stage`='SUCCESS', `progress_percent`=100, `stage_index`=5, `stage_total`=5
  26. WHERE `status`='SUCCESS';
  27. UPDATE `ado_s1_dashboard_rebuild_job`
  28. SET `current_stage`='FAILED', `stage_total`=5
  29. WHERE `status`='FAILED' AND (`current_stage` IS NULL OR `current_stage`='');
  30. UPDATE `ado_s1_dashboard_rebuild_job`
  31. SET `current_stage`='CANCELLED', `stage_total`=5
  32. WHERE `status`='CANCELLED' AND (`current_stage` IS NULL OR `current_stage`='');
  33. SET @ddl := (
  34. SELECT IF(
  35. EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s1_dashboard_rebuild_job' AND INDEX_NAME='ix_s1_rebuild_scope'),
  36. 'SELECT 1',
  37. 'ALTER TABLE `ado_s1_dashboard_rebuild_job` ADD KEY `ix_s1_rebuild_scope` (`tenant_id`, `factory_id`, `status`, `submitted_at`)'
  38. )
  39. );
  40. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  41. UPDATE `ado_s1_mdp_run_lock`
  42. SET `status`='FREE', `holder_id`=NULL, `job_id`=NULL
  43. WHERE `lock_name`='S1_MDP_FULL'
  44. AND (`status`='FREE' OR `heartbeat_at` IS NULL OR `heartbeat_at` < DATE_SUB(NOW(), INTERVAL 30 MINUTE));