4.1 KiB
4.1 KiB
分析报告 — 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 映射:
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 语句
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)。
涉及文件
openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java— 枚举新增openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml— SQL CASE 修复openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java— 校对方法修改