Compare commits

..

43 Commits

Author SHA1 Message Date
关羽
65203d466d Fix Bug #401: 门诊完诊审计日志错误:div_log 表中 pool_id 与 slot_id 存值与设计规范不符
根因:queueWasAlreadyCompleted 条件限制导致队列已由分诊台完诊时,
医生站完诊不写 div_log 审计日志,造成审计记录缺失。
数据库12条COMPLETE记录中6条pool_id/slot_id为NULL(50%)。

修复:移除 queueWasAlreadyCompleted 条件限制,确保每次完诊操作
都生成审计日志;保留 queueWasAlreadyCompleted 日志用于排查。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 12:10:22 +08:00
c007ee3458 bug524 [门诊/医生个人报卡管理] 传染病报告卡保存后数据回显失败:病例分类、日期及分型字段为空 2026-05-16 12:10:22 +08:00
9c0302b920 bug432 门诊手术安排:新增手术安排保存时报错 2026-05-16 12:10:22 +08:00
wangjian963
1a5c65bbf7 Fix Bug 505505 【业务逻辑缺陷】药品医嘱已由药房发药,护士仍能在“医嘱校对”模块执行“退回”操作
[门诊手术安排]“手术申请查询”弹窗底部,分页组件与界底部元素重叠,影响操作。
2026-05-16 12:10:22 +08:00
关羽
95f9bc1698 Fix Bug #536: [门诊手术安排]"手术申请查询"弹窗底部,分页组件与界面底部元素重叠,影响操作。
根因:弹窗 body 无高度约束,窗口缩小时内容溢出导致分页与 footer 重叠。
修复:为弹窗添加 max-height: 75vh + overflow-y: auto 约束,分页与 footer 增加间距和分隔线。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 12:10:22 +08:00
关羽
943adeb227 Fix Bug #534: 【手术管理-门诊手术安排】点击"签发"按钮抛出异常,导致业务中断
修复两个问题:
1. prescriptionlist.vue 签发时 organizationId 可能为 undefined,添加回退值确保后端接收有效值
2. index.vue 计费弹窗缺少 generateSourceEnum 参数传递,导致 getListInfo 查询时无法正确过滤手术计费项目

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 16:35:57 +08:00
荀彧
2e2237926b Fix Bug #535: 【住院护士站-医嘱校对】已校验过的医嘱错误显示于"未校对"列表中,导致数据状态联动失效
根因:后端 getInpatientAdvicePage 方法中将 requestStatus 置为 null,
未按前端 tab 传入的状态值过滤,导致无论切换哪个 tab 都返回全部医嘱。
SQL 中的 CASE 条件仅处理 DRAFT 状态的 performer_check_id 校验,
并未按 request_status 字段过滤。

修复:保存 requestStatus 后,在查询结果集上按 requestStatus 手动过滤,
与 exeStatus 的过滤方式保持一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 16:35:40 +08:00
关羽
0e2aeddedb Fix Bug #533: 【门诊手术安排-计费】添加药品费用项目保存提示成功,但列表页未同步显示计费药品项目
根因:DoctorStationAdviceAppServiceImpl 中 handMedication/handDevice/handService 方法
硬编码 generateSourceEnum=1(医生开立),但前端手术计费传入 generateSourceEnum=6,
查询时按 6 过滤导致找不到记录。

修复:1. GenerateSource 枚举新增 SURGERY_BILLING(6)
      2. 8处 setGenerateSourceEnum 改为优先使用 DTO 的 generateSourceEnum,
         空时回退到 DOCTOR_PRESCRIPTION

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 16:35:40 +08:00
关羽
fac16d791f Fix Bug #533: 【门诊手术安排-计费】添加药品费用项目保存提示成功,但列表页未同步显示计费药品项目
根因:手术计费弹窗中 prescriptionlist 组件的 generateSourceEnum prop 被硬编码为 1,
但保存时 handleSaveSign 将 generateSourceEnum 设为 6(手术计费)。
保存后调用 getListInfo 刷新列表时,用 generateSourceEnum=1 查询,
后端返回 generateSourceEnum=6 的数据不匹配,导致列表为空。

