Просмотр исходного кода

历史病历列表并行优化

rengb 5 лет назад
Родитель
Сommit
d67d30b062

+ 183 - 0
icss-service/src/main/java/com/diagbot/aggregate/InquiryInfoAggregate.java

@@ -0,0 +1,183 @@
+package com.diagbot.aggregate;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.TranServiceClient;
+import com.diagbot.dto.HisInquiryDTO;
+import com.diagbot.dto.HisInquirysForDjDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.DoctorInfo;
+import com.diagbot.entity.HospitalDept;
+import com.diagbot.entity.InquiryDetail;
+import com.diagbot.entity.InquiryInfo;
+import com.diagbot.entity.PatientInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.SexTypeEnum;
+import com.diagbot.facade.InquiryDetailFacade;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2019/10/23 10:18
+ */
+@Component
+public class InquiryInfoAggregate {
+
+    @Autowired
+    private TranServiceClient tranServiceClient;
+    @Autowired
+    private InquiryDetailFacade inquiryDetailFacade;
+
+    /**
+     * 历史病历列表-添加详情
+     *
+     * @param inquiryInfoList  病历集合
+     * @param hospitalDeptMap  科室信息
+     * @param doctorInfoMap    医生信息
+     * @param patientInfoMap   患者信息
+     * @param inquiryDetailMap 病历明细信息
+     * @return
+     */
+    @DataProvider("hisInquirysAddDetail")
+    public List<HisInquiryDTO> hisInquirysAddDetail(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList,
+            @DataConsumer("hospitalDeptInfoMapByIds") Map<Long, HospitalDept> hospitalDeptMap,
+            @DataConsumer("doctorInfoMapByIds") Map<Long, DoctorInfo> doctorInfoMap,
+            @DataConsumer("patientInfoMapByIds") Map<Long, PatientInfo> patientInfoMap,
+            @DataConsumer("getDetailsByInquryIds") Map<Long, List<InquiryDetail>> inquiryDetailMap) {
+
+        List<HisInquiryDTO> hisInquiryDTOList = new ArrayList<>();
+        inquiryInfoList.forEach(i -> {
+            HisInquiryDTO hisInquiryDTO = new HisInquiryDTO();
+            BeanUtil.copyProperties(i, hisInquiryDTO);
+            hisInquiryDTO.setInquiryDate(i.getGmtModified());
+            hisInquiryDTO.setInquiryTime(i.getGmtModified());
+            hisInquiryDTO.setHospitalDeptName(
+                    Optional.ofNullable(hospitalDeptMap.get(i.getHospitalDeptId()))
+                            .map(t -> t.getName()).orElse(null)
+            );
+            hisInquiryDTO.setDoctorName(
+                    Optional.ofNullable(doctorInfoMap.get(i.getDoctorId())).map(t -> t.getName()).orElse(null)
+            );
+            PatientInfo patientInfo = patientInfoMap.get(i.getPatientId());
+            if (patientInfo != null) {
+                hisInquiryDTO.setPatientName(patientInfo.getName());
+                hisInquiryDTO.setPatientIdNo(patientInfo.getIdNo());
+                hisInquiryDTO.setPatientSex(SexTypeEnum.getName(patientInfo.getSex()));
+                hisInquiryDTO.setPatientAge(DateUtil.yearCompare(patientInfo.getBirthday(), DateUtil.now()));
+            }
+
+            hisInquiryDTO.setDetailList(inquiryDetailMap.get(i.getId()));
+            hisInquiryDTOList.add(hisInquiryDTO);
+        });
+
+        return hisInquiryDTOList;
+    }
+
+    /**
+     * 获取科室信息map
+     *
+     * @param inquiryInfoList 病历集合
+     * @return 科室信息
+     */
+    @DataProvider("hospitalDeptInfoMapByIds")
+    public Map<Long, HospitalDept> hospitalDeptInfoMapByIds(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList) {
+        List<Long> hospitalDeptIdList = inquiryInfoList.stream()
+                .map(i -> i.getHospitalDeptId()).distinct().collect(Collectors.toList());
+        RespDTO<Map<Long, HospitalDept>> retData = tranServiceClient.hospitalDeptInfoMapByIds(hospitalDeptIdList);
+        RespDTOUtil.respNGDeal(retData, "获取科室信息失败");
+        return retData.data;
+    }
+
+    /**
+     * 获取医生信息map
+     *
+     * @param inquiryInfoList 病历集合
+     * @return 医生信息
+     */
+    @DataProvider("doctorInfoMapByIds")
+    public Map<Long, DoctorInfo> doctorInfoMapByIds(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList) {
+        List<Long> doctorIdList = inquiryInfoList.stream()
+                .map(i -> i.getDoctorId()).distinct().collect(Collectors.toList());
+        RespDTO<Map<Long, DoctorInfo>> retData = tranServiceClient.doctorInfoMapByIds(doctorIdList);
+        RespDTOUtil.respNGDealCover(retData, "获取医生信息失败");
+        return retData.data;
+    }
+
+    /**
+     * 获取病人信息map
+     *
+     * @param inquiryInfoList 病历集合
+     * @return 病人信息
+     */
+    @DataProvider("patientInfoMapByIds")
+    public Map<Long, PatientInfo> patientInfoMapByIds(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList) {
+        List<Long> patientIdList = inquiryInfoList.stream()
+                .map(i -> i.getPatientId()).distinct().collect(Collectors.toList());
+        RespDTO<Map<Long, PatientInfo>> retData = tranServiceClient.patientInfoMapByIds(patientIdList);
+        RespDTOUtil.respNGDealCover(retData, "获取患者信息失败");
+        return retData.data;
+    }
+
+    /**
+     * 获取病历明细map
+     *
+     * @param inquiryInfoList 病历集合
+     * @return 病历明细
+     */
+    @DataProvider("getDetailsByInquryIds")
+    public Map<Long, List<InquiryDetail>> getDetailsByInquryIds(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList) {
+        List<Long> inquiryIdList = inquiryInfoList.stream()
+                .map(i -> i.getId()).distinct().collect(Collectors.toList());
+        if (ListUtil.isNotEmpty(inquiryIdList)) {
+            QueryWrapper<InquiryDetail> queryWrapper = new QueryWrapper<InquiryDetail>();
+            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("inquiry_id", inquiryIdList);
+            List<InquiryDetail> inquiryDetails = inquiryDetailFacade.list(queryWrapper);
+            return inquiryDetails.stream().collect(Collectors.groupingBy(InquiryDetail::getInquiryId));
+        }
+        return new HashMap<>();
+    }
+
+    /**
+     * 对接-历史病历列表-添加详情
+     *
+     * @param inquiryInfoList
+     * @param inquiryDetailMap
+     * @return
+     */
+    @DataProvider("hisInquirysForDjAddDetail")
+    public List<HisInquirysForDjDTO> hisInquirysForDjAddDetail(
+            @InvokeParameter("inquiryInfoList") List<InquiryInfo> inquiryInfoList,
+            @DataConsumer("getDetailsByInquryIds") Map<Long, List<InquiryDetail>> inquiryDetailMap) {
+        List<HisInquirysForDjDTO> hisInquirysForDjDTOList = BeanUtil.listCopyTo(
+                inquiryInfoList, HisInquirysForDjDTO.class);
+
+        hisInquirysForDjDTOList.forEach(i -> {
+            i.setContentList(inquiryDetailMap.get(i.getId()).stream()
+                    .map(k -> k.getContentValue()).collect(Collectors.toList()));
+        });
+        return hisInquirysForDjDTOList;
+    }
+
+
+}

