浏览代码

义乌疑术前讨论小结字段映射修改

fangqw 4 年之前
父节点
当前提交
001e0d15b5
共有 1 个文件被更改,包括 422 次插入0 次删除
  1. 422 0
      trans/src/main/java/com/lantone/qc/trans/yiwu/YiWuOperationDocTrans.java

+ 422 - 0
trans/src/main/java/com/lantone/qc/trans/yiwu/YiWuOperationDocTrans.java

@@ -0,0 +1,422 @@
+package com.lantone.qc.trans.yiwu;
+
+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.dbanaly.facade.yiwu.YiWuXmlUtil;
+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.FastJsonUtils;
+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.CommonAnalysisUtil;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 手术文档生成
+ * @author: rengb
+ * @time: 2020/3/20 17:11
+ */
+public class YiWuOperationDocTrans 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 modeId = "18";
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            Map<String, String> sourceMap = YiWuXmlUtil.xmlToMap(content);
+            List<String> titles = Lists.newArrayList("手术开始时间","术中诊断","麻醉方式","手术方式",
+                    "手术简要经过(包括术中所见)","术后诊疗计划(处理措施)","术后注意观察事项","医师签名",
+                    "签名时间","患者或代理人签名","签名时间");
+            String text = sourceMap.get("原始文本");
+            List<String> sortTitles=CommonAnalysisUtil.sortTitles(titles,text);
+            CommonAnalysisUtil.cutByTitles(text,sortTitles,0,sourceMap);
+            sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+            int index = 0;
+            if(text.contains("手术开始时间")){
+                index=text.indexOf("手术开始时间")+8;
+            }
+            String timevalue=text.substring(index,index+18);
+            sourceMap.put("手术开始时间",timevalue);
+            String [] str = new String[3];
+            String s="";
+            if(text.contains("术中诊断")){
+                str=text.split("术中诊断");
+                s=str[1].replace(":","");
+            }
+            sourceMap.put("术中诊断",s);
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationDiscussion_keyContrasts, modeId);
+
+        }
+
+        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 modeId = "17";
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            Map<String, String> sourceMap = YiWuXmlUtil.xmlToMap(content);
+            List<String> titles = Lists.newArrayList("手术开始时间","手术结束时间","术前诊断","术(中)后诊断",
+                    "手术名称","手术医师","助手医师","麻醉方式",
+                    "麻醉医师","手术护士","巡回护士","手术中用药(化疗等药物)","手术切口类别(可选)","术中出血量","输血量"
+                    ,"围术期并发症","手术切除标本","冰冻切片结果","标本件数","是否有植入物","手术步骤","记录者签名","记录日期");
+            String text = sourceMap.get("原始文本");
+            List<String> sortTitles=CommonAnalysisUtil.sortTitles(titles,text);
+            CommonAnalysisUtil.cutByTitles(text,sortTitles,0,sourceMap);
+            sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationRecord_keyContrasts, modeId);
+            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 modeId = "11";
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            Map<String, String> sourceMap = YiWuXmlUtil.xmlToMap(content);
+            List<String> titles = Lists.newArrayList("讨论时间","讨论地点","主持人","经治医师",
+                    "参加人员及技术职称","讨论方式","讨论记录","主持人签名","记录人签名");
+            String text = sourceMap.get("原始文本");
+            List<String> sortTitles=CommonAnalysisUtil.sortTitles(titles,text);
+            CommonAnalysisUtil.cutByTitles(text,sortTitles,0,sourceMap);
+            sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts, modeId);
+            addKeyMapping(structureMap, "麻醉方式", "拟施手术名称及麻醉方式");
+            addKeyMapping(structureMap, "主刀医师签名", "主刀医生");
+            addKeyMapping(structureMap, "既往疾病史", "其他");
+            addKeyMapping(structureMap, "诊疗计划", "治疗计划和措施");
+        }
+        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 modeId = "16";
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            Map<String, String> sourceMap = YiWuXmlUtil.xmlToMap(content);
+            sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationInformedConsent_keyContrasts, modeId);
+        }
+        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 modeId = "21";
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            Map<String, String> sourceMap = YiWuXmlUtil.xmlToMap(content);
+            sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
+            sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationSafetyChecklist_keyContrasts, modeId);
+        }
+        OperationSafetyChecklistDoc operationSafetyChecklistDoc = new OperationSafetyChecklistDoc();
+        operationSafetyChecklistDoc.setStructureMap(structureMap);
+        operationSafetyChecklistDoc.setPageData((Map) structureMap);
+
+        return operationSafetyChecklistDoc;
+    }
+
+    private List<String> operationSafetyChecklist_keyContrasts = Lists.newArrayList(
+            "姓名++++患者姓名=姓名",
+            "性别",
+            "病区",
+            "床号",
+            "病案号++++住院号=病案号",
+            "签名++++=签名"
+    );
+
+    /**
+     * 给structureMap添加一个key(映射)
+     *
+     * @param structureMap
+     * @param target       需要用到的key
+     * @param source       structureMap中含有的key
+     */
+    protected void addKeyMapping(Map<String, String> structureMap, String target, String source) {
+        if (StringUtils.isEmpty(structureMap.get(target)) && StringUtils.isNotEmpty(structureMap.get(source))) {
+            structureMap.put(target, structureMap.get(source));
+        }
+    }
+
+}