wlzboy
4 天以前 cfe0b79fbea0fb1d7a5a796e71ada7d3b7812046
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
-- ==========================================
-- 任务附件同步定时任务配置脚本
-- ==========================================
-- 
-- 功能说明:
-- 将已同步调度单的任务附件同步到旧系统ImageData表
-- 
-- 使用场景:
-- 1. 新系统上传了任务附件
-- 2. 任务的调度单已成功同步到旧系统
-- 3. 附件需要同步到旧系统以便旧系统查看
-- 
-- 同步条件:
-- 1. 任务类型为急救转运 (task_type = 'EMERGENCY_TRANSFER')
-- 2. 调度单已同步成功 (dispatch_sync_status = 2)
-- 3. 有调度单ID和服务单ID (legacy_dispatch_ord_id IS NOT NULL AND legacy_service_ord_id IS NOT NULL)
-- 4. 附件未同步 (synced_to_image_data = 0 OR synced_to_image_data IS NULL)
-- 
-- 执行频率建议:
-- - 生产环境: 每5分钟执行一次 (0 0/5 * * * ?)
-- - 测试环境: 每2分钟执行一次 (0 0/2 * * * ?)
-- 
-- 注意事项:
-- 1. 依赖调度单同步完成
-- 2. 会上传文件并生成缩略图
-- 3. 附件分类映射见TaskAttachmentSyncServiceImpl类
-- ==========================================
 
-- 插入定时任务配置
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.syncPendingAttachments()',
    '0 0/5 * * * ?',
    '2',
    '1',
    '0',
    'admin',
    NOW(),
    'admin',
    NOW(),
    '将已同步调度单的任务附件同步到旧系统ImageData表,每5分钟执行一次。同步条件:调度单已同步、附件未同步、有服务单和调度单ID。'
);
 
-- ==========================================
-- 验证查询
-- ==========================================
 
-- 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_attachments,
    SUM(CASE WHEN a.attachment_category = '1' THEN 1 ELSE 0 END) AS consent_form,
    SUM(CASE WHEN a.attachment_category = '2' THEN 1 ELSE 0 END) AS patient_data,
    SUM(CASE WHEN a.attachment_category = '3' THEN 1 ELSE 0 END) AS operation_record,
    SUM(CASE WHEN a.attachment_category = '4' THEN 1 ELSE 0 END) AS before_departure,
    SUM(CASE WHEN a.attachment_category = '5' THEN 1 ELSE 0 END) AS after_departure,
    SUM(CASE WHEN a.attachment_category = '6' THEN 1 ELSE 0 END) AS seat_belt
FROM sys_task_attachment a
INNER JOIN sys_task t ON a.task_id = t.task_id
INNER JOIN sys_task_emergency e ON t.task_id = e.task_id
WHERE t.task_type = 'EMERGENCY_TRANSFER'
  AND e.dispatch_sync_status = 2
  AND e.legacy_dispatch_ord_id IS NOT NULL
  AND e.legacy_service_ord_id IS NOT NULL
  AND (a.synced_to_image_data = 0 OR a.synced_to_image_data IS NULL);
 
-- 3. 查看待同步附件详情(最近10条)
SELECT 
    a.attachment_id,
    t.task_code,
    a.file_name,
    CASE a.attachment_category
        WHEN '1' THEN '知情同意书'
        WHEN '2' THEN '病人资料'
        WHEN '3' THEN '操作记录'
        WHEN '4' THEN '出车前'
        WHEN '5' THEN '出车后'
        WHEN '6' THEN '系安全带'
        ELSE '未分类'
    END AS category_name,
    e.legacy_service_ord_id,
    e.legacy_dispatch_ord_id,
    a.upload_time,
    a.synced_to_image_data,
    a.sync_time
FROM sys_task_attachment a
INNER JOIN sys_task t ON a.task_id = t.task_id
INNER JOIN sys_task_emergency e ON t.task_id = e.task_id
WHERE t.task_type = 'EMERGENCY_TRANSFER'
  AND e.dispatch_sync_status = 2
  AND e.legacy_dispatch_ord_id IS NOT NULL
  AND e.legacy_service_ord_id IS NOT NULL
  AND (a.synced_to_image_data = 0 OR a.synced_to_image_data IS NULL)