+ 0 - 14
icss-service/src/main/java/com/diagbot/facade/DoctorInfoFacade.java

@@ -3,14 +3,12 @@ package com.diagbot.facade;
 import com.diagbot.client.TranServiceClient;
 import com.diagbot.dto.DoctorInfoDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.DoctorInfo;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.DoctorInfoVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @Description:
@@ -34,16 +32,4 @@ public class DoctorInfoFacade {
         return doctorInfoDTOList.data;
     }
 
-    /**
-     * 根据ids获取医生信息map
-     *
-     * @param ids 医生ids
-     * @return 医生信息
-     */
-    public Map<Long, DoctorInfo> doctorInfoMapByIds(List<Long> ids) {
-        RespDTO<Map<Long, DoctorInfo>> retData = tranServiceClient.doctorInfoMapByIds(ids);
-        RespDTOUtil.respNGDealCover(retData, "获取医生信息失败");
-        return retData.data;
-    }
-
 }

+ 0 - 24
icss-service/src/main/java/com/diagbot/facade/HospitalDeptFacade.java

@@ -1,16 +1,7 @@
 package com.diagbot.facade;
 
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import com.diagbot.client.TranServiceClient;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.HospitalDept;
-import com.diagbot.util.RespDTOUtil;
-
 /**
  * @author rgb
  * @Description
@@ -19,19 +10,4 @@ import com.diagbot.util.RespDTOUtil;
 @Component
 public class HospitalDeptFacade {
 
-    @Autowired
-    private TranServiceClient tranServiceClient;
-
-    /**
-     * 根据ids获取科室信息map
-     *
-     * @param ids 科室ids
-     * @return 科室信息
-     */
-    public Map<Long, HospitalDept> hospitalDeptInfoMapByIds(List<Long> ids) {
-        RespDTO<Map<Long, HospitalDept>> retData = tranServiceClient.hospitalDeptInfoMapByIds(ids);
-        RespDTOUtil.respNGDeal(retData,"获取科室信息失败");
-        return retData.data;
-    }
-
 }

