From 2bcf612defe0e85725df3e9dc19dc20cb8a9f40e Mon Sep 17 00:00:00 2001
From: xueqingkun <xueqingkun@126.com>
Date: Thu, 7 Mar 2024 14:24:36 +0800
Subject: [PATCH] =?UTF-8?q?web=20:=20=E4=BF=AE=E6=94=B9=E8=AF=8A=E6=96=AD?=
 =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=88=9D=E6=AD=A5?=
 =?UTF-8?q?=E8=AF=8A=E6=96=AD=E7=BB=93=E6=9E=9C=EF=BC=8C=E6=AD=A3=E5=BC=8F?=
 =?UTF-8?q?=E8=AF=8A=E6=96=AD=E7=BB=93=E6=9E=9C=EF=BC=8C=E9=89=B4=E5=88=AB?=
 =?UTF-8?q?=E4=BE=9D=E6=8D=AE=E5=B1=95=E7=A4=BA=E7=97=85=E5=8E=86=E4=B8=AD?=
 =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9A=84=E6=95=B0=E6=8D=AE=E5=B9=B6=E5=AF=B9?=
 =?UTF-8?q?=E5=AD=A6=E7=94=9F=E9=80=89=E4=B8=AD=E7=9A=84=E8=AF=8A=E6=96=AD?=
 =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=9B=E8=A1=8C=E6=A0=87=E8=AF=86(?=
 =?UTF-8?q?=E5=8E=9F=E6=9C=AC=E5=B1=95=E7=A4=BA=E5=AD=A6=E7=94=9F=E9=80=89?=
 =?UTF-8?q?=E4=B8=AD=E7=9A=84=E8=AF=8A=E6=96=AD=E6=95=B0=E6=8D=AE=EF=BC=8C?=
 =?UTF-8?q?=E5=B9=B6=E5=AF=B9=E6=AD=A3=E7=A1=AE=E7=9A=84=E8=AF=8A=E6=96=AD?=
 =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=9B=E8=A1=8C=E6=A0=87=E8=AF=86)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../pojo/vo/BasisDiagnosisNodeResVO.java      |  10 +-
 .../impl/AskDiagnosisResultServiceImpl.java   | 250 ++++++++++++------
 2 files changed, 174 insertions(+), 86 deletions(-)

diff --git a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/BasisDiagnosisNodeResVO.java b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/BasisDiagnosisNodeResVO.java
index b323b263..84195acf 100644
--- a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/BasisDiagnosisNodeResVO.java
+++ b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/BasisDiagnosisNodeResVO.java
@@ -18,5 +18,13 @@ public class BasisDiagnosisNodeResVO {
     @ApiModelProperty("是否正确,0:不正确 1:正确")
     private Integer correct;
 
-
+    public BasisDiagnosisNodeResVO() {
+    }
+
+    public BasisDiagnosisNodeResVO(Integer type, String recordName, String recordId, Integer correct) {
+        this.type = type;
+        this.recordName = recordName;
+        this.recordId = recordId;
+        this.correct = correct;
+    }
 }
diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java
index 40df6d1f..deab1dfd 100644
--- a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java
+++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java
@@ -13,6 +13,8 @@ import com.supervision.model.*;
 import com.supervision.pojo.vo.*;
 import com.supervision.service.*;
 import com.supervision.vo.ask.TreatmentPlanRecordVo;
+import com.supervision.vo.manage.DiseaseAncillaryResVo;
+import com.supervision.vo.manage.DiseasePhysicalResVo;
 import com.supervision.vo.manage.DiseaseTreatmentPlanResVo;
 import com.supervision.vo.result.AncillaryRecordByResultDTO;
 import com.supervision.vo.result.PhysicalRecordByResultDTO;
@@ -23,6 +25,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -129,31 +132,15 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
         basisIdentificationResultResVO.setIdentificationDiagnosis(medicalRec.getDifferentialDiagnosisCriteria());
         // 2.2 获取体格检查
         List<PhysicalRecordByResultDTO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
