# Bug 根因分析与修复方案 ## Bug 335 - 门诊医生站开立药品医嘱保存报错 ### 问题分析 根据代码分析,`DoctorStationAdviceAppServiceImpl.saveAdvice()` 方法处理药品医嘱保存时可能报错的原因: 1. **patientId/encounterId 为 null** - 删除操作时前端可能未传 2. **accountId 为 null** - 患者账户信息未正确获取 3. **definitionId/definitionDetailId 为 null** - 定价信息缺失 4. **库存校验失败** - 药品库存不足 ### 修复方案 ✅ 已部分修复(见代码中的 BugFix 注释) - 已添加 patientId/encounterId 自动补全逻辑 - 已添加 accountId 自动创建逻辑 - 需要进一步验证 definitionId 的处理 --- ## Bug 336 - 门诊医生站开立诊疗项目保存报错 ### 问题分析 诊疗项目保存与药品类似,但有以下特殊点: 1. **必须选择执行科室** - 代码中有校验 `throw new ServiceException("诊疗项目必须选择执行科室")` 2. **活动绑定设备处理** - 需要处理 `handService()` 中的设备绑定逻辑 3. **库存校验** - 诊疗项目可能关联耗材 ### 修复方案 - 确保前端传递 executeDeptId(执行科室) - 检查 handService() 方法中的异常处理 - 添加更详细的错误日志 --- ## Bug 338 - 门诊划价新增时未校验就诊记录及诊断记录 ### 问题分析 **这是患者安全问题!** 未接诊患者也可新增划价项目可能导致: - 收费错误 - 医疗纠纷 - 数据不一致 当前代码问题: - `OutpatientPricingAppServiceImpl.getAdviceBaseInfo()` 仅查询医嘱,未校验就诊状态 - 前端划价保存接口未找到(可能在其他地方) ### 修复方案 1. 在划价查询时增加就诊状态校验 2. 在划价保存时增加诊断记录校验 3. 未接诊患者禁止划价 --- ## Bug 339 - 药房筛选条件失效 ### 问题分析 查询结果中包含非选中药房的数据,可能原因: - SQL WHERE 条件未正确应用 locationId - 多表关联时过滤条件丢失 ### 修复方案 - 检查 `DoctorStationAdviceAppMapper.getAdviceBaseInfo()` 的 SQL - 确保 locationId 条件正确应用 --- ## 修复优先级 1. **Bug 338** - 患者安全问题,最高优先级 2. **Bug 335/336** - 核心功能阻断,高优先级 3. **Bug 339** - 数据准确性问题,中优先级 --- ## 测试用例 ### Bug 338 测试 1. 选择未接诊患者,尝试划价 → 应禁止 2. 选择已接诊但无诊断的患者,尝试划价 → 应提示补充诊断 3. 选择正常接诊患者,划价 → 应成功 ### Bug 335/336 测试 1. 门诊医生站开立药品医嘱 → 应成功保存 2. 门诊医生站开立诊疗项目 → 应成功保存 3. 签发医嘱 → 应成功 ### Bug 339 测试 1. 选择"西药房"筛选 → 结果应仅包含西药房数据 2. 选择"中药房"筛选 → 结果应仅包含中药房数据