|
|
@@ -59,6 +59,8 @@ import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.List;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 处方Service业务层处理
|
|
|
@@ -113,6 +115,9 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
|
|
|
@Autowired
|
|
|
private DoctorMsgMapper doctorMsgMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FsStoreProductMapper fsStoreProductMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 查询处方
|
|
|
*
|
|
|
@@ -559,7 +564,7 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
|
|
|
o.setHistoryAllergic(f.getHistoryAllergic());
|
|
|
o.setDiagnose(f.getDiagnose());
|
|
|
// 在这里添加处方药品列表的值
|
|
|
- o.setPrescribeDrug(list);
|
|
|
+ o.setPrescribeDrug(filterNonDrugPrescribe(list));
|
|
|
o.setDoctorName(f.getDoctorName());
|
|
|
o.setAuditDoctor(f.getDoctorDrugName());
|
|
|
o.setDispatcher("");
|
|
|
@@ -583,6 +588,49 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
|
|
|
}
|
|
|
return f.getPrescribeImgUrl();
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 更新处方单药品列表中每项药品的 isDrug 状态。
|
|
|
+ * <p>
|
|
|
+ * 该方法通过处方单中的 productId 查询最新的产品信息,
|
|
|
+ * 并使用查询结果中的 isDrug 值来更新原始处方单列表中对应项的 isDrug 字段。
|
|
|
+ * 注意:此操作会直接修改传入的 {@code prescribeDrugs} 列表。
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param prescribeDrugs 待更新的处方单药品列表。如果为 null 或空,则直接返回空列表。
|
|
|
+ * @return 更新了 isDrug 状态的处方单药品列表 (与传入的列表为同一实例)。
|
|
|
+ */
|
|
|
+ public List<FsPrescribeDrug> filterNonDrugPrescribe(List<FsPrescribeDrug> prescribeDrugs){
|
|
|
+ if (CollectionUtils.isEmpty( prescribeDrugs)){
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ //提取处方单里面的产品id
|
|
|
+ Set<Long> productIds=prescribeDrugs.stream().map(FsPrescribeDrug::getProductId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
+ if (productIds.isEmpty()){
|
|
|
+ log.info("处方单 {} 对应的产品id为空!",prescribeDrugs);
|
|
|
+ return prescribeDrugs;
|
|
|
+ }
|
|
|
+ //查询fs_store_product表,获取药品的最新状态(目前用于判断是否是药品)
|
|
|
+ List<FsStoreProduct> storeProductIns = fsStoreProductMapper.getStoreProductInProductIds(new ArrayList<>(productIds));
|
|
|
+ if (storeProductIns.isEmpty()){
|
|
|
+ log.info("根据产品id:{}查询产品信息为空!",storeProductIns);
|
|
|
+ }
|
|
|
+ //构造一个Map(key为productId,value为FsStoreProduct)
|
|
|
+ Map<Long, FsStoreProduct> storeProductMap = storeProductIns.stream().collect(Collectors.toMap(FsStoreProduct::getProductId, Function.identity()));
|
|
|
+ //获取处方单药品的最新isDrug状态(1:是药品;0:不是药品)
|
|
|
+ for (FsPrescribeDrug drug : prescribeDrugs){
|
|
|
+ if (drug.getProductId()!=null){
|
|
|
+ FsStoreProduct product = storeProductMap.get(drug.getProductId());
|
|
|
+ if (product != null){
|
|
|
+ drug.setIsDrug(product.getIsDrug());
|
|
|
+ }else {
|
|
|
+ log.info("根据产品id:{}查询产品信息为空!",drug.getProductId());
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ log.info("处方单 {} 对应的产品id为空!",drug.getPrescribeId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return prescribeDrugs;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public Long insertFsPrescribeByPackageOrder(FsPackageOrder packageOrder) {
|