Ver código fonte

病历评分参数拼接

zhoutg 5 anos atrás
pai
commit
ffced54c03

+ 2 - 0
src/main/java/com/diagbot/dto/QcCasesEntryDTO.java

@@ -17,4 +17,6 @@ public class QcCasesEntryDTO {
     private Long modeId;
 
     private String code;
+
+    private String msg;
 }

+ 40 - 0
src/main/java/com/diagbot/dto/RecordContentDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 住院病历信息
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-13
+ */
+@Data
+public class RecordContentDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 标准模块名称
+     */
+    private String standModelName;
+
+    /**
+     * 内容
+     */
+    private String contentText;
+
+    /**
+     * 加密信息
+     */
+    private String contentBlob;
+
+    /**
+     * 医院文书标题
+     */
+    private String recTitle;
+
+}

+ 26 - 27
src/main/java/com/diagbot/entity/DoctorAdvice.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -59,7 +58,7 @@ public class DoctorAdvice implements Serializable {
     /**
      * 一次使用数量
      */
-    private String usage;
+    private String usageNum;
 
     /**
      * 一次用量单位
@@ -94,7 +93,7 @@ public class DoctorAdvice implements Serializable {
     /**
      * 医嘱开始时间
      */
-    private LocalDateTime daStartDate;
+    private Date daStartDate;
 
     /**
      * 医嘱项目名称
@@ -141,28 +140,28 @@ public class DoctorAdvice implements Serializable {
      */
     private String doctorName;
 
-    /**
-     * 是否删除,N:未删除,Y:删除
-     */
-    private String isDeleted;
-
-    /**
-     * 记录创建时间
-     */
-    private Date gmtCreate;
-
-    /**
-     * 记录修改时间,如果时间是1970年则表示纪录未修改
-     */
-    private Date gmtModified;
-
-    /**
-     * 创建人,0表示无创建人值
-     */
-    private String creator;
-
-    /**
-     * 修改人,如果为0则表示纪录未修改
-     */
-    private String modifier;
+//    /**
+//     * 是否删除,N:未删除,Y:删除
+//     */
+//    private String isDeleted;
+//
+//    /**
+//     * 记录创建时间
+//     */
+//    private Date gmtCreate;
+//
+//    /**
+//     * 记录修改时间,如果时间是1970年则表示纪录未修改
+//     */
+//    private Date gmtModified;
+//
+//    /**
+//     * 创建人,0表示无创建人值
+//     */
+//    private String creator;
+//
+//    /**
+//     * 修改人,如果为0则表示纪录未修改
+//     */
+//    private String modifier;
 }

+ 2 - 0
src/main/java/com/diagbot/entity/HomePage.java

@@ -1,6 +1,7 @@
 package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -14,6 +15,7 @@ import java.util.Date;
  * @since 2020-04-13
  */
 @TableName("med_home_page")
+@Data
 public class HomePage implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 34 - 0
src/main/java/com/diagbot/facade/BasHospitalInfoFacade.java

@@ -1,8 +1,15 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.BasHospitalInfo;
+import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.BasHospitalInfoServiceImpl;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @Description:
  * @author: gaodm
@@ -10,4 +17,31 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class BasHospitalInfoFacade  extends BasHospitalInfoServiceImpl {
+
+    private static Map<Long, String> hospitalMap = null;
+
+    /**
+     * 初始化医院信息
+     */
+    public void init() {
+        if (hospitalMap == null) {
+            List<BasHospitalInfo> basHospitalInfoList = this.list(new QueryWrapper<BasHospitalInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+            );
+            hospitalMap = basHospitalInfoList.stream().collect(Collectors.toMap(r -> r.getId(), r -> r.getCode()));
+        }
+    }
+
+
+    /**
+     * 获取医院编码
+     *
+     * @param hospitalId
+     * @return
+     */
+    public String getHosCode(Long hospitalId) {
+        init();
+        return hospitalMap.get(hospitalId);
+    }
+
 }

+ 190 - 4
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -1,23 +1,39 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.QcServiceClient;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.OutputInfo;
 import com.diagbot.dto.QcCasesEntryDTO;
+import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.dto.Response;
+import com.diagbot.entity.DoctorAdvice;
+import com.diagbot.entity.HomeDiagnoseInfo;
+import com.diagbot.entity.HomeOperationInfo;
+import com.diagbot.entity.HomePage;
+import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.BehospitalInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.MedrecVo;
 import com.diagbot.vo.QueryVo;
+import com.diagbot.vo.RecordContentVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -30,11 +46,23 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     @Autowired
     QcServiceClient qcServiceClient;
     @Autowired
