Browse Source

优化处方单展示药品列表数据

cgp 1 week ago
parent
commit
fa3bd4d75f

+ 49 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeServiceImpl.java

@@ -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) {