+ 3 - 26
icss-service/src/main/java/com/diagbot/facade/InquiryDetailFacade.java

@@ -1,17 +1,12 @@
 package com.diagbot.facade;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import com.diagbot.util.ListUtil;
-import org.springframework.stereotype.Component;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.InquiryDetail;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.InquiryDetailServiceImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
 
 /**
  * @author rengb
@@ -45,22 +40,4 @@ public class InquiryDetailFacade extends InquiryDetailServiceImpl {
         return this.list(queryWrapper);
     }
 
-    /**
-     * 根据病历id集合获取病历明细
-     *
-     * @param inquiryIds
-     * @return
-     */
-    public Map<Long, List<InquiryDetail>> getDetailsByInquryIds(List<Long> inquiryIds) {
-        if (ListUtil.isNotEmpty(inquiryIds)){
-            QueryWrapper<InquiryDetail> queryWrapper = new QueryWrapper<InquiryDetail>();
-            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .in("inquiry_id", inquiryIds);
-            List<InquiryDetail> inquiryDetails = this.list(queryWrapper);
-            return inquiryDetails.stream().collect(Collectors.groupingBy(InquiryDetail::getInquiryId));
-        }
-        return new HashMap<>();
-    }
-
-
 }

+ 21 - 55
icss-service/src/main/java/com/diagbot/facade/InquiryInfoFacade.java

@@ -18,16 +18,12 @@ import com.diagbot.dto.ReadInquiryDTO;
 import com.diagbot.dto.ReadInquiryDrugDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.SaveInquiryDTO;
-import com.diagbot.entity.DoctorInfo;
-import com.diagbot.entity.HospitalDept;
 import com.diagbot.entity.InquiryDetail;
 import com.diagbot.entity.InquiryDrug;
 import com.diagbot.entity.InquiryEvaluation;
 import com.diagbot.entity.InquiryInfo;
 import com.diagbot.entity.InquiryScale;
-import com.diagbot.entity.PatientInfo;
 import com.diagbot.enums.IsDeleteEnum;
-import com.diagbot.enums.SexTypeEnum;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -55,6 +51,7 @@ import com.diagbot.vo.PatientInfoVO;
 import com.diagbot.vo.ReadInquiryVO;
 import com.diagbot.vo.SaveInquiryToHisVO;
 import com.diagbot.vo.SaveInquiryVO;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -66,12 +63,11 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -111,6 +107,8 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
     private InquiryScaleService inquiryScaleService;
     @Autowired
     private IndexDataFacade indexDataFacade;
