From 20817d6dc453d349753eda3dda15fb2ae06de27a Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 21:05:39 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#547:=20=E6=89=A7=E8=A1=8C=E7=A7=91?= =?UTF-8?q?=E5=AE=A4=E9=85=8D=E7=BD=AE=E4=BF=9D=E5=AD=98=E6=97=B6=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=86=B2=E7=AA=81=E6=A3=80=E6=9F=A5=E6=9C=AA=E9=99=90?= =?UTF-8?q?=E5=AE=9A=E5=BD=93=E5=89=8D=E7=A7=91=E5=AE=A4=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=AF=AF=E6=8A=A5"=E4=B8=8E=E6=9C=AA=E7=9F=A5?= =?UTF-8?q?=E7=A7=91=E5=AE=A4=E6=97=B6=E9=97=B4=E5=86=B2=E7=AA=81"=20?= =?UTF-8?q?=E2=80=94=20getOrgLocListByOrgIdAndActivityDefinitionId=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=AD=BE=E5=90=8D=E4=BB=85=E5=90=AB=20activi?= =?UTF-8?q?tyDefinitionId=20=E5=8F=82=E6=95=B0=EF=BC=8C=E5=AE=9E=E9=99=85?= =?UTF-8?q?=20SQL=20=E6=9F=A5=E8=AF=A2=E7=BC=BA=E5=B0=91=20organizationId?= =?UTF-8?q?=20=E8=BF=87=E6=BB=A4=EF=BC=8C=E6=97=B6=E9=97=B4=E9=87=8D?= =?UTF-8?q?=E5=8F=A0=E6=A0=A1=E9=AA=8C=E8=B7=A8=E7=A7=91=E5=AE=A4=E6=AF=94?= =?UTF-8?q?=E5=AF=B9=EF=BC=8C=E5=B7=B2=E4=BF=AE=E5=A4=8D=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E5=92=8C=E5=AE=9E=E7=8E=B0=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=20activityDefinitionId=20=E5=92=8C=20organiz?= =?UTF-8?q?ationId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- md/bug-analysis/bug444-analysis.md | 30 +++++++++++++++++++ .../OrganizationLocationAppServiceImpl.java | 2 +- .../impl/OrganizationLocationServiceImpl.java | 4 ++- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 md/bug-analysis/bug444-analysis.md diff --git a/md/bug-analysis/bug444-analysis.md b/md/bug-analysis/bug444-analysis.md new file mode 100644 index 00000000..36265ee6 --- /dev/null +++ b/md/bug-analysis/bug444-analysis.md @@ -0,0 +1,30 @@ +# Bug #444 分析报告 + +## Bug 描述 +生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息。具体表现为: +- 列表中出现了"小腿烧伤扩创交腿皮瓣修复术"(属于手术诊疗项目) +- 列表中出现了"心脏彩色多普勒超声"(属于检查/诊疗项目) +- 非药品类计费信息错误地混入"已引用计费药品"列表 + +## 根因定位 +**文件**: `openhis-ui-vue3/src/views/surgicalschedule/index.vue` +**行号**: 1580 (handleMedicalAdvice), 1864 (handleQuoteBilling), 1850 (handleTemporaryMedicalRefresh) + +三处过滤逻辑均使用: +```javascript +if (item.adviceType !== 1) return false; +``` + +**问题1(主因)**: `adviceType` 字段命名兼容不完整。代码在 `insuranceType`、`contentJson` 等字段上做了 camelCase + snake_case 双兼容(如 `item.insuranceType || item.insurance_type`),但 `adviceType` 只检查了 camelCase。若后端返回 snake_case 数据(`advice_type`),`item.adviceType` 为 `undefined`,`undefined !== 1` 为 `true`,导致所有非药品项目全部放行。 + +**问题2(次因)**: 即使 `adviceType` 正确返回,后端可能存在数据标注错误的情况(非药品项目被标为 adviceType=1),缺乏基于药品名称的二次验证。 + +## 修复方案 +1. `adviceType` 检查增加 snake_case 回退:`const at = item.adviceType ?? item.advice_type; if (at !== 1) return false;` +2. 增加药品名称关键字二次过滤:排除名称中包含"术"、"检查"、"超声"、"多普勒"等关键词的非药品项目 + +## 验收标准 +1. "已引用计费药品"列表中只显示药品类项目 +2. 不显示手术诊疗项目(如"小腿烧伤扩创交腿皮瓣修复术") +3. 不显示检查项目(如"心脏彩色多普勒超声") +4. 药品名称正常显示 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index 3bf2ac30..b207decf 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -159,7 +159,7 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation String activityName = activityDef != null ? activityDef.getName() : ""; List organizationLocationList = - organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getActivityDefinitionId()); + organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), orgLoc.getActivityDefinitionId()); organizationLocationList = (orgLoc.getId() != null) ? organizationLocationList.stream().filter(item -> !orgLoc.getId().equals(item.getId())).toList() : organizationLocationList; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java index c9e680fa..0212232e 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java @@ -53,12 +53,14 @@ public class OrganizationLocationServiceImpl extends ServiceImpl getOrgLocListByOrgIdAndActivityDefinitionId(Long activityDefinitionId) { + public List getOrgLocListByOrgIdAndActivityDefinitionId(Long organizationId, Long activityDefinitionId) { return baseMapper.selectList(new LambdaQueryWrapper() + .eq(OrganizationLocation::getOrganizationId, organizationId) .eq(OrganizationLocation::getActivityDefinitionId, activityDefinitionId)); }