update:宁夏武警his账单明细接口返回数据解析入库
This commit is contained in:
@@ -534,10 +534,28 @@ public class HisUtil {
|
||||
Iterator callHisResponse = recordEless.elementIterator("MOP_PatHosPayDetailQueryResponse");
|
||||
Element hisResponse = (Element) callHisResponse.next();
|
||||
|
||||
Iterator callHisResult = hisResponse.elementIterator("MOP_PatHosPayDetailQueryResult");
|
||||
Element hisResult = (Element) callHisResult.next();
|
||||
// 根据新的XML结构,先获取第一个request元素
|
||||
Iterator callRequest = hisResponse.elementIterator("request");
|
||||
if (!callRequest.hasNext()) {
|
||||
throw new RuntimeException("未找到request元素");
|
||||
}
|
||||
Element requestElement = (Element) callRequest.next();
|
||||
|
||||
String text = hisResult.getText();
|
||||
// 从第一个request元素中获取第二个request元素
|
||||
Iterator callSecondRequest = requestElement.elementIterator("request");
|
||||
if (!callSecondRequest.hasNext()) {
|
||||
throw new RuntimeException("未找到第二个request元素");
|
||||
}
|
||||
Element secondRequestElement = (Element) callSecondRequest.next();
|
||||
|
||||
// 第二个request元素本身就是OutPut_MOP_PatHosPayDetailQuery(通过xsi:type属性标识)
|
||||
// 所以直接使用它,不需要再查找子元素
|
||||
Element hisResult = secondRequestElement;
|
||||
|
||||
// 获取完整的XML内容,而不是文本内容
|
||||
String text = hisResult.asXML();
|
||||
|
||||
System.out.println("从HIS接口获取的XML数据: " + text);
|
||||
|
||||
/*Iterator callOutXml = hisResponse.elementIterator("OutXml");
|
||||
Element outXml = (Element)callOutXml.next();
|
||||
@@ -545,7 +563,7 @@ public class HisUtil {
|
||||
*/
|
||||
resultMap.put("dataStr", text);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("调用his接口失败,原因", e);
|
||||
|
||||
errCode = "999";
|
||||
errMsg = "调用his接口失败,原因" + e.getMessage();
|
||||
@@ -571,19 +589,56 @@ public class HisUtil {
|
||||
String errMsg = "";
|
||||
|
||||
try {
|
||||
// 检查dataStr是否为空或null
|
||||
if (dataStr == null || dataStr.trim().isEmpty()) {
|
||||
errCode = "999";
|
||||
errMsg = "传入的XML数据为空";
|
||||
resultMap.put("errCode", errCode);
|
||||
resultMap.put("errMsg", errMsg);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
dataStr = dataStr.replaceAll("<", "<");
|
||||
dataStr = dataStr.replaceAll(">", ">");
|
||||
|
||||
System.out.println(dataStr);
|
||||
log.info("解析前的XML数据: {}", dataStr);
|
||||
|
||||
// 检查XML是否完整
|
||||
if (!dataStr.trim().startsWith("<") || !dataStr.trim().endsWith(">")) {
|
||||
errCode = "999";
|
||||
errMsg = "XML数据格式不完整";
|
||||
resultMap.put("errCode", errCode);
|
||||
resultMap.put("errMsg", errMsg);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
Document document2 = DocumentHelper.parseText(dataStr);
|
||||
|
||||
Element rootElt2 = document2.getRootElement();
|
||||
|
||||
Iterator iterator = rootElt2.elementIterator();
|
||||
log.info("XML根元素名称: {}", rootElt2.getName());
|
||||
|
||||
Element returnresultElm = (Element) iterator.next();
|
||||
Element dataElm = (Element) iterator.next();
|
||||
// 由于getHisDataByHY已经预处理了XML,这里直接查找returnresult和data元素
|
||||
Element returnresultElm = rootElt2.element("returnresult");
|
||||
if (returnresultElm == null) {
|
||||
errCode = "999";
|
||||
errMsg = "XML结构错误:没有找到returnresult元素";
|
||||
resultMap.put("errCode", errCode);
|
||||
resultMap.put("errMsg", errMsg);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 查找data元素(可能有多个)
|
||||
List<Element> dataElements = rootElt2.elements("data");
|
||||
if (dataElements == null || dataElements.isEmpty()) {
|
||||
errCode = "999";
|
||||
errMsg = "XML结构错误:没有找到data元素";
|
||||
resultMap.put("errCode", errCode);
|
||||
resultMap.put("errMsg", errMsg);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
log.info("找到data元素数量: {}", dataElements.size());
|
||||
|
||||
Iterator returncode = returnresultElm.elementIterator("returncode");
|
||||
Iterator errormsg = returnresultElm.elementIterator("errormsg");
|
||||
@@ -603,61 +658,94 @@ public class HisUtil {
|
||||
if ("1".equals(code)) {
|
||||
List<HashMap<Object, Object>> addList = new ArrayList<>();
|
||||
|
||||
Iterator itemIterator = dataElm.elementIterator();
|
||||
|
||||
while (itemIterator.hasNext()) {
|
||||
// 遍历所有data元素
|
||||
for (Element item : dataElements) {
|
||||
HashMap<Object, Object> addMap = new HashMap<>();
|
||||
Element item = (Element) itemIterator.next();
|
||||
|
||||
//数据类型 1-门诊 2-住院
|
||||
Element visitzOrgElm = item.element("VisitzOrg");
|
||||
String visitzOrg = visitzOrgElm.getText();
|
||||
String visitzOrg = visitzOrgElm != null ? visitzOrgElm.getText() : "";
|
||||
|
||||
//业务类型
|
||||
Element bizTypeElm = item.element("BizType");
|
||||
String bizType = bizTypeElm.getText();
|
||||
String bizType = bizTypeElm != null ? bizTypeElm.getText() : "";
|
||||
|
||||
//支付方式
|
||||
Element payTypeElm = item.element("PayType");
|
||||
String payType = payTypeElm.getText();
|
||||
String payType = payTypeElm != null ? payTypeElm.getText() : "";
|
||||
|
||||
//总金额
|
||||
Element amountElm = item.element("Amount");
|
||||
String amount = amountElm.getText();
|
||||
String amount = amountElm != null ? amountElm.getText() : "";
|
||||
|
||||
//自费支付金额
|
||||
Element zfAmountElm = item.element("ZFAmount");
|
||||
String zfAmount = zfAmountElm.getText();
|
||||
String zfAmount = zfAmountElm != null ? zfAmountElm.getText() : "";
|
||||
|
||||
//医保账户金额
|
||||
Element ybzhAmountElm = item.element("YBZHAmount");
|
||||
String ybzhAmount = ybzhAmountElm.getText();
|
||||
String ybzhAmount = ybzhAmountElm != null ? ybzhAmountElm.getText() : "";
|
||||
|
||||
//医保统筹金额
|
||||
Element ybtcAmountElm = item.element("YBTCAmount");
|
||||
String ybtcAmount = ybtcAmountElm.getText();
|
||||
String ybtcAmount = ybtcAmountElm != null ? ybtcAmountElm.getText() : "";
|
||||
|
||||
//收据号
|
||||
Element receiptNOElm = item.element("Receipt_no");
|
||||
String receiptNO = receiptNOElm.getText();
|
||||
Element receiptNOElm = item.element("ReceiptNO");
|
||||
String receiptNO = receiptNOElm != null ? receiptNOElm.getText() : "";
|
||||
|
||||
//发票号
|
||||
Element invNumElm = item.element("InvNum");
|
||||
String invNum = invNumElm != null ? invNumElm.getText() : "";
|
||||
|
||||
//患者 ID
|
||||
Element patientIDElm = item.element("PatientID");
|
||||
String patientID = patientIDElm.getText();
|
||||
String patientID = patientIDElm != null ? patientIDElm.getText() : "";
|
||||
|
||||
//患者姓名
|
||||
Element patientNameElm = item.element("PatientName");
|
||||
String patientName = patientNameElm.getText();
|
||||
String patientName = patientNameElm != null ? patientNameElm.getText() : "";
|
||||
|
||||
//住院号
|
||||
Element inHosNumElm = item.element("InHosNum");
|
||||
String inHosNum = inHosNumElm != null ? inHosNumElm.getText() : "";
|
||||
|
||||
//交易时间
|
||||
Element tradeTimeElm = item.element("TradeTime");
|
||||
String tradeTime = tradeTimeElm.getText();
|
||||
String tradeTime = tradeTimeElm != null ? tradeTimeElm.getText() : "";
|
||||
|
||||
//交易日期
|
||||
String trade_date = "";
|
||||
if (tradeTime.length() > 10) {
|
||||
//弘扬的日期格式为yyyyMMddHH:mm:ss 格式化日期为 yyyy-MM-dd HH:mm:ss
|
||||
trade_date = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, DateDUtil.strToDate(DateDUtil.yyyy_MM_dd_HH_mm_ss, tradeTime));
|
||||
if (tradeTime != null && tradeTime.length() > 10) {
|
||||
try {
|
||||
// 处理日期格式:将 yyyy/M/d H:m:s 转换为 yyyy-MM-dd HH:mm:ss
|
||||
// 例如:2024/8/7 7:55:45 -> 2024-08-07 07:55:45
|
||||
String[] parts = tradeTime.split(" ");
|
||||
if (parts.length == 2) {
|
||||
String datePart = parts[0];
|
||||
String timePart = parts[1];
|
||||
|
||||
String[] dateComponents = datePart.split("/");
|
||||
if (dateComponents.length == 3) {
|
||||
String year = dateComponents[0];
|
||||
String month = String.format("%02d", Integer.parseInt(dateComponents[1]));
|
||||
String day = String.format("%02d", Integer.parseInt(dateComponents[2]));
|
||||
|
||||
String[] timeComponents = timePart.split(":");
|
||||
if (timeComponents.length == 3) {
|
||||
String hour = String.format("%02d", Integer.parseInt(timeComponents[0]));
|
||||
String minute = String.format("%02d", Integer.parseInt(timeComponents[1]));
|
||||
String second = timeComponents[2];
|
||||
|
||||
String formattedDateTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
|
||||
trade_date = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, DateDUtil.strToDate(DateDUtil.yyyy_MM_dd_HH_mm_ss, formattedDateTime));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("日期解析失败: " + tradeTime + ", 错误: " + e.getMessage());
|
||||
trade_date = "";
|
||||
}
|
||||
}
|
||||
|
||||
//HIS 业务时间
|
||||
@@ -685,20 +773,27 @@ public class HisUtil {
|
||||
addMap.put("ybzhAmount", ybzhAmount);
|
||||
addMap.put("ybtcAmount", ybtcAmount);
|
||||
addMap.put("receiptNO", receiptNO);
|
||||
addMap.put("invNum", invNum);
|
||||
addMap.put("patientID", patientID);
|
||||
addMap.put("patientName", patientName);
|
||||
addMap.put("inHosNum", inHosNum);
|
||||
addMap.put("tradeTime", tradeTime);
|
||||
addMap.put("trade_date", trade_date);
|
||||
addMap.put("hisTime", hisTime);
|
||||
addMap.put("hisOperNum", hisOperNum);
|
||||
addMap.put("hisOperCode", hisOperNum); // 修改字段名以匹配HISGetDataMethodByJH中的使用
|
||||
addMap.put("powerTranID", powerTranID);
|
||||
|
||||
addList.add(addMap);
|
||||
}
|
||||
|
||||
log.info("解析到的数据条数: {}", addList.size());
|
||||
if (addList.size() > 0) {
|
||||
log.info("第一条数据示例: {}", addList.get(0));
|
||||
}
|
||||
resultMap.put("addList", addList);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("his数据字符串中提取数据失败,原因:", e);
|
||||
errCode = "999";
|
||||
errMsg = "his数据字符串中提取数据失败,原因:" + e.getMessage();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user