+    DoctorAdviceFacade doctorAdviceFacade;
+    @Autowired
+    HomePageFacade homePageFacade;
+    @Autowired
     private QcCasesEntryFacade qcCasesEntryFacade;
+    @Autowired
+    HomeDiagnoseInfoFacade homeDiagnoseInfoFacade;
+    @Autowired
+    HomeOperationInfoFacade homeOperationInfoFacade;
+    @Autowired
+    MedicalRecordFacade medicalRecordFacade;
+    @Autowired
+    BasHospitalInfoFacade basHospitalInfoFacade;
 
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
 
-        behospitalPageVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
         IPage<BehospitalInfoDTO> res = getPage(behospitalPageVO);
         List<BehospitalInfoDTO> behospitalInfoDTOList = res.getRecords();
         for (BehospitalInfoDTO behospitalInfo : behospitalInfoDTOList) {
@@ -48,15 +76,85 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
     public Map<String, Object> analyze(AnalyzeVO analyzeVO) {
 
-        //获取质控条目
+//        Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        Long hospitalId = 1L; // 写死
+        analyzeVO.setHospitalId(hospitalId);
+        // 获取质控条目
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
 
         // TODO 获取病历所有数据
+        // 获取文书信息
+        RecordContentVO recordContentVO = new RecordContentVO();
+        BeanUtil.copyProperties(analyzeVO, recordContentVO);
+        List<RecordContentDTO> recordContentDTOList = medicalRecordFacade.getRecordContentFac(recordContentVO);
+        Map<String, List<RecordContentDTO>> recMap = EntityUtil.makeEntityListMap(recordContentDTOList, "standModelName");
+
+        // 获取医嘱
+        List<DoctorAdvice> doctorAdviceList = doctorAdviceFacade.list(new QueryWrapper<DoctorAdvice>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId)
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+        );
 
-        // TODO 拼接数据
+        // 获取病案首页
+        HomePage homePage = homePageFacade.getOne(new QueryWrapper<HomePage>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId)
+                .eq("behospital_code", analyzeVO.getBehospitalCode()), false
+        );
 
-        // TODO 调用质控接口
+        if (homePage != null) {
+            // 获取首页出院诊断、病理诊断
+            List<HomeDiagnoseInfo> homePageList = homeDiagnoseInfoFacade.list(new QueryWrapper<HomeDiagnoseInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("hospital_id", hospitalId)
+                    .eq("home_page_id", homePage.getHomePageId())
+            );
+
+            // 获取首页手术信息
+            List<HomeOperationInfo> homeOperationInfoList = homeOperationInfoFacade.list(new QueryWrapper<HomeOperationInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("hospital_id", hospitalId)
+                    .eq("home_page_id", homePage.getHomePageId())
+            );
+        }
+
+        // 拼接数据
+        String hosCode = basHospitalInfoFacade.getHosCode(hospitalId);
         QueryVo queryVo = new QueryVo();
+        queryVo.setCid(hosCode); // 设置医院编码
+        queryVo.setInputCatalogueMap(getInputCatalogueMap(qcCasesEntryDTOList)); // 设置质控条目编码
+        List<MedrecVo> medrecVoList = new ArrayList<>(); // 设置内容
+
+        addData("入院记录", recMap, medrecVoList);
+        addData("病危通知书", recMap, medrecVoList);
+        addData("阶段小结", recMap, medrecVoList);
+        addData("抢救记录", recMap, medrecVoList);
+        addData("查房记录", recMap, medrecVoList);
+        addData("首次病程录", recMap, medrecVoList);
+        addData("输血/血制品病程记录", recMap, medrecVoList);
+        addData("输血后效果评价", recMap, medrecVoList);
+        addData("死亡病例讨论记录", recMap, medrecVoList);
+        addData("死亡记录", recMap, medrecVoList);
+        addData("危急值记录", recMap, medrecVoList);
+
+        // 会诊记录
+        addDataWithKey("会诊记录", recMap, medrecVoList,
+                Arrays.asList("会诊记录", "会诊结果单", "会诊申请单"));
+
+        // 手术
+        addDataWithKey("手术", recMap, medrecVoList,
+                Arrays.asList("术后首次病程及谈话记录", "手术记录",
+                "术前讨论、术前小结", "手术知情同意书", "手术安全核查表"));
+
+
+        // 医嘱
+
+
+
+        queryVo.setMedrec(medrecVoList); // 设置
+
+        //  调用质控接口
         Response<OutputInfo> response = qcServiceClient.extract(queryVo);
 
         // 评分,保存
@@ -65,6 +163,94 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return null;
     }
 
