-- 旧系统调度单同步定时任务配置SQL -- 在sys_job表中添加定时任务 -- 调度单自动同步到旧系统(必须在服务单同步成功后执行) INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark) VALUES ('旧系统调度单同步', 'DEFAULT', 'legacySystemSyncTask.syncPendingDispatchOrders', '0 0/10 * * * ?', '3', '1', '0', 'admin', sysdate(), '每10分钟自动同步未同步的调度单到旧系统(admin_save_24.asp)。同步条件:服务单已同步成功且调度单未同步。'); -- 说明: -- job_name: 任务名称 - 旧系统调度单同步 -- job_group: 任务组名(DEFAULT为默认组) -- invoke_target: 调用目标字符串(Bean名称.方法名) -- - legacySystemSyncTask.syncPendingDispatchOrders() 批量同步未同步的调度单 -- cron_expression: cron表达式 -- - '0 0/10 * * * ?' = 每10分钟执行一次(推荐) -- - '0 0/5 * * * ?' = 每5分钟执行一次 -- - '0 0/15 * * * ?' = 每15分钟执行一次 -- - '0 0/30 * * * ?' = 每30分钟执行一次 -- misfire_policy: 错过执行策略 -- - 1=立即执行 -- - 2=执行一次 -- - 3=放弃执行(推荐) -- concurrent: 是否并发 -- - 0=允许并发 -- - 1=禁止并发(推荐,避免重复同步) -- status: 状态 -- - 0=正常(启用) -- - 1=暂停(停用) -- create_by: 创建者 -- create_time: 创建时间 -- remark: 备注说明 -- 同步依赖关系: -- 1. 必须先执行服务单同步(legacySystemSyncTask.syncPendingTasks) -- 2. 服务单同步成功后(sync_status = 2, legacy_service_ord_id IS NOT NULL) -- 3. 才能执行调度单同步(syncPendingDispatchOrders) -- 定时任务执行逻辑: -- 1. 查询条件: -- - sync_status = 2(服务单已同步成功) -- - legacy_service_ord_id IS NOT NULL(有ServiceOrdID) -- - dispatch_sync_status IN (0, 3)(调度单未同步或同步失败) -- 2. 逐个调用旧系统接口 admin_save_24.asp -- 3. 每个请求间隔1秒,避免并发过高 -- 4. 更新 dispatch_sync_status 和 legacy_dispatch_ord_id -- 5. 记录错误信息到 dispatch_sync_error_msg 字段 -- 监控查询: -- 查看待同步调度单的任务数: SELECT COUNT(*) AS pending_dispatch_count FROM sys_task_emergency WHERE sync_status = 2 AND legacy_service_ord_id IS NOT NULL AND (dispatch_sync_status = 0 OR dispatch_sync_status = 3); -- 查看今日调度单同步统计: SELECT dispatch_sync_status, CASE dispatch_sync_status WHEN 0 THEN '未同步' WHEN 1 THEN '同步中' WHEN 2 THEN '同步成功' WHEN 3 THEN '同步失败' END AS status_name, COUNT(*) AS count FROM sys_task_emergency WHERE DATE(create_time) = CURDATE() AND legacy_service_ord_id IS NOT NULL GROUP BY dispatch_sync_status; -- 查看同步失败的调度单详情: SELECT task_id, legacy_service_ord_id, dispatch_sync_status, dispatch_sync_time, dispatch_sync_error_msg FROM sys_task_emergency WHERE dispatch_sync_status = 3 ORDER BY id DESC LIMIT 20; -- 完整同步流程统计: SELECT CASE WHEN sync_status != 2 THEN '1.服务单未同步' WHEN legacy_service_ord_id IS NULL THEN '2.服务单ID为空' WHEN dispatch_sync_status = 0 THEN '3.调度单待同步' WHEN dispatch_sync_status = 1 THEN '4.调度单同步中' WHEN dispatch_sync_status = 2 THEN '5.调度单同步成功' WHEN dispatch_sync_status = 3 THEN '6.调度单同步失败' ELSE '7.未知状态' END AS sync_stage, COUNT(*) AS count FROM sys_task_emergency WHERE DATE(create_time) = CURDATE() GROUP BY sync_stage ORDER BY sync_stage; -- 使用建议: -- 1. 调度单同步应在服务单同步任务之后执行(时间错开5分钟) -- 2. 如服务单每10分钟同步,调度单可在每10分钟的第5分钟同步 -- 例如:服务单 '0 0/10 * * * ?',调度单 '0 5/10 * * * ?' -- 3. 生产环境建议每10-15分钟执行一次 -- 4. 可通过修改 legacy.system.enabled=false 临时禁用所有同步功能 -- 错误处理: -- 1. 如果调度单同步失败次数过多,检查: -- - ASP接口 admin_save_24.asp 是否正常 -- - ServiceOrdID 是否有效 -- - 联系人和电话是否缺失 -- 2. 可通过定时任务日志查看详细错误: -- 系统监控 -> 定时任务 -> 调度日志