Jelajahi Sumber

邵逸夫trans添加

rengb 5 tahun lalu
induk
melakukan
766190a9b8
30 mengubah file dengan 2778 tambahan dan 3 penghapusan
  1. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfAnesthesiaRelatedDocTrans.java
  2. 189 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfBeHospitalizedDocTrans.java
  3. 47 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicBloodEffectDocTrans.java
  4. 50 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicalBloodDocTrans.java
  5. 201 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfConsultationDocTrans.java
  6. 46 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfCrisisValueReportDocTrans.java
  7. 46 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfCriticallyIllNoticeDocTrans.java
  8. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDeathCaseDiscussDocTrans.java
  9. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDeathRecordDocTrans.java
  10. 52 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDifficultCaseDiscussDocTrans.java
  11. 327 3
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDocTrans.java
  12. 36 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDoctorAdviceDocTrans.java
  13. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDutyShiftSystemDocTrans.java
  14. 89 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstCourseRecordDocTrans.java
  15. 258 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstPageRecordDocTrans.java
  16. 18 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfInformedConsentDocTrans.java
  17. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfInvasiveOperationDocTrans.java
  18. 49 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLeaveHospitalDocTrans.java
  19. 26 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfMedicalRecordInfoDocTrans.java
  20. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfMedicalWritingDocTrans.java
  21. 23 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfNoticeOfConversationDocTrans.java
  22. 38 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfNursingSystemDocTrans.java
  23. 300 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfOperationDocTrans.java
  24. 47 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfPathologyShipDocTrans.java
  25. 45 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfReasonableDiagnosisDocTrans.java
  26. 49 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfRescueDocTrans.java
  27. 46 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfSeriouslyIllNoticeDocTrans.java
  28. 50 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfStagesSummaryDocTrans.java
  29. 248 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfThreeLevelWardDocTrans.java
  30. 228 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfTransferRecordDocTrans.java

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfAnesthesiaRelatedDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 麻醉相关文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class ShaoyfAnesthesiaRelatedDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<AnesthesiaRelatedDoc> extract(MedrecVo medrecVo) {
+        List<AnesthesiaRelatedDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getAnesthesiaRelatedDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private AnesthesiaRelatedDoc getAnesthesiaRelatedDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> xmlNodeValueMap = TzXmlUtil.getXmlToMapForTZ(content);
+        xmlNodeValueMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        xmlNodeValueMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
+
+        AnesthesiaRelatedDoc anesthesiaRelatedDoc = new AnesthesiaRelatedDoc();
+        anesthesiaRelatedDoc.setStructureMap(structureMap);
+
+        return anesthesiaRelatedDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 189 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfBeHospitalizedDocTrans.java

@@ -0,0 +1,189 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.model.label.MenstrualLabel;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.model.label.VitalLabel;
+import com.lantone.qc.pub.model.label.VitalLabelSpecial;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 入院记录文档生成
+ * @author: rengb
+ * @time: 2020/3/5 15:47
+ */
+public class ShaoyfBeHospitalizedDocTrans extends ModelDocTrans {
+
+    /**
+     * @param medrecVo
+     * @return
+     */
+    @Override
+    public BeHospitalizedDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+        OrdinaryAssistant.removeBlank(structureMap);
+        //如果有入院时间,优先使用
+        if (StringUtils.isEmpty(structureMap.get("入院时间")) && StringUtils.isNotEmpty(structureMap.get("入病房时间"))) {
+            structureMap.put("入院时间", structureMap.get("入病房时间"));
+        }
+
+        BeHospitalizedDoc beHospitalizedDoc = beHospitalizedDocGen(structureMap); // 不走共用
+        beHospitalizedDoc.setPageData((Map) structureMap);
+        return beHospitalizedDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "本人姓名=姓名",
+            "性别=性别",
+            "年龄=年龄",
+            "民族=民族",
+            "职业=职业",
+            "出生地址=出生地",
+            "出生、生长史=出生生长史",
+            "婚姻状况=婚姻",
+            "地址=联系地址",
+            "工作场所=工作单位",
+            "信息来源=病史陈述者",
+            "生日=出生日期",
+            "出生时间=出生日期",
+            "病人出生日期=出生日期",
+            "新生儿出生日期=出生日期",
+            "出生地址=户口地址",
+            "本人电话=电话",
+            "联系电话=联系人电话",
+            "入院日期=入院日期",
+            "入病房时间=入院日期",
+            "病历日期=记录日期",
+            "主诉=主诉",
+            "现病史=现病史",
+            "一般健康状况=既往健康状况",
+            "婚姻家庭关系和睦=夫妻关系",
+            "体格检查=体格检查",
+            "专科检查=专科体格检查",
+            "初步诊断=初步诊断",
+            "修正诊断=修正诊断",
+            "医生=医师签名",
+            "补充诊断=补充诊断",
+            "户口地址=联系地址",
+            "家属提供的信息可信吗=病史可靠性",
+            "入院诊断(中医疾病)=中医诊断",
+            "长期用药情况(包括可能成瘾的药物)=长期用药",
+            "体温(口)=体温"
+    );
+
+
+    /**
+     * 入院记录
+     *
+     * @param structureMap
+     * @return
+     */
+    public static BeHospitalizedDoc beHospitalizedDocGen(Map<String, String> structureMap) {
+        BeHospitalizedDoc beHospitalizedDoc = new BeHospitalizedDoc();
+
+        // 走模型
+        ChiefLabel chiefLabel = new ChiefLabel();
+        chiefLabel.setText(structureMap.get("主诉"));
+        beHospitalizedDoc.setChiefLabel(chiefLabel);
+        //        structureMap.remove("主诉");
+
+        // 走模型
+        PresentLabel presentLabel = new PresentLabel();
+        presentLabel.setText(structureMap.get("现病史"));
+        beHospitalizedDoc.setPresentLabel(presentLabel);
+        //        structureMap.remove("现病史");
+
+        PastLabel pastLabel = new PastLabel();
+        pastLabel.setCrfLabel(false);
+        pastLabel.setText(structureMap.get("既往史"));
+        beHospitalizedDoc.setPastLabel(pastLabel);
+        //        structureMap.remove("既往史");
+
+        PersonalLabel personalLabel = new PersonalLabel();
+        personalLabel.setCrfLabel(false);
+        personalLabel.setText(structureMap.get("个人史"));
+        beHospitalizedDoc.setPersonalLabel(personalLabel);
+        //        structureMap.remove("个人史");
+
+        MaritalLabel maritalLabel = new MaritalLabel();
+        maritalLabel.setCrfLabel(false);
+        maritalLabel.setText("婚育史: " + structureMap.get("婚育史"));
+        beHospitalizedDoc.setMaritalLabel(maritalLabel);
+        //        structureMap.remove("婚育史");
+
+        MenstrualLabel menstrualLabel = new MenstrualLabel();
+        menstrualLabel.setCrfLabel(false);
+        menstrualLabel.setText("月经史:" + structureMap.get("月经史"));
+        beHospitalizedDoc.setMenstrualLabel(menstrualLabel);
+        //        structureMap.remove("月经史");
+
+        FamilyLabel familyLabel = new FamilyLabel();
+        familyLabel.setCrfLabel(false);
+        familyLabel.setText(structureMap.get("家族史"));
+        beHospitalizedDoc.setFamilyLabel(familyLabel);
+        //        structureMap.remove("家族史");
+
+        VitalLabel vitalLabel = new VitalLabel();
+        vitalLabel.setCrfLabel(false);
+        vitalLabel.setText(structureMap.get("体格检查"));
+        beHospitalizedDoc.setVitalLabel(vitalLabel);
+        //        structureMap.remove("体格检查");
+
+        VitalLabelSpecial vitalLabelSpecial = new VitalLabelSpecial();
+        vitalLabelSpecial.setCrfLabel(false);
+        vitalLabelSpecial.setText(structureMap.get("专科体格检查"));
+        beHospitalizedDoc.setVitalLabelSpecial(vitalLabelSpecial);
+        //        structureMap.remove("专科体格检查");
+
+        // 走模型
+        PacsLabel pacsLabel = new PacsLabel();
+        pacsLabel.setCrfLabel(false);
+        pacsLabel.setText(structureMap.get("辅助检查"));
+        beHospitalizedDoc.setPacsLabel(pacsLabel);
+        //        structureMap.remove("辅助检查");
+
+        // 走模型
+        DiagLabel initialDiagLabel = new DiagLabel();
+        initialDiagLabel.setText(structureMap.get("初步诊断"));
+        beHospitalizedDoc.setInitialDiagLabel(initialDiagLabel);
+        //        structureMap.remove("初步诊断");
+
+        // 走模型
+        DiagLabel revisedDiagLabel = new DiagLabel();
+        revisedDiagLabel.setText(structureMap.get("修正诊断"));
+        beHospitalizedDoc.setRevisedDiagLabel(revisedDiagLabel);
+        //        structureMap.remove("修正诊断");
+
+        // 走模型
+        DiagLabel suppleDiagLabel = new DiagLabel();
+        suppleDiagLabel.setText(structureMap.get("补充诊断"));
+        beHospitalizedDoc.setSuppleDiagLabel(suppleDiagLabel);
+        //        structureMap.remove("补充诊断");
+
+        beHospitalizedDoc.setStructureMap(structureMap);
+
+        return beHospitalizedDoc;
+    }
+
+}