修复:移除硬编码的 :generateSourceEnum="1" prop,
让组件通过 sourceBillNo 过滤即可正确显示保存的手术计费项目。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 15:58:20 +08:00
3c7a69937b fix bug249:手术管理-》门诊手术安排:【新增手术安排】-》【查找】在门诊医生站已【删除】作废的手术申请单在查询界面还能查询出来 2026-05-15 15:58:20 +08:00
赵云
ab12d23168 Fix Bug #532: 【手术管理】点击"查看"或"编辑"按钮弹出 SQL 语法报错。
根因:getSurgeryScheduleDetail SQL 查询中引用了 fc.contract_name AS feeType,
但 fc (fin_contract) 表从未被 JOIN,导致 SQL 语法错误。
修复:删除未关联表的 fc.contract_name 字段,保留已有的 os.fee_type AS feeType。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 15:58:20 +08:00
Ranyunqiao
5777053140 403 住院医生工作站:应用医嘱组套后,药品明细字段内容丢失未正确引入表格 521 [住院医生站-临床医嘱-检查申请] 手工选择执行科室后,保存仍提示“未找到项目执行的科室” 528 [住院医生工作站-检查申请] 修改申请单成功后,弹窗未自动关闭且列表数据未自动刷新 531 [住院医生站-临床医嘱-检查] 检查申请单打开数据没有正常加载 2026-05-15 15:58:20 +08:00
wangjian963
6f52467f08 Revert "Merge remote-tracking branch 'origin/develop' into develop"
This reverts commit 5946c1ea4b, reversing
changes made to 8d905c9844.
2026-05-15 15:58:20 +08:00
wangjian963
7fcf9a5ec9 Reapply "Fix Bug #489-regression: [住院护士站-医嘱处理] UNION加SELECT DISTINCT后NULL列类型推断失败导致接口异常"
This reverts commit 49fc905316.
2026-05-15 15:58:20 +08:00
wangjian963
963fd238e4 Revert "Fix Bug #489-regression: [住院护士站-医嘱处理] UNION加SELECT DISTINCT后NULL列类型推断失败导致接口异常"
This reverts commit 4e7e79d9c0.
2026-05-15 15:58:20 +08:00
wangjian963
bacb4d43d3 Fix Bug #489-regression: [住院护士站-医嘱处理] UNION加SELECT DISTINCT后NULL列类型推断失败导致接口异常
Root cause: Bug #489修复为UNION添加SELECT DISTINCT后,PostgreSQL无法将
服务侧无类型NULL文字自动匹配药品侧对应列的类型,报错"UNION types integer
and text cannot be matched"(错误位置: skin_test_flag列,第9列)。

Fix:
- InpatientAdviceDto.categoryCode: Integer → String,与DB varchar对齐
- AdviceProcessAppMapper.xml: 服务侧UNION 13处NULL添加PostgreSQL显式类型
  强转(::integer / ::bigint / ::numeric / ::varchar),同时part_percent
  的'1'改为'1::numeric'以安全匹配药品侧numeric类型
2026-05-15 15:58:20 +08:00
Ranyunqiao
08b2247071 bug 470 494 2026-05-15 15:58:20 +08:00
关羽
5cfb091d0b Fix Bug #511: [住院医生工作站-临床医嘱] 护士退回的医嘱在医生站双击无法进入编辑模式,导致无法修改重发
- 使用 Number() 做 statusEnum 类型转换并用 === 严格比较,避免前后端类型不一致导致双击无响应
- 使用 splice 替代直接赋值更新 prescriptionList,确保 Vue 响应式系统能正确触发渲染更新
- 使用 nextTick 包裹 expandOrder 设置,确保数据更新后再设置展开状态,保证 el-table 正确识别 row-key
- 增加 findIndex 返回 -1 时的错误处理,给用户可见提示而非静默失败
2026-05-15 01:28:07 +08:00
关羽
5bd49fb580 Fix Bug #509: [门诊医生站-手术申请] 提交申请后列表未实时刷新展示数据,且提示语需优化
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 01:28:07 +08:00
关羽
d3d144bb18 Fix Bug #507: [住院护士站-住院记账-补费] 项目单位未获取、执行科室显示内码且缺乏默认/模糊搜索逻辑
根因分析:
1. 执行科室显示内码:loadDepartmentOptions 只读取树形结构的第一层(records[0].children),
   但后端返回的是多层嵌套的树形数据。修复为递归扁平化 flattenTree() 提取所有科室节点。
