package com.saye.hospitalgd.util; import com.saye.hospitalgd.commons.date.DateDUtil; import lombok.extern.slf4j.Slf4j; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; /** * @author thuang * @version 1.0 * @description: inputXml需要将尖括号替换为转义字符 * @date 2021/9/17 15:43 */ @Slf4j public class HisUtil { /** * @description: 获取his数据(中联) * @author thuang * @date 2021/9/29 13:59 * @version 1.0 */ public HashMap getHisDataByZL(String url, String businessNo, String inputXml) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { RestTemplate restTemplate = RestTemplateUtil.getInstance(); // 创建一个请求头对象 HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 设置请求头对象contentTyp的为text/xml;charset=UTF-8 headers.setContentType(type); // 将请求参数进行封装并进行远程接口服务调用 // 构造webservice请求参数 StringBuffer soapRequestData = new StringBuffer(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); // soapRequestData.append(""); //传入交易编号 // soapRequestData.append(businessNo); // soapRequestData.append(""); soapRequestData.append(""); //传入参数 < > 符号需要转义 inputXml = inputXml.replaceAll("<", "<"); inputXml = inputXml.replaceAll(">", ">"); soapRequestData.append(inputXml); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); // 创建请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 发送post请求并获取到响应结果 String str = restTemplate.postForObject(url, request, String.class); Document document = DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //直接获取body Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("MOP_PatHosPayDetailQueryResponse"); Element hisResponse = (Element) callHisResponse.next(); Iterator callHisResult = hisResponse.elementIterator("MOP_PatHosPayDetailQueryResult"); Element hisResult = (Element) callHisResult.next(); String text = hisResult.getText(); resultMap.put("dataStr", text); } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "调用his接口失败,原因" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } /** * @description: 解析返回的内容.获取其中的His对账数据(中联) * @author thuang * @date 2021/9/29 14:04 * @version 1.0 */ public HashMap managerDataStrByZL(String dataStr) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { dataStr = dataStr.replaceAll("<", "<"); dataStr = dataStr.replaceAll(">", ">"); Document document = DocumentHelper.parseText(dataStr); Element rootElt = document.getRootElement(); Iterator iterator = rootElt.elementIterator(); Element returnResult = (Element) iterator.next();//returnResult Element returnCode = returnResult.element("returncode"); Element ErrorMsg = returnResult.element("errormsg"); if (!"1".equals(returnCode.getText())) { errCode = returnCode.getText(); errMsg = ErrorMsg.getText(); } //如果正确 开始解析 if ("1".equals(returnCode.getText())) { List> addList = new ArrayList<>(); Element Items = (Element) iterator.next(); Iterator itemIterator = Items.elementIterator(); while (itemIterator.hasNext()) { HashMap addMap = new HashMap<>(); Element item = (Element) itemIterator.next(); Element visitzOrg = item.element("VisitzOrg"); String visitzOrgText = visitzOrg.getText(); Element bizType = item.element("BizType"); String bizTypeText = bizType.getText(); Element payType = item.element("PayType"); String payTypeText = payType.getText(); Element amount = item.element("Amount"); String amountText = amount.getText(); Element zfAmount = item.element("ZFAmount"); String zfAmountText = zfAmount.getText(); Element ybzhAmount = item.element("YBZHAmount"); String ybzhAmountText = ybzhAmount.getText(); Element ybtcAmount = item.element("YBTCAmount"); String ybtcAmountText = ybtcAmount.getText(); Element receiptNo = item.element("ReceiptNO"); String receiptNoText = receiptNo.getText(); Element invnum = item.element("InvNum"); String invnumText = invnum.getText(); Element patientID = item.element("PatientID"); String patientIDText = patientID.getText(); Element inhosnum = item.element("InHosNum"); String inhosnumText = inhosnum.getText(); Element patientName = item.element("PatientName"); String patientNameText = patientName.getText(); Element tradeTime = item.element("TradeTime"); String tradeTimeText = tradeTime.getText(); Element hisTime = item.element("HisTime"); String hisTimeText = hisTime.getText(); Element hisOperNum = item.element("HisOperNum"); String hisOperNumText = hisOperNum.getText(); Element tranID = item.element("PowerTranID"); String tranIDText = tranID.getText(); addMap.put("visitzOrg", visitzOrgText); addMap.put("bizType", bizTypeText); addMap.put("payType", payTypeText); addMap.put("amount", amountText); addMap.put("zfAmount", zfAmountText); addMap.put("ybzhAmount", ybzhAmountText); addMap.put("ybtcAmount", ybtcAmountText); addMap.put("receiptNo", receiptNoText); addMap.put("invnum", invnumText); addMap.put("patientID", patientIDText); addMap.put("inhosnum", inhosnumText); addMap.put("patientName", patientNameText); String trade_date = ""; String TradeTime = ""; String[] s = hisTimeText.split(" "); trade_date = s[0]; TradeTime = s[1]; addMap.put("trade_date", trade_date + ""); addMap.put("tradeTime", TradeTime); addMap.put("hisTime", hisTimeText); addMap.put("hisOperNum", hisOperNumText); addMap.put("tranID", tranIDText); addList.add(addMap); } resultMap.put("addList", addList); } } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "his数据字符串中提取数据失败,原因:" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } /** * @description: 获取his数据(卫宁) * @author thuang * @date 2021/10/13 10:17 * @version 1.0 */ public HashMap getHisDataByWN(String url, String tranCode, String inputXml) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { RestTemplate restTemplate = RestTemplateUtil.getInstance(); // 创建一个请求头对象 HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 设置请求头对象contentTyp的为text/xml;charset=UTF-8 headers.setContentType(type); // 将请求参数进行封装并进行远程接口服务调用 // 构造webservice请求参数 StringBuffer soapRequestData = new StringBuffer(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); //传入交易编号 soapRequestData.append(tranCode); soapRequestData.append(""); soapRequestData.append(""); //传入参数 < > 符号需要转义 inputXml = inputXml.replaceAll("<", "<"); inputXml = inputXml.replaceAll(">", ">"); soapRequestData.append(inputXml); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); // 创建请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 发送post请求并获取到响应结果 String str = restTemplate.postForObject(url, request, String.class); Document document = DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //直接获取body Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("WebBusinessResponse"); Element hisResponse = (Element) callHisResponse.next(); Iterator callHisResult = hisResponse.elementIterator("WebBusinessResult"); Element hisResult = (Element) callHisResult.next(); String text = hisResult.getText(); Iterator callOutXml = hisResponse.elementIterator("OutXml"); Element outXml = (Element) callOutXml.next(); String text1 = outXml.getText(); resultMap.put("dataStr", text1); } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "调用his接口失败,原因" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } /** * @description: 解析返回的内容.获取其中的His对账数据(卫宁) * @author thuang * @date 2021/9/29 14:04 * @version 1.0 */ public HashMap managerDataStrByWN(String dataStr) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { dataStr = dataStr.replaceAll("<", "<"); dataStr = dataStr.replaceAll(">", ">"); Document document = DocumentHelper.parseText(dataStr); Element rootElt = document.getRootElement(); Iterator iterator = rootElt.elementIterator(); Element codeElm = (Element) iterator.next(); Element msgElm = (Element) iterator.next(); String code = codeElm.getText(); String msg = msgElm.getText(); if (!"0".equals(code)) { errCode = code; errMsg = msg; } //如果正确 开始解析 if ("0".equals(code)) { List> addList = new ArrayList<>(); Element result = (Element) iterator.next(); Iterator itemIterator = result.elementIterator(); while (itemIterator.hasNext()) { HashMap addMap = new HashMap<>(); Element item = (Element) itemIterator.next(); //数据类型 1-门诊 2-住院 Element sjlxElm = item.element("sjlx"); String sjlx = sjlxElm.getText(); //患者姓名 Element hzxmElm = item.element("hzxm"); String hzxm = hzxmElm.getText(); //患者标识 Element patidElm = item.element("patid"); String patid = patidElm.getText(); //交易金额 Element jyjeElm = item.element("jyje"); String jyje = jyjeElm.getText(); //格式化金额 原先小数四位 有效两位 jyje = new BigDecimal(jyje).setScale(2, BigDecimal.ROUND_HALF_UP).toString(); //退余金额 Element tyjeElm = item.element("tyje"); String tyje = tyjeElm.getText(); //格式化金额 原先小数四位 有效两位 tyje = new BigDecimal(tyje).setScale(2, BigDecimal.ROUND_HALF_UP).toString(); //支付流水号(平台交易号,银商订单号) Element zflshElm = item.element("zflsh"); String zflsh = zflshElm.getText(); //交易时间 Element jyrqElm = item.element("jyrq"); String jyrq = jyrqElm.getText(); //是否退款记录 Element sftkjlElm = item.element("sftkjl"); String sftkjl = sftkjlElm.getText(); //支付方式 Element zffsElm = item.element("zffs"); String zffs = zffsElm.getText(); //交易类型 Element jylxElm = item.element("jylx"); String jylx = jylxElm.getText(); //操作员号 Element czyhElm = item.element("czyh"); String czyh = czyhElm.getText(); //交易日期 String trade_date = ""; if (jyrq.length() > 10) { //卫宁的日期格式为yyyyMMddHH:mm:ss 格式化日期为 yyyy-MM-dd HH:mm:ss trade_date = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, DateDUtil.strToDate(DateDUtil.yyyyMMddHH_mm_ss, jyrq)); } addMap.put("sjlx", sjlx); addMap.put("hzxm", hzxm); addMap.put("patid", patid); addMap.put("jyje", jyje); addMap.put("tyje", tyje); addMap.put("zflsh", zflsh); addMap.put("jyrq", jyrq); addMap.put("sftkjl", sftkjl); addMap.put("zffs", zffs); addMap.put("jylx", jylx); addMap.put("czyh", czyh); addMap.put("trade_date", trade_date); addList.add(addMap); } resultMap.put("addList", addList); } } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "his数据字符串中提取数据失败,原因:" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } /** * @description: 获取his数据(弘扬) * @author thuang * @date 2022/1/24 10:13 * @version 1.0 */ public HashMap getHisDataByHY(String url, String tranCode, String inputXml) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { RestTemplate restTemplate = RestTemplateUtil.getInstance(); // 创建一个请求头对象 HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 设置请求头对象contentTyp的为text/xml;charset=UTF-8 headers.setContentType(type); // 将请求参数进行封装并进行远程接口服务调用 // 构造webservice请求参数 StringBuffer soapRequestData = new StringBuffer(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); //传入参数 < > 符号需要转义 inputXml = inputXml.replaceAll("<", "<"); inputXml = inputXml.replaceAll(">", ">"); soapRequestData.append(inputXml); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); soapRequestData.append(""); // 创建请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 发送post请求并获取到响应结果 String str = restTemplate.postForObject(url, request, String.class); Document document = DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //直接获取body Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("MOP_PatHosPayDetailQueryResponse"); Element hisResponse = (Element) callHisResponse.next(); Iterator callHisResult = hisResponse.elementIterator("MOP_PatHosPayDetailQueryResult"); Element hisResult = (Element) callHisResult.next(); String text = hisResult.getText(); /*Iterator callOutXml = hisResponse.elementIterator("OutXml"); Element outXml = (Element)callOutXml.next(); String text1 = outXml.getText(); */ resultMap.put("dataStr", text); } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "调用his接口失败,原因" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } /** * @description: 解析返回的内容.获取其中的His对账数据(弘扬) * @author thuang * @date 2022/1/24 10:14 * @version 1.0 */ public HashMap managerDataStrByHY(String dataStr) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; try { dataStr = dataStr.replaceAll("<", "<"); dataStr = dataStr.replaceAll(">", ">"); System.out.println(dataStr); Document document2 = DocumentHelper.parseText(dataStr); Element rootElt2 = document2.getRootElement(); Iterator iterator = rootElt2.elementIterator(); Element returnresultElm = (Element) iterator.next(); Element dataElm = (Element) iterator.next(); Iterator returncode = returnresultElm.elementIterator("returncode"); Iterator errormsg = returnresultElm.elementIterator("errormsg"); Element codeElm = (Element) returncode.next(); Element msgElm = (Element) errormsg.next(); String code = codeElm.getText(); String msg = msgElm.getText(); if (!"1".equals(code)) { errCode = code; errMsg = msg; } //如果正确 开始解析 if ("1".equals(code)) { List> addList = new ArrayList<>(); Iterator itemIterator = dataElm.elementIterator(); while (itemIterator.hasNext()) { HashMap addMap = new HashMap<>(); Element item = (Element) itemIterator.next(); //数据类型 1-门诊 2-住院 Element visitzOrgElm = item.element("VisitzOrg"); String visitzOrg = visitzOrgElm.getText(); //业务类型 Element bizTypeElm = item.element("BizType"); String bizType = bizTypeElm.getText(); //支付方式 Element payTypeElm = item.element("PayType"); String payType = payTypeElm.getText(); //总金额 Element amountElm = item.element("Amount"); String amount = amountElm.getText(); //自费支付金额 Element zfAmountElm = item.element("ZFAmount"); String zfAmount = zfAmountElm.getText(); //医保账户金额 Element ybzhAmountElm = item.element("YBZHAmount"); String ybzhAmount = ybzhAmountElm.getText(); //医保统筹金额 Element ybtcAmountElm = item.element("YBTCAmount"); String ybtcAmount = ybtcAmountElm.getText(); //收据号 Element receiptNOElm = item.element("Receipt_no"); String receiptNO = receiptNOElm.getText(); //患者 ID Element patientIDElm = item.element("PatientID"); String patientID = patientIDElm.getText(); //患者姓名 Element patientNameElm = item.element("PatientName"); String patientName = patientNameElm.getText(); //交易时间 Element tradeTimeElm = item.element("TradeTime"); String tradeTime = 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)); } //HIS 业务时间 Element hisTimeElm = item.element("HisTime"); String hisTime = hisTimeElm.getText(); //操作员 Element hisOperNumElm = item.element("HisOperNum"); String hisOperNum = hisOperNumElm.getText(); //交易 ID Element powerTranIDElm = item.element("PowerTranID"); //此处为关键id,但是由于错误数据的存在 此处还是保存下。免的说之后少获取数据 String powerTranID = ""; if (powerTranIDElm != null) { powerTranID = powerTranIDElm.getText(); } addMap.put("visitzOrg", visitzOrg); addMap.put("bizType", bizType); addMap.put("payType", payType); addMap.put("amount", amount); addMap.put("zfAmount", zfAmount); addMap.put("ybzhAmount", ybzhAmount); addMap.put("ybtcAmount", ybtcAmount); addMap.put("receiptNO", receiptNO); addMap.put("patientID", patientID); addMap.put("patientName", patientName); addMap.put("tradeTime", tradeTime); addMap.put("trade_date", trade_date); addMap.put("hisTime", hisTime); addMap.put("hisOperNum", hisOperNum); addMap.put("powerTranID", powerTranID); addList.add(addMap); } resultMap.put("addList", addList); } } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "his数据字符串中提取数据失败,原因:" + e.getMessage(); } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } }