| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import com.ruoyi.system.domain.*; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.task.ITaskAttachmentService; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.system.domain.SysTask; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.domain.SysTaskVehicle; |
| | | import com.ruoyi.system.domain.SysTaskAssignee; |
| | | import com.ruoyi.system.domain.VehicleInfo; |
| | | import com.ruoyi.system.domain.vo.TaskCreateVO; |
| | | import com.ruoyi.system.mapper.SysTaskMapper; |
| | | import com.ruoyi.system.mapper.SysTaskEmergencyMapper; |
| | |
| | | import com.ruoyi.system.mapper.VehicleInfoMapper; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.ruoyi.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.system.service.ILegacySystemSyncService; |
| | | import com.ruoyi.system.utils.TaskStatusConverter; |
| | | |
| | | /** |
| | | * 旧系统同步Service业务层处理 |
| | |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | @Autowired |
| | | private SysTaskEmergencyMapper sysTaskEmergencyMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private VehicleInfoMapper vehicleInfoMapper; |
| | | |
| | | @Autowired |
| | | private IDispatchOrdService dispatchOrdService; |
| | | |
| | | @Autowired |
| | | private ISysTaskEmergencyService sysTaskEmergencyService; |
| | | |
| | | @Autowired |
| | | private ITaskAttachmentSyncService taskAttachmentSyncService; |
| | | |
| | | @Autowired |
| | | private ISysTaskService sysTaskService; |
| | | |
| | | @Autowired |
| | | private ITaskAttachmentService taskAttachmentService; |
| | | |
| | | /** |
| | | * 同步急救转运任务到旧系统 |
| | |
| | | } |
| | | |
| | | // 查询急救转运扩展信息 |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("急救转运扩展信息不存在,任务ID: {}", taskId); |
| | | return null; |
| | |
| | | |
| | | // 更新同步状态为同步中 |
| | | emergency.setSyncStatus(1); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | // 构建请求参数 |
| | | Map<String, String> params = buildSyncParams(task, emergency); |
| | |
| | | emergency.setSyncStatus(2); // 同步成功 |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | // 更新任务主表同步标记 |
| | | task.setLegacySynced(1); |
| | |
| | | emergency.setSyncStatus(3); // 同步失败 |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg("旧系统返回无效的ServiceOrdID: " + response); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | log.error("任务同步失败,任务ID: {}, 响应: {}", taskId, response); |
| | | return null; |
| | |
| | | |
| | | // 更新同步状态为失败 |
| | | try { |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setSyncStatus(3); // 同步失败 |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg("同步异常: " + e.getMessage()); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("更新同步状态失败", ex); |
| | |
| | | |
| | | /** |
| | | * 批量同步未同步的急救转运任务 |
| | | * 使用分页查询,确保所有符合条件的任务都能被同步 |
| | | */ |
| | | @Override |
| | | public int batchSyncPendingTasks() { |
| | |
| | | } |
| | | |
| | | try { |
| | | // 查询未同步的急救转运任务(同步状态为0或3的任务) |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingSyncTasks(); |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 100; // 每页100条 |
| | | int offset = 0; |
| | | |
| | | int successCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId()); |
| | | if (serviceOrdId != null && serviceOrdId > 0) { |
| | | successCount++; |
| | | while (true) { |
| | | // 分页查询未同步的急救转运任务(同步状态为0或3的任务) |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingSyncTasks(offset, pageSize); |
| | | |
| | | if (pendingTasks == null || pendingTasks.isEmpty()) { |
| | | log.info("没有更多需要同步的任务,offset: {}", offset); |
| | | break; // 没有更多数据,退出循环 |
| | | } |
| | | |
| | | // 避免过于频繁的请求 |
| | | try { |
| | | Thread.sleep(1000); // 每个请求间隔1秒 |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.info("开始同步第 {} 页,任务数量: {}", (offset / pageSize) + 1, pendingTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId()); |
| | | if (serviceOrdId != null && serviceOrdId > 0) { |
| | | pageSuccessCount++; |
| | | } |
| | | |
| | | // 避免过于频繁的请求 |
| | | try { |
| | | Thread.sleep(1000); // 每个请求间隔1秒 |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("同步被中断"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("第 {} 页同步完成,总数: {}, 成功: {}", |
| | | (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount); |
| | | |
| | | // 如果本页数据少于每页大小,说明已经是最后一页 |
| | | if (pendingTasks.size() < pageSize) { |
| | | log.info("已到达最后一页,同步结束"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // 下一页 |
| | | } |
| | | |
| | | log.info("批量同步完成,总数: {}, 成功: {}", pendingTasks.size(), successCount); |
| | | return successCount; |
| | | log.info("批量同步完成,总成功数: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("批量同步任务异常", e); |
| | |
| | | public boolean retrySyncTask(Long taskId) { |
| | | try { |
| | | // 重置同步状态 |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setSyncStatus(0); // 重置为未同步 |
| | | emergency.setLegacyServiceOrdId(null); |
| | | emergency.setSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | |
| | | // 重新同步 |
| | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 同步任务附件到旧系统 |
| | | * @param taskAttachments |
| | | * @param serviceOrdId |
| | | * @param dispatchOrdId |
| | | * @param oaUserID |
| | | */ |
| | | public void syncAttachmentToLegacy(List<SysTaskAttachment> taskAttachments, Long serviceOrdId,Long dispatchOrdId,Integer oaUserID) { |
| | | taskAttachments.forEach((taskAttachment)->{ |
| | | Long imageDataId= taskAttachmentSyncService.syncAttachmentToImageData(taskAttachment,serviceOrdId,dispatchOrdId,oaUserID); |
| | | if (imageDataId != null && imageDataId > 0) { |
| | | |
| | | taskAttachment.setSyncedToImageData(1); |
| | | taskAttachment.setSyncTime(new Date()); |
| | | taskAttachment.setImageDataId(imageDataId); |
| | | taskAttachmentService.updateAttachment(taskAttachment); |
| | | } |
| | | }); |
| | | } |
| | | /** |
| | | * 同步调度单到旧系统(admin_save_24.asp) |
| | | */ |
| | |
| | | } |
| | | |
| | | // 查询急救转运扩展信息 |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("急救转运扩展信息不存在,任务ID: {}", taskId); |
| | | return null; |
| | |
| | | log.info("调度单已同步过,任务ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId()); |
| | | return emergency.getLegacyDispatchOrdId(); |
| | | } |
| | | |
| | | |
| | | Long serviceOrdId=emergency.getLegacyServiceOrdId(); |
| | | // 必须先同步服务单 |
| | | if (emergency.getLegacyServiceOrdId() == null || emergency.getLegacyServiceOrdId() <= 0) { |
| | | if (serviceOrdId == null || serviceOrdId <= 0) { |
| | | log.warn("服务单未同步,无法同步调度单,任务ID: {}", taskId); |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // 更新同步状态为同步中 |
| | | emergency.setDispatchSyncStatus(1); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | SysUser u=sysUserMapper.selectUserById(task.getCreatorId()); |
| | | Integer oaUserID= u.getOaUserId(); |
| | | |
| | | // 构建请求参数 |
| | | Map<String, String> params = buildDispatchOrderParams(task, emergency); |
| | |
| | | emergency.setDispatchSyncStatus(2); // 同步成功 |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId); |
| | | if (taskAttachments != null && !taskAttachments.isEmpty()) { |
| | | //同步附件 |
| | | this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID); |
| | | } |
| | | |
| | | log.info("调度单同步成功,任务ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId); |
| | | return dispatchOrdId; |
| | | } else { |
| | |
| | | emergency.setDispatchSyncStatus(3); // 同步失败 |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg("旧系统返回无效的DispatchOrdID: " + response); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | log.error("调度单同步失败,任务ID: {}, 响应: {}", taskId, response); |
| | | return null; |
| | |
| | | |
| | | // 更新同步状态为失败 |
| | | try { |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setDispatchSyncStatus(3); // 同步失败 |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg("同步异常: " + e.getMessage()); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("更新调度单同步状态失败", ex); |
| | |
| | | |
| | | /** |
| | | * 批量同步未同步的调度单 |
| | | * 使用分页查询,确保所有符合条件的任务都能被同步 |
| | | */ |
| | | @Override |
| | | public int batchSyncPendingDispatchOrders() { |
| | |
| | | } |
| | | |
| | | try { |
| | | // 查询已同步服务单但未同步调度单的任务 |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingDispatchSyncTasks(); |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 100; // 每页100条 |
| | | int offset = 0; |
| | | |
| | | int successCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId()); |
| | | if (dispatchOrdId != null && dispatchOrdId > 0) { |
| | | successCount++; |
| | | while (true) { |
| | | // 分页查询已同步服务单但未同步调度单的任务 |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize); |
| | | log.info("查询到未同步调度单的任务数量: {}", pendingTasks.size()); |
| | | if (pendingTasks == null || pendingTasks.isEmpty()) { |
| | | log.info("没有更多需要同步调度单的任务,offset: {}", offset); |
| | | break; // 没有更多数据,退出循环 |
| | | } |
| | | |
| | | // 避免过于频繁的请求 |
| | | try { |
| | | Thread.sleep(1000); // 每个请求间隔1秒 |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.info("开始同步调度单第 {} 页,任务数量: {}", (offset / pageSize) + 1, pendingTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | log.info("开始同步调度单,任务ID: {}", emergency.getTaskId()); |
| | | Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId()); |
| | | |
| | | if (dispatchOrdId != null && dispatchOrdId > 0) { |
| | | pageSuccessCount++; |
| | | } |
| | | |
| | | // 避免过于频繁的请求 |
| | | try { |
| | | Thread.sleep(1000); // 每个请求间隔1秒 |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("同步调度单被中断"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("调度单第 {} 页同步完成,总数: {}, 成功: {}", |
| | | (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount); |
| | | |
| | | // 如果本页数据少于每页大小,说明已经是最后一页 |
| | | if (pendingTasks.size() < pageSize) { |
| | | log.info("已到达最后一页,调度单同步结束"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // 下一页 |
| | | } |
| | | |
| | | log.info("批量同步调度单完成,总数: {}, 成功: {}", pendingTasks.size(), successCount); |
| | | return successCount; |
| | | log.info("批量同步调度单完成,总成功数: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("批量同步调度单异常", e); |
| | |
| | | // 基本信息 |
| | | params.put("DispatchOrdClass", dispatchOrdClass); |
| | | params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString()); |
| | | params.put("DispatchOrdState", "8"); // 调度单状态 |
| | | params.put("DispatchOrdState", "1"); // 调度单状态 |
| | | |
| | | // 时间信息 |
| | | if (task.getPlannedStartTime() != null) { |
| | |
| | | params.put("ServiceOrdEstimatedOrderDateOld", ""); // 原预计派单时间 |
| | | params.put("ServiceOrdViaDistance", "0"); // 中途距离 |
| | | params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // 距离 |
| | | params.put("OrderLevel", "2"); // 查看等级 |
| | | params.put("OrderLevel", "0"); // 查看等级 |
| | | params.put("ServiceOrdDepartureType", "1"); // 预约类型 |
| | | params.put("ConditionLevel", "0"); // 病重级别 |
| | | params.put("DirectionType", "0"); // 转运去向 |
| | |
| | | params.put("ServiceOrdOperationRemarks", "新系统同步创建"); // 操作备注 |
| | | params.put("ServiceOrdEstimatedOrderDate", ""); // 预计派单时间 |
| | | params.put("ServiceOrdSource", "10"); // 订单来源(10=新系统) |
| | | params.put("OrderLevel", "2"); // 查看等级 |
| | | params.put("OrderLevel", "0"); // 查看等级 |
| | | params.put("ServiceOrdDepartureType", "1"); // 预约类型 |
| | | params.put("ConditionLevel", "0"); // 病重级别 |
| | | params.put("DirectionType", "0"); // 转运去向 |