2. 单位字段为空:getUnitCodeOptions 中 unitCode_dictText/minUnitCode_dictText 为 null 时,
   option 的 codeText 为 null 导致 el-select 无法显示。修复为 fallback 到 code 值本身。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 01:08:05 +08:00
荀彧
6d766b09a7 Fix Bug #498: 【住院医生工作站-检查申请】检查申请列表状态筛选HAVING子句与SELECT映射不一致导致筛选失败
SELECT的CASE映射将status_enum=4映射为3(待接收),但HAVING子句将status_enum=4映射为4,
导致按"待接收"或"已接收"状态筛选时无结果返回。同时修正status_enum=5/6/7的映射从5→7。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 01:08:05 +08:00
关羽
b3de1dec38 Fix Bug #495: 【医嘱闭环】已校对医嘱无法流转至"医嘱执行"界面,导致费用无法提交执行
后端SQL查询未过滤requestStatus(医嘱请求状态),导致医嘱执行页面的"待执行"tab
返回所有状态医嘱而非仅返回已校对(status=3)的医嘱。修复方式:
1. AdviceProcessAppMapper.java: 新增requestStatus参数
2. AdviceProcessAppMapper.xml: 在med_medication_request和wor_service_request子查询的
   WHERE条件中增加 AND T1.status_enum = #{requestStatus} 过滤
3. AdviceProcessAppServiceImpl.java: 保存requestStatus并传递给mapper,
   替代原注释"后端SQL已通过CASE条件处理"的错误假设

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:21:39 +08:00
荀彧
64325a8493 Fix Bug #497: 【住院医生工作站-检查申请】检查申请列表调整"申请单状态"列位置至申请单号后
将列表中的"申请单状态"列从申请者列之后移至申请单号之后,使列顺序为:申请单号→申请单状态→申请者→操作,与检验申请列表保持一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:21:39 +08:00
荀彧
609f3c3f8a Fix Bug #508: [住院护士站-住院记账-补费] 点击"划价组套"按钮无任何响应,无法选择组套项目
根因分析:FeeDialog组件模板有两个根元素(两个el-dialog),在Vue 3中虽支持多根组件,
但Element Plus的嵌套el-dialog配合append-to-body在多根场景下可能出现渲染/挂载问题。

修复方案:
1. 将两个el-dialog包裹在单一根<div>中,确保组件挂载行为与项目中其他正常工作的嵌套弹窗一致
2. 内层弹窗增加destroy-on-close,确保每次打开时DOM完全重建,避免残留状态导致的不显示问题

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:21:39 +08:00
荀彧
8af3c6c31c Fix Bug #500: 【门诊医生站】检查申请右侧"检查项目分类"切换时,界面出现明显抖动/闪烁
根因分析:
1. el-collapse-item__content 上的 transition: height/max-height 0.3s 与 Element Plus
   内部 accordion 动画冲突,造成"双重动画"效果,表现为切换分类时高度跳变
2. collapse-scroll 的 min-height: 120px 过小,切换内容较少的分类时容器收缩导致布局抖动
3. 分类内"加载中..."提示使用 v-if,出现/消失时引起 collapse content 高度突变

修复策略:
- 移除 el-collapse-item__content 和 el-collapse-item 的自定义 transition 属性,
  让 el-collapse 使用原生动画,消除双重动画
- 增大 collapse-scroll 的 min-height 从 120px 到 350px,确保切换时容器不收缩
- 将加载提示的 v-if 改为 v-show,避免 DOM 插入/移除引起高度跳变

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:21:39 +08:00
荀彧
c24520db74 Fix Bug #486: [住院医生工作站-临床医嘱] 医嘱检索框不支持全局模糊搜索,未选"医嘱类型"时检索结果为空
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:04:59 +08:00
关羽
091bf16df2 Fix Bug #488: 【临床医嘱】双击编辑待签发医嘱,医嘱类型回显为数字且点击确认报接口错误
问题1-医嘱类型回显为数字: 编辑待签发医嘱时,当行的adviceType值(如3/诊疗)
不在当前adviceTypeList选项列表中时,el-select会回显为纯数字。
修复:新增hasAdviceTypeOption和getAdviceTypeLabel函数,当类型无匹配选项时
显示el-tag标签而非空下拉框,避免数字回显。

问题2-点击确认报itemNo接口错误: getBindDevice接口调用无catch处理,
接口失败时promise rejection阻断主流程保存。
修复:为getBindDevice调用链添加.catch()静默降级,确保绑定设备接口失败
不影响医嘱主流程保存。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:04:59 +08:00
关羽
214e82ae29 Fix Bug #476: 住院医生工作-检查申请单界面缺失核心临床字段(紧急程度、过敏史、检查目的等)
补充打印功能中缺失的核心临床字段:紧急程度、期望检查时间、过敏史、检查目的、病史摘要,
并对urgencyLevel等编码字段应用transformField进行值转换显示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:04:59 +08:00
关羽
655436bea9 Fix Bug #467: [住院医生工作站-检验申请] 列表显示信息不规范:标题术语错误且单据名称未展示具体检验项目
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 00:04:59 +08:00
关羽
4069c452ba Fix Bug #480: [住院护士站-医嘱执行] 非耗材类医嘱执行报"耗材库存"错误且全选逻辑联动异常
根因分析:
1. 耗材库存报错:lotNumberMatch() 按 encounterId 查询 ALL 待发放 DeviceDispense,
   不区分是否为本次执行的医嘱。若该就诊存在其他未执行的耗材记录且库存为零,
   整个调用就会失败,导致非耗材类医嘱执行也被拦截。
2. 全选联动异常:toggleRowSelection() 程序化选中会触发 @select 事件,
   handleRowSelect 中调用 selectAllCheckboxesInRow 导致级联全选。

修复方案:
- 后端:lotNumberMatch 新增 requestIdList 可选参数,当传入时通过 DeviceRequest.basedOnId
  过滤仅校验与本次执行医嘱关联的耗材记录,避免其他未执行医嘱干扰
- 前端:handleExecute 传入 selectedRequestIds(仅诊疗类医嘱的 requestId)
- 前端:新增 skipSelectCascade 标志,程序化 toggleRowSelection 时阻止 handleRowSelect
  触发 selectAllCheckboxesInRow,消除级联反馈环

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:21:32 +08:00
关羽
683ce749f3 Fix Bug #475: 【住院医生工作站】开立检查申请单报错"请先配置当前时间段的执行科室"后,系统仍生成申请记录
合并验证逻辑:移除独立的"配置列表是否为空"检查,改为在遍历 activityList
时统一验证每个项目的执行科室配置。所有验证在任何数据库操作之前完成,
确保验证失败时不会产生脏数据。同时增加 activityList 为空时的明确提示。
2026-05-14 22:08:37 +08:00
赵云
0c74e66c91 Fix Bug #458: 门诊医生站:诊疗类医嘱保存成功后,列表"医嘱类型"列显示为空值
增强 mapAdviceTypeLabel 函数的兜底映射:在原有表名匹配兜底的基础上,
新增不依赖表名的最终兜底映射(1=西药, 2=中成药, 3=诊疗, 4=耗材, 5=会诊, 6=手术),
确保即使字典缺失或表名不匹配也能正确显示类型标签。

同时修复 getListInfo 中 adviceType_dictText 的空字符串判断逻辑,
使用显式 trim() 检查替代 || 运算符,避免后端返回空字符串时未被重新计算。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:37 +08:00
赵云
0209e8ae99 Fix Bug #451: 门诊医生站-提交新增手术申请后列表刷新失败
根因:子组件 submitForm 成功后同时调用 getList() 和 emit('saved'),
父组件 @saved 也调用 getList(),导致两个并发请求产生竞态条件;
若后端事务尚未完全提交,getList() 查询可能失败并弹出 msgError。

修复:
1. 子组件移除直接 getList() 调用,统一由父组件 @saved 刷新
2. 父组件添加 500ms 延迟确保后端事务已提交
3. getList() 错误处理改为 console.warn 优雅降级,避免阻断弹窗

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:37 +08:00
荀彧
9c75858afc Fix Bug #463: [目录管理-诊疗目录] 新增/编辑弹窗中"诊疗子项"检索功能失效,无法搜到已维护的项目
根因:ActivityDefinitionManageMapper.xml 中 getDiseaseTreatmentPage 查询使用 INNER JOIN
关联 adm_charge_item_definition 价格表,导致 55 个没有价格记录的诊疗项目被完全排除
在搜索结果之外。改为 LEFT JOIN 后,即使项目暂无价格记录也能被搜索到。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:37 +08:00
荀彧
b849d4c605 Fix Bug #445: 门诊手术安排-已生成医嘱的计费项目未从待生成列表剔除
根因:submit后本地过滤逻辑中submittedKeys的字段名不匹配
- originalMedicine中的名称字段是adviceName而非medicineName,导致
  名称+规格+数量的匹配键无法正确匹配已提交项
