# 旧系统转运单同步功能说明 ## 一、功能概述 本功能实现了从旧系统(SQL Server)同步转运单信息到新系统(MySQL)的功能。通过定时任务或手动触发的方式,将旧系统中的转运单数据转换为新系统的任务数据。 ## 二、核心组件 ### 1. ILegacyTransferSyncService 接口 定义了转运单同步的核心方法: - `syncLegacyTransferOrders(int daysAgo)` - 同步指定天数前的转运单数据 - `syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID)` - 同步单个转运单 - `isTransferOrderSynced(String serviceOrdID, String dispatchOrdID)` - 检查转运单是否已同步 - `buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map order)` - 构造任务创建对象 ### 2. LegacyTransferSyncServiceImpl 实现类 实现了转运单同步的具体逻辑: - 从SQL Server查询转运单数据 - 转换数据格式为TaskCreateVO对象 - 调用sysTaskService创建新任务 - 记录同步状态和日志 ### 3. LegacyTransferSyncMapper 数据访问层 提供了访问SQL Server数据库的Mapper接口: - `selectTransferOrders(String startDate)` - 查询指定日期范围的转运单 - `selectTransferOrdersByIDs(String serviceOrdID, String dispatchOrdID)` - 根据ID查询转运单 - `selectDiseaseIdsByServiceOrdID(String serviceOrdID)` - 查询病情信息 - `selectAssigneesByDispatchOrdID(String dispatchOrdID)` - 查询执行人信息 - `selectCarLicenseByCarID(String carID)` - 查询车辆车牌号 - `selectHospitalNameByHospID(String hospID)` - 查询医院名称 - `selectDepartmentNameByDeptID(String deptID)` - 查询科室名称 ### 4. LegacyTransferSyncTask 定时任务 提供了定时执行转运单同步的调度任务: - `syncTransferOrders7Days()` - 同步7天前的转运单数据 - `syncTransferOrders(String daysAgo)` - 同步指定天数前的转运单数据 ## 三、数据映射关系 ### 1. 基本信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | ServiceOrdID | legacy_service_ord_id | 服务单ID | | DispatchOrdID | legacy_dispatch_ord_id | 调度单ID | | ServiceOrdClass | documentTypeId | 单据类型ID | | ServiceOrdType | taskTypeId | 任务类型ID | ### 2. 患者信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | ServiceOrdPtName | patient.name | 患者姓名 | | ServiceOrdCoPhone | patient.phone | 联系人电话 | | ServiceOrdPtIDCard | patient.idCard | 患者身份证号 | | ServiceOrdPtCondition | patient.condition | 患者病情描述 | | ServiceOrdCoName | patient.contact | 联系人姓名 | ### 3. 医院信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | ServiceOrdPtOutHospID | hospitalOut.id | 转出医院ID | | ServiceOrdPtServicesID | hospitalOut.departmentId | 转出医院科室ID | | ServiceOrdPtInHospID | hospitalIn.id | 转入医院ID | | ServiceOrdPtInServicesID | hospitalIn.departmentId | 转入医院科室ID | ### 4. 地址信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | ServiceOrdTraStreet | departureAddress | 出发地址 | | ServiceOrdTraEnd | destinationAddress | 目的地址 | ### 5. 时间信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | DispatchOrdStartDate | plannedStartTime | 计划开始时间 | | DispatchOrd_NS_Time | createTime | 创建时间 | ### 6. 其他信息映射 | 旧系统字段 | 新系统字段 | 说明 | |------------|------------|------| | ServiceOrdTraTxnPrice | price | 成交价 | | ServiceOrdCoTies | remark | 联系人关系(备注中) | ## 四、执行人信息映射 执行人角色根据EntourageState字段映射: - 1,2 → driver(司机) - 3,5 → doctor(医生) - 4,6 → nurse(护士) - 其他 → other(其他) ## 五、使用说明 ### 1. 自动同步 配置定时任务自动执行转运单同步: 1. 进入「系统监控」→「定时任务」 2. 添加新任务: - 任务名称:旧系统转运单同步 - 任务组名:DEFAULT - 调用目标:`legacyTransferSyncTask.syncTransferOrders7Days()` - cron表达式:`0 0 2 * * ?`(每天凌晨2点执行) - 并发控制:禁止并发 - 错过策略:放弃执行 ### 2. 手动同步 #### 同步指定天数前的数据 ```java @Autowired private ILegacyTransferSyncService legacyTransferSyncService; // 同步7天前的转运单数据 int successCount = legacyTransferSyncService.syncLegacyTransferOrders(7); ``` #### 同步单个转运单 ```java // 同步指定的服务单和调度单 boolean success = legacyTransferSyncService.syncSingleTransferOrder("12345", "67890"); ``` ### 3. 查看同步结果 ```sql -- 查询转运单同步结果 SELECT task_id, task_code, task_description, create_time, e.legacy_service_ord_id, e.legacy_dispatch_ord_id FROM sys_task t LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id WHERE t.task_description LIKE '%从旧系统同步的转运单%' ORDER BY t.create_time DESC; -- 统计同步情况 SELECT COUNT(*) as total_count, SUM(CASE WHEN e.legacy_service_ord_id IS NOT NULL THEN 1 ELSE 0 END) as sync_success_count FROM sys_task t LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id WHERE t.task_description LIKE '%从旧系统同步的转运单%'; ``` ## 六、监控和维护 ### 1. 监控指标 - 同步成功率:成功数 / 总数 * 100% - 同步失败率:失败数 / 总数 * 100% - 平均同步耗时:从创建到同步成功的时间 ### 2. 日志查看 ```bash # 查看应用日志 tail -f logs/sys-info.log | grep "转运单同步" ``` ### 3. 错误处理 如果同步失败,需要检查: 1. SQL Server连接是否正常 2. 数据格式是否正确 3. 新系统字段是否匹配 4. 定时任务日志中的详细错误信息 ## 七、注意事项 1. 建议在业务低峰期执行同步任务(如凌晨2点) 2. 可根据实际需求调整同步天数(如改为3天或14天) 3. 定期检查同步失败的任务并处理 4. 可通过修改定时任务状态临时禁用同步任务