worklistToExam.ts.md 4.2 KB

worklistToExam.ts

文件职责

提供从工作列表进入检查/处理的转换函数,支持单个任务进入检查和多个任务批量进入图像处理。

实现方式

通过异步函数从后端获取任务详情,构建完整的 Task 对象并缓存,然后切换业务流程或转换为体位列表。

核心公共函数prepareWorksForExam - 支持单个或多个 Task 的数据准备,使用 Promise.all 并行处理以提高性能,可供其他模块(如 middleware)复用。

实现思路

prepareWorksForExam(公共数据准备函数)

  1. 参数统一:接受单个 Task 或 Task 数组,统一转为数组处理
  2. 并行处理:使用 Promise.all 并行调用 fetchTaskDetails 获取所有任务的详细数据
  3. 数据转换:为每个任务构建完整的 Task 对象,展平 series/images 为 Views 数组
  4. 返回结果:返回包含完整 Views 数据的 Task 数组
  5. 性能优化:相比串行处理,并行获取多个任务详情可显著提升性能
  6. 可复用性:供 worklistToExam、middleware 等多个模块使用

worklistToExam(单任务进入检查)

  1. 调用公共函数:使用 prepareWorksForExam 准备数据(传入单个 Task)
  2. 解构结果:从返回的数组中解构第一个元素获取准备好的 Task
  3. 清空缓存:使用 clearWorks 清空旧的检查缓存
  4. 添加任务:将完整的 Task 添加到 examWorksCacheSlice
  5. 切换流程:设置业务流程为 exam,进入检查页面

worklistToProcess(批量任务进入处理)

  1. 清空缓存:先清空旧的工作缓存
  2. 批量处理:遍历选中的 StudyID 列表
  3. 获取基础信息:从 workEntities 中查找基础 Task 信息
  4. 获取详情:为每个任务调用 fetchTaskDetails 获取完整数据
  5. 构建 Task:合并基础信息和详情,构建完整 Task 对象
  6. 添加缓存:将每个 Task 添加到 examWorksCacheSlice
  7. 转换体位:调用 transformWorksToBodyPositions 将所有工作转换为体位列表
  8. 设置体位:dispatch setBodyPositions 更新体位列表状态

边界

输入边界

  • ✅ worklistToExam 接收单个 Task 对象
  • ✅ worklistToProcess 接收 StudyID 字符串数组
  • ❌ 不验证输入数据的有效性

输出边界

  • ✅ 清空并更新检查缓存
  • ✅ 切换业务流程(worklistToExam)
  • ✅ 更新体位列表(worklistToProcess)
  • ❌ 不返回执行结果
  • ❌ 不提供加载状态管理

职责边界

  • ✅ 负责获取任务详细信息
  • ✅ 负责构建完整的 Task 对象
  • ✅ 负责管理检查缓存
  • ✅ 负责批量任务的处理
  • ✅ 提供公共的数据准备函数供其他模块使用(prepareWorksForExam)
  • ❌ 不负责设备初始化
  • ❌ 不负责图像的加载
  • ❌ 不负责用户权限验证

涉及概念

数据准备公共化(prepareWorksForExam):将重复的数据获取和转换逻辑抽取为公共函数,提高代码复用性和可维护性

并行处理优化:使用 Promise.all 并行获取多个任务详情,相比串行处理可显著提升批量处理性能

灵活参数设计:prepareWorksForExam 支持单个或多个 Task 输入,自动适配不同场景的需求

未来扩展支持:函数设计上支持多选 study 进入检查的场景,为未来功能扩展奠定基础

工作列表到检查(worklistToExam):从任务清单选择任务进入检查流程

批量处理(worklistToProcess):选择多个已完成的任务批量进入图像处理流程

任务详情获取:通过 fetchTaskDetails API 获取包含 series 和 images 的完整任务数据

数据展平:使用 flatMap 将嵌套的 series/images 结构展平为 Views 数组

缓存管理:先清空旧缓存再添加新任务,确保缓存数据的准确性

体位列表转换:将多个工作的体位信息聚合转换为统一的体位列表格式

类型安全:使用 satisfies 确保构建的 dview 对象符合类型定义

跨模块复用:prepareWorksForExam 被 worklistToExam 和 businessFlowMiddleware 共同使用,避免代码重复

TODO 注释:代码注释提到在 worklistTable 中实现 fetchThunk 以显示 loading 状态