- 修复:增加chargeItemId作为首选匹配标识(后端唯一ID最可靠),
  名称匹配增加adviceName字段兜底

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
荀彧
a4de88a6f9 Fix Bug #444: 门诊手术医嘱界面"已引用计费药品"列表未正常显示药品名称
根因分析:
1. 前端 handleMedicalAdvice 调用 getPrescriptionList 时只传 encounterId,
   未传 generateSourceEnum=6 和 sourceBillNo(手术单号),
   后端默认查询 generateSourceEnum=1(医生开立),漏掉了手术计费创建的药品记录
2. 后端 getRequestBaseInfo 在 sourceBillNo 存在时会过滤掉药品(adviceType=1),
   进一步阻断了手术计费药品的返回

修复方案:
- 前端:handleMedicalAdvice 传参 (visitId, 6, operCode) 匹配手术计费记录
- 后端:移除手术计费场景的药品过滤,前端各组件已按 adviceType 自行过滤

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
关羽
ad21c566f0 Fix Bug #452: 领用出库模块选择药品时提示"仓库数量为0,无法调用",与实际库存数据不符
严格批号查询返回记录但 orgQuantity=0 时,原代码直接调用 applyFromDto 并弹出警告,
未回退到非严格查询(不含 lotNumber)获取同仓库其他有库存的批号。
修复:在 applyFromDto 之前检查 orgQuantity > 0,数量为0时回退到非严格查询。
2026-05-14 22:08:36 +08:00
荀彧
21ac9e80f2 Fix Bug #426: 门诊医生站-检查开立:已选择列表应支持树形展开,显示套餐明细(项目/数量/单价)
修复 loadMethodPackageDetails 函数中套餐明细 API 地址错误(/system/package/ → /system/check-type/package/),导致套餐明细加载失败返回 404

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
赵云
9cfaa7dc41 Fix Bug #402: 住院医生站诊断录入:点击保存诊断后,列表出现重复记录且部分条目元数据缺失
根因:后端 saveDoctorDiagnosis 先删除所有 tcm_flag=0 的记录,再用旧 encounterDiagnosisId
调用 saveOrUpdate,由于记录已删除,UPDATE 失败后 fallback 到 INSERT 导致重复记录。

修复:
1. 后端:不再设置 encounterDiagnosisId,确保 saveOrUpdate 始终执行 INSERT
2. 前端:getList() 后对诊断列表按 ybNo/name 去重,防止重复显示
3. 前端:保存前补全 diagnosisDoctor 和 diagnosisTime 元数据
4. 前端:修复 getTcmDiagnosis 的空值安全访问(res.data?.illness?.length)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
赵云
eb18a2c800 Fix Bug #435: 门诊手术安排:编辑弹窗中"费用类别"字段数据未回显
根因:getSurgeryScheduleDetail 的 SQL 查询中引用了 fc.contract_name 但
未 JOIN fin_contract 表(以及关联的 adm_encounter、adm_account),导致
PostgreSQL 报错 "missing FROM-clause entry for table fc",接口返回失败,
前端费用类别字段无法获取数据。

修复:添加缺失的三表 JOIN(adm_encounter → adm_account → fin_contract),
并移除重复的 os.fee_type AS feeType 别名。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
cf5431cbbf bug499 【住院医生工作站-检查申请】检查申请列表缺失查询过滤功能,不符合临床高效检索要求 数据库语句报错修复 2026-05-14 22:08:36 +08:00
荀彧
a429f77113 Fix Bug #428: 门诊医生站-检查申请:未实现分类联动检查方法及套餐明细展示与勾选逻辑
1. handleMethodSelect 中新增/更新已选项时,设置 expanded=true 使套餐明细自动展开
2. toggleItemExpand 中改用 packageDetailsDisplay/carrier.packageDetails 判断是否已加载明细
   (原代码检查非响应式的 item.packageDetails,导致重复加载或加载判断失效)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:08:36 +08:00
