Fix Bug #481: [住院护士站-医嘱执行] 药品"注射用头孢哌酮钠舒巴坦钠"库存充足,但执行医嘱时提示库存不足
在 checkExeMedInventory 方法中,原代码使用 findFirst() 只取第一个批次的库存 进行校验,导致同一库房多个批次的库存总量未被聚合计算。改为 collect(Collectors.toList()) 收集所有匹配批次,然后用 Stream reduce 聚合总可用库存后再与需求量比较。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -178,22 +178,26 @@ public class AdviceUtils {
|
|||||||
// 生命提示信息集合
|
// 生命提示信息集合
|
||||||
List<String> tipsList = new ArrayList<>();
|
List<String> tipsList = new ArrayList<>();
|
||||||
for (MedicationRequestUseExe medicationRequestUseExe : medUseExeList) {
|
for (MedicationRequestUseExe medicationRequestUseExe : medUseExeList) {
|
||||||
Optional<AdviceInventoryDto> matchedInventory = adviceInventory.stream()
|
// 聚合同一位置所有批次的库存总量
|
||||||
|
List<AdviceInventoryDto> matchedInventories = adviceInventory.stream()
|
||||||
.filter(inventoryDto -> medicationRequestUseExe.getMedicationId().equals(inventoryDto.getItemId())
|
.filter(inventoryDto -> medicationRequestUseExe.getMedicationId().equals(inventoryDto.getItemId())
|
||||||
&& CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(inventoryDto.getItemTable())
|
&& CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(inventoryDto.getItemTable())
|
||||||
&& medicationRequestUseExe.getPerformLocation().equals(inventoryDto.getLocationId())
|
&& medicationRequestUseExe.getPerformLocation().equals(inventoryDto.getLocationId())
|
||||||
// 如果选择了具体的批次号,校验库存时需要加上批次号的匹配条件
|
// 如果选择了具体的批次号,校验库存时需要加上批次号的匹配条件
|
||||||
&& (StringUtils.isEmpty(medicationRequestUseExe.getLotNumber())
|
&& (StringUtils.isEmpty(medicationRequestUseExe.getLotNumber())
|
||||||
|| medicationRequestUseExe.getLotNumber().equals(inventoryDto.getLotNumber())))
|
|| medicationRequestUseExe.getLotNumber().equals(inventoryDto.getLotNumber())))
|
||||||
.findFirst();
|
.collect(Collectors.toList());
|
||||||
// 匹配到库存信息
|
// 匹配到库存信息
|
||||||
if (matchedInventory.isPresent()) {
|
if (!matchedInventories.isEmpty()) {
|
||||||
AdviceInventoryDto inventoryDto = matchedInventory.get();
|
// 聚合所有批次的可用库存
|
||||||
if ((medicationRequestUseExe.getExecuteTimesNum()
|
BigDecimal totalQuantity = matchedInventories.stream()
|
||||||
.multiply(medicationRequestUseExe.getMinUnitQuantity()))
|
.map(dto -> dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO)
|
||||||
.compareTo(inventoryDto.getQuantity()) > 0) {
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal requestQuantity = medicationRequestUseExe.getExecuteTimesNum()
|
||||||
|
.multiply(medicationRequestUseExe.getMinUnitQuantity());
|
||||||
|
if (requestQuantity.compareTo(totalQuantity) > 0) {
|
||||||
tipsList
|
tipsList
|
||||||
.add("【" + medicationRequestUseExe.getBusNo() + "】在" + inventoryDto.getLocationName() + "库存不足");
|
.add("【" + medicationRequestUseExe.getBusNo() + "】在" + matchedInventories.get(0).getLocationName() + "库存不足");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tipsList.add("【" + medicationRequestUseExe.getBusNo() + "】未匹配到库存信息");
|
tipsList.add("【" + medicationRequestUseExe.getBusNo() + "】未匹配到库存信息");
|
||||||
|
|||||||
Reference in New Issue
Block a user