+ 47 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicBloodEffectDocTrans.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.ClinicBloodEffectDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : TaiZhouClinicBloodEffectDocTrans
+ * @Description : 输血后效果评价
+ * @Author : 楼辉荣
+ * @Date: 2020-04-19 17:53
+ */
+public class ShaoyfClinicBloodEffectDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ClinicBloodEffectDoc> extract(MedrecVo medrecVo) {
+        List<ClinicBloodEffectDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getClinicBloodEffectDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private ClinicBloodEffectDoc getClinicBloodEffectDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        ClinicBloodEffectDoc clinicBloodEffectDoc = new ClinicBloodEffectDoc();
+        clinicBloodEffectDoc.setStructureMap(structureMap);
+        clinicBloodEffectDoc.setPageData((Map) structureMap);
+
+        return clinicBloodEffectDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 50 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicalBloodDocTrans.java

@@ -0,0 +1,50 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 输血/血制品病程记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:21
+ */
+public class ShaoyfClinicalBloodDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ClinicalBloodDoc> extract(MedrecVo medrecVo) {
+        List<ClinicalBloodDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getClinicalBloodDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private ClinicalBloodDoc getClinicalBloodDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        ClinicalBloodDoc clinicalBloodDoc = new ClinicalBloodDoc();
+        clinicalBloodDoc.setStructureMap(structureMap);
+        clinicalBloodDoc.setPageData((Map) structureMap);
+        return clinicalBloodDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "开始时间=输注开始",
+            "医生=记录医师",
+            "结束时间=输注结束",
+            "内容=输注后效果评价"
+    );
+
+}

+ 201 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfConsultationDocTrans.java

@@ -0,0 +1,201 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 会诊文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:22
+ */
+public class ShaoyfConsultationDocTrans extends ModelDocTrans {
+
+    /**
+     * 会诊记录包含3个模块:会诊申请单,会诊结果单,会诊记录
+     * 配套放置,华卓需要注意顺序问题,没有字段可以关联,我们做不到check
+     *
+     * @param medrecVo
+     * @return
+     */
+    @Override
+    public List<ConsultationDoc> extract(MedrecVo medrecVo) {
+        List<ConsultationDoc> retList = Lists.newArrayList();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, ConsultationRecordDoc> consultationRecordDocMap = getConsultationRecordDocMap((List) contentMap.get("会诊记录"));
+        Map<String, ConsultationResultsDoc> consultationResultsDocMap = getConsultationResultsDocMap((List) contentMap.get("会诊结果单"));
+        Map<String, ConsultationApplicationDoc> consultationApplicationDocMap = getConsultationApplicationDocMap((List) contentMap.get("会诊申请单"));
+
+        Set<String> consultationNameSet = Sets.newHashSet();
+        consultationNameSet.addAll(consultationRecordDocMap.keySet());
+        consultationNameSet.addAll(consultationResultsDocMap.keySet());
+        consultationNameSet.addAll(consultationApplicationDocMap.keySet());
+
+        consultationNameSet.forEach(consultationName -> {
+            ConsultationDoc consultationDoc = new ConsultationDoc();
+            consultationDoc.setConsultationName(consultationName);
+            consultationDoc.setConsultationRecordDoc(consultationRecordDocMap.get(consultationName));
+            consultationDoc.setConsultationResultsDoc(consultationResultsDocMap.get(consultationName));
+            consultationDoc.setConsultationApplicationDoc(consultationApplicationDocMap.get(consultationName));
+            retList.add(consultationDoc);
+        });
+
+        return retList;
+    }
+
+
+    /**************************************************会诊记录*********************************************************/
+    private Map<String, ConsultationRecordDoc> getConsultationRecordDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, ConsultationRecordDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationRecordDoc consultationRecordDoc = getConsultationRecordDoc(contentMap);
+            consultationRecordDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationRecordDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationRecordDoc getConsultationRecordDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationRecord_keyContrasts);
+
+        ConsultationRecordDoc consultationRecordDoc = new ConsultationRecordDoc();
+        consultationRecordDoc.setStructureMap(structureMap);
+        consultationRecordDoc.setPageData((Map) structureMap);
+        return consultationRecordDoc;
+    }
+
+    // 会诊记录映射字段
+    private List<String> consultationRecord_keyContrasts = Lists.newArrayList(
+            "事件日期=记录时间",
+            "医生=记录医师",
+            "会诊执行情况=会诊情况"
+    );
+
+
+    /**************************************************会诊结果单*******************************************************/
+    private Map<String, ConsultationResultsDoc> getConsultationResultsDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, ConsultationResultsDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationResultsDoc consultationResultsDoc = getConsultationResultsDoc(contentMap);
+            consultationResultsDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationResultsDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationResultsDoc getConsultationResultsDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationResults_keyContrasts);
+
+        ConsultationResultsDoc consultationResultsDoc = new ConsultationResultsDoc();
+        consultationResultsDoc.setStructureMap(structureMap);
+        consultationResultsDoc.setPageData((Map) structureMap);
+        return consultationResultsDoc;
+    }
+
+    // 会诊结果映射字段
+    private List<String> consultationResults_keyContrasts = Lists.newArrayList(
+            "会诊诊断=当前诊断",
+            "事件日期1(会诊申请日期)=申请日期",
+            "医生=医师签名",
+            "本人姓名=姓名",
+            "病史描述=病史回顾描述",
+            "病历日期=会诊日期及时间",
+            "记录及建议=会诊意见",
+            "临床科室1=临床科室",
+            "申请医生1=申请医生"
+    );
+
+
+    /**************************************************会诊申请单*******************************************************/
+    private Map<String, ConsultationApplicationDoc> getConsultationApplicationDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, ConsultationApplicationDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationApplicationDoc consultationApplicationDoc = getConsultationApplicationDoc(contentMap);
+            consultationApplicationDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationApplicationDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationApplicationDoc getConsultationApplicationDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationApplication_keyContrasts);
+
+        ConsultationApplicationDoc consultationApplicationDoc = new ConsultationApplicationDoc();
+        consultationApplicationDoc.setStructureMap(structureMap);
+        consultationApplicationDoc.setPageData((Map) structureMap);
+
+        return consultationApplicationDoc;
+    }
+
+    // 会诊申请单映射字段
+    private List<String> consultationApplication_keyContrasts = Lists.newArrayList(
+            "事件日期=申请日期",
+            "会诊类别=会诊分类",
+            "会诊理由和目的=申请理由目的",
+            "本人姓名=姓名",
+            "病历号=病案号",
+            "临床科室=申请科室"
+    );
+
+}

+ 46 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfCrisisValueReportDocTrans.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 危急值记录文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfCrisisValueReportDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CrisisValueReportDoc> extract(MedrecVo medrecVo) {
+        List<CrisisValueReportDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getCrisisValueReportDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private CrisisValueReportDoc getCrisisValueReportDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        CrisisValueReportDoc crisisValueReportDoc = new CrisisValueReportDoc();
+        crisisValueReportDoc.setStructureMap(structureMap);
+        crisisValueReportDoc.setPageData((Map) structureMap);
+
+        return crisisValueReportDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 46 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfCriticallyIllNoticeDocTrans.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.CriticallyIllNoticeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病危通知书文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfCriticallyIllNoticeDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CriticallyIllNoticeDoc> extract(MedrecVo medrecVo) {
+        List<CriticallyIllNoticeDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getCriticallyIllNoticeDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private CriticallyIllNoticeDoc getCriticallyIllNoticeDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        CriticallyIllNoticeDoc criticallyIllNoticeDoc = new CriticallyIllNoticeDoc();
+        criticallyIllNoticeDoc.setStructureMap(structureMap);
+        criticallyIllNoticeDoc.setPageData((Map) structureMap);
+
+        return criticallyIllNoticeDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDeathCaseDiscussDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.DeathCaseDiscussDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 死亡病例讨论记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:22
+ */
+public class ShaoyfDeathCaseDiscussDocTrans extends ModelDocTrans {
+
+    @Override
+    public DeathCaseDiscussDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        DeathCaseDiscussDoc deathCaseDiscussDoc = new DeathCaseDiscussDoc();
+        deathCaseDiscussDoc.setStructureMap(structureMap);
+        deathCaseDiscussDoc.setPageData((Map) structureMap);
+
+        return deathCaseDiscussDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "主持人=讨论主持人",
+            "死亡日期=死亡时间",
+            "讨论意见=讨论内容",
+            "现病史- 发病情况=入院情况",
+            "医生=记录医师",
+            "本人姓名=姓名"
+    );
+
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDeathRecordDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 死亡记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:23
+ */
+public class ShaoyfDeathRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public DeathRecordDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        DeathRecordDoc deathRecordDoc = new DeathRecordDoc();
+        deathRecordDoc.setStructureMap(structureMap);
+        deathRecordDoc.setPageData((Map) structureMap);
+
+        return deathRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "当前诊断=死亡诊断",
+            "死亡日期=死亡时间",
+            "初步诊断=入院诊断",
+            "诊治经过=诊疗经过",
+            "本人姓名=姓名",
+            "现病史- 发病情况=发病情况"
+    );
+
+}

+ 52 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDifficultCaseDiscussDocTrans.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 疑难病例讨论记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:23
+ */
+public class ShaoyfDifficultCaseDiscussDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DifficultCaseDiscussDoc> extract(MedrecVo medrecVo) {
+        List<DifficultCaseDiscussDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getDifficultCaseDiscussDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private DifficultCaseDiscussDoc getDifficultCaseDiscussDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        DifficultCaseDiscussDoc difficultCaseDiscussDoc = new DifficultCaseDiscussDoc();
+        difficultCaseDiscussDoc.setStructureMap(structureMap);
+        difficultCaseDiscussDoc.setPageData((Map) structureMap);
+
+        return difficultCaseDiscussDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "医生=记录者",
+            "讨论小结=结 论",
+            "讨论意见=讨论内容",
+            "事件日期=讨论时间",
+            "本人姓名=姓名"
+    );
+
+}

+ 327 - 3
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDocTrans.java

@@ -1,19 +1,343 @@
 package com.lantone.qc.trans.shaoyf;
 