关羽
ffa709cf4e Fix Bug #443: 手术计费:点击"签发"耗材时异常报错
根因:签发耗材时 handDevice 方法会重复调用 saveOrUpdate 更新已有的 DeviceRequest 记录,
仅设置了部分字段(可能为 null),导致关键字段 performLocation(发放库房)被覆盖为空。
随后 handleDeviceDispense 创建 DeviceDispense 时 locationId 为 null,触发报错。

修复:签发操作(SIGN_ADVICE)跳过 handDevice 处理。因为耗材请求在保存时已创建完成,
签发只需更新状态(下方批量更新逻辑已处理),无需重新走 insert/update 流程。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 18:15:34 +08:00
3 changed files with 18 additions and 92 deletions

View File

@@ -1,66 +0,0 @@
# Bug #403 分析报告
## 根因分析
**Bug现象**:住院医生工作站应用医嘱组套后,药品明细字段(单次剂量、总量、总金额、药房/科室)丢失。
**数据流追踪**
1. **后端 `getGroupPackageForOrder`** (OrdersGroupPackageAppServiceImpl.java:168)
- 查询组套明细 SQLOrdersGroupPackageAppMapper.xml:37-82返回`dose`, `quantity`, `doseQuantity`, `rateCode`, `methodCode`, `dispensePerDuration` 等字段
- 通过 `getAdviceBaseInfo` 获取 `AdviceBaseDto` 赋值给 `detail.setOrderDetailInfos()`,包含:`doseUnitCode`, `doseUnitCode_dictText`, `positionId`, `inventoryList`, `priceList`, `partPercent`
2. **前端 `orderGroupDrawer.vue`** `handleUseOrderGroup` (line 568-694)
- 对每个组套明细项进行预处理,合并组套字段和医嘱库字段
- 通过 `emit('useOrderGroup', processedDetailList)` 发送到父组件
3. **前端 `inpatientDoctor/home/components/order/index.vue`** `handleSaveGroup` (line 1546-1639)
- 接收 `orderGroupList`,对每个 item 调用 `setValue(mergedDetail)` 填充行数据
- 然后用 `item` 的字段显式覆盖创建 `newRow`
**根因定位**`handleSaveGroup` 在构建 `newRow`line 1594-1617`item` 直接取值覆盖了 `setValue` 设置的值。问题在于:
1. **`item.unitCodeName` 可能为 undefined**:组套明细 SQL 中 `unitCodeName` 来自字典关联 `sys_dict_data`,如果字典匹配不上则为 null。`newRow``unitCode_dictText` 直接使用 `item.unitCodeName || ''`,导致显示为空。
2. **`positionName` 未在 `orderGroupDrawer` 处理项中显式设置**:虽然 `setValue` 会通过库存查询设置 `positionName`,但 `orderGroupDrawer.vue``handleUseOrderGroup` 没有将 `positionName`(或至少 `orderDetail.positionName`)包含在 processed item 中,导致 `setValue` 的库存查找依赖 `inventoryList`,而 `inventoryList` 来自后端 `AdviceBaseDto`
3. **`doseUnitCode_dictText` 依赖 `setValue``unitCodeList`**`orderGroupDrawer` 的处理项中没有显式包含 `doseUnitCode_dictText`,完全依赖 `mergedDetail` 中 spread 的 `orderDetail` 字段。
## 影响范围
- 前端文件:`openhis-ui-vue3/src/views/doctorstation/components/prescription/orderGroupDrawer.vue`
- 前端文件:`openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue`
- 影响场景:住院医生工作站和门诊医生工作站应用医嘱组套
## 修复方案
**修改 `orderGroupDrawer.vue` 的 `handleUseOrderGroup` 函数**line 630-688
在 processed item 的 return 对象中显式添加缺失的字段:
- `doseUnitCode_dictText`:从 orderDetail 获取剂量单位显示文本
- `positionName`:从 orderDetail 获取执行科室/药房名称
- `injectFlag` / `injectFlag_enumText`:注射标识
- `skinTestFlag` / `skinTestFlag_enumText`:皮试标识
- `partPercent``partAttributeEnum``unitConversionRatio`:用于价格计算的关键字段
这些字段在 `orderDetail`AdviceBaseDto中都有只是没有在 processed item 的顶层显式设置。`handleSaveGroup``newRow` 通过 `...prescriptionList.value[rowIndex.value]` spread 能获取到 `setValue` 设置的值,但显式在顶层包含可以确保数据流的完整性。
## 验证计划
1. 修改代码后,用 `node --check` 验证语法
2. 在住院医生工作站测试:选择患者 → 点击组套 → 预览组套 → 应用到当前患者
3. 验证表格中显示的字段:单次剂量、总量、总金额、药房/科室均有值
---
## 修复结果:✅ 成功10行改动
**修改文件**`openhis-ui-vue3/src/views/doctorstation/components/prescription/orderGroupDrawer.vue`
**改动说明**:在 `handleUseOrderGroup` 函数的 processed item 中显式添加了以下缺失字段:
- `doseUnitCode_dictText`:剂量单位显示文本(如"mg"),用于"单次剂量"列的后缀显示
- `positionName`:药房/科室名称,用于"药房/科室"列显示
- `injectFlag` / `injectFlag_enumText`:注射药品标识及文本
- `skinTestFlag` / `skinTestFlag_enumText`:皮试标识及文本
**策略**策略A直接修复代码逻辑—— 组套应用时数据预处理缺失部分关键字段,导致父组件 `handleSaveGroup` 构建行数据时无法获取完整信息。补充字段后,`setValue``newRow` 构造均能正确传递这些数据到表格。

View File

@@ -345,9 +345,9 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
encounterId, tenantId); encounterId, tenantId);
} }
// 写入 div_log 审计日志(独立于队列项,确保每次完诊都生成记录) // 写入 div_log 审计日志(每次完诊都生成记录,确保审计链路完整
// Bug #401使用更新前记录的原始状态判断,避免自身更新后将状态改为 COMPLETED 导致误判为"已完成" // Bug #401移除 queueWasAlreadyCompleted 条件限制,避免队列已由分诊台完诊时
if (!queueWasAlreadyCompleted) { // 医生站完诊不写日志导致审计记录缺失;同时保留 queueWasAlreadyCompleted 日志用于排查
try { try {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
DivLog divLog = new DivLog() DivLog divLog = new DivLog()
@@ -359,10 +359,12 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
.setUpdateAt(LocalDateTime.now()) .setUpdateAt(LocalDateTime.now())
.setCreatedAt(LocalDateTime.now()); .setCreatedAt(LocalDateTime.now());
divLogService.save(divLog); divLogService.save(divLog);
if (queueWasAlreadyCompleted) {
log.info("完诊:队列项已由分诊台完诊,医生站补充写入审计日志 encounterId={}", encounterId);
}
} catch (Exception e) { } catch (Exception e) {
log.error("写入div_log审计日志失败", e); log.error("写入div_log审计日志失败", e);
} }
}
// 4. 更新状态、完成时间以及初复诊标识 // 4. 更新状态、完成时间以及初复诊标识
Date now = new Date(); Date now = new Date();

View File

@@ -653,16 +653,6 @@ async function handleUseOrderGroup(row) {
unitCodeName: item.unitCodeName || orderDetail.unitCode_dictText, unitCodeName: item.unitCodeName || orderDetail.unitCode_dictText,
minUnitCode: orderDetail.minUnitCode, minUnitCode: orderDetail.minUnitCode,
doseUnitCode: orderDetail.doseUnitCode, doseUnitCode: orderDetail.doseUnitCode,
doseUnitCode_dictText: orderDetail.doseUnitCode_dictText || '',
// 药房/科室名称setValue 通过库存查找设置,但需确保 orderDetail 中有)
positionName: orderDetail.positionName || '',
// 注射/皮试标识(表格列显示依赖这些字段)
injectFlag: orderDetail.injectFlag,
injectFlag_enumText: orderDetail.injectFlag_enumText || '',
skinTestFlag: orderDetail.skinTestFlag,
skinTestFlag_enumText: orderDetail.skinTestFlag_enumText || '',
// 字典文本(传递到 item 层级,避免后续代码依赖 mergedDetail 再查一次) // 字典文本(传递到 item 层级,避免后续代码依赖 mergedDetail 再查一次)
methodCode_dictText: methodCodeDictText, methodCode_dictText: methodCodeDictText,