package com.ruoyi.quartz.task; import com.ruoyi.system.service.ITaskAttachmentSyncService; import com.ruoyi.system.service.IPaymentSyncService; import com.ruoyi.system.service.IAdditionalFeeSyncService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.system.service.ILegacySystemSyncService; import com.ruoyi.system.service.ITaskStatusSyncService; import com.ruoyi.system.service.ITaskStatusPushService; /** * 旧系统同步定时任务 * * @author ruoyi * @date 2024-01-20 * * 相关任务: * 1. LegacySystemSyncTask - 旧系统任务同步(急救转运任务和服务单) * 2. LegacyTransferSyncTask - 旧系统转运单同步(从SQL Server到新系统) * 3. TaskStatusSyncService - 任务状态同步(从旧系统到新系统) * 4. TaskStatusPushService - 任务状态推送(从新系统到旧系统) * 5. TaskAttachmentSyncService - 任务附件同步(从新系统到旧系统) * 6. PaymentSyncService - 支付信息同步(双向同步) * 7. AdditionalFeeSyncService - 附加费用同步(双向同步) */ @Component("legacySystemSyncTask") public class LegacySystemSyncTask { private static final Logger log = LoggerFactory.getLogger(LegacySystemSyncTask.class); @Autowired private ILegacySystemSyncService legacySystemSyncService; @Autowired private ITaskStatusSyncService taskStatusSyncService; @Autowired private ITaskStatusPushService taskStatusPushService; @Autowired private ITaskAttachmentSyncService taskAttachmentSyncService; @Autowired private IPaymentSyncService paymentSyncService; @Autowired private IAdditionalFeeSyncService additionalFeeSyncService; /** * 批量同步未同步的急救转运任务到旧系统 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 旧系统任务同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncPendingTasks() * cron表达式: 0 0/10 * * * ? (每10分钟执行一次) */ public void syncPendingTasks() { log.info("开始执行旧系统任务同步定时任务"); try { int successCount = legacySystemSyncService.batchSyncPendingTasks(); log.info("旧系统任务同步完成,成功同步: {} 个任务", successCount); } catch (Exception e) { log.error("旧系统任务同步异常", e); } } /** * 同步指定任务到旧系统 * * @param taskId 任务ID */ public void syncTask(String taskId) { log.info("开始同步单个任务到旧系统,任务ID: {}", taskId); try { Long id = Long.parseLong(taskId); Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(id); if (serviceOrdId != null && serviceOrdId > 0) { log.info("任务同步成功,任务ID: {}, ServiceOrdID: {}", taskId, serviceOrdId); } else { log.error("任务同步失败,任务ID: {}", taskId); } } catch (Exception e) { log.error("同步任务异常,任务ID: {}", taskId, e); } } /** * 批量同步未同步的调度单到旧系统 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 旧系统调度单同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncPendingDispatchOrders() * cron表达式: 0 0/10 * * * ? (每10分钟执行一次) */ public void syncPendingDispatchOrders() { log.info("开始执行旧系统调度单同步定时任务"); try { int successCount = legacySystemSyncService.batchSyncPendingDispatchOrders(); log.info("旧系统调度单同步完成,成功同步: {} 个任务", successCount); } catch (Exception e) { log.error("旧系统调度单同步异常", e); } } /** * 批量同步任务状态(从旧系统到新系统) * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 任务状态同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncTaskStatusFromLegacy() * cron表达式: 0 0/5 * * * ? (每5分钟执行一次) */ public void syncTaskStatusFromLegacy() { log.info("开始执行任务状态同步定时任务(从旧系统到新系统)"); try { int successCount = taskStatusSyncService.batchSyncTaskStatusFromLegacy(); log.info("任务状态同步完成,成功同步: {} 个任务", successCount); } catch (Exception e) { log.error("任务状态同步异常", e); } } /** * 批量推送任务状态(从新系统到旧系统) * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 任务状态推送 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.pushTaskStatusToLegacy() * cron表达式: 0 0/3 * * * ? (每3分钟执行一次) */ public void pushTaskStatusToLegacy() { log.info("开始执行任务状态推送定时任务(从新系统到旧系统)"); try { int successCount = taskStatusPushService.batchPushTaskStatusToLegacy(); log.info("任务状态推送完成,成功推送: {} 个任务", successCount); } catch (Exception e) { log.error("任务状态推送异常", e); } } /** * 批量同步任务附件到旧系统ImageData表 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 任务附件同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncPendingAttachments() * cron表达式: 0 0/5 * * * ? (每5分钟执行一次) * * 同步条件: * 1. 所属任务的调度单已同步成功 (dispatch_sync_status = 2) * 2. 附件未同步 (synced_to_image_data = 0 或 null) * 3. 有调度单ID和服务单ID */ public void syncPendingAttachments() { // log.info("开始执行任务附件同步定时任务"); try { int successCount = taskAttachmentSyncService.batchSyncPendingAttachments(); // log.info("任务附件同步完成,成功同步: {} 个附件", successCount); } catch (Exception e) { log.error("任务附件同步异常", e); } } /** * 批量同步支付信息到旧系统PaidMoney表 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 支付信息同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncPaymentToLegacy() * cron表达式: 0 0/10 * * * ? (每10分钟执行一次) */ public void syncPaymentToLegacy() { // log.info("开始执行支付信息同步定时任务(新系统 -> 旧系统)"); try { int successCount = paymentSyncService.batchSyncPaymentToLegacy(); // log.info("支付信息同步完成,成功同步: {} 条记录", successCount); } catch (Exception e) { log.error("支付信息同步异常", e); } } /** * 批量同步支付信息从旧系统到新系统 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 支付信息反向同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncPaymentFromLegacy() * cron表达式: 0 0/15 * * * ? (每15分钟执行一次) */ public void syncPaymentFromLegacy() { // log.info("开始执行支付信息同步定时任务(旧系统 -> 新系统)"); try { int successCount = paymentSyncService.batchSyncPaymentFromLegacy(); // log.info("支付信息同步完成,成功同步: {} 条记录", successCount); } catch (Exception e) { log.error("支付信息同步异常", e); } } /** * 批量同步附加费用到旧系统PaidMoney_Add表 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 附加费用同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncAdditionalFeeToLegacy() * cron表达式: 0 0/10 * * * ? (每10分钟执行一次) */ public void syncAdditionalFeeToLegacy() { // log.info("开始执行新系统附加费用同步定时任务(新系统 -> 旧系统)"); try { int successCount = additionalFeeSyncService.batchSyncAdditionalFeeToLegacy(); // log.info("附加费用同步完成,成功同步: {} 条记录", successCount); } catch (Exception e) { log.error("附加费用同步异常", e); } } /** * 批量同步附加费用从旧系统到新系统 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 附加费用反向同步 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.syncAdditionalFeeFromLegacy() * cron表达式: 0 0/15 * * * ? (每15分钟执行一次) */ public void syncAdditionalFeeFromLegacy() { // log.info("开始执行旧系统附加费用同步定时任务(旧系统 -> 新系统)"); try { // 同步最近24小时内的记录 int successCount = additionalFeeSyncService.batchSyncAdditionalFeeFromLegacy(72); // log.info("旧系统附加费用同步完成,成功同步: {} 条记录", successCount); } catch (Exception e) { log.error("附加费用同步异常", e); } } /** * 批量重新同步车辆和人员变更的任务 * * 使用示例: * 在系统管理 -> 定时任务中添加: * 任务名称: 重新同步车辆人员变更 * 任务组名: DEFAULT * 调用目标字符串: legacySystemSyncTask.resyncVehicleAndPersonnel() * cron表达式: 0 0/5 * * * ? (每5分钟执行一次) */ public void resyncVehicleAndPersonnel() { log.info("开始执行重新同步车辆和人员变更的任务定时任务"); try { int successCount = legacySystemSyncService.batchResyncPendingDispatchOrders(); log.info("重新同步车辆和人员变更完成,成功同步: {} 个任务", successCount); } catch (Exception e) { log.error("重新同步车辆和人员变更异常", e); } } }