Files
dzpt/src/main/java/com/saye/hospitalgd/util/HisUtil.java

713 lines
26 KiB
Java
Raw Normal View History

2025-07-23 09:55:50 +08:00
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<String, String> getHisDataByZL(String url, String businessNo, String inputXml) {
HashMap<String, String> 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("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">");
soapRequestData.append("<soapenv:Header/>");
soapRequestData.append("<soapenv:Body>");
soapRequestData.append("<tem:MOP_PatHosPayDetailQuery>");
// soapRequestData.append("<tem:BusinessNo>");
//传入交易编号
// soapRequestData.append(businessNo);
// soapRequestData.append("</tem:BusinessNo>");
soapRequestData.append("<tem:InMsg>");
//传入参数 < > 符号需要转义
inputXml = inputXml.replaceAll("<", "&lt;");
inputXml = inputXml.replaceAll(">", "&gt;");
soapRequestData.append(inputXml);
soapRequestData.append("</tem:InMsg>");
soapRequestData.append("</tem:MOP_PatHosPayDetailQuery>");
soapRequestData.append("</soapenv:Body>");
soapRequestData.append("</soapenv:Envelope>");
// 创建请求
HttpEntity<String> request = new HttpEntity<String>(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<String, Object> managerDataStrByZL(String dataStr) {
HashMap<String, Object> resultMap = new HashMap<>();
String errCode = "0";
String errMsg = "";
try {
dataStr = dataStr.replaceAll("&lt;", "<");
dataStr = dataStr.replaceAll("&gt;", ">");
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<HashMap<Object, Object>> addList = new ArrayList<>();
Element Items = (Element) iterator.next();
Iterator itemIterator = Items.elementIterator();
while (itemIterator.hasNext()) {
HashMap<Object, Object> 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<String, String> getHisDataByWN(String url, String tranCode, String inputXml) {
HashMap<String, String> 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("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:kws=\"http://www.winning.com.cn/KWS/\">");
soapRequestData.append("<soapenv:Header/>");
soapRequestData.append("<soapenv:Body>");
soapRequestData.append("<kws:WebBusiness>");
soapRequestData.append("<kws:TranCode>");
//传入交易编号
soapRequestData.append(tranCode);
soapRequestData.append("</kws:TranCode>");
soapRequestData.append("<kws:InXml>");
//传入参数 < > 符号需要转义
inputXml = inputXml.replaceAll("<", "&lt;");
inputXml = inputXml.replaceAll(">", "&gt;");
soapRequestData.append(inputXml);
soapRequestData.append("</kws:InXml>");
soapRequestData.append("</kws:WebBusiness>");
soapRequestData.append("</soapenv:Body>");
soapRequestData.append("</soapenv:Envelope>");
// 创建请求
HttpEntity<String> request = new HttpEntity<String>(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<String, Object> managerDataStrByWN(String dataStr) {
HashMap<String, Object> resultMap = new HashMap<>();
String errCode = "0";
String errMsg = "";
try {
dataStr = dataStr.replaceAll("&lt;", "<");
dataStr = dataStr.replaceAll("&gt;", ">");
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<HashMap<Object, Object>> addList = new ArrayList<>();
Element result = (Element) iterator.next();
Iterator itemIterator = result.elementIterator();
while (itemIterator.hasNext()) {
HashMap<Object, Object> 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<String, String> getHisDataByHY(String url, String tranCode, String inputXml) {
HashMap<String, String> 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("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">");
soapRequestData.append("<soapenv:Header/>");
soapRequestData.append("<soapenv:Body>");
soapRequestData.append("<tem:MOP_PatHosPayDetailQuery>");
soapRequestData.append("<tem:InMsg>");
//传入参数 < > 符号需要转义
inputXml = inputXml.replaceAll("<", "&lt;");
inputXml = inputXml.replaceAll(">", "&gt;");
soapRequestData.append(inputXml);
soapRequestData.append("</tem:InMsg>");
soapRequestData.append("</tem:MOP_PatHosPayDetailQuery>");
soapRequestData.append("</soapenv:Body>");
soapRequestData.append("</soapenv:Envelope>");
// 创建请求
HttpEntity<String> request = new HttpEntity<String>(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<String, Object> managerDataStrByHY(String dataStr) {
HashMap<String, Object> resultMap = new HashMap<>();
String errCode = "0";
String errMsg = "";
try {
dataStr = dataStr.replaceAll("&lt;", "<");
dataStr = dataStr.replaceAll("&gt;", ">");
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<HashMap<Object, Object>> addList = new ArrayList<>();
Iterator itemIterator = dataElm.elementIterator();
while (itemIterator.hasNext()) {
HashMap<Object, Object> 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;
}
}