+import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.model.vo.QueryVo;
+import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.DocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import com.lantone.qc.trans.shaoyf.ShaoyfBeHospitalizedDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfClinicBloodEffectDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfClinicalBloodDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfConsultationDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfCrisisValueReportDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfCriticallyIllNoticeDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfDeathCaseDiscussDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfDeathRecordDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfDifficultCaseDiscussDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfDoctorAdviceDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfDutyShiftSystemDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfFirstCourseRecordDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfFirstPageRecordDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfLeaveHospitalDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfMedicalRecordInfoDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfNursingSystemDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfOperationDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfPathologyShipDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfRescueDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfSeriouslyIllNoticeDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfStagesSummaryDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfThreeLevelWardDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfTransferRecordDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfInformedConsentDocTrans;
+import com.lantone.qc.trans.shaoyf.ShaoyfNoticeOfConversationDocTrans;
 
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
- * @ClassName : TaiZhouDocTrans
+ * @ClassName : ShaoyfDocTrans
  * @Description :
  * @Author : 楼辉荣
  * @Date: 2020-03-03 19:47
  */
 public class ShaoyfDocTrans extends DocTrans {
-    public InputInfo extract(QueryVo queryVo) {
-        return null;
+
+    @Override
+    protected InputInfo extract(QueryVo queryVo) {
+        InputInfo inputInfo = new InputInfo();
+        for (MedrecVo i : queryVo.getMedrec()) {
+            switch (i.getTitle()) {
+                case "会诊":
+                    ShaoyfConsultationDocTrans consultationDocTrans = new ShaoyfConsultationDocTrans();
+                    inputInfo.setConsultationDocs(consultationDocTrans.extract(i));
+                    break;
+                case "手术":
+                    ShaoyfOperationDocTrans operationDocTrans = new ShaoyfOperationDocTrans();
+                    inputInfo.setOperationDocs(operationDocTrans.extract(i));
+                    break;
+                case "转科":
+                    ShaoyfTransferRecordDocTrans transferRecordDocTrans = new ShaoyfTransferRecordDocTrans();
+                    inputInfo.setTransferRecordDocs(transferRecordDocTrans.extract(i));
+                    break;
+                case "入院记录":
+                    ShaoyfBeHospitalizedDocTrans beHospitalizedDocTrans = new ShaoyfBeHospitalizedDocTrans();
+                    inputInfo.setBeHospitalizedDoc(beHospitalizedDocTrans.extract(i));
+                    break;
+                case "输血/血制品病程记录":
+                    ShaoyfClinicalBloodDocTrans clinicalBloodDocTrans = new ShaoyfClinicalBloodDocTrans();
+                    inputInfo.setClinicalBloodDocs(clinicalBloodDocTrans.extract(i));
+                    break;
+                case "危急值记录":
+                    ShaoyfCrisisValueReportDocTrans crisisValueReportDocTrans = new ShaoyfCrisisValueReportDocTrans();
+                    inputInfo.setCrisisValueReportDocs(crisisValueReportDocTrans.extract(i));
+                    break;
+                case "病危通知书":
+                    ShaoyfCriticallyIllNoticeDocTrans criticallyIllNoticeDocTrans = new ShaoyfCriticallyIllNoticeDocTrans();
+                    inputInfo.setCriticallyIllNoticeDocs(criticallyIllNoticeDocTrans.extract(i));
+                    break;
+                case "死亡病例讨论记录":
+                    ShaoyfDeathCaseDiscussDocTrans deathCaseDiscussDocTrans = new ShaoyfDeathCaseDiscussDocTrans();
+                    inputInfo.setDeathCaseDiscussDoc(deathCaseDiscussDocTrans.extract(i));
+                    break;
+                case "死亡记录":
+                    ShaoyfDeathRecordDocTrans deathRecordDocTrans = new ShaoyfDeathRecordDocTrans();
+                    inputInfo.setDeathRecordDoc(deathRecordDocTrans.extract(i));
+                    break;
+                case "疑难病例讨论记录":
+                    ShaoyfDifficultCaseDiscussDocTrans difficultCaseDiscussDocTrans = new ShaoyfDifficultCaseDiscussDocTrans();
+                    inputInfo.setDifficultCaseDiscussDocs(difficultCaseDiscussDocTrans.extract(i));
+                    break;
+                case "医嘱信息":
+                    ShaoyfDoctorAdviceDocTrans doctorAdviceDocTrans = new ShaoyfDoctorAdviceDocTrans();
+                    inputInfo.setDoctorAdviceDocs(doctorAdviceDocTrans.extract(i));
+                    break;
+                case "值班交接制度":
+                    ShaoyfDutyShiftSystemDocTrans dutyShiftSystemDocTrans = new ShaoyfDutyShiftSystemDocTrans();
+                    /*inputInfo.setDutyShiftSystemDocs(dutyShiftSystemDocTrans.extract(i));*/
+                    break;
+                case "首次病程录":
+                    ShaoyfFirstCourseRecordDocTrans firstCourseRecordDocTrans = new ShaoyfFirstCourseRecordDocTrans();
+                    inputInfo.setFirstCourseRecordDoc(firstCourseRecordDocTrans.extract(i));
+                    break;
+                case "病案首页":
+                    ShaoyfFirstPageRecordDocTrans firstPageRecordDocTrans = new ShaoyfFirstPageRecordDocTrans();
+                    if (inputInfo.getFirstPageRecordDoc() == null) {
+                        inputInfo.setFirstPageRecordDoc(firstPageRecordDocTrans.extract(i));
+                    }
+                    break;
+                case "出院小结":
+                    ShaoyfLeaveHospitalDocTrans leaveHospitalDocTrans = new ShaoyfLeaveHospitalDocTrans();
+                    inputInfo.setLeaveHospitalDoc(leaveHospitalDocTrans.extract(i));
+                    break;
+                case "分级护理制度":
+                    ShaoyfNursingSystemDocTrans nursingSystemDocTrans = new ShaoyfNursingSystemDocTrans();
+                    /*inputInfo.setNursingSystemDoc(nursingSystemDocTrans.extract(i));*/
+                    break;
+                case "抢救记录":
+                    ShaoyfRescueDocTrans rescueDocTrans = new ShaoyfRescueDocTrans();
+                    inputInfo.setRescueDocs(rescueDocTrans.extract(i));
+                    break;
+                case "病重通知书":
+                    ShaoyfSeriouslyIllNoticeDocTrans seriouslyIllNoticeDocTrans = new ShaoyfSeriouslyIllNoticeDocTrans();
+                    inputInfo.setSeriouslyIllNoticeDocs(seriouslyIllNoticeDocTrans.extract(i));
+                    break;
+                case "阶段小结":
+                    ShaoyfStagesSummaryDocTrans stagesSummaryDocTrans = new ShaoyfStagesSummaryDocTrans();
+                    inputInfo.setStagesSummaryDocs(stagesSummaryDocTrans.extract(i));
+                    break;
+                case "查房记录":
+                    ShaoyfThreeLevelWardDocTrans threeLevelWardDocTrans = new ShaoyfThreeLevelWardDocTrans();
+                    threeLevelWardDocTrans.setOperationDocs(inputInfo.getOperationDocs());
+                    inputInfo.setThreeLevelWardDocs(threeLevelWardDocTrans.extract(i));
+                    break;
+                case "输血后效果评价":
+                    ShaoyfClinicBloodEffectDocTrans clinicBloodEffectDocTrans = new ShaoyfClinicBloodEffectDocTrans();
+                    inputInfo.setClinicBloodEffectDocs(clinicBloodEffectDocTrans.extract(i));
+                    break;
+                case "病理检验送检单":
+                    ShaoyfPathologyShipDocTrans pathologyShipDocTrans = new ShaoyfPathologyShipDocTrans();
+                    inputInfo.setPathologyShipDocs(pathologyShipDocTrans.extract(i));
+                    break;
+                case "知情同意书":
+                    ShaoyfInformedConsentDocTrans informedConsentDocTrans = new ShaoyfInformedConsentDocTrans();
+                    inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
+                    break;
+                case "谈话告知书":
+                    ShaoyfNoticeOfConversationDocTrans shaoyfNoticeOfConversationDocTrans = new ShaoyfNoticeOfConversationDocTrans();
+                    inputInfo.setNoticeOfConversationDoc(shaoyfNoticeOfConversationDocTrans.extract(i));
+                    break;
+                case "住院病历信息":
+                    ShaoyfMedicalRecordInfoDocTrans medicalRecordInfoDocTrans = new ShaoyfMedicalRecordInfoDocTrans();
+                    inputInfo.setMedicalRecordInfoDoc(medicalRecordInfoDocTrans.extract(i));
+                default:
+                    break;
+            }
+        }
+        pageDataHandle(inputInfo);
+        return inputInfo;
+    }
+
+    private void pageDataHandle(InputInfo inputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            inputInfo.getPageData().put("入院记录", Lists.newArrayList(inputInfo.getBeHospitalizedDoc().getPageData()));
+        }
+        if (inputInfo.getDeathCaseDiscussDoc() != null) {
+            inputInfo.getPageData().put("死亡病例讨论记录", Lists.newArrayList(inputInfo.getDeathCaseDiscussDoc().getPageData()));
+        }
+        if (inputInfo.getDeathRecordDoc() != null) {
+            inputInfo.getPageData().put("死亡记录", Lists.newArrayList(inputInfo.getDeathRecordDoc().getPageData()));
+        }
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
+            inputInfo.getPageData().put("首次病程录", Lists.newArrayList(inputInfo.getFirstCourseRecordDoc().getPageData()));
+        }
+        if (inputInfo.getDeathRecordDoc() == null && inputInfo.getLeaveHospitalDoc() != null) {
+            inputInfo.getPageData().put("出院小结", Lists.newArrayList(inputInfo.getLeaveHospitalDoc().getPageData()));
+        }
+        //        if (inputInfo.getNursingSystemDoc() != null) {
+        //            inputInfo.getPageData().put("分级护理制度", Lists.newArrayList(inputInfo.getNursingSystemDoc().getPageData()));
+        //        }
+        if (inputInfo.getFirstPageRecordDoc() != null) {
+            inputInfo.getPageData().put("病案首页", Lists.newArrayList(inputInfo.getFirstPageRecordDoc().getPageData()));
+        }
+
+        if (ListUtil.isNotEmpty(inputInfo.getClinicalBloodDocs())) {
+            inputInfo.getPageData().put("输血/血制品病程记录", inputInfo.getClinicalBloodDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getClinicBloodEffectDocs())) {
+            inputInfo.getPageData().put("输血后效果评价", inputInfo.getClinicBloodEffectDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getCrisisValueReportDocs())) {
+            inputInfo.getPageData().put(
+                    "危急值记录",
+                    inputInfo.getCrisisValueReportDocs()
+                            .stream()
+                            .map(i -> i.getPageData())
+                            .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "病历日期", "yyyy-MM-dd HH:mm"))
+                            .collect(Collectors.toList())
+            );
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getCriticallyIllNoticeDocs())) {
+            inputInfo.getPageData().put("病危通知书", inputInfo.getCriticallyIllNoticeDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getDifficultCaseDiscussDocs())) {
+            inputInfo.getPageData().put("疑难病例讨论记录", inputInfo.getDifficultCaseDiscussDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        //        if (ListUtil.isNotEmpty(inputInfo.getDoctorAdviceDocs())) {
+        //            inputInfo.getPageData().put("医嘱信息", inputInfo.getDoctorAdviceDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        //        }
+        //        if (ListUtil.isNotEmpty(inputInfo.getDutyShiftSystemDocs())) {
+        //            inputInfo.getPageData().put("值班交接制度", inputInfo.getDutyShiftSystemDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        //        }
+        if (ListUtil.isNotEmpty(inputInfo.getRescueDocs())) {
+            inputInfo.getPageData().put(
+                    "抢救记录",
+                    inputInfo.getRescueDocs()
+                            .stream()
+                            .map(i -> i.getPageData())
+                            .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "事件日期", "yyyy/MM/dd HH:mm"))
+                            .collect(Collectors.toList())
+            );
+        }
+        //        if (ListUtil.isNotEmpty(inputInfo.getSeriouslyIllNoticeDocs())) {
+        //            inputInfo.getPageData().put("病重通知书", inputInfo.getSeriouslyIllNoticeDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        //        }
+        if (ListUtil.isNotEmpty(inputInfo.getStagesSummaryDocs())) {
+            inputInfo.getPageData().put("阶段小结", inputInfo.getStagesSummaryDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getThreeLevelWardDocs())) {
+            List<Map<String, Object>> pageDatas = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList());
+            inputInfo.getPageData().put("查房记录", pageDatas);
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getPathologyShipDocs())) {
+            inputInfo.getPageData().put("病理检验送检单", inputInfo.getPathologyShipDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+
+        if (ListUtil.isNotEmpty(inputInfo.getConsultationDocs())) {
+            List<Map<String, Object>> crePageDataList = inputInfo.getConsultationDocs()
+                    .stream()
+                    .filter(consultationDoc -> consultationDoc != null && consultationDoc.getConsultationRecordDoc() != null)
+                    .map(consultationDoc -> consultationDoc.getConsultationRecordDoc().getPageData())
+                    .sorted((map1, map2) -> -OrdinaryAssistant.pageDataTimeSort(map1, map2, "记录时间", "yyyy/MM/dd HH:mm"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(crePageDataList)) {
+                inputInfo.getPageData().put("会诊记录", crePageDataList);
+            }
+
+            List<Map<String, Object>> caPageDataList = inputInfo.getConsultationDocs()
+                    .stream()
+                    .filter(consultationDoc -> consultationDoc != null && consultationDoc.getConsultationApplicationDoc() != null)
+                    .map(consultationDoc -> consultationDoc.getConsultationApplicationDoc().getPageData())
+                    .sorted((map1, map2) -> -OrdinaryAssistant.pageDataTimeSort(map1, map2, "申请日期", "yyyy/MM/dd HH:mm"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(caPageDataList)) {
+                inputInfo.getPageData().put("会诊申请单", caPageDataList);
+            }
+
+            List<Map<String, Object>> crsPageDataList = inputInfo.getConsultationDocs()
+                    .stream()
+                    .filter(consultationDoc -> consultationDoc != null && consultationDoc.getConsultationResultsDoc() != null)
+                    .map(consultationDoc -> consultationDoc.getConsultationResultsDoc().getPageData())
+                    .sorted((map1, map2) -> -OrdinaryAssistant.pageDataTimeSort(map1, map2, "申请日期", "yyyy/MM/dd HH:mm"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(crsPageDataList)) {
+                inputInfo.getPageData().put("会诊结果单", crsPageDataList);
+            }
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getOperationDocs())) {
+            List<Map<String, Object>> odPageDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getOperationDiscussionDoc() != null)
+                    .map(operationDoc -> operationDoc.getOperationDiscussionDoc().getPageData())
+                    .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "手术日期", "yyyy/MM/dd"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(odPageDataList)) {
+                inputInfo.getPageData().put("术后首次病程及谈话记录", odPageDataList);
+            }
+
+            List<Map<String, Object>> orPageDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getOperationRecordDoc() != null)
+                    .map(operationDoc -> operationDoc.getOperationRecordDoc().getPageData())
+                    .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "开始时间", "yyyy/MM/dd HH:mm"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(orPageDataList)) {
+                inputInfo.getPageData().put("手术记录", orPageDataList);
+            }
+
+            List<Map<String, Object>> pdPageDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getPreoperativeDiscussionDoc() != null)
+                    .map(operationDoc -> operationDoc.getPreoperativeDiscussionDoc().getPageData())
+                    .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "讨论时间", "yyyy年MM月dd日 HH时mm分"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(pdPageDataList)) {
+                inputInfo.getPageData().put("术前讨论、术前小结", pdPageDataList);
+            }
+
+            /*List<Map<String, Object>> oicPageDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getOperationInformedConsentDoc() != null)
+                    .map(operationDoc -> operationDoc.getOperationInformedConsentDoc().getPageData())
+                    .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "谈话日期", "yyyy/MM/dd HH:mm"))
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(oicPageDataList)) {
+                inputInfo.getPageData().put("手术知情同意书", oicPageDataList);
+            }*/
+
+            List<Map<String, Object>> oscPageDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getOperationSafetyChecklistDoc() != null)
+                    .map(operationDoc -> operationDoc.getOperationSafetyChecklistDoc().getPageData())
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(oscPageDataList)) {
+                inputInfo.getPageData().put("手术安全核查表", oscPageDataList);
+            }
+        }
+        if (inputInfo.getTransferRecordDocs() != null) {
+            if (ListUtil.isNotEmpty(inputInfo.getTransferRecordDocs().getTransferIntoDocs())) {
+                inputInfo.getPageData().put(
+                        "转入记录",
+                        inputInfo.getTransferRecordDocs().getTransferIntoDocs()
+                                .stream()
+                                .filter(i -> i != null)
+                                .map(i -> i.getPageData())
+                                .collect(Collectors.toList())
+                );
+            }
+            if (ListUtil.isNotEmpty(inputInfo.getTransferRecordDocs().getTransferOutDocs())) {
+                inputInfo.getPageData().put(
+                        "转出记录",
+                        inputInfo.getTransferRecordDocs().getTransferOutDocs()
+                                .stream()
+                                .filter(i -> i != null)
+                                .map(i -> i.getPageData())
+                                .collect(Collectors.toList())
+                );
+            }
+        }
     }
