# 分析报告 — Bug #497 ## Bug 描述 【住院医生工作站-检查申请】检查申请列表缺失"申请单状态"列及全流程闭环状态流转逻辑 ## 根因分析 ### 前端层面 `examineApplication.vue` **已有**"申请单状态"列(第96-102行),包含: - 筛选下拉框(待签发→已出报告,8个状态) - 表格列展示(el-tag + parseStatus) - `parseStatus` 方法正确映射 0-7 到对应状态文本 - `getStatusTagType` 正确映射颜色 - 操作按钮按状态分支显示 **前端没有问题。** ### 后端层面 — SQL CASE 语句不完整 `RequestFormManageAppMapper.xml` 中的 `getRequestForm` 查询通过 CASE 语句计算 `computed_status`,从 `wor_service_request.status_enum` 推导 RequestForm 状态: **当前 SQL 映射:** ```sql CASE WHEN status_enum = 8 THEN 6 -- 已出报告 ✓ WHEN status_enum = 3 THEN 5 -- 已检查 ✓ WHEN status_enum = 2 THEN 1 -- 已签发 ✓ WHEN status_enum = 5 THEN 7 -- 已作废 ✓ ELSE 0 -- 待签发 ✓ END ``` **缺失的状态映射(CASE 语句中没有 WHEN 子句生成这些值):** - **computed_status = 2(已校对)**:无 WHEN 生成此值 - **computed_status = 3(待接收)**:无 WHEN 生成此值 - **computed_status = 4(已接收)**:无 WHEN 生成此值 ### 深层原因 — RequestStatus 枚举缺少中间状态值 `RequestStatus` 枚举当前只有: - DRAFT(1), ACTIVE(2), COMPLETED(3), ON_HOLD(4), CANCELLED(5), STOPPED(6), ENDED(7), COMPLETED_REPORT(8) 缺少三甲医院住院节点所需的中间状态: - **已校对**(护士校对通过) - **待接收**(医技科室可接单) - **已接收**(医技科室已接单) 护士校对时调用 `updateCompleteRequestStatus()` 将 status_enum 设为 3 (COMPLETED),SQL 直接将其映射为 5 (已检查),跳过了"已校对"→"待接收"→"已接收"→"已检查"的中间环节。 ### 数据流总结 | 节点 | ServiceRequest.status_enum | SQL 当前映射 | RequestForm.status | 正确? | |------|---------------------------|-------------|-------------------|--------| | 医生录入 | 1 (DRAFT) | ELSE 0 | 0 待签发 | ✓ | | 医生签发 | 2 (ACTIVE) | WHEN 2 THEN 1 | 1 已签发 | ✓ | | 护士校对 | 3 (COMPLETED) | WHEN 3 THEN 5 | 5 已检查 | ✗ 跳过中间状态 | | 医技接收 | 无对应枚举值 | 无 | 无 | ✗ 缺失 | | 医技检查 | 3 (COMPLETED) | WHEN 3 THEN 5 | 5 已检查 | ✓ 但语义不对 | | 出报告 | 8 (COMPLETED_REPORT) | WHEN 8 THEN 6 | 6 已出报告 | ✓ | | 作废 | 5 (CANCELLED) | WHEN 5 THEN 7 | 7 已作废 | ✓ | ## 修复方案 ### 1. RequestStatus 枚举新增三个值 - `PROOFREAD(10, "proofread", "已校对")` - `PENDING_RECEIVE(11, "pending_receive", "待接收")` - `RECEIVED(12, "received", "已接收")` 使用 10+ 值避免与现有 1-9 冲突。 ### 2. 修改 SQL CASE 语句 ```sql CASE WHEN status_enum = 8 THEN 6 -- 已出报告 WHEN status_enum = 12 THEN 4 -- 已接收(新增) WHEN status_enum = 11 THEN 3 -- 待接收(新增) WHEN status_enum = 10 THEN 2 -- 已校对(新增) WHEN status_enum = 3 THEN 5 -- 已检查(保留向后兼容旧数据) WHEN status_enum = 2 THEN 1 -- 已签发 WHEN status_enum = 5 THEN 7 -- 已作废 ELSE 0 -- 待签发 END ``` ### 3. 修改护士校对方法 `ServiceRequestServiceImpl.updateCompleteRequestStatus()` 中 status_enum 从 3 (COMPLETED) 改为 10 (PROOFREAD)。 ### 4. 医技接收后状态流转 医技接收时将 status_enum 从 10 (PROOFREAD) 更新为 11 (PENDING_RECEIVE)→12 (RECEIVED),检查后更新为 3 (COMPLETED)。 ## 涉及文件 1. `openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java` — 枚举新增 2. `openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml` — SQL CASE 修复 3. `openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java` — 校对方法修改