+
+    /**
+     * 拼接数据
+     *
+     * @param key
+     * @param recMap
+     * @param medrecVoList
+     */
+    public void addData(String key, Map<String, List<RecordContentDTO>> recMap, List<MedrecVo> medrecVoList) {
+        List<RecordContentDTO> list = recMap.get(key);
+        Map<String, List<String>> listMap = new HashMap<>();
+        if (ListUtil.isNotEmpty(list)) {
+            MedrecVo medrecVo = new MedrecVo();
+            medrecVo.setTitle(key);
+            Map<String, Object> content = new HashMap<>();
+            content.put("content", list.stream().map(r -> r.getContentText()).collect(Collectors.toList()));
+            medrecVo.setContent(content);
+            medrecVoList.add(medrecVo);
+        }
+    }
+
+
+    /**
+     * 拼接数据(例如:手术)
+     *
+     * @param key
+     * @param recMap
+     * @param medrecVoList
+     */
+    public void addDataWithKey(String key, Map<String, List<RecordContentDTO>> recMap,
+                                 List<MedrecVo> medrecVoList, List<String> keyList) {
+        MedrecVo medrecVo = new MedrecVo();
+        medrecVo.setTitle(key);
+        Map<String, Object> content = new HashMap<>();
+        Map<String, List<String>> listMap = new HashMap<>();
+        Boolean flag = false;
+        for (String k : keyList) {
+            if (ListUtil.isNotEmpty(recMap.get(k))) {
+                listMap.put(k, recMap.get(k).stream().map(r -> r.getContentText()).collect(Collectors.toList()));
+                flag = true;
+            }
+        }
+        if (flag) {
+            content.put("content", listMap);
+            medrecVo.setContent(content);
+            medrecVoList.add(medrecVo);
+        }
+    }
+
+    /**
+     * 拼接医嘱数据
+     *
+     * @param key
+     * @param doctorAdviceList
+     * @param medrecVoList
+     */
+    public void addDataWithDocAdv(String key, List<DoctorAdvice> doctorAdviceList, List<MedrecVo> medrecVoList) {
+        if (ListUtil.isNotEmpty(doctorAdviceList)) {
+            MedrecVo medrecVo = new MedrecVo();
+            medrecVo.setTitle(key);
+            Map<String, Object> content = new HashMap<>();
+            // TODO 医嘱信息
+//            content.put("content", list.stream().map(r -> r.getContentText()).collect(Collectors.toList()));
+            medrecVo.setContent(content);
+            medrecVoList.add(medrecVo);
+        }
+    }
+
+
+    /**
+     * 获取质控条目编码
+     *
+     * @param qcCasesEntryDTOList
+     * @return
+     */
+    public Map<String, Map<String, String>> getInputCatalogueMap(List<QcCasesEntryDTO> qcCasesEntryDTOList) {
+        Map<String, Map<String, String>> res = new HashMap<>();
+        for (QcCasesEntryDTO qc : qcCasesEntryDTOList) {
+            Map<String, String> map = new HashMap<>();
+            map.put("code", qc.getCode());
+            map.put("precond", null);
+            map.put("name", qc.getMsg());
+            res.put(qc.getCode(), map);
+        }
+        return res;
+    }
+
+
     /**
      * 通过日期计算年龄
      *

+ 13 - 0
src/main/java/com/diagbot/facade/DoctorAdviceFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.DoctorAdviceServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class DoctorAdviceFacade extends DoctorAdviceServiceImpl {
+}

+ 13 - 0
src/main/java/com/diagbot/facade/HomeDiagnoseInfoFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.HomeDiagnoseInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class HomeDiagnoseInfoFacade extends HomeDiagnoseInfoServiceImpl {
+}

+ 13 - 0
src/main/java/com/diagbot/facade/HomeOperationInfoFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.HomeOperationInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class HomeOperationInfoFacade extends HomeOperationInfoServiceImpl {
+}

+ 13 - 0
src/main/java/com/diagbot/facade/HomePageFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.HomePageServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class HomePageFacade extends HomePageServiceImpl {
+}

+ 21 - 0
src/main/java/com/diagbot/facade/MedicalRecordFacade.java

@@ -0,0 +1,21 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.RecordContentDTO;
+import com.diagbot.service.impl.MedicalRecordServiceImpl;
+import com.diagbot.vo.RecordContentVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class MedicalRecordFacade extends MedicalRecordServiceImpl {
+
+    public List<RecordContentDTO> getRecordContentFac(RecordContentVO recordContentVO) {
+        return getRecordContent(recordContentVO);
+    }
+}

+ 6 - 1
src/main/java/com/diagbot/mapper/MedicalRecordMapper.java

@@ -1,7 +1,11 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.MedicalRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.RecordContentDTO;
+import com.diagbot.entity.MedicalRecord;
+import com.diagbot.vo.RecordContentVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MedicalRecordMapper extends BaseMapper<MedicalRecord> {
 
+    public List<RecordContentDTO> getRecordContent(RecordContentVO recordContentVO);
 }

+ 6 - 1
src/main/java/com/diagbot/service/MedicalRecordService.java

@@ -1,7 +1,11 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.MedicalRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.RecordContentDTO;
+import com.diagbot.entity.MedicalRecord;
+import com.diagbot.vo.RecordContentVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MedicalRecordService extends IService<MedicalRecord> {
 
+    public List<RecordContentDTO> getRecordContent(RecordContentVO recordContentVO);
 }

+ 8 - 0
src/main/java/com/diagbot/service/impl/MedicalRecordServiceImpl.java

@@ -1,11 +1,15 @@
 package com.diagbot.service.impl;
 
+import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.entity.MedicalRecord;
 import com.diagbot.mapper.MedicalRecordMapper;
 import com.diagbot.service.MedicalRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.RecordContentVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +21,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class MedicalRecordServiceImpl extends ServiceImpl<MedicalRecordMapper, MedicalRecord> implements MedicalRecordService {
 
+    @Override
+    public List<RecordContentDTO> getRecordContent(RecordContentVO recordContentVO) {
+        return baseMapper.getRecordContent(recordContentVO);
+    }
 }

+ 4 - 4
src/main/java/com/diagbot/vo/AnalyzeVO.java

@@ -1,17 +1,17 @@
 package com.diagbot.vo;
 
-import lombok.Getter;
-import lombok.Setter;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * @description:
  * @author: zhoutg
  * @time: 2020/4/13 18:31
  */
