数据对接xml解析

<ESBEntry>
    <!--通过MB对请求进行权限验证,验证后将删除AccessControl节点 -->
    <AccessControl>
        <UserName>用户名</UserName>
        <Password>密码 </Password>
        <SysFlag>环境标识 </SysFlag>
        <Fid>功能ID(如:BS10003) </Fid>
    </AccessControl>
    <MessageHeader>
        <Fid>功能ID(如:BS10003)</Fid>
        <SourceSysCode>消息发送者系统</SourceSysCode>
        <ReturnFlag>回写标志</ReturnFlag>
        <!--TargetSysCode选填,有的情况下按照TargetSysCode发送,没有需到后台管理系统中查询消费系统,进行分发 -->
        <TargetSysCode>消息接收者系统</TargetSysCode>      
        <MsgDate>消息发送时间(取系统当前时间,格式:YYYY-MM-DD HH:MI:SS)</MsgDate>
    </MessageHeader>
    <MsgInfo>
        <!-- 一个Msg标签对应一条数据库记录,可多条。CDATA内的action代表操作类型 -->
        <Msg id="记录主键值" lastUpdate ="记录更新前的最后更新日期" action="insert">
            <!-- 字段列表,例如字段名为A、B、C,值为a、b、c -->
            <OUTHOSP_INDEX_NO>@门诊索引号 </OUTHOSP_INDEX_NO>
            <VISIT_CARD_NO>@就诊卡号 </VISIT_CARD_NO>
            <OUTHOSP_NO>@门诊流水号 </OUTHOSP_NO>
            <INHOSP_INDEX_NO>@住院索引号 </INHOSP_INDEX_NO>
            <MR_NO>@病案号 </MR_NO>
            <ANAMNESIS_NO>@病历号 </ANAMNESIS_NO>
            <INHOSP_NUM>@住院次数 </INHOSP_NUM>
            <INHOSP_NO>@住院流水号 </INHOSP_NO>
            <PAT_INDEX_NO>@患者索引号 </PAT_INDEX_NO>
            <ELECTR_REQUISITION_NO>@电子申请单编号 </ELECTR_REQUISITION_NO>
            <ORDER_NO>@医嘱号 </ORDER_NO>
            <ORDER_GROUP_NO>@医嘱组号 </ORDER_GROUP_NO>
            <REPORT_NO>@报告单编号 </REPORT_NO>
            <TEST_PAT_RESOURCE_CODE>@检验患者来源代码 </TEST_PAT_RESOURCE_CODE>
            <TEST_PAT_RESOURCE_NAME>@检验患者来源名称 </TEST_PAT_RESOURCE_NAME>
            <REPORT_NAME>@报告名称 </REPORT_NAME>
            <APPLY_DATE>@申请日期 </APPLY_DATE>
            <TEST_CATEG_CODE>@检验大类代码 </TEST_CATEG_CODE>
            <TEST_CATEG_NAME>@检验大类名称 </TEST_CATEG_NAME>
            <EXECUT_DATE>@执行日期 </EXECUT_DATE>
            <REPORT_DATE>@报告日期 </REPORT_DATE>
            <SAMPLE_NO>@样本编号 </SAMPLE_NO>
            <MICROBE_TEST_FLAG>@微生物检验标志 </MICROBE_TEST_FLAG>
            <APPLY_DEPT_INDEX_NO>@申请科室索引号 </APPLY_DEPT_INDEX_NO>
            <APPLY_DEPT_CODE>@申请科室代码 </APPLY_DEPT_CODE>
            <APPLY_DEPT_NAME>@申请科室名称 </APPLY_DEPT_NAME>
            <EXECUT_DEPT_INDEX_NO>@执行科室索引号 </EXECUT_DEPT_INDEX_NO>
            <EXECUT_DEPT_CODE>@执行科室代码 </EXECUT_DEPT_CODE>
            <EXECUT_DEPT_NAME>@执行科室名称 </EXECUT_DEPT_NAME>
            <APPLY_DR_INDEX_NO>@申请医生索引号 </APPLY_DR_INDEX_NO>
            <APPLY_DR_CODE>@申请医生工号 </APPLY_DR_CODE>
            <APPLY_DR_NAME>@申请医生姓名 </APPLY_DR_NAME>
            <EXECUT_DR_INDEX_NO>@执行医生索引号 </EXECUT_DR_INDEX_NO>
            <EXECUT_DR_CODE>@执行医生工号 </EXECUT_DR_CODE>
            <EXECUT_DR_NAME>@执行医生姓名 </EXECUT_DR_NAME>
            <REPORT_DR_INDEX_NO>@报告医生索引号 </REPORT_DR_INDEX_NO>
            <REPORT_DR_CODE>@报告医生工号 </REPORT_DR_CODE>
            <REPORT_DR_NAME>@报告医生姓名 </REPORT_DR_NAME>
            <CLINIC_DIAG_CODE>@临床诊断代码 </CLINIC_DIAG_CODE>
            <CLINIC_DIAG_NAME>@临床诊断名称 </CLINIC_DIAG_NAME>
            <ID_NUMBER>@身份证号码 </ID_NUMBER>
            <PAT_NAME>@患者姓名 </PAT_NAME>
            <PHYSI_SEX_CODE>@生理性别代码 </PHYSI_SEX_CODE>
            <PHYSI_SEX_NAME>@生理性别名称 </PHYSI_SEX_NAME>
            <DATE_BIRTH>@出生日期 </DATE_BIRTH>
            <ETHNIC_CODE>@民族代码 </ETHNIC_CODE>
            <ETHNIC_NAME>@民族名称 </ETHNIC_NAME>
            <MARITAL_STATUS_CODE>@婚姻状况代码 </MARITAL_STATUS_CODE>
            <MARITAL_STATUS_NAME>@婚姻状况名称 </MARITAL_STATUS_NAME>
            <RECORD_DATE>@录入日期 </RECORD_DATE>
            <UPDATE_DATE>@更新日期 </UPDATE_DATE>
            <EQUIPMENT_CODE>@设备代码 </EQUIPMENT_CODE>
            <EQUIPMENT_NAME>@设备名称 </EQUIPMENT_NAME>
            <INVALID_FLAG>@作废标志 </INVALID_FLAG>
            <BAR_CODE_NO>@条码号 </BAR_CODE_NO>
            <CRITICAL_FLAG>@病危标志 </CRITICAL_FLAG>
            <REPORT_TYPE_CODE>@报告类型代码 </REPORT_TYPE_CODE>
            <REPORT_TYPE_NAME>@报告类型名称 </REPORT_TYPE_NAME>
            <REPORT_CONTENT>@报告内容 </REPORT_CONTENT>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <!-- 以下字段仅存在于响应中,由消费方返回 -->
            <RESULT_CODE>@结果代码 </RESULT_CODE>
            <NOTE>@备注 </NOTE>
        </Msg>       
        
        <Msg id="记录主键值" lastUpdate ="记录更新前的最后更新日期" action="insert">
            <!-- 字段列表,例如字段名为A、B、C,值为a、b、c -->
            <OUTHOSP_INDEX_NO>@门诊索引号 </OUTHOSP_INDEX_NO>
            <VISIT_CARD_NO>@就诊卡号 </VISIT_CARD_NO>
            <OUTHOSP_NO>@门诊流水号 </OUTHOSP_NO>
            <INHOSP_INDEX_NO>@住院索引号 </INHOSP_INDEX_NO>
            <MR_NO>@病案号 </MR_NO>
            <ANAMNESIS_NO>@病历号 </ANAMNESIS_NO>
            <INHOSP_NUM>@住院次数 </INHOSP_NUM>
            <INHOSP_NO>@住院流水号 </INHOSP_NO>
            <PAT_INDEX_NO>@患者索引号 </PAT_INDEX_NO>
            <ELECTR_REQUISITION_NO>@电子申请单编号 </ELECTR_REQUISITION_NO>
            <ORDER_NO>@医嘱号 </ORDER_NO>
            <ORDER_GROUP_NO>@医嘱组号 </ORDER_GROUP_NO>
            <REPORT_NO>@报告单编号 </REPORT_NO>
            <TEST_PAT_RESOURCE_CODE>@检验患者来源代码 </TEST_PAT_RESOURCE_CODE>
            <TEST_PAT_RESOURCE_NAME>@检验患者来源名称 </TEST_PAT_RESOURCE_NAME>
            <REPORT_NAME>@报告名称 </REPORT_NAME>
            <APPLY_DATE>@申请日期 </APPLY_DATE>
            <TEST_CATEG_CODE>@检验大类代码 </TEST_CATEG_CODE>
            <TEST_CATEG_NAME>@检验大类名称 </TEST_CATEG_NAME>
            <EXECUT_DATE>@执行日期 </EXECUT_DATE>
            <REPORT_DATE>@报告日期 </REPORT_DATE>
            <SAMPLE_NO>@样本编号 </SAMPLE_NO>
            <MICROBE_TEST_FLAG>@微生物检验标志 </MICROBE_TEST_FLAG>
            <APPLY_DEPT_INDEX_NO>@申请科室索引号 </APPLY_DEPT_INDEX_NO>
            <APPLY_DEPT_CODE>@申请科室代码 </APPLY_DEPT_CODE>
            <APPLY_DEPT_NAME>@申请科室名称 </APPLY_DEPT_NAME>
            <EXECUT_DEPT_INDEX_NO>@执行科室索引号 </EXECUT_DEPT_INDEX_NO>
            <EXECUT_DEPT_CODE>@执行科室代码 </EXECUT_DEPT_CODE>
            <EXECUT_DEPT_NAME>@执行科室名称 </EXECUT_DEPT_NAME>
            <APPLY_DR_INDEX_NO>@申请医生索引号 </APPLY_DR_INDEX_NO>
            <APPLY_DR_CODE>@申请医生工号 </APPLY_DR_CODE>
            <APPLY_DR_NAME>@申请医生姓名 </APPLY_DR_NAME>
            <EXECUT_DR_INDEX_NO>@执行医生索引号 </EXECUT_DR_INDEX_NO>
            <EXECUT_DR_CODE>@执行医生工号 </EXECUT_DR_CODE>
            <EXECUT_DR_NAME>@执行医生姓名 </EXECUT_DR_NAME>
            <REPORT_DR_INDEX_NO>@报告医生索引号 </REPORT_DR_INDEX_NO>
            <REPORT_DR_CODE>@报告医生工号 </REPORT_DR_CODE>
            <REPORT_DR_NAME>@报告医生姓名 </REPORT_DR_NAME>
            <CLINIC_DIAG_CODE>@临床诊断代码 </CLINIC_DIAG_CODE>
            <CLINIC_DIAG_NAME>@临床诊断名称 </CLINIC_DIAG_NAME>
            <ID_NUMBER>@身份证号码 </ID_NUMBER>
            <PAT_NAME>@患者姓名 </PAT_NAME>
            <PHYSI_SEX_CODE>@生理性别代码 </PHYSI_SEX_CODE>
            <PHYSI_SEX_NAME>@生理性别名称 </PHYSI_SEX_NAME>
            <DATE_BIRTH>@出生日期 </DATE_BIRTH>
            <ETHNIC_CODE>@民族代码 </ETHNIC_CODE>
            <ETHNIC_NAME>@民族名称 </ETHNIC_NAME>
            <MARITAL_STATUS_CODE>@婚姻状况代码 </MARITAL_STATUS_CODE>
            <MARITAL_STATUS_NAME>@婚姻状况名称 </MARITAL_STATUS_NAME>
            <RECORD_DATE>@录入日期 </RECORD_DATE>
            <UPDATE_DATE>@更新日期 </UPDATE_DATE>
            <EQUIPMENT_CODE>@设备代码 </EQUIPMENT_CODE>
            <EQUIPMENT_NAME>@设备名称 </EQUIPMENT_NAME>
            <INVALID_FLAG>@作废标志 </INVALID_FLAG>
            <BAR_CODE_NO>@条码号 </BAR_CODE_NO>
            <CRITICAL_FLAG>@病危标志 </CRITICAL_FLAG>
            <REPORT_TYPE_CODE>@报告类型代码 </REPORT_TYPE_CODE>
            <REPORT_TYPE_NAME>@报告类型名称 </REPORT_TYPE_NAME>
            <REPORT_CONTENT>@报告内容 </REPORT_CONTENT>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <DETAIL>
                <TEST_ITEM_CODE>@检验项目代码 </TEST_ITEM_CODE>
                <TEST_ITEM_NAME>@检验项目名称 </TEST_ITEM_NAME>
                <TEST_RESULT_VALUE>@检验结果值 </TEST_RESULT_VALUE>
                <TEST_RESULT_VALUE_UNIT>@检验结果值单位 </TEST_RESULT_VALUE_UNIT>
                <REFERENCE_RANGES>@参考范围 </REFERENCE_RANGES>
                <NORMAL_FLAG>@正常标志 </NORMAL_FLAG>
                <SAMPLE_TYPE_CODE>@样本类型代码 </SAMPLE_TYPE_CODE>
                <SAMPLE_TYPE_NAME>@样本类型名称 </SAMPLE_TYPE_NAME>
                <NOTE>@备注 </NOTE>
                <INVALID_FLAG>@作废标志 </INVALID_FLAG>
                <MICROBE_NAME>@微生物名称 </MICROBE_NAME>
                <BACTERIAL_COLONY_COUNT>@菌落计数 </BACTERIAL_COLONY_COUNT>
                <SMEAR_RESULT>@涂片结果 </SMEAR_RESULT>
                <MIC>@最低抑菌浓度 </MIC>
                <DIAMETER>@直径 </DIAMETER>
                <RESULT_STATUS>@结果状态 </RESULT_STATUS>
				<CRITICAL_VALUE_FLAG>@危机值标志 </CRITICAL_VALUE_FLAG>
            </DETAIL>
            <!-- 以下字段仅存在于响应中,由消费方返回 -->
            <RESULT_CODE>@结果代码 </RESULT_CODE>
            <NOTE>@备注 </NOTE>
        </Msg>       
    </MsgInfo>
    <RetInfo>
        <RetCode>-1/0/1/-99</RetCode>
        <RetCon>用户名密码服务匹配错误/无匹配记录/成功/其他错误 </RetCon>
    </RetInfo>