+
 }

+ 36 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDoctorAdviceDocTrans.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 医嘱信息文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfDoctorAdviceDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DoctorAdviceDoc> extract(MedrecVo medrecVo) {
+        List<DoctorAdviceDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getDoctorAdviceDoc((Map) FastJsonUtils.getJsonToMap(content)));
+        });
+        return retList;
+    }
+
+    private DoctorAdviceDoc getDoctorAdviceDoc(Map<String, String> content) {
+        DoctorAdviceDoc doctorAdviceDoc = new DoctorAdviceDoc();
+        doctorAdviceDoc.setStructureMap(content);
+        doctorAdviceDoc.setPageData((Map) content);
+        return doctorAdviceDoc;
+    }
+
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDutyShiftSystemDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.DutyShiftSystemDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 值班交接制度文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:24
+ */
+public class ShaoyfDutyShiftSystemDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DutyShiftSystemDoc> extract(MedrecVo medrecVo) {
+        List<DutyShiftSystemDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getDutyShiftSystemDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private DutyShiftSystemDoc getDutyShiftSystemDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+
+        DutyShiftSystemDoc dutyShiftSystemDoc = new DutyShiftSystemDoc();
+        dutyShiftSystemDoc.setStructureMap(structureMap);
+        dutyShiftSystemDoc.setPageData((Map) sourceMap);
+        return dutyShiftSystemDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 89 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstCourseRecordDocTrans.java

@@ -0,0 +1,89 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.MapUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static com.lantone.qc.trans.comsis.ModelDocGenerate.structureMapJoin;
+
+/**
+ * @Description: 首次病程录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:25
+ */
+public class ShaoyfFirstCourseRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public FirstCourseRecordDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+        // 病例特点=主诉+现病史-发病情况+专科检查+实验室检查+影像学检查+辅助检查结果+呼吸+脉搏+体温+血压
+        //        structureMap.put("病例特点", MapUtil.getSelectString(structureMap, Arrays.asList(
+        //                "主诉",
+        //                "现病史-发病情况",
+        //                "专科检查",
+        //                "实验室检查",
+        //                "影像学检查",
+        //                "辅助检查结果",
+        //                "呼吸",
+        //                "脉搏",
+        //                "体温",
+        //                "血压"
+        //                ))
+        //        );
+        // 诊断依据=性别+年龄+主诉+现病史-发病情况+专科检查+实验室检查+影像学检查+辅助检查结果+呼吸+脉搏+体温+血压
+        //        structureMap.put("诊断依据", MapUtil.getSelectString(structureMap, Arrays.asList(
+        //                "性别",
+        //                "年龄",
+        //                "主诉",
+        //                "现病史-发病情况",
+        //                "专科检查",
+        //                "实验室检查",
+        //                "影像学检查",
+        //                "辅助检查结果",
+        //                "呼吸",
+        //                "脉搏",
+        //                "体温",
+        //                "血压"
+        //                ))
+        //        );
+        // 诊疗计划=检查计划+治疗计划和措施
+        structureMap.put("诊疗计划-crf", MapUtil.getSelectString(structureMap, Arrays.asList(
+                "检查计划",
+                "治疗计划和措施"
+                ))
+        );
+
+        // 诊疗计划
+        FirstCourseRecordDoc firstCourseRecordDoc = ModelDocGenerate.firstCourseRecordDocGen(structureMap);
+        firstCourseRecordDoc.setPageData((Map) structureMap);
+        List<String> keys = Lists.newArrayList("检查计划", "治疗计划");
+        String treatPlanJoin = structureMapJoin(structureMap, keys);
+        firstCourseRecordDoc.getTreatPlanLabel().setAiText(treatPlanJoin);
+        return firstCourseRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+                        "本人姓名=姓名",
+            "现病史- 发病情况=发病经过",
+            "医生=医师签名",
+            "治疗计划和措施=治疗计划",
+            "体温(耳)=体温耳",
+            "体温(口)=体温口"
+    );
+
+}

