Browse Source

1.义乌病案首页trans处理修改为读取文书解析xml
2.病案首页规则:患者姓名未填写,先修改这条规则,若报错把xml字段id一起返回

hujing 4 years ago
parent
commit
d4abf47b2c

+ 1 - 0
dbanaly/pom.xml

@@ -129,6 +129,7 @@
                 <includes>
                     <include>**/*.yml</include>
                     <include>**/*.xml</include>
+                    <include>**/*.json</include>
                 </includes>
             </resource>
         </resources>

+ 105 - 48
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuFirstPageRecordXmlUtil.java

@@ -5,8 +5,16 @@ import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.lantone.qc.pub.util.FileUtil;
-import com.lantone.qc.pub.util.MapUtil;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.BehospitalWayEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.BloodTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.DiagnoseTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.IsMedAllergyEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.LeaveHospitalTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.MarriageEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.RHEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.SexEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.util.MapUtil;
+import com.lantone.qc.dbanaly.facade.yiwu.util.YWDateUtils;
 import com.lantone.qc.pub.util.StringUtil;
 import org.dom4j.Document;
 import org.dom4j.DocumentHelper;
@@ -23,6 +31,8 @@ import java.util.Set;
  * @time: 2020/3/28 14:23
  */
 public class YiWuFirstPageRecordXmlUtil {
+
+    public static final Map<String, String> CITY_MAP = MapUtil.getMap("cityCode.json");
     public static Map<String, String> leaveDiagMap = ImmutableMap.<String, String>builder()
             .put("出院诊断", "诊断名称")
             .put("出院诊断编码", "诊断编码")
@@ -45,27 +55,23 @@ public class YiWuFirstPageRecordXmlUtil {
             .build();
 
     public static Map<String, Object> process(String xml) {
-        Map<String, Object> sourceMap = xmlToMap(xml);
-        Map<String, Object> structureMap = mapKeyContrast(sourceMap, keyContrasts);
+        Map<String, String> sourceMap = xmlToMap(xml);
+        Map<String, String> structureMap = mapKeyContrast(sourceMap, keyContrasts);
+        Map<String, Object> structureExtMap = Maps.newHashMap();
+        structureExtMap.putAll(structureMap);
         JSONArray leaveDiags = new JSONArray();
         specialProcess(structureMap, leaveDiagMap, leaveDiags);
-        structureMap.put("出院诊断", leaveDiags);
+        structureExtMap.put("出院诊断", leaveDiags);
 
         JSONArray operations = new JSONArray();
         specialProcess(structureMap, operationMap, operations);
-        structureMap.put("手术信息", operations);
-        if (structureMap.containsKey("ID编号")){
-            Map<String, Object> idMap = (Map<String, Object>) structureMap.get("ID编号");
-            idMap.put("出院诊断", "出院诊断_table3");
-            idMap.put("手术信息", "手术信息_table3");
-            idMap = mapKeyContrast(idMap, keyContrasts);
-            structureMap.put("ID编号",idMap);
-        }
-        return structureMap;
+        structureExtMap.put("手术信息", operations);
+        structureExtMap = processToValue(structureExtMap);
+        return structureExtMap;
     }
 
-    public static Map<String, Object> xmlToMap(String xml) {
-        Map<String, Object> map = Maps.newHashMap();
+    public static Map<String, String> xmlToMap(String xml) {
+        Map<String, String> map = Maps.newHashMap();
         try {
             Document doc = DocumentHelper.parseText(xml);
             Element root = (Element) doc.selectSingleNode("//XTextDocument/XElements/Element[@xsi:type='XTextBody']/XElements");
@@ -119,7 +125,7 @@ public class YiWuFirstPageRecordXmlUtil {
         return ret;
     }
 
-    public static void xInputField(Map<String, Object> map, Element xInputFieldElement, String tablePreTxt) {
+    public static void xInputField(Map<String, String> map, Element xInputFieldElement, String tablePreTxt) {
         String value = getXInputFieldValue(xInputFieldElement);
         if (value == null) {
             return;
@@ -130,17 +136,6 @@ public class YiWuFirstPageRecordXmlUtil {
                 value = map.get(key) + " " + value;
             }
             map.put(key, value);
-            String id = getXInputFieldId(xInputFieldElement);
-            if (StringUtil.isNotBlank(id)) {
-                if (!map.containsKey("ID编号")) {
-                    Map<String, String> idValue = Maps.newHashMap();
-                    idValue.put(key, id);
-                    map.put("ID编号", idValue);
-                } else {
-                    //id唯一,所以不用做if判断key是否存在
-                    ((Map<String, String>) map.get("ID编号")).put(key, id);
-                }
-            }
         }
     }
 
@@ -200,16 +195,6 @@ public class YiWuFirstPageRecordXmlUtil {
         return value;
     }
 
-    //获取 XInputField 的值
-    private static String getXInputFieldId(Element xInputFieldElement) {
-        String value = "";
-        Element idElement = xInputFieldElement.element("ID");
-        if (idElement != null) {
-            value = idElement.getTextTrim();
-        }
-        return value;
-    }
-
     //获取前面文本信息作为key
     private static String getElementPreVal(Element xInputFieldElement) {
         String ret = "";
@@ -229,8 +214,8 @@ public class YiWuFirstPageRecordXmlUtil {
 
     //针对key的一些特殊处理
     private static String keyHandle(String key) {
-        key = StringUtil.removeBlank(key).replaceAll("[::]", "");
-        return key;
+        key = StringUtil.isBlank(key) ? key : key.replaceAll("[\\s\\p{Zs}]", "");
+        return key.replaceAll("[::]", "");
     }
 
     /**
@@ -240,13 +225,13 @@ public class YiWuFirstPageRecordXmlUtil {
      * @param keyContrasts
      * @return
      */
-    public static Map<String, Object> mapKeyContrast(Map<String, Object> sourceMap, List<String> keyContrasts) {
-        Map<String, Object> retMap = Maps.newHashMap();
+    public static Map<String, String> mapKeyContrast(Map<String, String> sourceMap, List<String> keyContrasts) {
+        Map<String, String> retMap = Maps.newHashMap();
         mapKeyContrastCommon(sourceMap, keyContrasts, retMap);
         return retMap;
     }
 
-    public static void mapKeyContrastCommon(Map sourceMap, List<String> keyContrasts, Map<String, Object> retMap) {
+    public static void mapKeyContrastCommon(Map sourceMap, List<String> keyContrasts, Map<String, String> retMap) {
         Map<String, String> sourceMap_ = MapUtil.copyMap(sourceMap);
         String[] arry = null;
         String sourceKey = null, targetKey;
@@ -260,7 +245,7 @@ public class YiWuFirstPageRecordXmlUtil {
                 targetKey = arry[1];
             }
             if (StringUtil.isNotBlank(sourceMap_.get(sourceKey))
-                    && (!retMap.containsKey(targetKey) || StringUtil.isBlank(retMap.get(targetKey).toString()))) {
+                    && (!retMap.containsKey(targetKey) || StringUtil.isBlank(retMap.get(targetKey)))) {
                 retMap.put(targetKey, sourceMap_.get(sourceKey));
             }
             removeKey.add(sourceKey);
@@ -282,13 +267,13 @@ public class YiWuFirstPageRecordXmlUtil {
      * @param leaveDiagMap
      * @param array
      */
-    public static void specialProcess(Map<String, Object> structureMap, Map<String, String> leaveDiagMap, JSONArray array) {
+    public static void specialProcess(Map<String, String> structureMap, Map<String, String> leaveDiagMap, JSONArray array) {
         JSONObject object;
         int num = 0;
         try {
             for (Map.Entry<String, String> entry : leaveDiagMap.entrySet()) {
                 if (structureMap.containsKey(entry.getKey())) {
-                    String value = structureMap.get(entry.getKey()).toString();
+                    String value = structureMap.get(entry.getKey());
                     value = removeUseless(value);
                     String[] values = value.split(" ");
                     if (num == 0) {
@@ -333,7 +318,10 @@ public class YiWuFirstPageRecordXmlUtil {
     }
 
     public static void main(String[] args) {
-        xmlToMap(FileUtil.fileRead("C:\\Users\\Administrator\\Desktop\\义务\\jiexi\\n5.xml"));
+        //        xmlToMap(FileUtil.fileRead("C:\\Users\\Administrator\\Desktop\\义务\\jiexi\\n5.xml"));
+        String xml = "";
+        Map<String, Object> ret = process(xml);
+        System.out.println(ret);
     }
 
     private static List<String> keyContrasts = Lists.newArrayList(
@@ -399,7 +387,7 @@ public class YiWuFirstPageRecordXmlUtil {
             "联系电话=现住址电话",
             "损伤中毒外部因素=损伤中毒因素",
             "诊断类_实验室诊断费=实验室诊断费",
-            "年龄=新生儿年龄",
+            "年龄=新生儿年龄",
             "诊断类_临床诊断项目费=临床诊断项目费",
             "耗材类_治疗用一次性医用材料费=治疗用一次性医用材料费",
             "诊断符合情况_临床与病理=临床与病理",
@@ -447,4 +435,73 @@ public class YiWuFirstPageRecordXmlUtil {
             "工作单位邮政编码=工作单位邮编"
     );
 
+    public static Map<String, Object> processToValue(Map<String, Object> map) {
+
+        String[] provinceList = String.valueOf(map.get("省")).split(" ");
+        String[] cityList = String.valueOf(map.get("市")).split(" ");
+        String[] areaList = String.valueOf(map.get("县")).split(" ");
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("性别")))) {
+            map.put("性别", SexEnum.getName(String.valueOf(map.get("性别"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("婚姻")))) {
+            map.put("婚姻", MarriageEnum.getName(String.valueOf(map.get("婚姻"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("入院途径")))) {
+            //入院途径,1:急诊,2:门诊,3:其他医疗机构,9:其他
+            map.put("入院途径", BehospitalWayEnum.getName(String.valueOf(map.get("入院途径")).split(" ")[0]));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("血型")))) {
+            map.put("血型", BloodTypeEnum.getName(String.valueOf(map.get("血型"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("Rh")))) {
+            map.put("Rh", RHEnum.getName(String.valueOf(map.get("Rh"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("离院方式")))) {
+            map.put("离院方式", LeaveHospitalTypeEnum.getName(String.valueOf(map.get("离院方式"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("门诊与住院")))) {
+            map.put("门诊与住院", DiagnoseTypeEnum.getName(String.valueOf(map.get("门诊与住院"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("入院与出院")))) {
+            map.put("入院与出院", DiagnoseTypeEnum.getName(String.valueOf(map.get("入院与出院"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("术前与术后")))) {
+            map.put("术前与术后", DiagnoseTypeEnum.getName(String.valueOf(map.get("术前与术后"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("临床与病理")))) {
+            map.put("临床与病理", DiagnoseTypeEnum.getName(String.valueOf(map.get("临床与病理"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("放射与病理")))) {
+            map.put("放射与病理", DiagnoseTypeEnum.getName(String.valueOf(map.get("放射与病理"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("药物过敏")))) {
+            map.put("药物过敏", IsMedAllergyEnum.getName(String.valueOf(map.get("药物过敏"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("三十一天内再住院计划")))) {
+            map.put("三十一天内再住院计划", IsMedAllergyEnum.getName(String.valueOf(map.get("三十一天内再住院计划"))));
+        }
+        if (provinceList.length > 0) {
+            if (provinceList[0].length() > 1) {
+                map.put("出生地", CITY_MAP.get(provinceList[0]) + CITY_MAP.get(cityList[0]) + CITY_MAP.get(areaList[0]));
+            }
+            if (provinceList[1].length() > 1) {
+                map.put("户口地址", CITY_MAP.get(provinceList[1]) + CITY_MAP.get(cityList[1]) + CITY_MAP.get(areaList[1]) + map.get("户口地址其它"));
+            }
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("籍贯_省")).replaceAll("[\u4e00-\u9fa5]", ""))) {
+            map.put("籍贯", CITY_MAP.get(map.get("籍贯_省")) + CITY_MAP.get(map.get("籍贯_市")));
+        }
+        map.put("现住址", CITY_MAP.get(map.get("现住址_省")) + CITY_MAP.get(map.get("现住址_市")) + CITY_MAP.get(map.get("现住址_县")) + map.get("现住址其它"));
+        if (StringUtil.isEmpty(String.valueOf(map.get("出生日期")).replaceAll("[\u4e00-\u9fa5]", "").trim())) {
+            map.put("出生日期", "");
+        }
+        if (!YWDateUtils.isDate(String.valueOf(map.get("入院时间")), "yyyy年MM月dd日 HH时mm分")) {
+            map.put("入院日期", "");
+        }
+        if (!YWDateUtils.isDate(String.valueOf(map.get("出院时间")), "yyyy年MM月dd日 HH时mm分")) {
+            map.put("出院时间", "");
+        }
+        return map;
+    }
+
 }

+ 7 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/AKeyedNamed.java

@@ -0,0 +1,7 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+public interface AKeyedNamed {
+    String getKey();
+
+    String getName();
+}

+ 48 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BehospitalWayEnum.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum BehospitalWayEnum implements AKeyedNamed{
+    COMMON("1", "普通"),
+    TRANSFER_HOSPITAL("2", "转院"),
+    EMERGENCY_TREATMENT("3", "急诊"),
+    OBSERVATION("4", "留观"),
+    OUTPATIENT("5", "门诊"),
+    DAY_SURGERY("18", "日间手术"),
+    STIPULATE_ENTITY("12", "规定病种");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    BehospitalWayEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static BehospitalWayEnum getEnum(String key) {
+        for (BehospitalWayEnum item : BehospitalWayEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        BehospitalWayEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 48 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BloodTypeEnum.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum BloodTypeEnum implements AKeyedNamed{
+
+    A("1", "A"),
+    B("2", "B"),
+    O("3", "O"),
+    AB("4", "AB"),
+    UN_KNOWN("5", "不详"),
+    NO_CHECK("6", "未查");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    BloodTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static BloodTypeEnum getEnum(String key) {
+        for (BloodTypeEnum item : BloodTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        BloodTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/DiagnoseTypeEnum.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum DiagnoseTypeEnum implements AKeyedNamed{
+    NO_DONE("0", "未做"),
+    ACCORD("1", "符合"),
+    NO_ACCORD("2", "不符合"),
+    UN_CHECK("3", "不确定");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    DiagnoseTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DiagnoseTypeEnum getEnum(String key) {
+        for (DiagnoseTypeEnum item : DiagnoseTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        DiagnoseTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 43 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/IsMedAllergyEnum.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum IsMedAllergyEnum implements AKeyedNamed {
+    NO("1", "无"),
+    YES("2", "有");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    IsMedAllergyEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static IsMedAllergyEnum getEnum(String key) {
+        for (IsMedAllergyEnum item : IsMedAllergyEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        IsMedAllergyEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 47 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/LeaveHospitalTypeEnum.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum LeaveHospitalTypeEnum implements AKeyedNamed{
+    LEAVE_HOSPTAIL("1", "医嘱离院"),
+    TRANSFER_MEDICAL("2", "医嘱转院"),
+    TRANSFER_COMMUNITY("3", "医嘱转社区卫生服务机构/乡镇卫生院"),
+    NO_TRANSFER_MEDICAL("4", "非医嘱离院"),
+    DEATH("5", "死亡"),
+    OTHER("9", "其他");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    LeaveHospitalTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static LeaveHospitalTypeEnum getEnum(String key) {
+        for (LeaveHospitalTypeEnum item : LeaveHospitalTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        LeaveHospitalTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 46 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/MarriageEnum.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum MarriageEnum implements AKeyedNamed{
+    UNMARRIED("1", "未婚"),
+    MARRIED("2", "已婚"),
+    WIDOWED("3", "丧偶"),
+    DIVORCE("4", "离婚"),
+    OTHER("9", "其他");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    MarriageEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static MarriageEnum getEnum(String key) {
+        for (MarriageEnum item : MarriageEnum.values()) {
+            if (key.equals(item.getKey()) ) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        MarriageEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/RHEnum.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum RHEnum implements AKeyedNamed{
+    NEGATIVE("1", "阴"),
+    POSITIVE("2", "阳"),
+    UN_KNOWN("3", "不详"),
+    NO_CHECK("4", "未查");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    RHEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static RHEnum getEnum(String key) {
+        for (RHEnum item : RHEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        RHEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 43 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/SexEnum.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum SexEnum implements AKeyedNamed {
+    NUM_MALE("1", "男"),
+    NUM_FEMALE("2", "女");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    SexEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static SexEnum getEnum(String key) {
+        for (SexEnum item : SexEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        SexEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 147 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/MapUtil.java

@@ -0,0 +1,147 @@
+package com.lantone.qc.dbanaly.facade.yiwu.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Maps;
+import org.apache.commons.io.IOUtils;
+import org.springframework.core.io.ClassPathResource;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.InputStreamReader;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @Description: map工具类
+ * @author: gaodm
+ * @time: 2018/9/4 9:24
+ */
+public class MapUtil {
+    private static final String SP = ";";
+    private static final String SSP = ":";
+
+    /**
+     * 把Map转换成String。注意以英文分号字符';'开始和结束
+     *
+     * @param attrs
+     * @return
+     */
+    public static String toString(Map<String, String> attrs) {
+        StringBuilder sb = new StringBuilder();
+        if (null != attrs && !attrs.isEmpty()) {
+            sb.append(SP);
+            for (String key : attrs.keySet()) {
+                String val = attrs.get(key);
+                if (val != null && !"".equals(val)) {
+                    sb.append(key).append(SSP).append(val).append(SP);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 把key:value;key:value格式的String转换成Map
+     *
+     * @param str
+     * @return
+     */
+    public static Map<String, String> fromString(String str) {
+        Map<String, String> attrs = new HashMap<String, String>();
+        if (str != null && !"".equals(str)) {
+            String[] arr = str.split(SP);
+            if (null != arr) {
+                for (String kv : arr) {
+                    if (kv != null && !"".equals(kv)) {
+                        String[] ar = kv.split(SSP);
+                        if (null != ar && ar.length == 2) {
+                            String key = ar[0];
+                            String val = ar[1];
+                            if (val != null && !"".equals(val)) {
+                                attrs.put(key, val);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return attrs;
+    }
+
+    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
+        if (map == null) {
+            return null;
+        }
+
+        Object obj = beanClass.newInstance();
+
+        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor property : propertyDescriptors) {
+            Method setter = property.getWriteMethod();
+            if (setter != null) {
+                setter.invoke(obj, map.get(property.getName()));
+            }
+        }
+
+        return obj;
+    }
+
+    public static Map<String, Object> objectToMap(Object obj) throws Exception {
+        if (obj == null) {
+            return null;
+        }
+
+        Map<String, Object> map = new HashMap<String, Object>();
+
+        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor property : propertyDescriptors) {
+            String key = property.getName();
+            if (key.compareToIgnoreCase("class") == 0) {
+                continue;
+            }
+            Method getter = property.getReadMethod();
+            Object value = getter != null ? getter.invoke(obj) : null;
+            map.put(key, value);
+        }
+        return map;
+    }
+
+    /**
+     * 复制一个map
+     *
+     * @param map
+     * @return
+     */
+    public static Map<String, Object> copyMap(Map<String, Object> map) {
+        if (map == null) {
+            return null;
+        }
+        Map<String, Object> retMap = Maps.newHashMap();
+        map.keySet().forEach(key -> {
+            retMap.put(key, map.get(key));
+        });
+        return retMap;
+    }
+
+    public static Map<String, String> getMap(String path){
+        Map<String,String> map = new LinkedHashMap();
+        try {
+            //路径
+            ClassPathResource classPathResource = new ClassPathResource(path);
+            //读取文件信息
+            String str = IOUtils.toString(new InputStreamReader(classPathResource.getInputStream(),"UTF-8"));
+            //转换为Map对象
+            map = JSONObject.parseObject(str, LinkedHashMap.class);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+}

+ 187 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/YWDateUtils.java

@@ -0,0 +1,187 @@
+package com.lantone.qc.dbanaly.facade.yiwu.util;
+
+import com.lantone.qc.pub.util.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+public class YWDateUtils {
+    public static void main(String[] args) {
+//        String strDateTime="20150206201756";
+//        System.out.println(convJsonDateToString(strDateTime,"yyyy-MM-dd HH:mm:ss"));
+        System.out.println(getCurrentTime());
+    }
+    public static String convJsonDateToString(String jsonDate,String stringTemplate){
+        String resultString=null;
+        try {
+            Calendar cldCalendar=convToCalender(jsonDate, "yyyyMMddhhmmss");
+            resultString=convToString(cldCalendar, stringTemplate);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    public static String convJsonDateToString(String jsonDate,String jsonTemplate,String stringTemplate){
+
+        String resultString=null;
+        try {
+            Calendar cldCalendar=convToCalender(jsonDate, jsonTemplate);
+            resultString=convToString(cldCalendar, stringTemplate);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    // 把指定格式的日期字符串转日期类型
+    public static Calendar convToCalender(String str,String template){
+
+        SimpleDateFormat sdf;
+        Date date;
+        Calendar cltResult = Calendar.getInstance();
+
+        sdf = new SimpleDateFormat(template, Locale.getDefault());
+        try {
+            date = sdf.parse(str);
+
+            cltResult.setTime(date);
+
+        } catch (Exception ex) {
+            // TODO Auto-generated catch block
+            ex.printStackTrace();
+        }
+
+        return cltResult;
+    }
+    // 把日期转指定格式字符串
+    public static String convToString(Calendar cld,String template){
+        String resultString=null;
+        try {
+            Date date=cld.getTime();
+            SimpleDateFormat sdf=new SimpleDateFormat(template,Locale.getDefault());
+            resultString=sdf.format(date);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    public static String getCurrentTime(){
+        DateFormat df = new SimpleDateFormat(DateUtil.DATE_TIME_FORMAT_NO_SPLIT);
+        Calendar calendar = Calendar.getInstance();
+        return df.format(calendar.getTime());
+    }
+
+    public static Date parseDateTime(String datetime) {
+        Date date = null;
+        try {
+            datetime = remove_ctl(datetime);
+
+            if (datetime.contains("至")) {
+                datetime = datetime.split("至")[1].replaceAll("[\\u4e00-\\u9fa5]", "");
+            }
+
+            if (datetime.endsWith(":")) {
+                datetime = datetime.substring(0, datetime.length() - 1);
+            }
+
+            if (datetime.length() > 0 && !"-".equals(datetime)) {
+                date = DateUtils.parseDate(datetime, dateFormats);
+            }
+        } catch (ParseException ex) {
+            ex.printStackTrace();
+        }
+        return date;
+    }
+
+    public static String remove_ctl(String str) {
+        String trim = "";
+        if (StringUtils.isNotEmpty(str)) {
+            trim = str.replaceAll("\r|\n|\r\n|/r/n", "").trim();
+        }
+        return trim;
+    }
+
+    public static String[] dateFormats = {
+            "yyyy年MM月dd日HH时mm分",
+            "yyyy年MM月dd日HH:mm",
+            "yyyy年MM月dd日H时mm分",
+            "yyyy年MM月dd日HH时m分",
+            "yyyy年MM月dd日H时m分",
+            "yyyy年M月dd日HH时mm分",
+            "yyyy年M月dd日H时mm分",
+            "yyyy年M月dd日HH时m分",
+            "yyyy年M月dd日H时m分",
+            "yyyy年MM月d日HH时mm分",
+            "yyyy年MM月d日H时mm分",
+            "yyyy年MM月d日HH时m分",
+            "yyyy年MM月d日H时m分",
+            "yyyy年M月d日HH时mm分",
+            "yyyy年M月d日H时mm分",
+            "yyyy年M月d日HH时m分",
+            "yyyy年M月d日H时m分",
+            "yyyy-MM-ddHH:mm:ss",
+            "yyyy-MM-ddHH:mm",
+            "yyyy-MM-ddHH:m",
+            "yyyy-MM-ddH:mm",
+            "yyyy-MM-ddH:m",
+            "yyyy-M-ddHH:mm",
+            "yyyy-M-ddHH:m",
+            "yyyy-M-ddH:mm",
+            "yyyy-M-ddH:m",
+            "yyyy-MM-dHH:mm",
+            "yyyy-MM-dHH:m",
+            "yyyy-MM-dH:mm",
+            "yyyy-MM-dH:m",
+            "yyyy-M-dHH:mm",
+            "yyyy-M-dHH:m",
+            "yyyy-M-dH:mm",
+            "yyyy-M-dH:m",
+            "yyyy-MM-dd",
+            "yyyy年MM月dd日H时",
+            "yyyy/MM/ddHH:mm:ss",
+            "yyyy/MM/ddHH:mm",
+            "yyyy/MM/ddHH:m",
+            "yyyy/MM/ddH:mm",
+            "yyyy/MM/ddH:m",
+            "yyyy/M/ddHH:mm",
+            "yyyy/M/ddHH:m",
+            "yyyy/M/ddH:mm",
+            "yyyy/M/ddH:m",
+            "yyyy/MM/dHH:mm",
+            "yyyy/MM/dHH:m",
+            "yyyy/MM/dH:mm",
+            "yyyy/MM/dH:m",
+            "yyyy/M/dHH:mm",
+            "yyyy/M/dHH:m",
+            "yyyy/M/dH:mm",
+            "yyyy/M/dH:m",
+            "yyyy/MM/dd",
+            "yyyy.MM.dd",
+            "yyyy-MM-ddHH:mm:ss.000",
+            "yyyyMMddHH:mm",
+            "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy"
+    };
+
+    public static boolean isDate(String dttm, String format) {
+        boolean retValue = false;
+        if (dttm != null) {
+            SimpleDateFormat formatter = new SimpleDateFormat(format);
+            try {
+                formatter.parse(dttm);
+                retValue = true;
+            } catch (ParseException e) {
+            }
+        }
+        return retValue;
+    }
+
+}

File diff suppressed because it is too large
+ 3247 - 0
dbanaly/src/main/resources/cityCode.json


+ 4 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/yiwu/firstpagerecord/FIRP0157.java

@@ -22,8 +22,11 @@ public class FIRP0157 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String name = firstpageStructureMap.get(Content.name);
-            if (CatalogueUtil.isEmpty(name)){
+            if (CatalogueUtil.isEmpty(name)) {
                 status.set("-1");
+                Map<String, Object> structureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+                String xmlId = CatalogueUtil.getXmlId(structureExtMap, Content.name);
+                id.set(xmlId);
             }
         }
     }

+ 9 - 0
kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java

@@ -5,6 +5,7 @@ import com.google.common.collect.Lists;
 import com.lantone.qc.dbanaly.util.KernelConstants;
 import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
@@ -592,4 +593,12 @@ public class CatalogueUtil {
         return ret;
     }
 
+    public static String getXmlId(Map<String, Object> structureExtMap,String key){
+        if (structureExtMap != null && structureExtMap.containsKey("ID编号")) {
+            Map<String, String> ids = (Map<String, String>) structureExtMap.get("ID编号");
+            return ids.get(key);
+        }
+        return "";
+    }
+
 }

+ 16 - 42
trans/src/main/java/com/lantone/qc/trans/yiwu/YiWuFirstPageRecordDocTrans.java

@@ -2,15 +2,12 @@ package com.lantone.qc.trans.yiwu;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.facade.yiwu.YiWuFirstPageRecordXmlUtil;
 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;
@@ -21,50 +18,27 @@ import java.util.Map;
  * @time: 2020/3/16 17:47
  */
 public class YiWuFirstPageRecordDocTrans extends ModelDocTrans {
+    private String modeId = "6";
 
     @Override
     public FirstPageRecordDoc extract(MedrecVo medrecVo) {
-
-        // 与长兴一直,直接传json
-        Map<String, String> content = (Map) medrecVo.getContent();
+        //Map<String, String> content = (Map) medrecVo.getContent();
+        Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+        String content = contentMap.get("xmlText").toString();
         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 = null;
+        Map<String, String> structureMap = Maps.newHashMap();
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureExtMap = (Map) FastJsonUtils.getJsonToMap(content);
+        } else {
+            structureExtMap = YiWuFirstPageRecordXmlUtil.process(content);
+            structureExtMap.put("mode_id", ModuleMappingUtil.getDeptModuleId(modeId));
+            firstPageRecordDoc.setStructureExtMap(structureExtMap);
         }
-
-        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));
-
-        List<Map<String, String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
-        if (dischargeDiag != null && dischargeDiag.size() > 0) {
-            for (Map<String, String> diag : dischargeDiag) {
-                String diagCategory = diag.get("诊断类别");
-                if (StringUtil.isNotBlank(diagCategory) && "1".equals(diagCategory)) {
-                    diag.put("诊断类别", "主要诊断");
-                    break;
-                }
-            }
-        }
-        //        structureExtMap.put(Content.pathologyDiagnose, FastJsonUtils.getJsonToBean(content.get(Content.pathologyDiagnose), Object.class));
-        firstPageRecordDoc.setStructureExtMap(structureExtMap);
-        medrecVo.getContent().put("mode_id", ModuleMappingUtil.getStandardModuleId("6"));
-        firstPageRecordDoc.setPageData(medrecVo.getContent());
-
+        structureExtMap.forEach((k, v) -> structureMap.put(k, v.toString()));
+        firstPageRecordDoc.setStructureMap(structureMap);
+        firstPageRecordDoc.setPageData(structureExtMap);
         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(