编辑 | blame | 历史 | 原始文档

旧系统转运单同步功能说明

一、功能概述

本功能实现了从旧系统(SQL Server)同步转运单信息到新系统(MySQL)的功能。通过定时任务或手动触发的方式,将旧系统中的转运单数据转换为新系统的任务数据。

二、核心组件

1. ILegacyTransferSyncService 接口

定义了转运单同步的核心方法:
- syncLegacyTransferOrders(int daysAgo) - 同步指定天数前的转运单数据
- syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID) - 同步单个转运单
- isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) - 检查转运单是否已同步
- buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> 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. 手动同步

同步指定天数前的数据

@Autowired
private ILegacyTransferSyncService legacyTransferSyncService;

// 同步7天前的转运单数据
int successCount = legacyTransferSyncService.syncLegacyTransferOrders(7);

同步单个转运单

// 同步指定的服务单和调度单
boolean success = legacyTransferSyncService.syncSingleTransferOrder("12345", "67890");

3. 查看同步结果

-- 查询转运单同步结果
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. 日志查看

# 查看应用日志
tail -f logs/sys-info.log | grep "转运单同步"

3. 错误处理

如果同步失败,需要检查:
1. SQL Server连接是否正常
2. 数据格式是否正确
3. 新系统字段是否匹配
4. 定时任务日志中的详细错误信息

七、注意事项

  1. 建议在业务低峰期执行同步任务(如凌晨2点)
  2. 可根据实际需求调整同步天数(如改为3天或14天)
  3. 定期检查同步失败的任务并处理
  4. 可通过修改定时任务状态临时禁用同步任务