-        List<BasisDiagnosisNodeResVO> nodeList = physicalRecordList.stream()
-                .filter(distinctPredicateNotNull(PhysicalRecordByResultDTO::getToolLocationName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-                    nodeResVO.setType(1);
-                    nodeResVO.setRecordName(e.getToolLocationName());
-                    nodeResVO.setRecordId(e.getRecordId());
-                    nodeResVO.setCorrect(
-                            (ObjectUtil.isNotNull(e.getBasisConfirm()) && 1 == e.getBasisIdentification() && Objects.equals(e.getBasisIdentification(), e.getRecordBasisIdentificationFlag()))
-                                    ? 1 : 0);
-                    return nodeResVO;
-                }).collect(Collectors.toList());
+        List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(medicalRec.getDiseaseId());
+
+        List<BasisDiagnosisNodeResVO> nodeList = physicalRecordMergeListsIdentification(physicalRecordList, diseasePhysicalResVos);
+
         // 2.3 获取辅助检查
         List<AncillaryRecordByResultDTO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
-        List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
-                .filter(distinctPredicateNotNull(AncillaryRecordByResultDTO::getItemName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-                    nodeResVO.setCorrect(
-                            (ObjectUtil.isNotNull(e.getBasisConfirm()) && 1 == e.getBasisIdentification() && Objects.equals(e.getBasisIdentification(), e.getRecordBasisIdentificationFlag()))
-                                    ? 1 : 0);
-                    nodeResVO.setRecordId(e.getRecordId());
-                    nodeResVO.setRecordName(e.getItemName());
-                    nodeResVO.setType(2);
-                    return nodeResVO;
-                }).collect(Collectors.toList());
-        nodeList.addAll(collect);
+        List<DiseaseAncillaryResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(medicalRec.getDiseaseId());
+
+        nodeList.addAll(ancillaryRecordMergeListsIdentification(ancillaryRecordList, diseaseAncillaryResVos));
 
         basisIdentificationResultResVO.setNodeList(nodeList);
         return basisIdentificationResultResVO;
@@ -165,32 +152,14 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
         basisConfirmResultResVO.setConfirmingDiagnosis(medicalRec.getConfirmDiagnosisCriteria());
         // 2.2 获取体格检查的证实诊断依据
         List<PhysicalRecordByResultDTO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
-        List<BasisDiagnosisNodeResVO> nodeList = physicalRecordList.stream()
-                .filter(distinctPredicateNotNull(PhysicalRecordByResultDTO::getToolLocationName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-                    nodeResVO.setType(1);
-                    nodeResVO.setRecordName(e.getToolLocationName());
-                    nodeResVO.setRecordId(e.getRecordId());
-                    nodeResVO.setCorrect(
-                            (ObjectUtil.isNotNull(e.getBasisConfirm()) && 1 == e.getBasisConfirm() && Objects.equals(e.getBasisConfirm(), e.getRecordBasisConfirmFlag()))
-                                    ? 1 : 0);
-                    return nodeResVO;
-                }).collect(Collectors.toList());
+        List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(medicalRec.getDiseaseId());
+
+        List<BasisDiagnosisNodeResVO> nodeList = physicalRecordMergeListsConfirm(physicalRecordList, diseasePhysicalResVos);
 
         // 2.3 获取辅助检查
         List<AncillaryRecordByResultDTO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
-        List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
-                .filter(distinctPredicateNotNull(AncillaryRecordByResultDTO::getItemName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-                    nodeResVO.setCorrect(
-                            (ObjectUtil.isNotNull(e.getBasisConfirm()) && 1 == e.getBasisConfirm() && Objects.equals(e.getBasisConfirm(), e.getRecordBasisConfirmFlag()))
-                                    ? 1 : 0);
-                    nodeResVO.setRecordId(e.getRecordId());
-                    nodeResVO.setRecordName(e.getItemName());
-                    nodeResVO.setType(2);
-                    return nodeResVO;
-                }).collect(Collectors.toList());
-        nodeList.addAll(collect);
+        List<DiseaseAncillaryResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(medicalRec.getDiseaseId());
+        nodeList.addAll(ancillaryRecordMergeListsConfirm(ancillaryRecordList, diseaseAncillaryResVos));
 
         basisConfirmResultResVO.setNodeList(nodeList);
         return basisConfirmResultResVO;
@@ -202,56 +171,167 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
         basisPrimaryResultResVO.setPreliminaryDiagnosis(medicalRec.getPrimarilyDiagnosisCriteria());
         // 根据record记录寻找符合初步诊断依据的项目
         // 2.1 首先获取对话
