# 任务附件同步ImageData功能说明 ## 功能概述 本功能实现了将任务附件(sys_task_attachment表)自动同步到ImageData表的能力。当任务关联了服务单(serviceOrderId)或调度单(dispatchOrdId)后,系统会自动将任务附件同步到ImageData表,以便在旧系统中查看和使用。 ## 核心功能 ### 1. 自动同步 - 上传附件时,如果任务已关联服务单或调度单,自动同步到ImageData - 支持普通文件上传和微信上传两种方式 - 同步失败不影响附件上传的主流程 ### 2. 手动同步 - 提供API接口,支持手动触发同步 - 支持批量同步任务的所有附件 - 支持检查附件是否已同步 ### 3. 附件分类映射 附件分类自动映射到ImageData的图片类型: - 1-知情同意书 → ImageType 0 - 2-病人资料 → ImageType 1 - 3-操作记录 → ImageType 2 - 4-出车前 → ImageType 3 - 5-出车后 → ImageType 4 - 6-系安全带 → ImageType 5 ## 数据库变更 ### sys_task_attachment 表新增字段 ```sql -- 是否已同步到ImageData (0-未同步 1-已同步) synced_to_image_data TINYINT(1) DEFAULT 0 -- 同步时间 sync_time DATETIME -- 关联的ImageData ID image_data_id BIGINT ``` ### 执行SQL脚本 ```bash 执行文件: sql/update_sys_task_attachment_sync_fields.sql ``` ## 新增文件 ### 1. 服务接口 - `ITaskAttachmentSyncService.java` - 附件同步服务接口 - `TaskAttachmentSyncServiceImpl.java` - 附件同步服务实现 ### 2. Controller - `TaskAttachmentSyncController.java` - 附件同步控制器 ### 3. SQL脚本 - `update_sys_task_attachment_sync_fields.sql` - 数据库更新脚本 ## 修改文件 ### 1. 实体类 - `SysTaskAttachment.java` - 添加同步相关字段 ### 2. Mapper - `SysTaskAttachmentMapper.xml` - 更新SQL语句 ### 3. 服务实现 - `SysTaskServiceImpl.java` - 集成自动同步逻辑 ## API接口 ### 1. 手动同步任务附件 **接口**: `POST /task/attachment/sync/task/{taskId}` **权限**: `task:general:edit` **参数**: - `taskId`: 任务ID(路径参数) **返回示例**: ```json { "code": 200, "msg": "成功同步 3 个附件" } ``` ### 2. 检查附件同步状态 **接口**: `GET /task/attachment/sync/check/{attachmentId}` **权限**: `task:general:query` **参数**: - `attachmentId`: 附件ID(路径参数) **返回示例**: ```json { "code": 200, "msg": "已同步", "data": true } ``` ## 使用场景 ### 场景1:新上传附件自动同步 1. 用户在小程序上传任务附件 2. 系统保存附件到sys_task_attachment表 3. 检测任务是否已关联服务单/调度单 4. 如果已关联,自动同步到ImageData表 5. 更新附件的同步状态字段 ### 场景2:手动批量同步 1. 任务后期关联了服务单/调度单 2. 调用手动同步接口同步历史附件 3. 系统批量同步该任务的所有未同步附件 4. 返回同步成功的附件数量 ### 场景3:旧系统查看附件 1. 用户在旧系统中查看调度单 2. 调用ImageData接口获取图片列表 3. 显示通过新系统上传的任务附件 4. 实现新旧系统数据互通 ## 技术实现 ### 1. 同步服务 ```java @Service public class TaskAttachmentSyncServiceImpl implements ITaskAttachmentSyncService { // 同步单个附件 public boolean syncAttachmentToImageData( SysTaskAttachment attachment, Long serviceOrderId, Long dispatchOrdId); // 批量同步任务附件 public int syncTaskAttachmentsToImageData( Long taskId, Long serviceOrderId, Long dispatchOrdId); } ``` ### 2. 自动同步触发 在上传附件时自动触发: ```java // 上传附件成功后 if (result > 0) { // 尝试自动同步到ImageData tryAutoSyncAttachment(attachment, taskId); } ``` ### 3. 数据源切换 同步到ImageData时自动切换到SQL Server数据源: ```java @DataSource(DataSourceType.SQLSERVER) public boolean syncAttachmentToImageData(...) { // 在SQL Server数据源中执行 imageDataService.insertImageData(imageData); } ``` ## 注意事项 ### 1. 数据源配置 - 确保SQL Server数据源配置正确 - 确保ImageData表存在且可访问 ### 2. 文件路径 - 附件路径使用相对路径存储 - 同步时保持路径格式一致 ### 3. 事务管理 - 同步失败不影响主流程 - 错误信息仅记录日志 ### 4. 性能考虑 - 自动同步是异步的,不影响用户体验 - 批量同步时逐个处理,避免事务超时 ## 常见问题 ### Q1: 如何判断附件是否需要同步? A: 检查任务是否关联了serviceOrderId或dispatchOrdId ### Q2: 同步失败会影响附件上传吗? A: 不会,同步失败只记录日志,不影响主流程 ### Q3: 如何重新同步失败的附件? A: 调用手动同步接口,系统会自动跳过已同步的附件 ### Q4: ImageData的图片类型如何确定? A: 根据附件分类自动映射到对应的ImageType ## 扩展建议 ### 1. 定时同步任务 可以添加定时任务,定期检查并同步未同步的附件 ### 2. 同步状态通知 可以在同步完成后发送通知给相关人员 ### 3. 同步日志 可以添加详细的同步日志表,记录每次同步的详细信息 ### 4. 批量操作 可以添加批量同步多个任务附件的功能