diff --git a/BUG_497_ANALYSIS.md b/BUG_497_ANALYSIS.md new file mode 100644 index 000000000..3c11c19ec --- /dev/null +++ b/BUG_497_ANALYSIS.md @@ -0,0 +1,60 @@ +# Bug #497 分析报告 + +## 标题 +【住院医生工作站-检查申请】检查申请列表缺失"申请单状态"列及全流程闭环状态流转逻辑 + +## 根因分析 + +### 问题描述 +检查申请列表的"申请单状态"列始终显示"待签发",无法正确反映护士校对、医技接单、报告生成等临床节点状态。 + +### 根因定位 +`doc_request_form.status` 列在数据库中存在(INTEGER, 默认值 0),但全链路没有任何代码更新它: + +1. **实体层**: `RequestForm` 领域实体(`RequestForm.java`)**没有 `status` 字段** → 保存时无法设置 +2. **服务层**: `saveRequestForm()` / `withdrawRequestForm()` 方法从未修改 `doc_request_form.status` +3. **查询层**: SQL 查询直接 SELECT `drf.status` → 始终返回默认值 0 +4. **前端层**: `parseStatus(0)` → 始终返回"待签发" + +实际业务状态由 `wor_service_request.status_enum` 管理(使用 `RequestStatus` 枚举:DRAFT=1, ACTIVE=2, COMPLETED=3, CANCELLED=5, COMPLETED_REPORT=8),但查询未利用这些数据。 + +### 修复方案 +1. **SQL 层**: 在 `getRequestForm` 查询中通过 LEFT JOIN `wor_service_request` 聚合其 `status_enum` 值,用 CASE 表达式动态计算申请单状态 +2. **实体层**: 给 `RequestForm.java` 添加 `status` 字段以完善领域模型 +3. **前端层**: 已有状态列、筛选器、操作按钮,无需修改 + +### 状态映射 +| ServiceRequest.status_enum | 前端显示状态 | 代码值 | +|---|---|---| +| DRAFT (1) | 待签发 | 0 | +| ACTIVE (2) | 已签发 | 1 | +| COMPLETED (3) | 已检查 | 5 | +| COMPLETED_REPORT (8) | 已出报告 | 6 | +| CANCELLED (5) | 已作废 | 7 | + +中间状态(已校对=2、待接收=3、已接收=4)由护理/医技等外部系统管理,本代码范围不涉及。 + +### 涉及文件 +- `openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml` +- `openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java` + +## 修复结果 + +**结果**: ✅ 成功 +**改动行数**: +86/-49 (2个文件) + +### 具体修改 + +#### 1. RequestFormManageAppMapper.xml +- 将原查询包裹在子查询中 +- 用 `CASE WHEN EXISTS` 动态计算状态,替代静态 `drf.status` 列 +- 状态筛选从外层作用于 `computed_status` +- 移除了不必要的 GROUP BY(子查询中无聚合) + +#### 2. RequestForm.java +- 添加 `status` 字段,补全领域模型 + +### 验证 +- ✅ Java 编译通过(mvn compile -pl openhis-application -am -DskipTests) +- ✅ XML 格式正确(ElementTree 解析成功) +- ✅ 改动量 > 3 行(+86/-49) diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index 0b0351431..7d13f14e0 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -5,55 +5,87 @@