+ 258 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstPageRecordDocTrans.java

@@ -0,0 +1,258 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.util.ModuleMappingUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病案首页文档生成
+ * @author: 胡敬
+ * @time: 2020/3/16 17:47
+ */
+public class ShaoyfFirstPageRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public FirstPageRecordDoc extract(MedrecVo medrecVo) {
+
+        // 与长兴一直,直接传json
+        Map<String, String> content = (Map) medrecVo.getContent();
+        FirstPageRecordDoc firstPageRecordDoc = new FirstPageRecordDoc();
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(content, keyContrasts);
+        firstPageRecordDoc.setStructureMap(structureMap);
+        //如果有入院时间,优先使用
+        if (StringUtils.isEmpty(structureMap.get("入院时间")) && StringUtils.isNotEmpty(structureMap.get("病人入院日期"))) {
+            structureMap.put("入院时间", structureMap.get("病人入院日期"));
+        }
+
+        Map<String, Object> structureExtMap = Maps.newHashMap();
+        structureExtMap.putAll(content);
+        structureExtMap.put(Content.diagnose_cts, FastJsonUtils.getJsonToBean(content.get(Content.diagnose_cts), Object.class));
+        /* structureExtMap.put(Content.outpatientEmergencyDiag, FastJsonUtils.getJsonToBean(content.get(Content.outpatientEmergencyDiag), Object.class));*/
+        structureExtMap.put(Content.operative_information, FastJsonUtils.getJsonToBean(content.get(Content.operative_information), Object.class));
+        structureExtMap.put(Content.dischargeDiag, FastJsonUtils.getJsonToBean(content.get(Content.dischargeDiag), Object.class));
+        //        structureExtMap.put(Content.pathologyDiagnose, FastJsonUtils.getJsonToBean(content.get(Content.pathologyDiagnose), Object.class));
+        firstPageRecordDoc.setStructureExtMap(structureExtMap);
+
+        Map<String, String> setMap = Maps.newHashMap();
+        setMap.put("mode_id=6", "");
+        String modeId = ModuleMappingUtil.getXmlDataTypeModuleId(setMap);
+        if (StringUtil.isNotBlank(modeId)) {
+            medrecVo.getContent().put("mode_id", modeId);
+        }
+        firstPageRecordDoc.setPageData(medrecVo.getContent());
+
+        return firstPageRecordDoc;
+        //        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+        //
+        //
+        //        FirstPageRecordDoc firstPageRecordDoc = new FirstPageRecordDoc();
+        //        firstPageRecordDoc.setStructureMap(structureMap);
+        //
+        //        return firstPageRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "住院期间身体约束=",
+            "出院日期=",
+            "诊断符合情况=",
+            "手术费=",
+            "入院途径=",
+            "颅脑损伤患者昏迷时间(入院前)=",
+            "住院费用=",
+            "红细胞=",
+            "输血情况=",
+            "入院科室=",
+            "临床诊断项目费=",
+            "血浆=",
+            "主治医生=",
+            "Rh血型=",
+            "护理费=",
+            "住院自付金额=",
+            "手术治疗费=",
+            "细胞因子类制品费=",
+            "综合医疗其他服务费=",
+            "出院科室=",
+            "户口地址邮政编码=",
+            "凝血因子类制品费=",
+            "家庭电话=",
+            "其他费=",
+            "HCV-Ab=",
+            "病案质量=",
+            "治疗用一次性医用材料费=",
+            "质控护士=",
+            "其他=",
+            "离院方式=",
+            "球蛋白类制品费=",
+            "ICD9=",
+            "ICD10=",
+            "确诊日期=",
+            "联系人姓名=",
+            "中医治疗费=",
+            "本人姓名=",
+            "新生儿年龄=",
+            "住院期间是否发生跌倒或坠床=",
+            "出生地址=",
+            "质控日期=",
+            "病历日期=",
+            "实验室诊断费=",
+            "住院医生=",
+            "现住址=",
+            "院内感染诊断=",
+            "非手术治疗项目费=",
+            "手术时数=",
+            "住院期间有无告病危=",
+            "职业=",
+            "病人病案身份=职业",
+            "病人病案性别=性别",
+            "病人病案血型=血型",
+            "感染部位=",
+            "手术日期2=",
+            "质控医师=",
+            "手术医师=",
+            "医院感染=",
+            "医生=",
+            "出院31天内再入院计划=",
+            "新生儿入院体重=",
+            "治疗结果=",
+            "影像学诊断费=",
+            "目的=",
+            "其它疾病治疗结果=",
+            "血型=",
+            "并发症=",
+            "临床路径管理=",
+            //            "临床路径管理 1.完成 2.变异 3.退出 4.未入=临床路径管理",
+            //            "有无药物过敏=药物过敏",
+            //            "单病种管理 1.是 2.否=单病种管理",
+            "现住址电话=现住址电话",
+            "拟接收医疗机构名称=",
+            "科主任=",
+            "中成药费=",
+            "助手II=",
+            "门(急)诊诊断=",
+            "非计划再次手术=",
+            "是否住院期间发生压疮=",
+            "入住ICU情况=",
+            "进修医生=",
+            "损伤中毒的外部因素=",
+            "居住地邮政编码=",
+            "麻醉方式=",
+            "病历号=",
+            "病房(出)=",
+            "入院日期=",
+            "户口地址=",
+            "年龄单位=",
+            "病房(入)=",
+            "病案完成=",
+            "西药费=",
+            "工作场所=",
+            "尸检=",
+            "其它过敏=",
+            "审核人=",
+            "病理诊断=",
+            //            "放射与病理符合=放射与病理",
+            "医院=",
+            "就诊类别=",
+            "籍贯=",
+            //            "门诊与出院符合=门诊与出院",
+            "麻醉医师=",
+            "实习医生=",
+            "HIV-Ab=",
+            "转科科室=",
+            "联系电话=",
+            "病理诊断费=",
+            "事件基本信息=",
+            "血小板=",
+            "年龄=",
+            "并发症情况=",
+            "一般医疗服务费=",
+            "联系人地址=",
+            "过敏史=",
+            "责任护士=",
+            "主任医生=",
+            "床号=",
+            "抗菌药物费用=",
+            "病人基本信息=",
+            "生日=",
+            "切口等级=",
+            "HBsAg=",
+            "手术记录=",
+            "单病种管理=",
+            //            "临床与病理符合=临床与病理",
+            "麻醉费=",
+            "康复费=",
+            "研究生=",
+            "临床科室=",
+            "出生体重1=",
+            "审核=",
+            "检查用一次性医用材料费=",
+            "医疗付费方式=",
+            "其它诊断=",
+            "是否进入临床路径=",
+            //            "入院与出院符合=入院与出院",
+            "诊断治疗信息=",
+            "抢救次数=",
+            "入院诊断=",
+            "户籍住址=",
+            "病理诊断的icd10=",
+            "助手=",
+            "手术操作代码=",
+            "本人电话=",
+            "医疗组=",
+            "手术用一次性医用材料费=",
+            "白蛋白类制品费=",
+            "健康卡号=",
+            "全血=",
+            "民族=",
+            "一般治疗操作费=",
+            "术前诊断与术后诊断=",
+            "其它诊断ICD10=",
+            "病人类别=",
+            "门急诊ICD10=",
+            "中草药费=",
+            "颅脑损伤患者昏迷时间(入院后)=",
+            "关系=",
+            "切口愈合等级=",
+            "居民身份证=",
+            "是否发生压疮=",
+            "编码员=",
+            "血费=",
+            "手术级别=",
+            "成功次数=",
+            "就诊次数=",
+            "婚姻=",
+            "审核日期=",
+            "条码病历号=",
+            "主要诊断=",
+            "住院次数=",
+            "性别=",
+            "损伤诊断icd10=",
+            "入院病情2=",
+            "临床物理治疗费=",
+            "是否完成临床路径=",
+            "手术名称=",
+            "国籍=",
+            "病历状态=",
+            "实际住院天数=",
+            "本人工作单位电话=",
+            "工作单位邮政编码=",
+            "病理号="
+            //            "病人出生日期=出生日期"
+            //            "门诊与出院符合 0.未做 1.符合 2.不符合 3.不确定=门诊与出院",
+            //            "入院与出院符合 0.未做 1.符合 2.不符合 3.不确定=入院与出院",
+            //            "术前与术后符合 0.未做 1.符合 2.不符合 3.不确定=术前与术后",
+            //            "临床与病理符合 0.未做 1.符合 2.不符合 3.不确定=临床与病理",
+            //            "放射与病理符合0.未做 1.符合 2.不符合 3.不确定=放射与病理"
+    );
+
+}

+ 18 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfInformedConsentDocTrans.java