+    @Autowired
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
 
     /**
      * 问诊记录保存
@@ -326,48 +324,18 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
         BeanUtil.copyProperties(iPage, hisInquiryDTOPage);
 
         List<InquiryInfo> inquiryInfoList = iPage.getRecords();
-        if (inquiryInfoList.size() == 0) {
+        if (ListUtil.isEmpty(inquiryInfoList)) {
             return null;
         }
 
-        List<Long> hospitalDeptIdList = inquiryInfoList.stream()
-                .map(i -> i.getHospitalDeptId()).distinct().collect(Collectors.toList());
-        List<Long> doctorIdList = inquiryInfoList.stream()
-                .map(i -> i.getDoctorId()).distinct().collect(Collectors.toList());
-        List<Long> patientIdList = inquiryInfoList.stream()
-                .map(i -> i.getPatientId()).distinct().collect(Collectors.toList());
-        List<Long> inquiryIdList = inquiryInfoList.stream()
-                .map(i -> i.getId()).distinct().collect(Collectors.toList());
-
-        Map<Long, HospitalDept> hospitalDeptMap = hospitalDeptFacade.hospitalDeptInfoMapByIds(hospitalDeptIdList);
-        Map<Long, DoctorInfo> doctorInfoMap = doctorInfoFacade.doctorInfoMapByIds(doctorIdList);
-        Map<Long, PatientInfo> patientInfoMap = patientInfoFacade.patientInfoMapByIds(patientIdList);
-        Map<Long, List<InquiryDetail>> inquiryDetailMap = inquiryDetailFacade.getDetailsByInquryIds(inquiryIdList);
-
-        List<HisInquiryDTO> hisInquiryDTOList = new ArrayList<>();
-        inquiryInfoList.forEach(i -> {
-            HisInquiryDTO hisInquiryDTO = new HisInquiryDTO();
-            BeanUtil.copyProperties(i, hisInquiryDTO);
-            hisInquiryDTO.setInquiryDate(i.getGmtModified());
-            hisInquiryDTO.setInquiryTime(i.getGmtModified());
-            hisInquiryDTO.setHospitalDeptName(
-                    Optional.ofNullable(hospitalDeptMap.get(i.getHospitalDeptId()))
-                            .map(t -> t.getName()).orElse(null)
-            );
-            hisInquiryDTO.setDoctorName(
-                    Optional.ofNullable(doctorInfoMap.get(i.getDoctorId())).map(t -> t.getName()).orElse(null)
-            );
-            PatientInfo patientInfo = patientInfoMap.get(i.getPatientId());
-            if (patientInfo != null) {
-                hisInquiryDTO.setPatientName(patientInfo.getName());
-                hisInquiryDTO.setPatientIdNo(patientInfo.getIdNo());
-                hisInquiryDTO.setPatientSex(SexTypeEnum.getName(patientInfo.getSex()));
-                hisInquiryDTO.setPatientAge(DateUtil.yearCompare(patientInfo.getBirthday(), DateUtil.now()));
-            }
-
-            hisInquiryDTO.setDetailList(inquiryDetailMap.get(i.getId()));
-            hisInquiryDTOList.add(hisInquiryDTO);
-        });
+        List<HisInquiryDTO> hisInquiryDTOList = ListUtil.newArrayList();
+        try {
+            hisInquiryDTOList = dataBeanAggregateQueryFacade.get("hisInquirysAddDetail",
+                    Collections.singletonMap("inquiryInfoList",inquiryInfoList),
+                    List.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
         hisInquiryDTOPage.setRecords(hisInquiryDTOList);
         return hisInquiryDTOPage;
@@ -429,20 +397,18 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
             return null;
         }
 
-        Map<Long, List<InquiryDetail>> inquiryDetailMap = inquiryDetailFacade.getDetailsByInquryIds(
-                inquiryInfoList.stream().map(i -> i.getId()).collect(Collectors.toList()));
-        List<HisInquirysForDjDTO> hisInquirysForDjDTOList = BeanUtil.listCopyTo(
-                inquiryInfoList, HisInquirysForDjDTO.class);
-
-        hisInquirysForDjDTOList.forEach(i -> {
-            i.setContentList(inquiryDetailMap.get(i.getId()).stream()
-                    .map(k -> k.getContentValue()).collect(Collectors.toList()));
-        });
+        List<HisInquirysForDjDTO> hisInquirysForDjDTOList = ListUtil.newArrayList();
+        try {
+            hisInquirysForDjDTOList = dataBeanAggregateQueryFacade.get("hisInquirysForDjAddDetail",
+                    Collections.singletonMap("inquiryInfoList",inquiryInfoList),
+                    List.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
         return hisInquirysForDjDTOList;
     }
 
-
     /**
      * 病历详情
      *

+ 0 - 16
icss-service/src/main/java/com/diagbot/facade/PatientInfoFacade.java

@@ -7,7 +7,6 @@ import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.PatientInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.DoctorPageMode;
-import com.diagbot.entity.PatientInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.GetTopPatientInfoVO;
@@ -16,9 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 
-import java.util.List;
-import java.util.Map;
-
 /**
  * @Description: 患者业务逻辑
  * @author: wangyu
@@ -69,16 +65,4 @@ public class PatientInfoFacade {
         return getTopPatientInfoDTO;
     }
 
-    /**
-     * 根据ids获取病人信息
-     *
-     * @param ids 病人ids
-     * @return 病人信息
-     */
-    public Map<Long, PatientInfo> patientInfoMapByIds(List<Long> ids) {
-        RespDTO<Map<Long, PatientInfo>> retData = tranServiceClient.patientInfoMapByIds(ids);
-        RespDTOUtil.respNGDealCover(retData, "获取患者信息失败");
-        return retData.data;
-    }
-
 }