wlzboy
6 小时以前 5f2ee03958a1a16dc27195c76ea7cffb422c95d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
-- ==========================================
-- 旧系统任务状态同步定时任务配置脚本
-- ==========================================
-- 
-- 功能说明:
-- 从旧系统同步任务状态到新系统,实现状态的实时更新
-- 
-- 使用场景:
-- 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()
 
-- 查看同步日志(需要查看应用日志文件)
*/