Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/WebServiceClientHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/WebServiceClientHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/WebServiceClientHelper.java (revision 27969) @@ -0,0 +1,93 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.gxzyyf1; + +import java.nio.charset.Charset; +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.apache.log4j.Logger; + +/** + * 广西中医药附一webservice帮助类 + * @author ZhouPeiMian + * @since 2020-05-15 + * + */ +public class WebServiceClientHelper { + + public static Logger logger = Logger.getLogger(WebServiceClientHelper.class); + + /** + * 构造接口输入参数 + * @param transIdName + * @param arg + * @return + */ + public static String buildInputString(String methodName , String... arg){ + String inputXml = ""; + if(StringUtils.equals(methodName, DatasyncConstant.MethodName_ClinicNumber) + || StringUtils.equals(methodName, DatasyncConstant.MethodName_HospitalNumber)){ + StringBuffer inputXmlSB = new StringBuffer(); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("{\"method\": \"getPatientInfo\",\"patientid\":" + arg[0] + "}"); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXml = inputXmlSB.toString(); + } else { + throw new RuntimeException("不存在此方法:" + methodName); + } + return inputXml; + } + + /** + * 使用SOAP1.2发送消息 + * + * @param postUrl + * @param soapXml + * @param soapAction + * @return + */ + public static String doPostSoap1_2(String postUrl, String soapXml, String soapAction) { + String retStr = ""; + // 创建HttpClientBuilder + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + // HttpClient + CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); + HttpPost httpPost = new HttpPost(postUrl); + // 设置请求和传输超时时间 + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(3000000) + .setConnectTimeout(3000000).build(); + httpPost.setConfig(requestConfig); + try { + httpPost.setHeader("Content-Type", "application/soap+xml;charset=UTF-8;action=\"HIPMessageServer\""); + httpPost.setHeader("action", soapAction); + StringEntity data = new StringEntity(soapXml,Charset.forName("UTF-8")); + httpPost.setEntity(data); + CloseableHttpResponse response = closeableHttpClient.execute(httpPost); + HttpEntity httpEntity = response.getEntity(); + if (httpEntity != null) { + // 打印响应内容 + retStr = EntityUtils.toString(httpEntity, "UTF-8"); + retStr = retStr.replaceAll("<", "<"); + retStr = retStr.replaceAll(">", ">"); + retStr = retStr.replaceAll(""", "\""); + } + // 释放资源 + closeableHttpClient.close(); + } catch (Exception e) { + logger.info("exception in doPostSoap1_2:" + e); + } + return retStr; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByHospitalNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByHospitalNumDaoImpl.java (revision 27969) @@ -0,0 +1,116 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.gxzyyf1; + +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据住院号查询病人信息(广西中医药附一) + * @author ZhouPeiMian + * @since 2020-05-15 + * + */ +public class FindPatientInfoByHospitalNumDaoImpl implements + FindPatientInfoByHospitalNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByHospitalNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNum(String hospitalNum) { + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_HospitalNumber, hospitalNum); + logger.info("住院号病人同步接口请求信息:" + inputXml); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_HospitalNumber); + /*String result = "" + + "" + + "" + + "{"ResultCode":0,"ErrorMsg":"成功","DATA":[{"hospitalNumber":"90095652","searialNumber":"2940336|3","patientName":"黄金凤","patientAge":"75","patientSex":"女 ","operationTime":"2020.05.14","patientIDCard":"450802194503102323","doctorName":"莫怡","patientArea":"骨科","roomNumber":"骨科","bedNumber":"GK028","remark":null,"washHandNurse":null,"circuitNurse":null,"opRoomId":null}]}" + + "" + + "" + + "";*/ + logger.info("住院号病人同步接口返回信息:" + result); + int startIndex = result.indexOf(""); + if(startIndex == -1){ + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + XMLSerializer xmlSerializer = new XMLSerializer(); + JSON json = xmlSerializer.read("" + xmlString + ""); + JSONObject patientInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; + if(patientInfos != null){ + if(patientInfos != null){ + Integer status = patientInfos.optInt("ResultCode", 1); + if(DatasyncConstant.ResultCode_Fail.intValue() == status.intValue()){ + logger.info("根据住院号查询病人信息失败:ResultCode = " + status + "; Message = " + patientInfos.optString("ErrorMsg")); + return null; + } + JSONArray patientInfoArr = patientInfos.optJSONArray("DATA"); + if(patientInfoArr != null && patientInfoArr.size() > 0){ + int i = 0; + PatientInfoVO[] patientInfoVOArray = new PatientInfoVO[patientInfoArr.size()]; + for (Object object : patientInfoArr) { + JSONObject patientInfo = (JSONObject) object; + Object tNumber = patientInfo.opt("hospitalNumber"); + Object patientName = patientInfo.opt("patientName"); + Object patientAge = patientInfo.opt("patientAge"); + Object patientSex = patientInfo.opt("patientSex"); + Object patientIDCard = patientInfo.opt("patientIDCard"); + Object doctorName = patientInfo.opt("doctorName"); + Object operation = patientInfo.opt("operation"); + Object opRoomId = patientInfo.opt("opRoomId"); + Object operationTime = patientInfo.opt("operationTime");// + Object patientArea = patientInfo.opt("patientArea"); + Object bedNumber = patientInfo.opt("bedNumber"); + Object roomNumber = patientInfo.opt("roomNumber"); + Object remark = patientInfo.opt("remark"); + + Object washHandNurse = patientInfo.opt("washHandNurse"); + Object circuitNurse = patientInfo.opt("circuitNurse"); + + PatientInfoVO vo = new PatientInfoVO(); + vo.setPatientNumber(tNumber instanceof String ? (String)tNumber : ""); + vo.setPatientName(patientName instanceof String ? (String)patientName : ""); + vo.setPatientAge(patientAge instanceof String ? (String)patientAge : ""); + vo.setPatientSex(patientSex instanceof String ? ((String)patientSex).trim() : ""); + vo.setPatientIDCard(patientIDCard instanceof String ? (String)patientIDCard : ""); + vo.setDoctorName(doctorName instanceof String ? (String)doctorName : ""); + vo.setOperation(operation instanceof String ? (String)operation : ""); + vo.setOpRoomId(opRoomId instanceof String ? (String)opRoomId : ""); + vo.setOperationTime(operationTime instanceof String ? ((String)operationTime).replace(".", "-") : ""); + vo.setPatientArea(patientArea instanceof String ? (String)patientArea : ""); + vo.setBedNumber(bedNumber instanceof String ? (String)bedNumber : ""); + vo.setRoomNumber(roomNumber instanceof String ? (String)roomNumber : ""); + vo.setRemark(remark instanceof String ? (String)remark : ""); + + vo.setWashHandNurse(washHandNurse instanceof String ? (String)washHandNurse : ""); + vo.setCircuitNurse(circuitNurse instanceof String ? (String)circuitNurse : ""); + patientInfoVOArray[i++] = vo; + } + return patientInfoVOArray; + } + } + } + } catch (Exception e) { + logger.error("根据住院号查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNumBeforeOperation( + String clinicNumber) { + return null; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/DatasyncConstant.java (revision 27969) @@ -0,0 +1,36 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.gxzyyf1; + +/** + * 广西中医药附一接口相关常量 + * @author ZhouPeiMian + * @since 2020-05-15 + * + */ +public class DatasyncConstant { + + /** + * Webservice地址 + */ + public final static String WebserviceAddress = "http://192.168.211.108:8080/axis/HIS2.jws?wsdl"; + + /** + * 按诊疗号查询病人信息的接口方法名 + */ + public final static String MethodName_ClinicNumber = "call"; + + /** + * 按住院号查询病人信息的接口方法名 + */ + public final static String MethodName_HospitalNumber = "call "; + + /** + * 病人信息查询成功标识 + */ + public final static Integer ResultCode_Success = 0; + + /** + * 病人信息查询失败标识 + */ + public final static Integer ResultCode_Fail = 1; + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByTreatmentNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByTreatmentNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/gxzyyf1/FindPatientInfoByTreatmentNumDaoImpl.java (revision 27969) @@ -0,0 +1,104 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.gxzyyf1; + +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据诊疗号查询病人信息(广西中医药附一) + * @author ZhouPeiMian + * @since 2020-05-15 + * + */ +public class FindPatientInfoByTreatmentNumDaoImpl implements + FindPatientInfoByTreatmentNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByTreatmentNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByTreatmentNum(String clinicNumber) { + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_ClinicNumber, clinicNumber); + logger.info("诊疗号病人同步接口请求信息:" + inputXml); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_HospitalNumber); + /*String result = "" + + "" + + "" + + "{\"ResultCode\":0,\"ErrorMsg\":\"成功\",\"DATA\":[{\"hospitalNumber\":\"90091265\",\"searialNumber\":\"277816|41\",\"patientName\":\"姚业英\",\"patientAge\":\"56\",\"patientSex\":\"女 \",\"operationTime\":\"2020.04.28\",\"patientIDCard\":\"450105196311220042\",\"doctorName\":\"杨朔\",\"patientArea\":\"心血管内科二区\",\"roomNumber\":\"心血管内科二区\",\"bedNumber\":\"XXG031\",\"remark\":null,\"washHandNurse\":null,\"circuitNurse\":null,\"opRoomId\":null}]}" + + "" + + "" + + "";*/ + logger.info("诊疗号病人同步接口返回信息:" + result); + int startIndex = result.indexOf(""); + if(startIndex == -1){ + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + XMLSerializer xmlSerializer = new XMLSerializer(); + JSON json = xmlSerializer.read("" + xmlString + ""); + JSONObject patientInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; + if(patientInfos != null){ + if(patientInfos != null){ + Integer status = patientInfos.optInt("ResultCode", 1); + if(DatasyncConstant.ResultCode_Fail.intValue() == status.intValue()){ + logger.info("根据诊疗号查询病人信息失败:ResultCode = " + status + "; Message = " + patientInfos.optString("ErrorMsg")); + return null; + } + JSONArray patientInfoArr = patientInfos.optJSONArray("DATA"); + if(patientInfoArr != null && patientInfoArr.size() > 0){ + int i = 0; + PatientInfoVO[] patientInfoVOArray = new PatientInfoVO[patientInfoArr.size()]; + for (Object object : patientInfoArr) { + JSONObject patientInfo = (JSONObject) object; + Object tNumber = patientInfo.opt("hospitalNumber"); + Object patientName = patientInfo.opt("patientName"); + Object patientAge = patientInfo.opt("patientAge"); + Object patientSex = patientInfo.opt("patientSex"); + Object patientIDCard = patientInfo.opt("patientIDCard"); + Object doctorName = patientInfo.opt("doctorName"); + Object operation = patientInfo.opt("operation"); + Object operationTime = patientInfo.opt("operationTime"); + Object patientArea = patientInfo.opt("patientArea"); + Object bedNumber = patientInfo.opt("bedNumber"); + Object roomNumber = patientInfo.opt("roomNumber"); + Object remark = patientInfo.opt("remark"); + + PatientInfoVO vo = new PatientInfoVO(); + vo.setPatientNumber(tNumber instanceof String ? (String)tNumber : ""); + vo.setClinicNumber(vo.getPatientNumber()); + vo.setPatientName(patientName instanceof String ? (String)patientName : ""); + vo.setPatientAge(patientAge instanceof String ? (String)patientAge : ""); + vo.setPatientIDCard(patientIDCard instanceof String ? (String)patientIDCard : ""); + vo.setDoctorName(doctorName instanceof String ? (String)doctorName : ""); + vo.setOperation(operation instanceof String ? (String)operation : ""); + vo.setOperationTime(operationTime instanceof String ? ((String)operationTime).replace(".", "-") : ""); + vo.setPatientArea(patientArea instanceof String ? (String)patientArea : ""); + vo.setBedNumber(bedNumber instanceof String ? (String)bedNumber : ""); + vo.setRoomNumber(roomNumber instanceof String ? (String)roomNumber : ""); + vo.setRemark(remark instanceof String ? (String)remark : ""); + vo.setPatientSex(patientSex instanceof String ? ((String)patientSex).trim() : ""); + + patientInfoVOArray[i++] = vo; + } + return patientInfoVOArray; + } + } + } + } catch (Exception e) { + logger.error("根据诊疗号查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + +}