From e90e541af3f44d8b1eb7fe62ad1fcd543e6326fa Mon Sep 17 00:00:00 2001 From: chenqi Date: Mon, 23 Mar 2026 17:58:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(doctorstation):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E8=AF=8A=E7=96=97=E9=A1=B9=E7=9B=AE=E6=89=A7=E8=A1=8C=E7=A7=91?= =?UTF-8?q?=E5=AE=A4=E9=AA=8C=E8=AF=81=E5=8F=8A=E8=80=97=E6=9D=90=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98=20bug#220?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复诊疗项目执行科室非空校验逻辑,使用effectiveOrgId替代positionId - 添加getEffectiveOrgId方法统一获取执行科室ID的兼容处理 - 修复耗材价格处理逻辑,正确区分price和retailPrice字段避免零值判断错误 - 更新数据库查询映射,优化设备定义表与收费项目定义表关联条件 - 添加调试日志输出便于问题排查 --- .../DoctorStationAdviceAppServiceImpl.java | 7 +- .../web/doctorstation/dto/AdviceSaveDto.java | 22 +++++++ .../datadictionary/DeviceManageMapper.xml | 10 +-- .../components/adviceBaseList.vue | 66 +++++++++++-------- 4 files changed, 70 insertions(+), 35 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index aa2e422c..748e1876 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -1077,7 +1077,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) { // 🔧 Bug Fix #238: 诊疗项目执行科室非空校验 if (adviceSaveDto.getAdviceType() != null && adviceSaveDto.getAdviceType() == 3) { - if (adviceSaveDto.getPositionId() == null) { + Long effectiveOrgId = adviceSaveDto.getEffectiveOrgId(); + if (effectiveOrgId == null) { throw new ServiceException("诊疗项目必须选择执行科室"); } } @@ -1116,8 +1117,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生 serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id serviceRequest.setAuthoredTime(curDate); // 请求签发时间 - // 执行科室 - serviceRequest.setOrgId(adviceSaveDto.getPositionId()); + // 执行科室 - 使用兼容方法获取执行科室ID + serviceRequest.setOrgId(adviceSaveDto.getEffectiveOrgId()); serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码 serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java index 0b973fad..743e8684 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java @@ -50,10 +50,32 @@ public class AdviceSaveDto { /** * 物理位置id | 可能是 发药药房id,耗材房id,执行科室id + * 前端字段名:orgId(诊疗项目) + * 对应数据库:org_id / perform_location */ @JsonSerialize(using = ToStringSerializer.class) private Long positionId; + /** + * 执行科室ID | 诊疗项目使用 + * 前端传来字段名:orgId + * 对应数据库:org_id + * 🔧 Bug Fix #238: 添加此字段以支持前端orgId传参 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + + /** + * 获取有效的执行科室ID(兼容处理) + * 优先使用orgId,如果不存在则使用positionId + * 🔧 Bug Fix #238: 统一获取执行科室ID的方法 + * + * @return 有效的科室ID,如果都为null则返回null + */ + public Long getEffectiveOrgId() { + return orgId != null ? orgId : positionId; + } + /** 药品性质 | 分方使用 */ private String pharmacologyCategoryCode; diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml index ca161cf9..38baa0a5 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml @@ -100,10 +100,11 @@ AND T5.instance_table = 'adm_device_definition' ) as maximum_retail_price--最高零售价 FROM adm_device_definition T1 - LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id + LEFT JOIN adm_charge_item_definition T2 + ON T1.id = T2.instance_id + AND T2.instance_table = 'adm_device_definition' T1.delete_flag = '0' - AND T2.instance_table = 'adm_device_definition' ORDER BY T1.bus_no @@ -170,10 +171,11 @@ AND T5.instance_table = 'adm_device_definition' ) as maximum_retail_price--最高零售价 FROM adm_device_definition T1 - LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id + LEFT JOIN adm_charge_item_definition T2 + ON T1.id = T2.instance_id + AND T2.instance_table = 'adm_device_definition' T1.delete_flag = '0' - AND T2.instance_table = 'adm_device_definition' AND T1.id = #{id} diff --git a/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue b/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue index a3719be7..2e4d4171 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue @@ -257,35 +257,45 @@ function fetchFromApi(searchKey) { searchKey: searchKey || '', statusEnum: 2, }).then((res) => { + console.log('[Debug] 耗材列表返回数据:', res.data); if (res.data && res.data.records) { - adviceBaseList.value = res.data.records.map((item) => ({ - adviceName: item.name || item.busNo, - adviceType: 4, - unitCode: item.unitCode || '', - unitCode_dictText: item.unitCode_dictText || '', - minUnitCode: item.minUnitCode || item.unitCode || '', - minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '', - volume: item.size || item.totalVolume || '', - partPercent: item.partPercent || 1, - priceList: item.price ? [{ price: item.price }] : (item.retailPrice ? [{ price: item.retailPrice }] : []), - inventoryList: [], - adviceDefinitionId: item.id, - adviceTableName: 'adm_device_definition', - chargeItemDefinitionId: item.id, - positionId: item.locationId, - positionName: item.locationId_dictText || '', - dose: 0, - doseUnitCode: item.minUnitCode || item.unitCode || '', - doseUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '', - injectFlag: 0, - injectFlag_enumText: '否', - skinTestFlag: 0, - skinTestFlag_enumText: '否', - categoryCode: item.categoryCode || '', - deviceId: item.id, - deviceName: item.name, - ...item, - })); + adviceBaseList.value = res.data.records.map((item) => { + console.log('[Debug] 耗材项:', item.name, 'price:', item.price, 'retailPrice:', item.retailPrice); + return { + adviceName: item.name || item.busNo, + adviceType: 4, + unitCode: item.unitCode || '', + unitCode_dictText: item.unitCode_dictText || '', + minUnitCode: item.minUnitCode || item.unitCode || '', + minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '', + volume: item.size || item.totalVolume || '', + partPercent: item.partPercent || 1, + // 🔧 Bug #220 修复:正确处理耗材价格,支持price或retailPrice字段 + // 零售价可能是0,所以不能用简单的布尔判断,需要明确检查null/undefined + priceList: (item.price !== undefined && item.price !== null) + ? [{ price: item.price }] + : ((item.retailPrice !== undefined && item.retailPrice !== null) + ? [{ price: item.retailPrice }] + : []), + inventoryList: [], + adviceDefinitionId: item.id, + adviceTableName: 'adm_device_definition', + chargeItemDefinitionId: item.id, + positionId: item.locationId, + positionName: item.locationId_dictText || '', + dose: 0, + doseUnitCode: item.minUnitCode || item.unitCode || '', + doseUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '', + injectFlag: 0, + injectFlag_enumText: '否', + skinTestFlag: 0, + skinTestFlag_enumText: '否', + categoryCode: item.categoryCode || '', + deviceId: item.id, + deviceName: item.name, + ...item, + }; + }); nextTick(() => { currentIndex.value = 0; });