本功能实现了新系统的急救转运任务自动同步到旧ASP系统的能力。主要包括:
mysql -u root -p ruoyi < sql/add_legacy_system_id.sql
该脚本会在 sys_task_emergency 表中添加以下字段:
- legacy_service_ord_id: 旧系统ServiceOrdID
- sync_status: 同步状态 (0-未同步, 1-同步中, 2-同步成功, 3-同步失败)
- sync_time: 同步时间
- sync_error_msg: 同步错误信息
在 sys_task 表中添加:
- legacy_synced: 旧系统同步标记 (0-未同步, 1-已同步)
application.yml 中添加配置# 旧系统配置
legacy:
system:
# 旧系统基础URL (必须配置)
base-url: http://old-system.example.com
# 急救转运创建接口路径 (默认值,可不配置)
emergency-create-path: /admin_save_19.gds
# 连接超时时间(毫秒) (默认30秒)
connect-timeout: 30000
# 读取超时时间(毫秒) (默认30秒)
read-timeout: 30000
# 是否启用同步 (true=启用, false=禁用)
enabled: true
# 字符编码 (默认UTF-8)
charset: UTF-8
开发环境 (application-dev.yml):yaml legacy: system: base-url: http://192.168.1.100:8080 enabled: true
生产环境 (application-prod.yml):yaml legacy: system: base-url: http://legacy.yourdomain.com enabled: true
测试环境 (禁用同步):yaml legacy: system: enabled: false
访问: 系统管理 -> 定时任务 -> 新增
填写以下信息:
| 字段 | 值 |
|---|---|
| 任务名称 | 旧系统任务同步 |
| 任务组名 | DEFAULT |
| 调用目标字符串 | legacySystemSyncTask.syncPendingTasks() |
| cron表达式 | 0 0/10 * * * ? (每10分钟执行一次) |
| 执行策略 | 立即执行 |
| 是否并发 | 否 |
| 状态 | 正常 |
| 说明 | cron表达式 |
|---|---|
| 每5分钟 | 0 0/5 * * * ? |
| 每10分钟 | 0 0/10 * * * ? |
| 每30分钟 | 0 0/30 * * * ? |
| 每小时 | 0 0 * * * ? |
| 每天凌晨2点 | 0 0 2 * * ? |
创建急救转运任务
↓
保存到数据库
↓
异步调用旧系统接口 (2秒延迟)
↓
更新sync_status状态
↓
保存返回的ServiceOrdID
定时任务触发
↓
查询未同步/同步失败的任务 (sync_status = 0 or 3)
↓
逐个调用旧系统接口 (间隔1秒)
↓
更新同步状态
↓
记录日志
| sync_status | 说明 | 处理方式 |
|---|---|---|
| 0 | 未同步 | 等待自动同步或定时任务处理 |
| 1 | 同步中 | 正在调用旧系统接口 |
| 2 | 同步成功 | 已获得ServiceOrdID,不再重复同步 |
| 3 | 同步失败 | 记录错误信息,等待定时任务重试 |
| 新系统字段 | 旧系统字段 | 说明 |
|---|
| taskId | - | 新系统任务ID |
| patientName | ServiceOrdPtName | 患者姓名 |
| patientContact | ServiceOrdCoName | 联系人姓名 |
| patientPhone | ServiceOrdCoPhone | 联系人电话 |
| patientGender | ServiceOrdPtSex | 患者性别 (0=男, 1=女) |
| patientIdCard | ServiceOrdPtIDCard | 患者身份证 |
| patientCondition | ServiceOrdPtCondition | 病情描述 |
| hospitalOutName | ServiceOrdPtOutHosp | 转出医院 |
| hospitalOutDepartment | ServiceOrdPtServices | 转出科室 |
| hospitalOutAddress | ServiceOrdTraStreet | 出发地址 |
| hospitalInName | ServiceOrdPtInHosp | 转入医院 |
| hospitalInDepartment | ServiceOrdPtInServices | 转入科室 |
| hospitalInAddress | ServiceOrdTraEnd | 目的地址 |
| transferDistance | ServiceOrdTraDistance | 转运距离 |
| transferPrice | ServiceOrdTraTxnPrice | 成交价 |
| taskDescription | ServiceOrdTaskRemarks | 任务备注 |
| plannedStartTime | ServiceOrdApptDate | 预约时间 |
| 旧系统字段 | 固定值 | 说明 |
|---|---|---|
| ServiceOrdClass | JJ | 急救类型 |
| ServiceOrdState | 2 | 正式单 |
| ServiceOrdSource | 10 | 订单来源(新系统) |
| ServiceOrdAreaType | 1 | 服务区域 |
| ServiceOrdType | 1 | 服务类型 |
| OrderLevel | 2 | 查看等级 |
-- 查看所有任务的同步状态
SELECT
t.task_id,
t.task_code,
e.sync_status,
e.legacy_service_ord_id,
e.sync_time,
e.sync_error_msg
FROM sys_task t
LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id
WHERE t.task_type = 'EMERGENCY_TRANSFER'
ORDER BY t.create_time DESC;
-- 统计同步状态
SELECT
sync_status,
CASE sync_status
WHEN 0 THEN '未同步'
WHEN 1 THEN '同步中'
WHEN 2 THEN '同步成功'
WHEN 3 THEN '同步失败'
END AS status_name,
COUNT(*) AS count
FROM sys_task_emergency
GROUP BY sync_status;
-- 查看同步失败的任务
SELECT
t.task_id,
t.task_code,
e.sync_error_msg,
e.sync_time
FROM sys_task t
JOIN sys_task_emergency e ON t.task_id = e.task_id
WHERE e.sync_status = 3
ORDER BY e.sync_time DESC;
logs/sys-info.loglogs/sys-error.log关键日志标识: [LegacySystemSyncServiceImpl] 任务同步成功 [LegacySystemSyncServiceImpl] 任务同步失败 [LegacySystemSyncTask] 旧系统任务同步完成
可能原因:
- 自动同步线程异常
- 定时任务未启动
- 配置的 enabled 为 false
解决方案:
1. 检查配置: legacy.system.enabled = true
2. 检查定时任务状态是否为"正常"
3. 手动触发定时任务: 在定时任务列表中点击"执行一次"
4. 查看应用日志是否有异常
可能原因:
- 旧系统URL配置错误
- 网络不通
- 旧系统接口异常
- 数据验证失败
解决方案:
1. 查看 sync_error_msg 字段的错误信息
2. 检查旧系统URL是否正确: legacy.system.base-url
3. 测试网络连接: curl http://旧系统地址/admin_save_19.gds
4. 查看旧系统日志
5. 手动重新同步: 将 sync_status 改为 0,等待定时任务重试
防止机制:
- 已同步成功的任务 (sync_status = 2) 不会再次同步
- 有 legacy_service_ord_id 的任务会跳过
手动重新同步方法:sql -- 重置同步状态(谨慎操作) UPDATE sys_task_emergency SET sync_status = 0, legacy_service_ord_id = NULL, sync_error_msg = NULL WHERE task_id = <任务ID>;
根据网络情况调整超时时间:
- 局域网: 10-15秒
- 互联网: 30-60秒
建议配置以下监控:
- 同步失败率超过20%时告警
- 连续3次同步全部失败时告警
- 未同步任务累积超过50个时告警
如遇到问题,请提供以下信息:
1. 任务ID
2. sync_error_msg 内容
3. 相关日志截图
4. 旧系统返回内容
技术支持: 系统管理员