-@Getter
-@Setter
+@Data
 public class AnalyzeVO {
 
     private String behospitalCode; // 病历id
+    @ApiModelProperty(hidden = true)
     private Long hospitalId; //医院ID
 }

+ 1 - 1
src/main/java/com/diagbot/vo/BehospitalPageVO.java

@@ -23,7 +23,7 @@ public class BehospitalPageVO extends Page implements Serializable {
      * 医院ID
      */
     @ApiModelProperty(hidden = true)
-    private String hospitalId;
+    private Long hospitalId;
 
     /**
      * 病人住院ID

+ 15 - 0
src/main/java/com/diagbot/vo/RecordContentVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2020/4/13 18:31
+ */
+@Data
+public class RecordContentVO {
+
+    private String behospitalCode; // 病历id
+    private Long hospitalId; //医院ID
+}

+ 1 - 1
src/main/resources/mapper/DoctorAdviceMapper.xml

@@ -11,7 +11,7 @@
         <result column="frequency" property="frequency" />
         <result column="parent_type_id" property="parentTypeId" />
         <result column="doctor_advice_type" property="doctorAdviceType" />
-        <result column="usage" property="usage" />
+        <result column="usage_num" property="usageNum" />
         <result column="usage_unit" property="usageUnit" />
         <result column="dose" property="dose" />
         <result column="dose_unit" property="doseUnit" />

+ 11 - 0
src/main/resources/mapper/MedicalRecordMapper.xml

@@ -18,4 +18,15 @@
         <result column="modifier" property="modifier" />
     </resultMap>
 
+    <select id="getRecordContent"  resultType="com.diagbot.dto.RecordContentDTO">
+        select t.*,c.content_blob, c.content_text from (
+            SELECT a.rec_id, a.rec_title, b.stand_model_name FROM `med_medical_record` a, qc_model_hospital b
+            where a.is_deleted = 'N'  and a.rec_title = b.hospital_model_name
+            and a.hospital_id = #{hospitalId}
+            and b.hospital_id = #{hospitalId}
+            and a.behospital_code = #{behospitalCode}
+            and b.stand_model_name is not null) t left join med_medical_record_content c
+        on t.rec_id = c.rec_id and c.is_deleted = 'N'
+    </select>
+
 </mapper>

+ 1 - 1
src/main/resources/mapper/QcCasesEntryMapper.xml

@@ -22,7 +22,7 @@
 
     <select id="getQcCasesEntry" parameterType="com.diagbot.vo.AnalyzeVO" resultType="com.diagbot.dto.QcCasesEntryDTO">
         SELECT DISTINCT
-            t7.`code`,t7.mode_id
+            t7.`code`,t7.mode_id, t6.msg
         FROM
             med_medical_record t1,
             qc_model_hospital t2,