</ESBEntry>

            SAXReader sa = new SAXReader();
            //读取xml 这里当对接数据的时候一般就直接会是string类型xml了
            String s = FileToStringUtil.readToBuffer("D:\\PS01.xml");
            Map<String, Object> result1 = new HashMap<>(50);
            //调用hutool工具类import cn.hutool.core.util.XmlUtil;
            Map<String, Object> stringObjectMap = XmlUtil.xmlToMap(s, result1);
            //一层层解析
            Map<String, Object> msgInfo = (Map<String, Object>) stringObjectMap.get("MsgInfo");
            List<Map<String, Object>> msgList = new ArrayList<>();
            List<Map<String, Object>> msg = new ArrayList<>();
            //msg不是list集合说明是单个msg 需要转换成 map 否则是集合转成 list
            if(!(msgInfo.get("Msg") instanceof ArrayList)){
                msg.add( (Map<String, Object>) msgInfo.get("Msg"));
            }else{
                msg = (List<Map<String, Object>>) msgInfo.get("Msg");
            }
            //对于我们来说哪怕是单个map也需要把它放到msg list集合当中 方便统一规则新增或修改
             msg.forEach(res->{
                List<Map<String, Object>> list = new ArrayList<>();
                res.put("id",UUID.randomUUID().toString());
                list.add(res);
                inspectionReportService.insertInspectionReport(list);
                List<Map<String, Object>>  detailList = new ArrayList<>();
                if(!(res.get("DETAIL") instanceof List)){
                    detailList.add((Map<String, Object>) res.get("DETAIL"));
                }else{
                    detailList = (List<Map<String, Object>>) res.get("DETAIL");
                }
                detailList.forEach(item->{
                    item.put("INSPECTION_ID",res.get("id"));
                    item.put("id",UUID.randomUUID().toString());
                });
                inspectionReportService.insertInspectionReportDetail(detailList);
             });
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