自动接受图像功能.md 5.4 KB

自动接受图像功能实现文档

概述

本文档描述了在曝光成功后自动接受图像的功能实现。该功能通过监听MQTT消息,在图像处理完成并成功后自动调用接受图像接口。

需求背景

在DR系统的检查流程中,当曝光完成并成功处理图像后,系统需要自动接受该图像,避免手动操作,提高工作效率。

实现位置

文件: src/domain/mqttService.ts
修改内容: 在 handleMqttMessage 函数的 TASK_Success 分支中添加自动接受逻辑

技术方案

1. MQTT消息流程

曝光触发 
  ↓
图像采集
  ↓
图像处理 (多个阶段)
  ↓
MQTT 推送进度状态
  - TASK_RecvRaw (已获取原图)
  - TASK_RecvMask (已获取mask)
  - TASK_RecvEnhance (已完成增强)
  - TASK_RecvForeground (已获取前景mask)
  - TASK_RecvApply (已完成遮罩mask)
  - TASK_Success (成功存储dcm) ✨
  ↓
自动接受图像

2. 关键消息格式

Topic: MODULE/TASK/IMGPROC/PROGRESS

消息结构:

interface MqttMessage {
  dcm?: string;        // dcm文件名
  message: string;     // 消息内容
  sop?: string;        // SOP实例UID (图像ID)
  status: string;      // 状态
  thumbnail?: string;  // 缩略图文件名
}

成功消息示例:

{
  "dcm": "20250801150247.dcm",
  "message": "",
  "sop": "20250801150247",
  "status": "TASK_Success",
  "thumbnail": "20250801150247.webp"
}

3. 代码实现

3.1 导入依赖

import { judgeImage } from '../API/exam/judgeImage';

3.2 自动接受逻辑

TASK_Success 分支中添加:

case 'TASK_Success':
  console.log('Task succeeded:', message);
  // Handle success, e.g., process DCM and thumbnail files
  emitter.emit('TASK_SUCCESS', message);
  emitter.emit('ACQUISITION_SUCCESS');

  // 自动接受图像
  if (message.sop) {
    judgeImage(message.sop, true)
      .then(() => {
        console.log(`图像 ${message.sop} 已自动接受`);
      })
      .catch((error) => {
        console.error(`自动接受图像失败:`, error);
      });
  }
  break;

功能特点

✅ 优点

  1. 时机准确: 在图像处理完全成功后立即接受
  2. 无侵入性: 不影响现有的事件触发逻辑
  3. 错误隔离: 接受失败不影响其他功能继续执行
  4. 日志完整: 成功和失败都有详细日志记录
  5. 异步处理: 使用Promise处理,不阻塞主流程

📋 工作流程

  1. 用户触发曝光
  2. 系统进行图像采集和处理
  3. 后端通过MQTT推送处理进度
  4. 当收到 TASK_Success 状态时:
    • 触发现有的成功事件
    • 自动调用接受图像API
    • 记录操作日志
  5. 图像状态更新为"已接受"

API调用详情

接口信息

  • 端点: POST /api/v1/auth/task/inspection/judge
  • 参数:
    • instance_uid: 图像的SOP实例UID (从MQTT消息的 sop 字段获取)
    • accept: true (固定为接受)

调用示例

// 从MQTT消息中提取SOP实例UID
const sopInstanceUid = message.sop; // 例如: "20250801150247"

// 调用接受图像API
await judgeImage(sopInstanceUid, true);

错误处理

可能的错误场景

  1. 网络错误: 无法连接到后端服务器
  2. 认证失败: Token无效或过期
  3. SOP为空: MQTT消息中没有sop字段
  4. 服务器错误: 后端处理失败

错误处理策略

  • 所有错误都会被捕获并记录到控制台
  • 错误不会中断MQTT消息处理流程
  • 不会影响现有事件的触发(TASK_SUCCESS, ACQUISITION_SUCCESS

测试验证

测试步骤

  1. 启动系统并登录
  2. 进入检查页面
  3. 触发曝光操作
  4. 观察控制台日志:

    Task succeeded: {dcm: "xxx.dcm", sop: "xxx", status: "TASK_Success", ...}
    图像 xxx 已自动接受
    
  5. 确认图像状态已更新为"已接受"

验证点

  • ✅ 曝光成功后自动调用接受接口
  • ✅ 控制台显示接受成功日志
  • ✅ 图像状态正确更新
  • ✅ 错误情况下不影响其他功能

相关文件

  • src/domain/mqttService.ts - MQTT消息处理(实现位置)
  • src/API/exam/judgeImage.ts - 接受/拒绝图像API
  • docs/DR.md - 后端API文档(第37、38节)

后续优化建议

可选功能

  1. 可配置开关: 在系统设置中提供"自动接受图像"的开关选项
  2. 条件接受: 根据图像质量评分决定是否自动接受
  3. 通知提示: 自动接受后给用户显示Toast提示
  4. 统计记录: 记录自动接受的成功率和失败原因

配置化示例

如果需要添加开关控制:

// 在Redux状态中添加配置
interface ExamSettings {
  autoAcceptImage: boolean;
}

// 在MQTT处理中检查配置
if (message.sop && getState().exam.settings.autoAcceptImage) {
  judgeImage(message.sop, true)
    .then(() => console.log(`图像 ${message.sop} 已自动接受`))
    .catch((error) => console.error(`自动接受图像失败:`, error));
}

注意事项

  1. 确保 judgeImage API已正确实现并测试
  2. MQTT消息的 sop 字段必须是有效的SOP实例UID
  3. 自动接受在曝光成功后立即执行,无法撤销
  4. 如果需要手动审核图像质量,应禁用此功能

版本历史

  • v1.0 (2025-10-13): 初始实现,在TASK_Success时自动接受图像

文档创建时间: 2025年10月13日
最后更新: 2025年10月13日