# 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 状态