484 [住院护士站] 医嘱执行报“库存不足”后,发药明细单仍错误产生待发药记录(数据一致性缺陷)
This commit is contained in:
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import com.core.common.core.domain.R;
|
import com.core.common.core.domain.R;
|
||||||
import com.core.common.enums.TenantOptionDict;
|
import com.core.common.enums.TenantOptionDict;
|
||||||
import com.core.common.exception.ServiceException;
|
import com.core.common.exception.ServiceException;
|
||||||
@@ -377,6 +378,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
* @return 操作结果
|
* @return 操作结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public R<?> adviceExecute(AdviceExecuteParam adviceExecuteParam) {
|
public R<?> adviceExecute(AdviceExecuteParam adviceExecuteParam) {
|
||||||
// 实际执行时间
|
// 实际执行时间
|
||||||
Date exeDate = adviceExecuteParam.getExeDate();
|
Date exeDate = adviceExecuteParam.getExeDate();
|
||||||
@@ -804,12 +806,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
chargeItemService.saveOrUpdate(chargeItem);
|
chargeItemService.saveOrUpdate(chargeItem);
|
||||||
} else {
|
} else {
|
||||||
// 批次售卖情况
|
// 批次售卖情况
|
||||||
// 需要的药品数量(小单位)
|
|
||||||
BigDecimal minUnitQuantity = medicationRequestUseExe.getMinUnitQuantity();
|
|
||||||
if (minUnitQuantity == null || minUnitQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
|
||||||
throw new RuntimeException("药品执行数量异常,medicationId: "
|
|
||||||
+ finalLongMedicationRequest.getMedicationId());
|
|
||||||
}
|
|
||||||
// 库存集合
|
// 库存集合
|
||||||
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
|
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
|
||||||
if (inventoryList == null || inventoryList.isEmpty()) {
|
if (inventoryList == null || inventoryList.isEmpty()) {
|
||||||
@@ -822,6 +818,20 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
throw new RuntimeException("未找到药品匹配的定价信息: "
|
throw new RuntimeException("未找到药品匹配的定价信息: "
|
||||||
+ finalLongMedicationRequest.getMedicationId());
|
+ finalLongMedicationRequest.getMedicationId());
|
||||||
}
|
}
|
||||||
|
// 需要的药品数量(小单位)
|
||||||
|
BigDecimal minUnitQuantity = medicationRequestUseExe.getMinUnitQuantity();
|
||||||
|
if (minUnitQuantity == null || minUnitQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
throw new RuntimeException("药品执行数量异常,medicationId: "
|
||||||
|
+ finalLongMedicationRequest.getMedicationId());
|
||||||
|
}
|
||||||
|
// 【修复】预先计算总可用库存,确保在写入任何数据前进行校验
|
||||||
|
BigDecimal totalAvailableQuantity = inventoryList.stream()
|
||||||
|
.map(AdviceInventoryDto::getQuantity)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
if (totalAvailableQuantity.compareTo(minUnitQuantity) < 0) {
|
||||||
|
throw new RuntimeException("药品库存不足,medicationId: "
|
||||||
|
+ finalLongMedicationRequest.getMedicationId());
|
||||||
|
}
|
||||||
// 剩余需要分配的数量
|
// 剩余需要分配的数量
|
||||||
BigDecimal remainingQuantity = minUnitQuantity;
|
BigDecimal remainingQuantity = minUnitQuantity;
|
||||||
|
|
||||||
@@ -927,11 +937,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
chargeItem.setTotalPrice(totalPrice); // 总价
|
chargeItem.setTotalPrice(totalPrice); // 总价
|
||||||
|
|
||||||
chargeItemService.saveOrUpdate(chargeItem);
|
chargeItemService.saveOrUpdate(chargeItem);
|
||||||
|
|
||||||
}
|
|
||||||
if (remainingQuantity.compareTo(BigDecimal.ZERO) > 0) {
|
|
||||||
throw new RuntimeException("药品库存不足,medicationId: "
|
|
||||||
+ finalLongMedicationRequest.getMedicationId());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user