本功能实现了从旧系统(SQL Server)同步转运单信息到新系统(MySQL)的功能。通过定时任务或手动触发的方式,将旧系统中的转运单数据转换为新系统的任务数据。
定义了转运单同步的核心方法:
- syncLegacyTransferOrders(int daysAgo) - 同步指定天数前的转运单数据
- syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID) - 同步单个转运单
- isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) - 检查转运单是否已同步
- buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) - 构造任务创建对象
实现了转运单同步的具体逻辑:
- 从SQL Server查询转运单数据
- 转换数据格式为TaskCreateVO对象
- 调用sysTaskService创建新任务
- 记录同步状态和日志
提供了访问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) - 查询科室名称
提供了定时执行转运单同步的调度任务:
- syncTransferOrders7Days() - 同步7天前的转运单数据
- syncTransferOrders(String daysAgo) - 同步指定天数前的转运单数据
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| ServiceOrdID | legacy_service_ord_id | 服务单ID |
| DispatchOrdID | legacy_dispatch_ord_id | 调度单ID |
| ServiceOrdClass | documentTypeId | 单据类型ID |
| ServiceOrdType | taskTypeId | 任务类型ID |
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| ServiceOrdPtName | patient.name | 患者姓名 |
| ServiceOrdCoPhone | patient.phone | 联系人电话 |
| ServiceOrdPtIDCard | patient.idCard | 患者身份证号 |
| ServiceOrdPtCondition | patient.condition | 患者病情描述 |
| ServiceOrdCoName | patient.contact | 联系人姓名 |
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| ServiceOrdPtOutHospID | hospitalOut.id | 转出医院ID |
| ServiceOrdPtServicesID | hospitalOut.departmentId | 转出医院科室ID |
| ServiceOrdPtInHospID | hospitalIn.id | 转入医院ID |
| ServiceOrdPtInServicesID | hospitalIn.departmentId | 转入医院科室ID |
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| ServiceOrdTraStreet | departureAddress | 出发地址 |
| ServiceOrdTraEnd | destinationAddress | 目的地址 |
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| DispatchOrdStartDate | plannedStartTime | 计划开始时间 |
| DispatchOrd_NS_Time | createTime | 创建时间 |
| 旧系统字段 | 新系统字段 | 说明 |
|---|---|---|
| ServiceOrdTraTxnPrice | price | 成交价 |
| ServiceOrdCoTies | remark | 联系人关系(备注中) |
执行人角色根据EntourageState字段映射:
- 1,2 → driver(司机)
- 3,5 → doctor(医生)
- 4,6 → nurse(护士)
- 其他 → other(其他)
配置定时任务自动执行转运单同步:
1. 进入「系统监控」→「定时任务」
2. 添加新任务:
- 任务名称:旧系统转运单同步
- 任务组名:DEFAULT
- 调用目标:legacyTransferSyncTask.syncTransferOrders7Days()
- cron表达式:0 0 2 * * ?(每天凌晨2点执行)
- 并发控制:禁止并发
- 错过策略:放弃执行
@Autowired
private ILegacyTransferSyncService legacyTransferSyncService;
// 同步7天前的转运单数据
int successCount = legacyTransferSyncService.syncLegacyTransferOrders(7);
// 同步指定的服务单和调度单
boolean success = legacyTransferSyncService.syncSingleTransferOrder("12345", "67890");
-- 查询转运单同步结果
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 '%从旧系统同步的转运单%';
# 查看应用日志
tail -f logs/sys-info.log | grep "转运单同步"
如果同步失败,需要检查:
1. SQL Server连接是否正常
2. 数据格式是否正确
3. 新系统字段是否匹配
4. 定时任务日志中的详细错误信息