Quellcode durchsuchen

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

cgp vor 1 Woche
Ursprung
Commit
6a79e6f866

+ 54 - 28
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeServiceImpl.java

@@ -564,7 +564,8 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
             o.setHistoryAllergic(f.getHistoryAllergic());
             o.setDiagnose(f.getDiagnose());
             // 在这里添加处方药品列表的值
-            o.setPrescribeDrug(filterNonDrugPrescribe(list));
+            List<FsPrescribeDrug> PrescribeDrugList=filterNonDrugPrescribe(list);
+            o.setPrescribeDrug(PrescribeDrugList);
             o.setDoctorName(f.getDoctorName());
             o.setAuditDoctor(f.getDoctorDrugName());
             o.setDispatcher("");
@@ -589,47 +590,72 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
         return f.getPrescribeImgUrl();
     }
     /**
-     * 更新处方单药品列表中每项药品的 isDrug 状态
+     * 根据产品最新状态过滤处方单药品列表
      * <p>
-     * 该方法通过处方单中的 productId 查询最新的产品信息,
-     * 并使用查询结果中的 isDrug 值来更新原始处方单列表中对应项的 isDrug 字段
-     * 注意:此操作会直接修改传入的 {@code prescribeDrugs} 列表
+     * 该方法的过滤规则如下:
+     * - 对于 productId 非空的处方药,使用其对应产品表(FsStoreProduct)中的 isDrug 状态进行判断,只保留 isDrug=1 的项
+     * - 对于 productId 为空的处方药,直接使用其自身的 isDrug 状态进行判断,只保留 isDrug=1 的项
      * </p>
      *
-     * @param prescribeDrugs 待更新的处方单药品列表。如果为 null 或空,则直接返回空列表。
-     * @return 更新了 isDrug 状态的处方单药品列表 (与传入的列表为同一实例)
+     * @param prescribeDrugs 待过滤的处方单药品列表。如果为 null 或空,则直接返回空列表。
+     * @return 一个符合上述规则的新列表
      */
-    public List<FsPrescribeDrug> filterNonDrugPrescribe(List<FsPrescribeDrug> prescribeDrugs){
-        if (CollectionUtils.isEmpty( prescribeDrugs)){
+    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);
+        Set<Long> productIds = prescribeDrugs.stream().map(FsPrescribeDrug::getProductId).filter(Objects::nonNull).collect(Collectors.toSet());
+
+        List<FsStoreProduct> storeProductIns = Collections.emptyList(); // 默认为空列表
+        if (!productIds.isEmpty()) { // 只有当有 productIds 时才查询
+            storeProductIns = fsStoreProductMapper.getStoreProductInProductIds(new ArrayList<>(productIds));
+            if (storeProductIns.isEmpty()) {
+                // log.info("根据产品id:{}查询产品信息为空!",storeProductIns); // 修改日志内容
+                log.info("根据产品id列表:{}查询产品信息为空!", productIds);
+            }
         }
         //构造一个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){
+        // 创建新列表存放过滤后的结果
+        List<FsPrescribeDrug> filteredDrugs = new ArrayList<>();
+
+        for (FsPrescribeDrug drug : prescribeDrugs) {
+            boolean shouldKeep = false; // 默认不保留
+
+            if (drug.getProductId() != null) {
+                // 情况 A: productId 非空,依赖产品表
                 FsStoreProduct product = storeProductMap.get(drug.getProductId());
-                if (product != null){
-                    drug.setIsDrug(product.getIsDrug());
-                }else {
-                    log.info("根据产品id:{}查询产品信息为空!",drug.getProductId());
+                if (product != null) {
+                    // 找到了对应产品,检查 isDrug
+                    if (Integer.valueOf(1).equals(product.getIsDrug())) {
+                        shouldKeep = true;
+                    } else {
+                        log.debug("药品 '{}' (ID: {}) 在产品表中 isDrug={},将被过滤。",
+                                drug.getDrugName(), drug.getProductId(), product.getIsDrug());
+                    }
+                } else {
+                    // 产品表中找不到该 productId,视为无效数据,不保留
+                    log.warn("药品 '{}' (ID: {}) 在产品表中未找到对应记录,将被过滤。",
+                            drug.getDrugName(), drug.getProductId());
+                    // shouldKeep = false;
+                }
+            } else {
+                // 情况 B: productId 为 null,依赖自身 isDrug 状态
+                if (Integer.valueOf(1).equals(drug.getIsDrug())) {
+                    shouldKeep = true;
+                } else {
+                    log.debug("药品 '{}' (ID: null) 自身 isDrug={},将被过滤。",
+                            drug.getDrugName(), drug.getIsDrug());
                 }
-            }else {
-                log.info("处方单 {} 对应的产品id为空!",drug.getPrescribeId());
+            }
+
+            if (shouldKeep) {
+                filteredDrugs.add(drug);
             }
         }
-        return prescribeDrugs;
+
+        return filteredDrugs;
     }
 
     @Override