@@ -0,0 +1,18 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.lantone.qc.pub.model.doc.InformedConsentDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+
+/**
+ * @Description: 知情同意书
+ * @author: wangyu
+ * @time: 2020/4/20 17:48
+ */
+public class ShaoyfInformedConsentDocTrans extends ModelDocTrans {
+    @Override
+    public InformedConsentDoc extract(MedrecVo medrecVo) {
+        InformedConsentDoc informedConsentDoc = new InformedConsentDoc();
+        return informedConsentDoc;
+    }
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfInvasiveOperationDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.InvasiveOperationDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 有创操作记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class ShaoyfInvasiveOperationDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<InvasiveOperationDoc> extract(MedrecVo medrecVo) {
+        List<InvasiveOperationDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getInvasiveOperationDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private InvasiveOperationDoc getInvasiveOperationDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> xmlNodeValueMap = TzXmlUtil.getXmlToMapForTZ(content);
+        xmlNodeValueMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        xmlNodeValueMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
+
+        InvasiveOperationDoc invasiveOperationDoc = new InvasiveOperationDoc();
+        invasiveOperationDoc.setStructureMap(structureMap);
+
+        return invasiveOperationDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 49 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLeaveHospitalDocTrans.java

@@ -0,0 +1,49 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 出院小结文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:25
+ */
+public class ShaoyfLeaveHospitalDocTrans extends ModelDocTrans {
+
+    @Override
+    public LeaveHospitalDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+        LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
+        leaveHospitalDoc.setStructureMap(structureMap);
+        leaveHospitalDoc.setPageData((Map) structureMap);
+
+        return leaveHospitalDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "本人姓名=姓名",
+            "入院日期=入院时间",
+            "实际住院天数=住院天数",
+            "出院时情况=出院情况",
+            //            "注意事项=健康教育",
+            "复诊时间=随访计划",
+            "出院指导=健康教育",
+            "医生=医师签名",
+            "病历日期=签名时间",
+            "体温(耳)=体温耳"
+    );
+
+}

+ 26 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfMedicalRecordInfoDocTrans.java

@@ -0,0 +1,26 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 住院病历信息
+ * @author: 胡敬
+ * @time: 2020/6/3 15:45
+ */
+public class ShaoyfMedicalRecordInfoDocTrans extends ModelDocTrans {
+
+    @Override
+    public MedicalRecordInfoDoc extract(MedrecVo medrecVo) {
+        Map<String, String> content = (Map) ((List) medrecVo.getContent().get("content")).get(0);
+        MedicalRecordInfoDoc medicalRecordInfoDoc = new MedicalRecordInfoDoc();
+        medicalRecordInfoDoc.setStructureMap(content);
+        medicalRecordInfoDoc.setPageData(medrecVo.getContent());
+        return medicalRecordInfoDoc;
+    }
+
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfMedicalWritingDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.MedicalWritingDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病历书写规范文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class ShaoyfMedicalWritingDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<MedicalWritingDoc> extract(MedrecVo medrecVo) {
+        List<MedicalWritingDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getMedicalWritingDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private MedicalWritingDoc getMedicalWritingDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> xmlNodeValueMap = TzXmlUtil.getXmlToMapForTZ(content);
+        xmlNodeValueMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        xmlNodeValueMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
+
+        MedicalWritingDoc medicalWritingDoc = new MedicalWritingDoc();
+        medicalWritingDoc.setStructureMap(structureMap);
+
+        return medicalWritingDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 23 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfNoticeOfConversationDocTrans.java

@@ -0,0 +1,23 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.lantone.qc.pub.model.doc.NoticeOfConversationDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 谈话告知书
+ * @author: wangyu
+ * @time: 2020/4/20 18:06
+ */
+public class ShaoyfNoticeOfConversationDocTrans extends ModelDocTrans {
+    @Override
+    public NoticeOfConversationDoc extract(MedrecVo medrecVo) {
+        NoticeOfConversationDoc noticeOfConversationDoc = new NoticeOfConversationDoc();
+        Map<String, List<String>> map = (Map)medrecVo.getContent().get("content");
+        noticeOfConversationDoc.getStructureMap().put("","");
+        return noticeOfConversationDoc;
+    }
+}

+ 38 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfNursingSystemDocTrans.java

@@ -0,0 +1,38 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.NursingSystemDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 分级护理制度文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:26
+ */
+public class ShaoyfNursingSystemDocTrans extends ModelDocTrans {
+
+    @Override
+    public NursingSystemDoc extract(MedrecVo medrecVo) {
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
+
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        NursingSystemDoc nursingSystemDoc = new NursingSystemDoc();
+        nursingSystemDoc.setStructureMap(structureMap);
+
+        return nursingSystemDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 300 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfOperationDocTrans.java

@@ -0,0 +1,300 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationInformedConsentDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationSafetyChecklistDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 手术文档生成
+ * @author: rengb
+ * @time: 2020/3/20 17:11
+ */
+public class ShaoyfOperationDocTrans extends ModelDocTrans {
+
+    /**
+     * 手术文档包含:术后首次病程及谈话记录;手术记录;术前讨论、术前小结;手术知情同意书;手术安全核查表
+     *
+     * @param medrecVo
+     * @return
+     */
+    @Override
+    public List<OperationDoc> extract(MedrecVo medrecVo) {
+        List<OperationDoc> retList = Lists.newArrayList();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, OperationDiscussionDoc> operationDiscussionDocMap = getOperationDiscussionDocMap((List) contentMap.get("术后首次病程及谈话记录"));
+        Map<String, OperationRecordDoc> operationRecordDocMap = getOperationRecordDocMap((List) contentMap.get("手术记录"));
+        Map<String, PreoperativeDiscussionDoc> preoperativeDiscussionDocMap = getPreoperativeDiscussionDocMap((List) contentMap.get("术前讨论、术前小结"));
+        Map<String, OperationInformedConsentDoc> operationInformedConsentDocMap = getOperationInformedConsentDocMap((List) contentMap.get("手术知情同意书"));
+        Map<String, OperationSafetyChecklistDoc> operationSafetyChecklistDocMap = getOperationSafetyChecklistDocMap((List) contentMap.get("手术安全核查表"));
+
+        Set<String> operationNameSet = Sets.newHashSet();
+        operationNameSet.addAll(operationDiscussionDocMap.keySet());
+        operationNameSet.addAll(operationRecordDocMap.keySet());
+        operationNameSet.addAll(preoperativeDiscussionDocMap.keySet());
+        operationNameSet.addAll(operationInformedConsentDocMap.keySet());
+        operationNameSet.addAll(operationSafetyChecklistDocMap.keySet());
+
+        operationNameSet.forEach(operationName -> {
+            OperationDoc operationDoc = new OperationDoc();
+            operationDoc.setOperationName(operationName);
+            operationDoc.setOperationDiscussionDoc(operationDiscussionDocMap.get(operationName));
+            operationDoc.setOperationRecordDoc(operationRecordDocMap.get(operationName));
+            operationDoc.setPreoperativeDiscussionDoc(preoperativeDiscussionDocMap.get(operationName));
+            operationDoc.setOperationInformedConsentDoc(operationInformedConsentDocMap.get(operationName));
+            operationDoc.setOperationSafetyChecklistDoc(operationSafetyChecklistDocMap.get(operationName));
+            retList.add(operationDoc);
+        });
+        return retList;
+    }
+
+
+    /*******************************************术后首次病程及谈话记录***************************************************/
+    private Map<String, OperationDiscussionDoc> getOperationDiscussionDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, OperationDiscussionDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            operationName = index + "";
+            OperationDiscussionDoc operationDiscussionDoc = getOperationDiscussionDoc(contentMap);
+            operationDiscussionDoc.setOperationName(operationName);
+            retMap.put(operationName, operationDiscussionDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationDiscussionDoc getOperationDiscussionDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationDiscussion_keyContrasts);
+
+        OperationDiscussionDoc operationDiscussionDoc = new OperationDiscussionDoc();
+        operationDiscussionDoc.setStructureMap(structureMap);
+        operationDiscussionDoc.setPageData((Map) structureMap);
+
+        return operationDiscussionDoc;
+    }
+
+    private List<String> operationDiscussion_keyContrasts = Lists.newArrayList(
+            "本人姓名=姓名",
+            "开始时间=手术开始时间",
+            "结束时间=手术结束时间"
+    );
+
+
+    /**********************************************手术记录*************************************************************/
+    private Map<String, OperationRecordDoc> getOperationRecordDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, OperationRecordDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            operationName = index + "";
+            OperationRecordDoc operationRecordDoc = getOperationRecordDoc(contentMap);
+            operationRecordDoc.setOperationName(operationName);
+            retMap.put(operationName, operationRecordDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationRecordDoc getOperationRecordDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationRecord_keyContrasts);
+        OrdinaryAssistant.removeBlank(structureMap);
+        OperationRecordDoc operationRecordDoc = new OperationRecordDoc();
+        operationRecordDoc.setStructureMap(structureMap);
+        operationRecordDoc.setPageData((Map) structureMap);
+        return operationRecordDoc;
+    }
+
+    // 手术记录
+    private List<String> operationRecord_keyContrasts = Lists.newArrayList(
+            "结束时间=手术结束时间",
+            "开始时间=手术开始时间",
+            "手术医师=主刀医师",
+            "助手=一助",
+            "本人姓名=姓名"
+    );
+
+
+    /**********************************************术前讨论、术前小结****************************************************/
+    private Map<String, PreoperativeDiscussionDoc> getPreoperativeDiscussionDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, PreoperativeDiscussionDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            operationName = index + "";
+            PreoperativeDiscussionDoc preoperativeDiscussionDoc = getPreoperativeDiscussionDoc(contentMap);
+            preoperativeDiscussionDoc.setOperationName(operationName);
+            retMap.put(operationName, preoperativeDiscussionDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private PreoperativeDiscussionDoc getPreoperativeDiscussionDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts);
+
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
+        preoperativeDiscussionDoc.setStructureMap(structureMap);
+        preoperativeDiscussionDoc.setPageData((Map) structureMap);
+        return preoperativeDiscussionDoc;
+    }
+
+    private List<String> preoperativeDiscussion_keyContrasts = Lists.newArrayList(
+            "参加人员及职称=参加人员",
+            "主刀医师=主刀医师签名",
+            "术前准备=术前准备内容",
+            "注意事项=术前术后注意事项",
+            "辅助检查结果=辅助检查",
+            "术中、术后防范措施=可能意外和防范措施",
+            "现病史- 发病情况=发病经过",
+            "本人姓名=姓名",
+            "拟施手术名称和方式=拟行术式"
+    );
+
+    /**********************************************手术知情同意书****************************************************/
+    private Map<String, OperationInformedConsentDoc> getOperationInformedConsentDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, OperationInformedConsentDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            operationName = index + "";
+            OperationInformedConsentDoc operationInformedConsentDoc = getOperationInformedConsentDoc(contentMap);
+            operationInformedConsentDoc.setOperationName(operationName);
+            retMap.put(operationName, operationInformedConsentDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationInformedConsentDoc getOperationInformedConsentDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationInformedConsent_keyContrasts);
+
+        OperationInformedConsentDoc operationInformedConsentDoc = new OperationInformedConsentDoc();
+        operationInformedConsentDoc.setStructureMap(structureMap);
+        operationInformedConsentDoc.setPageData((Map) structureMap);
+        return operationInformedConsentDoc;
+    }
+
+    private List<String> operationInformedConsent_keyContrasts = Lists.newArrayList(
+            "姓名++++患者姓名=姓名",
+            "性别=",
+            "病区++++病区名称=病区",
+            "床号=",
+            "病案号++++住院号=病案号",
+            "手术医生=",
+            "目前诊断=",
+            "手术名称=",
+            "手术指征=",
+            "风险及并发症=",
+            "++++保守治疗=保守治疗",
+            "++++其他手术=其他手术",
+            "签名++++=签名",
+            "签名时间=签名时间"
+    );
+
+
+    /**********************************************手术安全核查表****************************************************/
+    private Map<String, OperationSafetyChecklistDoc> getOperationSafetyChecklistDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, OperationSafetyChecklistDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            operationName = index + "";
+            OperationSafetyChecklistDoc operationSafetyChecklistDoc = getOperationSafetyChecklistDoc(contentMap);
+            operationSafetyChecklistDoc.setOperationName(operationName);
+            retMap.put(operationName, operationSafetyChecklistDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationSafetyChecklistDoc getOperationSafetyChecklistDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationSafetyChecklist_keyContrasts);
+
+        OperationSafetyChecklistDoc operationSafetyChecklistDoc = new OperationSafetyChecklistDoc();
+        operationSafetyChecklistDoc.setStructureMap(structureMap);
+        operationSafetyChecklistDoc.setPageData((Map) structureMap);
+
+        return operationSafetyChecklistDoc;
+    }
+
+    private List<String> operationSafetyChecklist_keyContrasts = Lists.newArrayList(
+            "姓名++++患者姓名=姓名",
+            "性别",
+            "病区",
+            "床号",
+            "病案号++++住院号=病案号",
+            "签名++++=签名"
+    );
+
+}

