58 lines
2.7 KiB
SQL
58 lines
2.7 KiB
SQL
-- 统一通知中心切换前,旧 work_notice 催办任务可能在零次投递时就把报废单标记为已催办。
|
|
-- 保留旧任务用于审计,但仅对“仍待审批、从未尝试/发送、且尚无新通道任务”的记录开放一次重新催办。
|
|
START TRANSACTION;
|
|
|
|
UPDATE `disposal_record` AS `disposal`
|
|
SET `disposal`.`reminded_at` = NULL
|
|
WHERE `disposal`.`status` = 'pending'
|
|
AND `disposal`.`reminded_at` IS NOT NULL
|
|
AND EXISTS (
|
|
SELECT 1
|
|
FROM `dingtalk_delivery` AS `legacy_delivery`
|
|
WHERE `legacy_delivery`.`business_type` = 'disposal'
|
|
AND `legacy_delivery`.`business_id` = `disposal`.`id`
|
|
AND `legacy_delivery`.`event_type` = 'disposal_overdue_reminder'
|
|
AND `legacy_delivery`.`provider_type` = 'work_notice'
|
|
AND `legacy_delivery`.`status` IN ('pending', 'retrying', 'sending')
|
|
AND `legacy_delivery`.`attempt_count` = 0
|
|
AND `legacy_delivery`.`dingtalk_task_id` IS NULL
|
|
AND `legacy_delivery`.`sent_at` IS NULL
|
|
AND `legacy_delivery`.`read_at` IS NULL
|
|
)
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM `dingtalk_delivery` AS `current_delivery`
|
|
WHERE `current_delivery`.`business_type` = 'disposal'
|
|
AND `current_delivery`.`business_id` = `disposal`.`id`
|
|
AND `current_delivery`.`event_type` = 'disposal_overdue_reminder'
|
|
AND `current_delivery`.`provider_type` = 'notification_center'
|
|
);
|
|
|
|
UPDATE `dingtalk_delivery` AS `legacy_delivery`
|
|
JOIN `disposal_record` AS `disposal`
|
|
ON `disposal`.`id` = `legacy_delivery`.`business_id`
|
|
LEFT JOIN `dingtalk_delivery` AS `current_delivery`
|
|
ON `current_delivery`.`business_type` = 'disposal'
|
|
AND `current_delivery`.`business_id` = `legacy_delivery`.`business_id`
|
|
AND `current_delivery`.`event_type` = 'disposal_overdue_reminder'
|
|
AND `current_delivery`.`provider_type` = 'notification_center'
|
|
SET `legacy_delivery`.`status` = 'failed',
|
|
`legacy_delivery`.`next_attempt_at` = NOW(3),
|
|
`legacy_delivery`.`lease_owner` = NULL,
|
|
`legacy_delivery`.`lease_expires_at` = NULL,
|
|
`legacy_delivery`.`last_error_code` = 'LEGACY_CHANNEL_RETIRED',
|
|
`legacy_delivery`.`last_error_message` = '历史工作通知通道未实际投递,已开放由统一通知中心重新生成',
|
|
`legacy_delivery`.`failure_notified_at` = NOW(3)
|
|
WHERE `legacy_delivery`.`business_type` = 'disposal'
|
|
AND `legacy_delivery`.`event_type` = 'disposal_overdue_reminder'
|
|
AND `legacy_delivery`.`provider_type` = 'work_notice'
|
|
AND `legacy_delivery`.`status` IN ('pending', 'retrying', 'sending')
|
|
AND `legacy_delivery`.`attempt_count` = 0
|
|
AND `legacy_delivery`.`dingtalk_task_id` IS NULL
|
|
AND `legacy_delivery`.`sent_at` IS NULL
|
|
AND `legacy_delivery`.`read_at` IS NULL
|
|
AND `disposal`.`status` = 'pending'
|
|
AND `current_delivery`.`id` IS NULL;
|
|
|
|
COMMIT;
|