7.5 KiB
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 理解
禅道标题:【临床医嘱-转科】转科申请成功后主界面未自动刷新,且生成的医嘱名称与科室数据错误
重现步骤:
- 登录住院医生工作站,选择在科患者(如:002,当前科室:呼吸内科病房)
- 进入"临床医嘱"页面,点击【转科】唤起申请弹窗
- 选择"转入科室"为【临床心理科】,"转入病区"为【第二病区】,填写原因后点击【确认】
- 弹窗关闭且提示"转科申请已提交"后,观察医嘱列表状态
- 手动点击【刷新数据】按钮后,核对自动生成的转科医嘱
期望结果:
- 提交成功后自动刷新医嘱列表
- 医嘱名称应为"转科-临床心理科"
- 药房/科室应为患者当前科室"呼吸内科病房"
实际结果:
- 未自动刷新,需手动点击"刷新数据"按钮
- 医嘱名称仅为"转科",缺少转入科室名
- 药房/科室显示为"信息科"(系统管理科室),完全错误
二、根因分析
本 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行<TransferOrganizationDialog>)
问题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
// 在 <script setup> 中添加 emit 定义
+ const emit = defineEmits(['success']);
// submitApplicationForm 中成功后 emit
transferOrganization(form).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('转科申请已提交');
dialogVisible.value = false;
+ emit('success');
}
});
文件:order/index.vue
<TransferOrganizationDialog
ref="transferOrganizationRef"
+ @success="handleTransferOrgSuccess"
/>
// 添加回调函数(在 handleTransferOrg 函数附近)
+ function handleTransferOrgSuccess() {
+ getListInfo(false);
+ }
修复2:医嘱名称拼接科室
文件:SpecialAdviceAppServiceImpl.java(saveTransferOrganizationOrders 方法)
在创建 ServiceRequest 后、save 前,根据 targetOrganizationId 查询转入科室名称并拼接到请求名称中:
serviceRequest.setRequesterId(practitionerId); // 开方医生
serviceRequest.setEncounterId(encounterId); // 就诊id
- serviceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室(见修复3)
+ // 查询转入科室名称,拼接到医嘱名称
+ // 原名称"转科" → "转科-转入的科室名称"
serviceRequest.setConditionId(conditionId); // 诊断id
serviceRequest.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id
需要在 ServiceRequest 上设置名称。具体做法:在 AdviceManageAppMapper 或 SpecialAdviceAppMapper 中添加查询方法,根据 targetOrganizationId 查询科室名称,然后:
// 设置医嘱显示名称为 "转科-转入科室名"
修复3:药房/科室使用患者当前科室
文件:TransferOrganizationParam.java
+ /** 原科室(患者当前所在科室) */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long originalOrganizationId;
文件:transferOrganizationDialog.vue
form.encounterId = patientInfo.value.encounterId
form.patientId = patientInfo.value.patientId
+ form.originalOrganizationId = patientInfo.value.inHospitalOrgId
文件:SpecialAdviceAppServiceImpl.java
- serviceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室(诊疗定义默认)
+ serviceRequest.setOrgId(transferOrganizationParam.getOriginalOrganizationId()); // 执行科室(患者当前科室)
四、路由决策
FIXER: zhaoyun + guanyu(联合修复)
REASON:
- zhaoyun(赵云/前端) 负责修复1(自动刷新):修改
transferOrganizationDialog.vue添加emit('success'),修改order/index.vue添加@success回调——纯前端改动 - guanyu(关羽/后端) 负责修复2和修复3(医嘱名称+科室ID):修改
TransferOrganizationParam.java添加originalOrganizationId字段,修改SpecialAdviceAppServiceImpl.java的saveTransferOrganizationOrders方法——纯后端改动
两个修复互不依赖,可以并行实施。但由于修复3(后端接收 originalOrganizationId)需要前端配合传参,建议由 zhaoyun 先改前端(修复1+修复3前端部分),guanyu 同时改后端(修复2+修复3后端部分),最后联调验证。
路由决策
- FIXER_ID: guanyu
- 修复 Agent: guanyu(后端)
- 原因: LLM 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。