diff --git a/MD/bugs/BUG_731_ANALYSIS.md b/MD/bugs/BUG_731_ANALYSIS.md new file mode 100644 index 000000000..a3594430b --- /dev/null +++ b/MD/bugs/BUG_731_ANALYSIS.md @@ -0,0 +1,179 @@ +# Bug #731 诸葛亮分析报告 + +> **文档类型**: Bug分析 +> **分析时间**: 2026-06-13 00:39:06 +> **分析模型**: mimo-v2.5 (LLM深度分析) + +--- + +## 基本信息 +- **Bug #**: 731 +- **标题**: 【临床医嘱-转科】转科申请成功后主界面未自动刷新,且生成的医嘱名称与科室数据错误 +- **模块**: 住院医生工作站 +- **提出人**: 陈显精 + +--- + +Now I have a complete picture. Here's my analysis: + +--- + +## Bug #731 分析报告 + +### 一、Bug 理解 + +**禅道标题**:【临床医嘱-转科】转科申请成功后主界面未自动刷新,且生成的医嘱名称与科室数据错误 + +**重现步骤**: +1. 登录住院医生工作站,选择在科患者(如:002,当前科室:呼吸内科病房) +2. 进入"临床医嘱"页面,点击【转科】唤起申请弹窗 +3. 选择"转入科室"为【临床心理科】,"转入病区"为【第二病区】,填写原因后点击【确认】 +4. 弹窗关闭且提示"转科申请已提交"后,观察医嘱列表状态 +5. 手动点击【刷新数据】按钮后,核对自动生成的转科医嘱 + +**期望结果**: +1. 提交成功后自动刷新医嘱列表 +2. 医嘱名称应为"转科-临床心理科" +3. 药房/科室应为患者当前科室"呼吸内科病房" + +**实际结果**: +1. 未自动刷新,需手动点击"刷新数据"按钮 +2. 医嘱名称仅为"转科",缺少转入科室名 +3. 药房/科室显示为"信息科"(系统管理科室),完全错误 + +--- + +### 二、根因分析 + +本 Bug 包含 **3 个独立问题**,根因分布在前端和后端: + +#### 问题1:未自动刷新 + +**根因**:前端 `transferOrganizationDialog.vue` 在成功提交后没有 `emit('success')`,且父组件 `order/index.vue` 没有给该对话框绑定 `@success` 处理函数。 + +对比已正常工作的出院对话框 `leaveHospitalDialog.vue`: +- 出院对话框有 `emit('success')` 调用 +- 父组件有 `@success="handleLeaveHospitalSuccess"` → `getListInfo(false)` 刷新列表 +- 转科对话框两处都缺失 + +**涉及文件**: +- `healthlink-his-ui/src/views/inpatientDoctor/home/components/order/applicationForm/transferOrganizationDialog.vue`(第149行附近 `submitApplicationForm`) +- `healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue`(第673行 ``) + +#### 问题2:医嘱名称仅为"转科" + +**根因**:后端 `SpecialAdviceAppServiceImpl.saveTransferOrganizationOrders()` 中,`ServiceRequest` 的名称使用了诊疗目录定义的默认名称"转科"(来自 `CommonConstants.BusinessName.TRANSFER_ORGANIZATION = "转科"`),没有拼接转入科室名称。 + +**涉及文件**: +- `healthlink-his-server/.../regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java`(`saveTransferOrganizationOrders` 方法,约第300行) + +#### 问题3:药房/科室显示为"信息科" + +**根因**:后端 `saveTransferOrganizationOrders()` 中设置了 `serviceRequest.setOrgId(activityAdviceBaseDto.getPositionId())`,其中 `activityAdviceBaseDto` 是从诊疗目录(activity definition)获取的默认数据,其 `positionId` 对应的科室是"信息科"(转科医嘱定义的默认归属科室),而非患者当前所在科室。 + +对比出院医嘱 `saveLeaveHospitalOrders()` 使用了 `activityAdviceBaseDto.getPositionId()` 但出院医嘱没有这个问题(因为出院后不需要药房/科室归属)。转科医嘱需要显示的是**患者当前所在的科室**(转出科室)。 + +前端 `patientInfo` store 中有 `inHospitalOrgId`(入科科室ID),但后端 `TransferOrganizationParam` 没有传入原科室参数。 + +**涉及文件**: +- `healthlink-his-server/.../regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java`(`saveTransferOrganizationOrders` 方法) +- `healthlink-his-server/.../regdoctorstation/dto/TransferOrganizationParam.java`(缺少 `originalOrganizationId` 字段) +- `healthlink-his-ui/.../order/applicationForm/transferOrganizationDialog.vue`(未传入原科室参数) + +--- + +### 三、修复方案 + +#### 修复1:自动刷新 + +**文件**:`transferOrganizationDialog.vue` +```diff + // 在