# 旧系统同步状态显示功能说明
## 一、功能概述
在 ruoyi-ui 项目的任务列表和任务详情页面中,新增了旧系统同步状态及相关单号的显示功能,方便管理员实时查看急救转运任务与旧系统的同步情况。
## 二、涉及文件
### 1. 任务列表页面
**文件路径**: `ruoyi-ui/src/views/task/general/index.vue`
**修改内容**:
- 新增 `hasEmergencyTask` 数据属性,用于判断列表中是否包含急救转运任务
- 新增 **同步状态** 列,显示服务单同步状态(未同步、同步中、已同步、同步失败)
- 新增 **服务单号** 列,显示旧系统返回的 ServiceOrdID
- 新增 **调度单号** 列,显示旧系统返回的 DispatchOrdID
- 这些列仅在列表中存在急救转运任务时显示(`v-if="hasEmergencyTask"`)
### 2. 任务详情页面
**文件路径**: `ruoyi-ui/src/views/task/general/detail.vue`
**修改内容**:
- 新增 **旧系统同步信息** 描述列表区域
- 显示服务单同步状态、服务单号、同步时间、同步错误信息
- 显示调度单同步状态、调度单号、同步时间、同步错误信息
- 该区域仅在急救转运任务详情页显示
## 三、同步状态说明
### 同步状态值及含义
| 状态值 | 含义 | 图标颜色 | 显示文本 |
|--------|------|----------|----------|
| 0 | 未同步 | 灰色(info) | 未同步 |
| 1 | 同步中 | 橙色(warning) | 同步中 |
| 2 | 同步成功 | 绿色(success) | 已同步/同步成功 |
| 3 | 同步失败 | 红色(danger) | 同步失败 |
### 服务单同步与调度单同步
**服务单同步** (`syncStatus`):
- 对应旧系统 `admin_save_19.gds` 接口
- 同步成功后返回 `ServiceOrdID`,存储在 `legacy_service_ord_id` 字段
- 由 `LegacySystemSyncTask.syncPendingTasks()` 定时任务执行
**调度单同步** (`dispatchSyncStatus`):
- 对应旧系统 `admin_save_24.asp` 接口
- 同步成功后返回 `DispatchOrdID`,存储在 `legacy_dispatch_ord_id` 字段
- 由 `LegacySystemSyncTask.syncPendingDispatchOrders()` 定时任务执行
- 依赖服务单同步完成后才能执行
## 四、数据来源
### 后端实体类字段
**SysTask 实体** (`sys_task` 表):
- `legacySynced`: 旧系统同步标记(0-未同步,1-已同步)
**SysTaskEmergency 实体** (`sys_task_emergency` 表):
服务单相关:
- `legacyServiceOrdId`: 旧系统服务单ID
- `syncStatus`: 服务单同步状态
- `syncTime`: 服务单同步时间
- `syncErrorMsg`: 服务单同步错误信息
调度单相关:
- `legacyDispatchOrdId`: 旧系统调度单ID
- `dispatchSyncStatus`: 调度单同步状态
- `dispatchSyncTime`: 调度单同步时间
- `dispatchSyncErrorMsg`: 调度单同步错误信息
### 前端数据访问路径
在任务列表中:
```javascript
// 同步状态
scope.row.emergencyInfo.syncStatus
scope.row.emergencyInfo.dispatchSyncStatus
// 单号
scope.row.emergencyInfo.legacyServiceOrdId
scope.row.emergencyInfo.legacyDispatchOrdId
```
在任务详情中:
```javascript
// 服务单同步信息
taskDetail.emergencyInfo.syncStatus
taskDetail.emergencyInfo.legacyServiceOrdId
taskDetail.emergencyInfo.syncTime
taskDetail.emergencyInfo.syncErrorMsg
// 调度单同步信息
taskDetail.emergencyInfo.dispatchSyncStatus
taskDetail.emergencyInfo.legacyDispatchOrdId
taskDetail.emergencyInfo.dispatchSyncTime
taskDetail.emergencyInfo.dispatchSyncErrorMsg
```
## 五、显示逻辑
### 任务列表显示规则
1. **同步状态列、服务单号列、调度单号列**仅在列表中存在急救转运任务时显示
2. 非急救转运任务在这些列中显示 `--`
3. 急救转运任务根据 `emergencyInfo` 字段判断:
- 如果 `emergencyInfo` 为空,显示 `--`
- 如果 `emergencyInfo` 存在,根据对应字段显示具体内容
### 任务详情显示规则
1. **旧系统同步信息**区域仅在急救转运任务详情页显示
2. 条件: `taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo`
3. 所有字段为空时显示 `--`
4. 错误信息以红色文本显示
## 六、使用场景
### 1. 管理员监控同步状态
管理员可以在任务列表中快速查看哪些急救转运任务已完成与旧系统的同步,哪些同步失败需要处理。
### 2. 问题排查
当同步失败时,可以在任务详情页查看详细的错误信息,帮助技术人员定位问题。
### 3. 数据追溯
通过服务单号和调度单号,可以在旧系统中查询对应的单据,实现新旧系统数据的双向追溯。
## 七、注意事项
1. **权限控制**: 页面显示遵循原有的权限控制规则
2. **性能考虑**: 列表查询时需要关联 `sys_task_emergency` 表,确保 Mapper XML 中已正确配置关联查询
3. **非急救任务**: 其他类型任务(如福祉车、普通任务)不显示同步信息
4. **定时任务**: 同步状态由后台定时任务更新,前端只负责展示
## 八、后续优化建议
1. **手动重试功能**: 在详情页添加"重新同步"按钮,允许管理员手动触发同步
2. **同步日志**: 记录每次同步的详细日志,方便问题追溯
3. **消息通知**: 同步失败时通过系统消息或邮件通知相关人员
4. **批量同步**: 在列表页提供批量重新同步功能
## 九、相关定时任务
### LegacySystemSyncTask
**Cron 表达式**:
- 服务单同步: `0 */10 * * * ?` (每10分钟执行一次)
- 调度单同步: `0 5,15,25,35,45,55 * * * ?` (每小时的5、15、25、35、45、55分执行)
**配置位置**: `ruoyi-quartz` 模块
**任务逻辑**:
1. 查询未同步或同步失败的急救转运任务
2. 调用旧系统 ASP 接口
3. 更新同步状态和单号
4. 记录同步时间和错误信息
---
**文档版本**: v1.0
**创建日期**: 2025-01-XX
**最后更新**: 2025-01-XX
**维护人员**: 系统管理员