-        List<BasisDiagnosisNodeResVO> basisDiagnosisNodeResVOS = new ArrayList<>();
         List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, process.getId()).list();
-        if (CollectionUtil.isNotEmpty(qaRecordList)) {
-            List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery()
-                    .eq(AskPatientAnswer::getMedicalId, medicalRec.getId()).list();
-            // 获取配置了答案的项目(配置了答案的,认为是正确,没有配置答案的,走默认回答的,不标记为以正确)
-            Set<String> requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet());
-            List<BasisDiagnosisNodeResVO> qaList = qaRecordList.stream().map(e -> {
-                BasisDiagnosisNodeResVO node = new BasisDiagnosisNodeResVO();
-                node.setType(0);
-                node.setRecordName(e.getQuestion());
-                node.setRecordId(e.getId());
-                node.setCorrect(requireCheckIdSet.contains(e.getAnswerId()) ? 1 : 0);
-                return node;
-
-            }).collect(Collectors.toList());
-            basisDiagnosisNodeResVOS.addAll(qaList);
-        }
+        List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery()
+                .eq(AskPatientAnswer::getMedicalId, medicalRec.getId()).list();
+        // 获取配置了答案的项目(配置了答案的,认为是正确,没有配置答案的,走默认回答的,不标记为以正确)
+        List<BasisDiagnosisNodeResVO> basisDiagnosisNodeResVOS = new ArrayList<>(qaRecordMergeListsBasisPrimary(qaRecordList, list));
+
         // 2.2 获取体格检查
         List<PhysicalRecordByResultDTO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(process.getId());
-        List<BasisDiagnosisNodeResVO> physicalList = physicalRecordList.stream()
-                .filter(distinctPredicateNotNull(PhysicalRecordByResultDTO::getToolLocationName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-                    nodeResVO.setType(1);
-                    nodeResVO.setRecordName(e.getToolLocationName());
-                    nodeResVO.setRecordId(e.getRecordId());
-                    // 如果是初步诊断依据
-                    nodeResVO.setCorrect(e.getPrimarilyDiagnosisCriteriaFlag());
-                    return nodeResVO;
-                }).collect(Collectors.toList());
-        basisDiagnosisNodeResVOS.addAll(physicalList);
+        List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(medicalRec.getDiseaseId());
+
+        basisDiagnosisNodeResVOS.addAll(physicalRecordMergeListsBasisPrimary(physicalRecordList, diseasePhysicalResVos));
+
         // 2.3 获取辅助检查
         List<AncillaryRecordByResultDTO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(process.getId());
-        List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
-                .filter(distinctPredicateNotNull(AncillaryRecordByResultDTO::getItemName)).map(e -> {
-                    BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
-
-                    nodeResVO.setCorrect(e.getPrimarilyDiagnosisCriteriaFlag());
-                    nodeResVO.setRecordId(e.getRecordId());
-                    nodeResVO.setRecordName(e.getItemName());
-                    nodeResVO.setType(2);
-                    return nodeResVO;
-                }).collect(Collectors.toList());
-        basisDiagnosisNodeResVOS.addAll(collect);
+        List<DiseaseAncillaryResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(medicalRec.getDiseaseId());
+
+        basisDiagnosisNodeResVOS.addAll(ancillaryRecordMergeListsBasisPrimary(ancillaryRecordList,diseaseAncillaryResVos));
 
         basisPrimaryResultResVO.setNodeList(basisDiagnosisNodeResVOS);
         return basisPrimaryResultResVO;
     }
 
 