ORDER BY a.upload_time DESC
LIMIT 10;
 
-- 4. 查看已同步附件统计
SELECT 
    COUNT(*) AS synced_attachments,
    MIN(a.sync_time) AS first_sync_time,
    MAX(a.sync_time) AS last_sync_time
FROM sys_task_attachment a
WHERE a.synced_to_image_data = 1
  AND a.sync_time IS NOT NULL;
 
-- 5. 按任务统计待同步附件
SELECT 
    t.task_id,
    t.task_code,
    e.legacy_service_ord_id,
    e.legacy_dispatch_ord_id,
    COUNT(a.attachment_id) AS attachment_count,
    GROUP_CONCAT(
        CASE a.attachment_category
            WHEN '1' THEN '知情同意书'
            WHEN '2' THEN '病人资料'
            WHEN '3' THEN '操作记录'
            WHEN '4' THEN '出车前'
            WHEN '5' THEN '出车后'
            WHEN '6' THEN '系安全带'
        END 
        SEPARATOR ', '
    ) AS categories
FROM sys_task t
INNER JOIN sys_task_emergency e ON t.task_id = e.task_id
INNER JOIN sys_task_attachment a ON t.task_id = a.task_id
WHERE t.task_type = 'EMERGENCY_TRANSFER'
  AND e.dispatch_sync_status = 2
  AND e.legacy_dispatch_ord_id IS NOT NULL
  AND e.legacy_service_ord_id IS NOT NULL
  AND (a.synced_to_image_data = 0 OR a.synced_to_image_data IS NULL)
GROUP BY t.task_id, t.task_code, e.legacy_service_ord_id, e.legacy_dispatch_ord_id
ORDER BY attachment_count DESC;
 
-- ==========================================
-- 附件分类映射规则参考
-- ==========================================
/*
附件分类 -> ImageData类型:
1-知情同意书 -> ImageType: 1
2-病人资料 -> ImageType: 2
3-操作记录 -> ImageType: 3
4-出车前 -> ImageType: 4
5-出车后 -> ImageType: 5
6-系安全带 -> ImageType: 6
 
详细说明见: com.ruoyi.system.service.impl.TaskAttachmentSyncServiceImpl.getImageTypeByCategory()
*/
 
-- ==========================================
-- 同步流程说明
-- ==========================================
/*
1. 查询待同步附件列表(符合条件的附件)
2. 按任务分组,获取服务单ID、调度单ID、创建人OA用户ID
3. 读取本地附件文件
4. 上传到文件服务器并生成缩略图
5. 将附件信息写入旧系统ImageData表
   - DOrdIDDt: 调度单ID
   - SOrdIDDt: 服务单ID
   - ImageType: 附件分类对应的类型
   - ImageUrl: 原图路径
   - ImageUrls: 缩略图路径
   - UpImageTime: 上传时间
   - UpImageOAid: 上传者OA用户ID
6. 更新附件同步状态
   - synced_to_image_data = 1
   - sync_time = 当前时间
   - image_data_id = ImageData表ID
*/
 
-- ==========================================
-- 手动触发测试
-- ==========================================
/*
-- 在定时任务管理页面手动执行一次任务,或者在代码中调用:
-- legacySystemSyncTask.syncPendingAttachments()
 
-- 查看同步日志(需要查看应用日志文件)
*/
 
-- ==========================================
-- 故障排查SQL
-- ==========================================
 
-- 查看同步失败的附件(如果有错误记录)
SELECT 
    a.attachment_id,
    t.task_code,
    a.file_name,
    a.file_path,
    a.upload_time,
    a.synced_to_image_data,
    a.sync_time
FROM sys_task_attachment a
INNER JOIN sys_task t ON a.task_id = t.task_id
WHERE a.synced_to_image_data = 0
  AND a.upload_time < DATE_SUB(NOW(), INTERVAL 1 HOUR)
ORDER BY a.upload_time DESC;
 
-- 查看某个任务的所有附件同步状态
-- SELECT 
--     a.attachment_id,
--     a.file_name,
--     a.attachment_category,
--     a.synced_to_image_data,
--     a.sync_time,
--     a.image_data_id
-- FROM sys_task_attachment a
-- WHERE a.task_id = ? -- 替换为具体的任务ID
-- ORDER BY a.upload_time DESC;