+ 47 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfPathologyShipDocTrans.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.PathologyShipDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : PathologyShipDocTrans
+ * @Description : 病理检验送检单
+ * @Author : 楼辉荣
+ * @Date: 2020-04-19 17:49
+ */
+public class ShaoyfPathologyShipDocTrans extends ModelDocTrans {
+    @Override
+    public List<PathologyShipDoc> extract(MedrecVo medrecVo) {
+        List<PathologyShipDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getPathologyShipDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private PathologyShipDoc getPathologyShipDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        PathologyShipDoc pathologyShipDoc = new PathologyShipDoc();
+        pathologyShipDoc.setStructureMap(structureMap);
+        pathologyShipDoc.setPageData((Map) structureMap);
+        return pathologyShipDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList("检验标本=送检标本名称",
+            "本人姓名=姓名",
+            "术中发现=手术所见");
+
+}

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfReasonableDiagnosisDocTrans.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.ReasonableDiagnosisDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 诊疗合理性文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class ShaoyfReasonableDiagnosisDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ReasonableDiagnosisDoc> extract(MedrecVo medrecVo) {
+        List<ReasonableDiagnosisDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getReasonableDiagnosisDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private ReasonableDiagnosisDoc getReasonableDiagnosisDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        ReasonableDiagnosisDoc reasonableDiagnosisDoc = new ReasonableDiagnosisDoc();
+        reasonableDiagnosisDoc.setStructureMap(structureMap);
+
+        return reasonableDiagnosisDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 49 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfRescueDocTrans.java

@@ -0,0 +1,49 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 抢救记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 17:34
+ */
+public class ShaoyfRescueDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<RescueDoc> extract(MedrecVo medrecVo) {
+        List<RescueDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getRescueDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private RescueDoc getRescueDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        RescueDoc rescueDoc = new RescueDoc();
+        rescueDoc.setStructureMap(structureMap);
+        rescueDoc.setPageData((Map) structureMap);
+
+        return rescueDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "事件日期=抢救开始时间",
+            "本人姓名=姓名"
+    );
+
+}

+ 46 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfSeriouslyIllNoticeDocTrans.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.SeriouslyIllNoticeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病重通知书文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfSeriouslyIllNoticeDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<SeriouslyIllNoticeDoc> extract(MedrecVo medrecVo) {
+        List<SeriouslyIllNoticeDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getSeriouslyIllNoticeDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private SeriouslyIllNoticeDoc getSeriouslyIllNoticeDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = new SeriouslyIllNoticeDoc();
+        seriouslyIllNoticeDoc.setStructureMap(structureMap);
+        seriouslyIllNoticeDoc.setPageData((Map) structureMap);
+
+        return seriouslyIllNoticeDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 50 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfStagesSummaryDocTrans.java

@@ -0,0 +1,50 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.StagesSummaryDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 阶段小结文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfStagesSummaryDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<StagesSummaryDoc> extract(MedrecVo medrecVo) {
+        List<StagesSummaryDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getStagesSummaryDoc(contentMap));
+        });
+        return retList;
+    }
+
+    private StagesSummaryDoc getStagesSummaryDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        StagesSummaryDoc stagesSummaryDoc = new StagesSummaryDoc();
+        stagesSummaryDoc.setStructureMap(structureMap);
+        stagesSummaryDoc.setPageData((Map) structureMap);
+
+        return stagesSummaryDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "本人姓名=姓名",
+            "现病史- 发病情况=发病情况",
+            "体温(耳)=体温耳"
+    );
+
+}

+ 248 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfThreeLevelWardDocTrans.java

