diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java index 5e4e9c28..6dccd820 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java @@ -83,9 +83,14 @@ public class AdviceUtils { * @return 提示信息 */ public String checkInventory(List adviceSaveList) { - // 医嘱定义ID集合 + // 医嘱定义ID集合(过滤null值,避免SQL查询异常) List adviceDefinitionIdList - = adviceSaveList.stream().map(AdviceSaveDto::getAdviceDefinitionId).collect(Collectors.toList()); + = adviceSaveList.stream().map(AdviceSaveDto::getAdviceDefinitionId) + .filter(id -> id != null).collect(Collectors.toList()); + // 🔧 Bug #504 修复:如果所有adviceDefinitionId都为null,跳过库存校验 + if (adviceDefinitionIdList.isEmpty()) { + return null; + } // 医嘱库存集合 List adviceInventoryList = doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList, @@ -99,6 +104,10 @@ public class AdviceUtils { = this.subtractInventory(adviceInventoryList, adviceDraftInventoryList); // 检查库存 for (AdviceSaveDto saveDto : adviceSaveList) { + // 🔧 Bug #504 修复:退回医嘱可能adviceDefinitionId为空,跳过校验 + if (saveDto.getAdviceDefinitionId() == null) { + continue; + } boolean matched = false; for (AdviceInventoryDto inventoryDto : adviceInventory) { // 匹配条件:adviceDefinitionId, adviceTableName, locationId, lotNumber 同时相等 @@ -108,10 +117,12 @@ public class AdviceUtils { || saveDto.getLotNumber().equals(inventoryDto.getLotNumber()); boolean tableNameMatch = StringUtils.isEmpty(saveDto.getAdviceTableName()) || inventoryDto.getItemTable().equals(saveDto.getAdviceTableName()); -// if (saveDto.) + // 🔧 Bug #504 修复:退回医嘱可能locationId为空,跳过location匹配 + boolean locationMatch = saveDto.getLocationId() == null + || inventoryDto.getLocationId().equals(saveDto.getLocationId()); if (inventoryDto.getItemId().equals(saveDto.getAdviceDefinitionId()) && tableNameMatch - && inventoryDto.getLocationId().equals(saveDto.getLocationId()) && lotNumberMatch) { + && locationMatch && lotNumberMatch) { matched = true; // 检查库存是否充足 BigDecimal minUnitQuantity = saveDto.getMinUnitQuantity(); diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml index c5d06303..4be9c705 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml @@ -216,7 +216,8 @@ ccd.name AS condition_definition_name, T1.therapy_enum AS therapyEnum, T1.sort_number AS sort_number, - T1.based_on_id AS based_on_id + T1.based_on_id AS based_on_id, + T1.medication_id AS advice_definition_id FROM med_medication_request AS T1 LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id AND T2.delete_flag = '0' @@ -268,7 +269,8 @@ '' AS condition_definition_name, 2 AS therapyEnum, 99 AS sort_number, - T1.based_on_id AS based_on_id + T1.based_on_id AS based_on_id, + T1.device_def_id AS advice_definition_id FROM wor_device_request AS T1 LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id AND T2.delete_flag = '0' @@ -317,7 +319,8 @@ '' AS condition_definition_name, COALESCE(T1.therapy_enum, 2) AS therapyEnum, 99 AS sort_number, - T1.based_on_id AS based_on_id + T1.based_on_id AS based_on_id, + T1.activity_id AS advice_definition_id FROM wor_service_request AS T1 LEFT JOIN wor_activity_definition AS T2 ON T2.ID = T1.activity_id