Files
his/BUG_497_ANALYSIS.md
赵云 414b37bfa7 Fix Bug #497: 【住院医生工作站-检查申请】检查申请列表缺失状态列——动态计算状态修复
根因: doc_request_form.status 列在数据库中始终为默认值0,无任何代码更新它,
导致列表所有记录的"申请单状态"始终显示"待签发"。

修复方案:
1. SQL: 用 CASE WHEN EXISTS 从 wor_service_request.status_enum 动态计算状态
   - DRAFT(1) → 待签发(0) / ACTIVE(2) → 已签发(1) / COMPLETED(3) → 已检查(5)
   - COMPLETED_REPORT(8) → 已出报告(6) / CANCELLED(5) → 已作废(7)
2. 实体: 补全 RequestForm.status 字段完善领域模型

验证: Java编译通过 + XML格式正确 + SQL实测状态值正确区分

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 13:18:53 +08:00

2.6 KiB
Raw Blame History

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