@@ -0,0 +1,248 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.dbanaly.lt.facade.ModelHospitalFacade;
+import com.lantone.qc.dbanaly.util.KernelConstants;
+import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
+import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
+import com.lantone.qc.pub.model.doc.ward.GeneralDoctorWardDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.SpringContextUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 查房记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+@Setter
+public class ShaoyfThreeLevelWardDocTrans extends ModelDocTrans {
+
+    private List<String> recTitles;
+    private List<OperationDoc> operationDocs;
+
+    @Override
+    public List<ThreeLevelWardDoc> extract(MedrecVo medrecVo) {
+        ModelHospitalFacade modelHospitalFacade = SpringContextUtil.getBean(ModelHospitalFacade.class);
+        recTitles = modelHospitalFacade.getRecTitles(3l, 4l);
+
+        List<ThreeLevelWardDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+
+        ThreeLevelWardDoc result = new ThreeLevelWardDoc();
+        contentMaps.forEach(contentMap -> {
+            classifyThreeLevelWardDoc(result, contentMap);
+        });
+        retList.add(result);
+        return retList;
+    }
+
+    private void classifyThreeLevelWardDoc(ThreeLevelWardDoc result, Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        String recTitle = contentMap.get("recTitle").toString();
+        if (recTitles.contains(recTitle)) {
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        }
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        if (StringUtils.isEmpty(structureMap.get("查房日期"))) {
+            return;
+        }
+        //不能简单的标准转化,如果有查房标题,优先使用
+        if (StringUtils.isEmpty(structureMap.get("查房标题")) && StringUtils.isNotEmpty(structureMap.get("查房备注"))) {
+            structureMap.put("查房标题", structureMap.get("查房备注"));
+        }
+        if (StringUtils.isEmpty(structureMap.get("查房标题")) && StringUtils.isNotEmpty(structureMap.get("查房类别"))) {
+            structureMap.put("查房标题", structureMap.get("查房类别"));
+        }
+        if (StringUtils.isEmpty(structureMap.get("查房标题")) && StringUtils.isNotEmpty(structureMap.get("上级查房医生职称"))) {
+            structureMap.put("查房标题", structureMap.get("上级查房医生职称"));
+        }
+        //总的查房记录 汇总
+        ThreeLevelWardDoc allDoctorWradDoc = new ThreeLevelWardDoc();
+        allDoctorWradDoc.setStructureMap(structureMap);
+        allDoctorWradDoc.setPageData((Map) structureMap);
+        result.addAllDoctorWradDoc(allDoctorWradDoc);
+
+        //主任医师查房
+        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(structureMap);
+        if (directorDoctorWardDoc != null) {
+            result.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(structureMap));
+        }
+        //主治医师查房
+        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap);
+        if (attendingDoctorWardDoc != null) {
+            result.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
+        }
+        //普通医师查房
+        if (directorDoctorWardDoc == null && attendingDoctorWardDoc == null) {
+            GeneralDoctorWardDoc generalDoctorWardDoc = new GeneralDoctorWardDoc();
+            generalDoctorWardDoc.setStructureMap(structureMap);
+            generalDoctorWardDoc.setPageData((Map) structureMap);
+            result.addGeneralDoctorWardDoc(generalDoctorWardDoc);
+        }
+    }
+
+    /**
+     * 主任医师查房
+     *
+     * @param structureMap
+     */
+    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap) {
+        String title = structureMap.get("查房标题");
+        String recordDateStr = structureMap.get("查房日期");
+        Date recordDate = StringUtil.parseDateTime(recordDateStr);
+        DirectorDoctorWardDoc directorDoctorWardDoc = null;
+        if (StringUtils.isNotEmpty(title)) {
+            if (title.contains("主刀")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            if (StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主任")) {    //标题有代字)
+                directorDoctorWardDoc = new DirectorDoctorWardDoc();
+                directorDoctorWardDoc.setStructureMap(structureMap);
+                directorDoctorWardDoc.setPageData((Map) structureMap);
+            }
+        }
+        return directorDoctorWardDoc;
+    }
+
+    /**
+     * 主治医师查房
+     *
+     * @param structureMap
+     */
+    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap) {
+        String title = structureMap.get("查房标题");
+        String recordDateStr = structureMap.get("查房日期");
+        Date recordDate = StringUtil.parseDateTime(recordDateStr);
+        AttendingDoctorWardDoc attendingDoctorWardDoc = null;
+        if (StringUtils.isNotEmpty(title)) {
+            if (title.contains("主刀")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            if (StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主治")) {    //标题有代字)
+                attendingDoctorWardDoc = new AttendingDoctorWardDoc();
+                attendingDoctorWardDoc.setStructureMap(structureMap);
+                attendingDoctorWardDoc.setPageData((Map) structureMap);
+            }
+        }
+        return attendingDoctorWardDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "事件日期=记录时间",
+            "事件日期=查房日期",
+            "简要病情=病情记录",
+            "查房记录=病情记录",
+            "医生=记录医师"
+    );
+
+    public static String subTitle(String srcText) {
+        if (StringUtil.isNotBlank(srcText) && srcText.contains("代") && srcText.indexOf("代") != srcText.length() - 1) {
+            srcText = srcText.substring(srcText.lastIndexOf("代") + 1);
+        }
+        return srcText;
+    }
+
+    /**
+     * 获取主刀医师/一助职称(取距离查房记录时间最近的一次手术记录)
+     *
+     * @param operationDocs
+     * @return
+     */
+    public static String getDoctorTitle(List<OperationDoc> operationDocs, Date recordDate, String findTitle) {
+        String title = "";
+        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
+        Map<String, Object> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
+        if (surgeon == null) {
+            return title;
+        }
+        /* 用于存放手术结束时间距离查房时间最近的一次时间差 */
+        long timeDiff = 0L;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> structureMap = operationRecordDoc.getStructureMap();
+            String chiefSurgeon = structureMap.get(findTitle);
+            String operatorEndDateStr = structureMap.get("手术结束时间");
+
+            if (StringUtil.isBlank(chiefSurgeon) || StringUtil.isBlank(operatorEndDateStr)) {
+                continue;
+            }
+            Map<String, String> doctor = (Map) surgeon.get(chiefSurgeon);
+            if (doctor != null) {
+                String professor = doctor.get("professor");
+                Date operatorEndDate = StringUtil.parseDateTime(operatorEndDateStr);
+                if (operatorEndDate != null) {
+                    long timeDifference = timeDifference(operatorEndDate, recordDate);
+                    if (timeDifference == 0) {
+                        continue;
+                    }
+                    if (timeDiff == 0 || timeDiff > timeDifference) {
+                        /* 取距离此次主刀医师查房最近的一次手术时间 */
+                        timeDiff = timeDifference;
+                        title = professor;
+                    }
+                }
+            }
+        }
+        return title;
+    }
+
+    public static long timeDifference(Date firstDate, Date secondDate) {
+        long timeDifference = 0L;
+        if (firstDate == null || secondDate == null) {
+            return timeDifference;
+        }
+        boolean flag = false;
+        if (firstDate.before(secondDate)) {
+            flag = true;
+        }
+        Calendar calendarS = Calendar.getInstance();
+        Calendar calendarE = Calendar.getInstance();
+        long timeS, timeE;
+        try {
+            calendarS.setTime(firstDate);
+            calendarE.setTime(secondDate);
+
+            timeS = calendarS.getTimeInMillis();
+            timeE = calendarE.getTimeInMillis();
+
+            if (flag) {
+                timeDifference = (timeE - timeS) / (1000 * 60);
+            } else {
+                timeDifference = (timeS - timeE) / (1000 * 60);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return timeDifference;
+    }
+
+}

+ 228 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfTransferRecordDocTrans.java

@@ -0,0 +1,228 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * @Description: 转科记录文档生成
+ * @author: rengb
+ * @time: 2020/3/20 16:10
+ */
+public class ShaoyfTransferRecordDocTrans extends ModelDocTrans {
+
+    public TransferRecordDoc extract(MedrecVo medrecVo) {
+        TransferRecordDoc transferRecordDoc = new TransferRecordDoc();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return transferRecordDoc;
+        }
+        List<Map<String, Object>> into = (List) contentMap.get("转入记录");
+        List<Map<String, Object>> out = (List) contentMap.get("转出记录");
+        List<Map<String, Object>> all = new ArrayList<>();
+        all.addAll(into);
+        all.addAll(out);
+        Map<String, TransferIntoDoc> transferIntoDocMap = getTransferIntoDocMap(into);
+        Map<String, TransferOutDoc> transferOutDocMap = getTransferOutDocMap(out);
+        Map<String, TransferRecordDoc> transferAllDocMap = getTransferAllDocMap(all);
+
+        //转入
+        Map<Date, TransferIntoDoc> dateRecordIn = new TreeMap<>(new Comparator<Date>() {
+            @Override
+            public int compare(Date o1, Date o2) {
+                // 升序排列
+                return o1.compareTo(o2);
+            }
+        });
+        for (TransferIntoDoc transferIntoDoc : transferIntoDocMap.values()) {
+            Map<String, String> structureMap = transferIntoDoc.getStructureMap();
+            String inDateStr = structureMap.get("转科日期");
+            if (StringUtil.isBlank(inDateStr)) {
+                continue;
+            }
+            Date inDate = StringUtil.parseDateTime(inDateStr);
+            if (inDate == null) {
+                continue;
+            }
+            dateRecordIn.put(inDate, transferIntoDoc);
+        }
+        transferRecordDoc.setTransferIntoDocs(new ArrayList<>(dateRecordIn.values()));
+        //转出
+        Map<Date, TransferOutDoc> dateRecordOut = new TreeMap<>(new Comparator<Date>() {
+            @Override
+            public int compare(Date o1, Date o2) {
+                // 升序排列
+                return o1.compareTo(o2);
+            }
+        });
+        for (TransferOutDoc transferOutDoc : transferOutDocMap.values()) {
+            Map<String, String> structureMap = transferOutDoc.getStructureMap();
+            String outDateStr = structureMap.get("转科日期");
+            if (StringUtil.isBlank(outDateStr)) {
+                continue;
+            }
+            Date outDate = StringUtil.parseDateTime(outDateStr);
+            if (outDate == null) {
+                continue;
+            }
+            dateRecordOut.put(outDate, transferOutDoc);
+        }
+        transferRecordDoc.setTransferOutDocs(new ArrayList<>(dateRecordOut.values()));
+
+        //全部转科记录
+        Map<Date, TransferRecordDoc> dateRecordAll = new TreeMap<>(new Comparator<Date>() {
+            @Override
+            public int compare(Date o1, Date o2) {
+                // 升序排列
+                return o1.compareTo(o2);
+            }
+        });
+        for (TransferRecordDoc transferRecordAllDoc : transferAllDocMap.values()) {
+            Map<String, String> structureMap = transferRecordAllDoc.getStructureMap();
+            String transferDateStr = structureMap.get("转科日期");
+            if (StringUtil.isBlank(transferDateStr)) {
+                continue;
+            }
+            Date transferDate = StringUtil.parseDateTime(transferDateStr);
+            if (transferDate == null) {
+                continue;
+            }
+            dateRecordAll.put(transferDate, transferRecordAllDoc);
+        }
+        transferRecordDoc.setAllTransferDocs(new ArrayList<>(dateRecordAll.values()));
+
+        return transferRecordDoc;
+    }
+
+
+    /**************************************************转入*******************************************************/
+    private Map<String, TransferIntoDoc> getTransferIntoDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, TransferIntoDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferIntoDoc transferIntoDoc = getTransferIntoDoc(contentMap);
+            transferIntoDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferIntoDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferIntoDoc getTransferIntoDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, transferInto_keyContrasts);
+
+        TransferIntoDoc transferIntoDoc = new TransferIntoDoc();
+        transferIntoDoc.setText(content);
+        transferIntoDoc.setStructureMap(structureMap);
+        transferIntoDoc.setPageData((Map) sourceMap);
+
+        return transferIntoDoc;
+    }
+
+    private List<String> transferInto_keyContrasts = Lists.newArrayList(
+            "书写日期=记录日期",
+            "本人姓名=姓名"
+    );
+
+    /**************************************************全部*******************************************************/
+    private Map<String, TransferRecordDoc> getTransferAllDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, TransferRecordDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferRecordDoc transferRecordDoc = getTransferAllDoc(contentMap);
+            transferRecordDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferRecordDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferRecordDoc getTransferAllDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, transferInto_keyContrasts);
+        TransferRecordDoc transferAllDoc = new TransferRecordDoc();
+        transferAllDoc.setText(content);
+        transferAllDoc.setStructureMap(structureMap);
+        transferAllDoc.setPageData((Map) sourceMap);
+        return transferAllDoc;
+    }
+
+    /**************************************************转出*******************************************************/
+    private Map<String, TransferOutDoc> getTransferOutDocMap(List<Map<String, Object>> contentMaps) {
+        Map<String, TransferOutDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferOutDoc transferOutDoc = getTransferOutDoc(contentMap);
+            transferOutDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferOutDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferOutDoc getTransferOutDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, transferOut_keyContrasts);
+
+        TransferOutDoc transferOutDoc = new TransferOutDoc();
+        transferOutDoc.setText(content);
+        transferOutDoc.setStructureMap(structureMap);
+        transferOutDoc.setPageData((Map) sourceMap);
+
+        return transferOutDoc;
+    }
+
+    private List<String> transferOut_keyContrasts = Lists.newArrayList(
+            "书写日期=记录日期",
+            "本人姓名=姓名"
+    );
+
+}