实现了新系统的急救转运任务自动同步到旧ASP系统(admin_save_19.gds)的完整功能,包括:
- ✅ 任务创建后自动异步同步到旧系统
- ✅ 定时任务批量同步未同步成功的任务
- ✅ 完整的同步状态跟踪和错误记录
- ✅ 手动重试失败任务的能力
sql/add_legacy_system_id.sqlsys_task_emergency 表添加旧系统ID字段sys_task 表添加同步标记字段ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.javaapplication.yml 读取配置ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.javasyncEmergencyTaskToLegacy() - 同步单个任务batchSyncPendingTasks() - 批量同步retrySyncTask() - 重试失败任务ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.javaruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.javasyncPendingTasks() - 批量同步待处理任务syncTask(taskId) - 同步指定任务ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java添加字段:
- legacyServiceOrdId - 旧系统ServiceOrdID
- syncStatus - 同步状态
- syncTime - 同步时间
- syncErrorMsg - 同步错误信息
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java添加字段:
- legacySynced - 旧系统同步标记
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java添加方法:
- selectPendingSyncTasks() - 查询待同步任务列表
ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xmlselectPendingSyncTasks 查询ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xmllegacy_synced 字段映射ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.javaILegacySystemSyncServiceruoyi-admin/src/main/resources/application-legacy.ymlprd/旧系统同步配置说明.mdprd/旧系统同步-快速开始.mdprd/旧系统同步功能实现总结.mdprd/旧系统同步参数映射表.md┌─────────────────┐
│ 创建急救任务 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 保存到数据库 │
│ (sync_status=0) │
└────────┬────────┘
│
├────────────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌──────────────┐
│ 自动异步同步 │ │ 定时任务 │
│ (2秒延迟) │ │ (每10分钟) │
└────────┬────────┘ └──────┬───────┘
│ │
└──────────┬───────────┘
▼
┌─────────────────────┐
│ 调用旧系统API │
│ POST admin_save_19 │
└──────────┬──────────┘
│
┌──────────┴──────────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ 成功 │ │ 失败 │
│ (状态2) │ │ (状态3) │
└────┬────┘ └────┬────┘
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│保存ID │ │记录错误 │
└─────────┘ │等待重试 │
└─────────┘
SysTask (任务主表)
↓ (task_id)
SysTaskEmergency (急救扩展表)
├─ legacy_service_ord_id (旧系统ID)
├─ sync_status (0/1/2/3)
├─ sync_time
└─ sync_error_msg
↓
LegacySystemSyncService
↓ (HTTP POST)
旧系统 admin_save_19.gds
↓ (返回: OK:ServiceOrdID)
更新 legacy_service_ord_id
// 使用 HttpURLConnection 发送POST请求
// 支持自定义超时、编码、表单提交
conn.setRequestMethod("POST");
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
// 创建任务后异步同步,避免阻塞主流程
new Thread(() -> {
Thread.sleep(2000); // 等待事务提交
legacySystemSyncService.syncEmergencyTaskToLegacy(taskId);
}).start();
0 (未同步) → 1 (同步中) → 2 (成功) / 3 (失败)
↓
等待定时任务重试
task.getCreatorId())| 字段名 | 类型 | 说明 |
|---|---|---|
| legacy_service_ord_id | BIGINT | 旧系统ServiceOrdID |
| sync_status | TINYINT | 0-未同步, 1-同步中, 2-成功, 3-失败 |
| sync_time | DATETIME | 同步时间 |
| sync_error_msg | VARCHAR(500) | 错误信息 |
| 字段名 | 类型 | 说明 |
|---|---|---|
| legacy_synced | TINYINT | 0-未同步, 1-已同步 |
-- 加速同步状态查询
ALTER TABLE sys_task_emergency ADD INDEX idx_sync_status (sync_status);
-- 加速旧系统ID查询
ALTER TABLE sys_task_emergency ADD INDEX idx_legacy_service_ord_id (legacy_service_ord_id);
-- 加速主表同步标记查询
ALTER TABLE sys_task ADD INDEX idx_legacy_synced (legacy_synced);
| 配置项 | 必填 | 默认值 | 说明 |
|---|---|---|---|
legacy.system.base-url |
✅ | 无 | 旧系统基础URL |
legacy.system.emergency-create-path |
❌ | /admin_save_19.gds | 接口路径 |
legacy.system.connect-timeout |
❌ | 30000 | 连接超时(毫秒) |
legacy.system.read-timeout |
❌ | 30000 | 读取超时(毫秒) |
legacy.system.enabled |
❌ | true | 是否启用 |
legacy.system.charset |
❌ | UTF-8 | 字符编码 |
@Test
public void testSyncEmergencyTask() {
Long taskId = 123L;
Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(taskId);
assertNotNull(serviceOrdId);
assertTrue(serviceOrdId > 0);
}
-- 今日同步统计
SELECT
COUNT(*) AS 总数,
SUM(CASE WHEN sync_status = 2 THEN 1 ELSE 0 END) AS 成功数,
SUM(CASE WHEN sync_status = 3 THEN 1 ELSE 0 END) AS 失败数,
CONCAT(ROUND(SUM(CASE WHEN sync_status = 2 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2), '%') AS 成功率
FROM sys_task_emergency
WHERE DATE(create_time) = CURDATE();
application-dev.ymlapplication-prod.ymld:\project\急救转运\code\Api\RuoYi-Vue-masterprd/ 目录完成时间: 2025-01-20
版本: v1.0
状态: ✅ 已完成,待测试