+    private List<BasisDiagnosisNodeResVO> qaRecordMergeListsBasisPrimary(List<DiagnosisQaRecord> qaRecordList, List<AskPatientAnswer> list){
+
+        BiFunction<DiagnosisQaRecord,AskPatientAnswer,Boolean> biFunction = (qaRecord, qa) -> qa.getLibraryQuestionId().equals(qaRecord.getQuestionLibraryId());
+
+        Set<String> requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet());
+
+        Function<DiagnosisQaRecord,BasisDiagnosisNodeResVO> t1 = r -> new BasisDiagnosisNodeResVO(0,r.getQuestion(),r.getId(),
+                requireCheckIdSet.contains(r.getAnswerId()) ? 1 : 0);
+        Function<AskPatientAnswer,BasisDiagnosisNodeResVO> t2 = item -> new BasisDiagnosisNodeResVO(0, item.getQuestion(), item.getId(), 0);
+
+        return mergeListsBasedOnCondition(qaRecordList, list, biFunction, t1, t2);
+    }
+
+
+    private List<BasisDiagnosisNodeResVO> physicalRecordMergeLists(List<PhysicalRecordByResultDTO> physicalRecordList,
+                                                                               List<DiseasePhysicalResVo> diseasePhysicalResVos,
+                                                                   Function<PhysicalRecordByResultDTO,Integer> functionCorrect){
+        physicalRecordList = physicalRecordList.stream()
+                .filter(distinctPredicateNotNull(PhysicalRecordByResultDTO::getToolLocationName)).collect(Collectors.toList());
+
+        BiFunction<PhysicalRecordByResultDTO,DiseasePhysicalResVo,Boolean> biFunction = (r, diseasePhysical) -> StrUtil.equals(diseasePhysical.getToolId(),r.getToolId())
+                && StrUtil.equals(diseasePhysical.getLocationId(),(r.getLocationId()));
+
+        Function<PhysicalRecordByResultDTO,BasisDiagnosisNodeResVO> t1 =   r -> new BasisDiagnosisNodeResVO(1, r.getToolLocationName(),
+                r.getRecordId(), functionCorrect.apply(r));
+
+        // 这里的recordId只为了展示用diseasePhysical.getId()代替。只是为展示使用correct的值固定为不正确
+        Function<DiseasePhysicalResVo,BasisDiagnosisNodeResVO> t2 = diseasePhysical -> new BasisDiagnosisNodeResVO(1, diseasePhysical.getToolName(),
+                diseasePhysical.getId(), 0);
+
+        return mergeListsBasedOnCondition(physicalRecordList, diseasePhysicalResVos,biFunction, t1, t2);
+    }
+
+    private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeLists(List<AncillaryRecordByResultDTO> ancillaryRecordList,
+                                                                    List<DiseaseAncillaryResVo> diseaseAncillaryResVos,
+                                                                   Function<AncillaryRecordByResultDTO,Integer> functionCorrect){
+        ancillaryRecordList = ancillaryRecordList.stream()
+                .filter(distinctPredicateNotNull(AncillaryRecordByResultDTO::getItemName)).collect(Collectors.toList());
+
+        BiFunction<AncillaryRecordByResultDTO,DiseaseAncillaryResVo,Boolean> biFunction =(r, diseaseAncillary) -> StrUtil.equals(diseaseAncillary.getItemId(),r.getItemId());
+
+        Function<AncillaryRecordByResultDTO,BasisDiagnosisNodeResVO> t1 = record -> new BasisDiagnosisNodeResVO(2, record.getItemName(), record.getRecordId(),
+                functionCorrect.apply(record));
+
+        // 这里的recordId只为了展示用diseaseAncillary.getId()代替。只是为展示使用correct的值固定为不正确
+        Function<DiseaseAncillaryResVo,BasisDiagnosisNodeResVO> t2 = diseaseAncillary -> new BasisDiagnosisNodeResVO(2, diseaseAncillary.getItemName(),
+                diseaseAncillary.getId(), 0);
+
+        return mergeListsBasedOnCondition(ancillaryRecordList, diseaseAncillaryResVos,biFunction, t1, t2);
+    }
+    private List<BasisDiagnosisNodeResVO> physicalRecordMergeListsBasisPrimary(List<PhysicalRecordByResultDTO> physicalRecordList,
+                                                                               List<DiseasePhysicalResVo> diseasePhysicalResVos){
+
+        return physicalRecordMergeLists(physicalRecordList, diseasePhysicalResVos, PhysicalRecordByResultDTO::getPrimarilyDiagnosisCriteriaFlag);
+    }
+
+    private List<BasisDiagnosisNodeResVO> physicalRecordMergeListsConfirm(List<PhysicalRecordByResultDTO> physicalRecordList,
+                                                                                 List<DiseasePhysicalResVo> diseasePhysicalResVos){
+
+        Function<PhysicalRecordByResultDTO,Integer> functionCorrect = record -> (ObjectUtil.isNotNull(record.getBasisConfirm()) && 1 == record.getBasisConfirm()
+                && Objects.equals(record.getBasisConfirm(), record.getRecordBasisConfirmFlag())) ? 1 : 0;
+
+        return physicalRecordMergeLists(physicalRecordList, diseasePhysicalResVos, functionCorrect);
+    }
+
+    private List<BasisDiagnosisNodeResVO> physicalRecordMergeListsIdentification(List<PhysicalRecordByResultDTO> physicalRecordList,
+                                                                                 List<DiseasePhysicalResVo> diseasePhysicalResVos){
+
+        Function<PhysicalRecordByResultDTO,Integer> functionCorrect = record -> (ObjectUtil.isNotNull(record.getBasisConfirm()) && 1 == record.getBasisIdentification()
+                && Objects.equals(record.getBasisIdentification(), record.getRecordBasisIdentificationFlag())) ? 1 : 0;
+
+        return physicalRecordMergeLists(physicalRecordList, diseasePhysicalResVos, functionCorrect);
+    }
+
+    private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeListsBasisPrimary(List<AncillaryRecordByResultDTO> ancillaryRecordList,
+                                                                                List<DiseaseAncillaryResVo> diseaseAncillaryResVos){
+
+        return ancillaryRecordMergeLists(ancillaryRecordList, diseaseAncillaryResVos,
+                AncillaryRecordByResultDTO::getPrimarilyDiagnosisCriteriaFlag);
+    }
+
+
+    private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeListsConfirm(List<AncillaryRecordByResultDTO> ancillaryRecordList,
+                                                                                List<DiseaseAncillaryResVo> diseaseAncillaryResVos){
+
+        Function<AncillaryRecordByResultDTO,Integer> functionCorrect =  record -> ObjectUtil.isNotNull(record.getBasisConfirm()) && 1 == record.getBasisConfirm()
+                && Objects.equals(record.getBasisConfirm(), record.getRecordBasisConfirmFlag()) ? 1 : 0 ;
+
+        return ancillaryRecordMergeLists(ancillaryRecordList, diseaseAncillaryResVos,functionCorrect);
+    }
+
+    private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeListsIdentification(List<AncillaryRecordByResultDTO> ancillaryRecordList,
+                                                                                  List<DiseaseAncillaryResVo> diseaseAncillaryResVos){
+        Function<AncillaryRecordByResultDTO,Integer> functionCorrect =  record ->  (ObjectUtil.isNotNull(record.getBasisConfirm()) && 1 == record.getBasisIdentification()
+                && Objects.equals(record.getBasisIdentification(), record.getRecordBasisIdentificationFlag())) ? 1 : 0;
+
+        return ancillaryRecordMergeLists(ancillaryRecordList, diseaseAncillaryResVos,functionCorrect);
+    }
+
+    /**
+     * 根据指定条件合并两个列表。
+     *
+     * @param simpleList 要处理的简单列表。
+     * @param poolList 用于比较的池列表。
+     * @param biFunction 定义合并元素条件。
+     * @param t1 用于处理简单列表中元素的函数。
+     * @param t2 用于处理池列表中元素的函数。
+     * @return 包含根据条件合并的元素的列表。
+     */
+    private <T, M, R> List<R> mergeListsBasedOnCondition(List<T> simpleList, List<M> poolList,
+                                                         BiFunction<T, M, Boolean> biFunction,
+                                                         Function<T, R> t1, Function<M, R> t2) {
+        List<R> rs = new ArrayList<>();
+
+        // 检查两个列表是否都为空,在这种情况下返回空列表
+        if (CollUtil.isEmpty(simpleList) && CollUtil.isEmpty(poolList)) {
+            return CollUtil.newArrayList();
+        }
+
+        // 如果简单列表为空但池列表不为空,则映射和收集池列表元素
+        if (CollUtil.isEmpty(simpleList) && CollUtil.isNotEmpty(poolList)) {
+            return poolList.stream().map(t2).collect(Collectors.toList());
+        }
+
+        // 根据定义的条件合并列表
+        for (M m : poolList) {
+            for (T t : simpleList) {
+                if (biFunction.apply(t, m)) {
+                    rs.add(t1.apply(t));
+                    break;
+                }
+            }
+            rs.add(t2.apply(m));
+        }
+
+        return rs;
+    }
+
     /**
      * 预期诊断结果
      */