| | |
| | | @Transactional |
| | | public boolean pushTaskStatusToLegacy(Long taskId) { |
| | | if (!legacyConfig.isEnabled()) { |
| | | log.info("旧系统同步已禁用,跳过状态推送,任务ID: {}", taskId); |
| | | // log.info("旧系统同步已禁用,跳过状态推送,任务ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | try { |
| | | // 查询任务信息 |
| | | log.debug("【新推旧】查询任务ID: {}", taskId); |
| | | // log.debug("【新推旧】查询任务ID: {}", taskId); |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task == null) { |
| | | log.error("【新推旧】任务不存在,任务ID: {}", taskId); |
| | |
| | | |
| | | // 只推送急救转运任务 |
| | | if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | log.info("非急救转运任务,跳过状态推送,任务ID: {}", taskId); |
| | | // log.info("非急救转运任务,跳过状态推送,任务ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // 转换为旧系统状态码 |
| | | Integer targetStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus); |
| | | if (targetStatusCode == null) { |
| | | log.debug("【新推旧】任务状态不需要推送到旧系统,任务ID: {}, 状态: {}", |
| | | taskId, newTaskStatus.getInfo()); |
| | | // log.debug("【新推旧】任务状态不需要推送到旧系统,任务ID: {}, 状态: {}", |
| | | // taskId, newTaskStatus.getInfo()); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // 判断是否需要更新(包含防止状态倒退的检查) |
| | | // 如果旧系统状态已经 >= 新系统要推送的状态,说明旧系统状态更新,新系统落后,不应该推送 |
| | | if (!TaskStatusPushConverter.shouldUpdateLegacyStatus(targetStatusCode, currentLegacyStatus)) { |
| | | log.info("【新推旧】新系统状态落后或等于旧系统状态,跳过推送,任务ID: {}, 新系统状态: {} ({}→{}), 旧系统状态: {} ({})", |
| | | taskId, |
| | | task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode, |
| | | currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus)); |
| | | // log.info("【新推旧】新系统状态落后或等于旧系统状态,跳过推送,任务ID: {}, 新系统状态: {} ({}→{}), 旧系统状态: {} ({})", |
| | | // taskId, |
| | | // task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode, |
| | | // currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus)); |
| | | return true; // 返回true,因为这不算失败,只是不需要推送 |
| | | } |
| | | |
| | | // 推送状态到旧系统 |
| | | boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode); |
| | | |
| | | if (result) { |
| | | log.info("【新推旧】任务状态推送成功,任务ID: {}, DispatchOrdID: {}, 旧状态: {} ({}), 新状态: {} ({})", |
| | | taskId, emergency.getLegacyDispatchOrdId(), |
| | | currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus), |
| | | targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode)); |
| | | } else { |
| | | if (!result) { |
| | | // log.info("【新推旧】任务状态推送成功,任务ID: {}, DispatchOrdID: {}, 旧状态: {} ({}), 新状态: {} ({})", |
| | | // taskId, emergency.getLegacyDispatchOrdId(), |
| | | // currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus), |
| | | // targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode)); |
| | | // } else { |
| | | log.error("【新推旧】任务状态推送失败,任务ID: {}, DispatchOrdID: {}", |
| | | taskId, emergency.getLegacyDispatchOrdId()); |
| | | } |
| | |
| | | List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize); |
| | | |
| | | if (syncedTasks == null || syncedTasks.isEmpty()) { |
| | | log.info("【新推旧】没有更多需要推送状态的任务,offset: {}", offset); |
| | | // log.info("【新推旧】没有更多需要推送状态的任务,offset: {}", offset); |
| | | break; // 没有更多数据,退出循环 |
| | | } |
| | | |
| | | log.info("【新推旧】开始推送状态第 {} 页,任务数量: {}", (offset / pageSize) + 1, syncedTasks.size()); |
| | | // log.info("【新推旧】开始推送状态第 {} 页,任务数量: {}", (offset / pageSize) + 1, syncedTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : syncedTasks) { |
| | |
| | | Thread.sleep(200); // 每个请求间隔0.2秒 |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("【新推旧】推送状态被中断"); |
| | | // log.warn("【新推旧】推送状态被中断"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("状态第 {} 页推送完成,总数: {}, 成功: {}", |
| | | (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount); |
| | | // log.info("状态第 {} 页推送完成,总数: {}, 成功: {}", |
| | | // (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount); |
| | | |
| | | // 如果本页数据少于每页大小,说明已经是最后一页 |
| | | if (syncedTasks.size() < pageSize) { |
| | | log.info("【新推旧】已到达最后一页,状态推送结束"); |
| | | // log.info("【新推旧】已到达最后一页,状态推送结束"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // 下一页 |
| | | } |
| | | |
| | | log.info("【新推旧】批量推送任务状态完成,总成功数: {}", totalSuccessCount); |
| | | // log.info("【新推旧】批量推送任务状态完成,总成功数: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | |
| | | try { |
| | | // 直接通过Service调用Mapper更新SQL Server数据库 |
| | | int rows = dispatchOrdService.updateDispatchOrdState(dispatchOrdId, statusCode); |
| | | log.debug("更新旧系统状态,DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode); |
| | | // log.debug("更新旧系统状态,DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode); |
| | | if (rows > 0) { |
| | | log.debug("更新旧系统状态成功,DispatchOrdID: {}, StateInt: {}", |
| | | dispatchOrdId, statusCode); |
| | | // log.debug("更新旧系统状态成功,DispatchOrdID: {}, StateInt: {}", |
| | | // dispatchOrdId, statusCode); |
| | | return true; |
| | | } else { |
| | | log.warn("更新旧系统状态失败,未找到对应调度单,DispatchOrdID: {}", dispatchOrdId); |
| | | // log.warn("更新旧系统状态失败,未找到对应调度单,DispatchOrdID: {}", dispatchOrdId); |
| | | return false; |
| | | } |
| | | |