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