-- ==========================================
-- 旧系统任务状态同步定时任务配置脚本
-- ==========================================
-- 
-- 功能说明:
-- 从旧系统同步任务状态到新系统，实现状态的实时更新
-- 
-- 使用场景:
-- 1. 旧系统操作人员更新了调度单状态
-- 2. 新系统需要反映旧系统的状态变更
-- 3. 保持新旧系统状态的一致性
-- 
-- 同步条件:
-- 1. 调度单已同步成功（dispatch_sync_status = 2）
-- 2. 有DispatchOrdID（legacy_dispatch_ord_id IS NOT NULL）
-- 3. 任务状态未完成（task_status NOT IN ('COMPLETED', 'CANCELLED')）
-- 
-- 执行频率建议:
-- - 生产环境: 每5分钟执行一次 (0 0/5 * * * ?)
-- - 测试环境: 每2分钟执行一次 (0 0/2 * * * ?)
-- 
-- 注意事项:
-- 1. 依赖调度单同步完成
-- 2. 仅同步未完成状态的任务
-- 3. 状态映射规则见TaskStatusConverter类
-- ==========================================

-- 插入定时任务配置
INSERT INTO `sys_job` (
    `job_name`,
    `job_group`,
    `invoke_target`,
    `cron_expression`,
    `misfire_policy`,
    `concurrent`,
    `status`,
    `create_by`,
    `create_time`,
    `update_by`,
    `update_time`,
    `remark`
) VALUES (
    '任务状态旧到新同步',
    'DEFAULT',
    'legacySystemSyncTask.syncTaskStatusFromLegacy()',
    '0 0/5 * * * ?',
    '2',
    '1',
    '0',
    'admin',
    NOW(),
    'admin',
    NOW(),
    '从旧系统同步任务状态到新系统，每5分钟执行一次。同步已同步调度单且状态未完成的任务。'
);

-- ==========================================
-- 验证查询
-- ==========================================

-- 1. 查看定时任务是否添加成功
SELECT 
    job_id,
    job_name,
    job_group,
    invoke_target,
    cron_expression,
    CASE status 
        WHEN '0' THEN '正常'
        WHEN '1' THEN '暂停'
    END AS job_status,
    remark
FROM sys_job
WHERE job_name = '任务状态同步';

-- 2. 查看需要同步状态的任务数量
SELECT 
    COUNT(*) AS total_tasks,
    SUM(CASE WHEN t.task_status = 'PENDING' THEN 1 ELSE 0 END) AS pending,
    SUM(CASE WHEN t.task_status = 'DEPARTING' THEN 1 ELSE 0 END) AS departing,
    SUM(CASE WHEN t.task_status = 'ARRIVED' THEN 1 ELSE 0 END) AS arrived,
    SUM(CASE WHEN t.task_status = 'IN_PROGRESS' THEN 1 ELSE 0 END) AS in_progress,
    SUM(CASE WHEN t.task_status = 'RETURNING' THEN 1 ELSE 0 END) AS returning
FROM sys_task_emergency e
INNER JOIN sys_task t ON e.task_id = t.task_id
WHERE e.dispatch_sync_status = 2 
  AND e.legacy_dispatch_ord_id IS NOT NULL
  AND t.task_status NOT IN ('COMPLETED', 'CANCELLED')
  AND t.del_flag = '0';

-- 3. 查看任务状态分布详情
SELECT 
    t.task_id,
    t.task_code,
    t.task_status,
    e.legacy_service_ord_id,
    e.legacy_dispatch_ord_id,
    t.create_time,
    t.update_time
FROM sys_task_emergency e
INNER JOIN sys_task t ON e.task_id = t.task_id
WHERE e.dispatch_sync_status = 2 
  AND e.legacy_dispatch_ord_id IS NOT NULL
  AND t.task_status NOT IN ('COMPLETED', 'CANCELLED')
  AND t.del_flag = '0'
ORDER BY t.update_time DESC
LIMIT 10;

-- ==========================================
-- 状态映射规则参考
-- ==========================================
/*
旧系统状态码 -> 新系统状态:
0,1,2,3,11,12 -> PENDING (待处理)
4 -> DEPARTING (出发中)
5,14 -> ARRIVED (已到达)
6 -> IN_PROGRESS (任务中)
7 -> RETURNING (返程中)
8,9 -> COMPLETED (已完成)
10,13 -> CANCELLED (已取消)

详细说明见: com.ruoyi.system.utils.TaskStatusConverter
*/

-- ==========================================
-- 手动触发测试
-- ==========================================
/*
-- 在定时任务管理页面手动执行一次任务，或者在代码中调用:
-- legacySystemSyncTask.syncTaskStatusFromLegacy()

-- 查看同步日志（需要查看应用日志文件）
*/
