数据对接利用hutool工具类进行xml解析,xml转换成map,然后进行数据入库
数据对接xml解析<ESBEntry><!--通过MB对请求进行权限验证,验证后将删除AccessControl节点 --><AccessControl><UserName>用户名</UserName><Password>密码 </Password><SysFlag>环境标识 </SysFlag&
·
数据对接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);
});
更多推荐
已为社区贡献1条内容
所有评论(0)