6.7 KiB
Bug #729 诸葛亮分析报告
文档类型: Bug分析 分析时间: 2026-06-13 00:53:38 分析模型: mimo-v2.5 (LLM深度分析)
基本信息
- Bug #: 729
- 标题: 【住院护士站-入出转管理】待转科列表“入院病区/入院病房”下拉筛选项无数据,未正确读取转科申请数据
- 模块: 病区护士工作站
- 提出人: 陈显精
Now I have a complete understanding of the issue. Let me finalize my analysis.
一、Bug 理解
禅道 Bug #729 原文:
- 标题:【住院护士站-入出转管理】待转科列表"入院病区/入院病房"下拉筛选项无数据,未正确读取转科申请数据
- 重现步骤:1. 临床医生端为患者提交转科申请(转入科室:临床心理科,转入病区:第二病区);2. 登录住院护士站,进入入出转管理的"转出"页面;3. 点击"入院病区"或"入院病房"下拉框
- 期望结果:「入院病区」应去重读取所有"待转科"患者的【转科申请-转入病区】字段值;「入院病房」应去重读取所有"待转科"患者的【转科申请-转入科室/病房】字段值
图片关键信息:图2中"入院病区"和"入院病房"下拉框展开后为空白,无任何选项数据,红色文字明确标注"应该取值当前有待转科患者的转入科室和转入病区的数据供护士筛选用"。
综合总结:护士在"转出"页面使用下拉框筛选待转科患者时,下拉框为空。原因是当前代码调用 getPractitionerWard() 获取的是当前登录护士被分配的病区列表,而不是从 doc_order_process 表中读取待转科患者的转入病区/转入科室数据。正确的数据源应该是所有 encounter_status=6(待转科)的患者的转科申请中的 targetLocationId 和 targetOrganizationId。
二、根因分析
核心问题:前端 transferOut.vue 的 initData() 函数调用 getPractitionerWard()(接口 /app-common/practitioner-ward)获取下拉数据,这个接口返回的是当前护士被分配的病区列表,与"待转科患者的转入病区/转入科室"无关。
数据链路分析:
- 医生提交转科申请时,
SpecialAdviceAppServiceImpl.saveTransferOrders()创建doc_order_process记录,其中:target_location_id= 转入病区(对应adm_location表)target_organization_id= 转入科室(对应adm_organization表)encounter_id= 关联就诊记录
- 患者的
adm_encounter.status_enum = 6(PENDING_TRANSFER) - 当前前端下拉框应该查询:
doc_order_processJOINadm_encounter(status=6),分别获取 DISTINCTtarget_location_id和target_organization_id对应的名称
涉及文件:
healthlink-his-ui/src/views/inpatientNurse/inOut/components/transferOut.vue—initData()函数调用了错误的 APIhealthlink-his-server/.../inhospitalnursestation/controller/ATDManageController.java— 需要新增端点healthlink-his-server/.../inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java— 需要新增方法healthlink-his-server/.../inhospitalnursestation/mapper/ATDManageAppMapper.java— 需要新增查询healthlink-his-server/.../resources/mapper/inhospitalnursestation/ATDManageAppMapper.xml— 需要新增 SQL
三、修复方案
后端(3个文件修改 + 1个新增查询):
-
ATDManageAppMapper.java— 新增方法:List<Map<String, Object>> selectTransferWardOptions(Long currentUserOrgId); List<Map<String, Object>> selectTransferOrganizationOptions(Long currentUserOrgId);或合并为一个方法返回两个列表。
-
ATDManageAppMapper.xml— 新增 SQL:<!-- 获取待转科患者的转入病区去重列表 --> <select id="selectTransferWardOptions" resultType="map"> SELECT DISTINCT al.id AS id, al.name AS name FROM doc_order_process dop JOIN adm_encounter ae ON ae.id = dop.encounter_id AND ae.delete_flag = '0' JOIN adm_location al ON al.id = dop.target_location_id AND al.delete_flag = '0' WHERE ae.status_enum = 6 AND ae.class_enum = 1 -- 住院 AND ae.organization_id = #{currentUserOrgId} AND ae.delete_flag = '0' AND dop.delete_flag = '0' </select> <!-- 获取待转科患者的转入科室去重列表 --> <select id="selectTransferOrganizationOptions" resultType="map"> SELECT DISTINCT ao.id AS id, ao.name AS name FROM doc_order_process dop JOIN adm_encounter ae ON ae.id = dop.encounter_id AND ae.delete_flag = '0' JOIN adm_organization ao ON ao.id = dop.target_organization_id AND ao.delete_flag = '0' WHERE ae.status_enum = 6 AND ae.class_enum = 1 AND ae.organization_id = #{currentUserOrgId} AND ae.delete_flag = '0' AND dop.delete_flag = '0' </select> -
IATDManageAppService.java/ATDManageAppServiceImpl.java— 新增方法:R<?> getTransferFilterOptions();实现中调用 mapper 获取两个去重列表,返回
{ wardList: [...], organizationList: [...] }。 -
ATDManageController.java— 新增端点:@GetMapping("/transfer-filter-options") public R<?> getTransferFilterOptions() { return atdManageAppService.getTransferFilterOptions(); }
前端(2个文件修改):
-
api.js— 新增 API:export function getTransferFilterOptions() { return request({ url: '/nurse-station/atd-manage/transfer-filter-options', method: 'get', }); } -
transferOut.vue— 修改initData()函数:- 将
getPractitionerWard()替换为getTransferFilterOptions() - 用返回的
wardList填充initInfoOptions.value.wardListOptions - 用返回的
organizationList填充wardLocationList(或新建变量organizationListOptions) - 当选择"入院病区"时,应根据选择的 wardId 过滤对应的转入科室(可选优化,也可独立显示两个下拉框)
- 将
四、路由决策
FIXER: zhaoyun
REASON: 这是一个纯前端+后端接口对接问题,涉及下拉框数据源替换。前端 transferOut.vue 是主体修改点(替换 API 调用和数据绑定),后端只需新增一个查询端点。赵云负责前端开发,且修改涉及 Vue 组件交互逻辑,由赵云主导、配合荀彧(新增 mapper SQL)最为合适。
路由决策
- FIXER_ID: zhaoyun
- 修复 Agent: zhaoyun(前端)
- 原因: LLM 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。