Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/DatasyncConstant.java (revision 36711) @@ -0,0 +1,23 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.bjcyzxyyy; + +/** + * 北京朝阳中西医结合急诊抢救医院接口相关常量BJCYZXYYY-1 + */ +public class DatasyncConstant { + + /** + * Webservice地址 + */ + public final static String WEBSERVICE_ADDRESS = "http://192.168.204.161:8089/yn_webservice/n_webservice.asmx"; + + /** + * 获取科室信息的方法名称(入参) + */ + public final static String OP_ORGUNIT = "cssd_department"; + + /** + * 获取用户信息的方法名称(入参) + */ + public final static String OP_USER = "cssd_user"; + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/bjcyzxyyy/spring/HIS.xml =================================================================== diff -u -r36706 -r36711 --- ssts-web/src/main/webapp/disinfectsystem/config/bjcyzxyyy/spring/HIS.xml (.../HIS.xml) (revision 36706) +++ ssts-web/src/main/webapp/disinfectsystem/config/bjcyzxyyy/spring/HIS.xml (.../HIS.xml) (revision 36711) @@ -46,18 +46,8 @@ - - - - - - - - - - - + + userVoList = new ArrayList(); + try{ + String soapXml = WebServiceClientHelper.buildInputStr(DatasyncConstant.OP_USER, ""); + logger.info("用户信息接口请求信息:" + soapXml); + String address = DatasyncConstant.WEBSERVICE_ADDRESS + "?op=" + DatasyncConstant.OP_USER; + String result = WebServiceClientHelper.doPostSoap1_2(address, soapXml); + /*String result = "" + + "" + + "测试用户003" + + "CSYH003" + + "CSKS003" + + "" + + "" + + "测试用户004" + + "CSYH004" + + "CSKS004" + + "" + + "";*/ + logger.info("用户信息接口返回信息:" + result); + //由于返回的xml数据格式可能有问题导致解析有点问题,现换成为文本方案截取 + int startIndex = result.indexOf(""); + if(startIndex == -1){ + logger.info("用户信息接口返回信息没有标签!"); + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + logger.info("用户信息接口返回信息没有标签"); + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + if(StringUtils.isBlank(xmlString)){ + logger.info("用户信息接口返回信息为空!" + xmlString); + return null; + } + xmlString = "" + xmlString + ""; + + Document document = DocumentHelper.parseText(xmlString); + String itemXpath = "/d_cssd_user/d_cssd_user_row"; // 返回结果可能存在多条住院病人信息 + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + for(int i=1;i<=nodeList.size();i++){ + String msgXpath = "/d_cssd_user/d_cssd_user_row[" + i + "]"; + // 用户编码 + String codingXpath = msgXpath + "/coding"; + // 用户名称 + String nameXpath = msgXpath + "/name"; + // 用户所属科室编码 + String orgUnitCodingXpath = msgXpath + "/orgunitcoding"; + + String coding = WebServiceClientHelper.processDataByXpath(document, codingXpath); + String name = WebServiceClientHelper.processDataByXpath(document, nameXpath); + String orgUnitCoding = WebServiceClientHelper.processDataByXpath(document, orgUnitCodingXpath); + UserVo userVo = new UserVo(); + userVo.setCoding(coding); + userVo.setName(name); + userVo.setOrgUnitCoding(orgUnitCoding); + + //如果人员工号或名称为空,则忽略该条数据 + if(StringUtils.isBlank(userVo.getName()) || StringUtils.isBlank(userVo.getCoding())){ + continue; + } + userVoList.add(userVo); + } + userVoArray = new UserVo[nodeList.size()]; + userVoList.toArray(userVoArray); + }else{ + throw new RuntimeException("未找到人员数据..."); + } + }catch(Exception e){ + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("查人员信息失败:" + exception); + } + + return userVoArray; + } + + /** + * 同步科室信息 + */ + @Override + public OrgUnitVo[] getAllOrgUnit() { + OrgUnitVo[] orgUnitVoArray = null; + List orgUnitVoList = new ArrayList(); + try{ + String soapXml = WebServiceClientHelper.buildInputStr(DatasyncConstant.OP_ORGUNIT, ""); + logger.info("科室信息接口请求信息:" + soapXml); + String address = DatasyncConstant.WEBSERVICE_ADDRESS + "?op=" + DatasyncConstant.OP_ORGUNIT; + String result = WebServiceClientHelper.doPostSoap1_2(address, soapXml); + /*String result = "" + + "" + + "测试科室003" + + "CSKS003" + + "0" + + "" + + "" + + "测试科室004" + + "CSKS004" + + "0" + + "" + + "";*/ + logger.info("科室信息接口返回信息:" + result); + //由于返回的xml数据格式可能有问题导致解析有点问题,现换成为文本方案截取 + int startIndex = result.indexOf(""); + if(startIndex == -1){ + logger.info("科室信息接口返回信息没有标签!"); + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + logger.info("科室信息接口返回信息没有标签"); + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + if(StringUtils.isBlank(xmlString)){ + logger.info("科室信息接口返回信息为空!" + xmlString); + return null; + } + xmlString = "" + xmlString + ""; + Document document = DocumentHelper.parseText(xmlString); + String itemXpath = "/d_cssd_dept_dict/d_cssd_dept_dict_row"; // 返回结果可能存在多条住院病人信息 + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + for(int i=1;i<=nodeList.size();i++){ + String msgXpath = "/d_cssd_dept_dict/d_cssd_dept_dict_row[" + i + "]"; + // 用户编码 + String codingXpath = msgXpath + "/coding"; + // 用户名称 + String nameXpath = msgXpath + "/name"; + // 用户所属科室编码 + String orgUnitCodingXpath = msgXpath + "/parentcoding"; + + String coding = WebServiceClientHelper.processDataByXpath(document, codingXpath); + String name = WebServiceClientHelper.processDataByXpath(document, nameXpath); + String orgUnitCoding = WebServiceClientHelper.processDataByXpath(document, orgUnitCodingXpath); + OrgUnitVo orgVo = new OrgUnitVo(); + orgVo.setCoding(coding ); + orgVo.setName(name); + orgVo.setParentCoding(orgUnitCoding); + + //科室编码与上级科室编码相同时,默认其上级科室编码为空 + if(StringUtils.equals(orgVo.getCoding(), orgVo.getParentCoding())){ + orgVo.setParentCoding(null); + } + //如果科室编码或名称为空,则忽略该条数据 + if(StringUtils.isBlank(orgVo.getCoding()) || StringUtils.isBlank(orgVo.getName())){ + continue; + } + orgUnitVoList.add(orgVo); + } + orgUnitVoArray = new OrgUnitVo[nodeList.size()]; + orgUnitVoList.toArray(orgUnitVoArray); + }else{ + throw new RuntimeException("未找到科室数据..."); + } + }catch(Exception e){ + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("获取科室信息失败" + exception); + e.printStackTrace(); + } + return orgUnitVoArray; + } + + @Override + public OrgUnitVo[] paramToOrgUnitVos(String param) { + return null; + } + + @Override + public UserVo[] paramToUserVos(String param) { + return null; + } + + @Override + public JSONObject buttjoinResponse(Boolean success, String message, String param) { + return null; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/WebServiceClientHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/WebServiceClientHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/bjcyzxyyy/WebServiceClientHelper.java (revision 36711) @@ -0,0 +1,109 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.bjcyzxyyy; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +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; +import org.dom4j.Document; +import org.dom4j.Node; +import org.dom4j.XPath; + +/** + * 北京朝阳中西医结合急诊抢救医院webservice帮助类BJCYZXYYY-1 + */ +public class WebServiceClientHelper { + + public static Logger logger = Logger.getLogger(WebServiceClientHelper.class); + + /** + * 根据document和Xpath表达式解析数据 + * @param document + * @param nameSpaceURIMap + * @param xpathExp + * @return + */ + public static String processDataByXpath(Document document, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null)) { + XPath xpath = document.createXPath(xpathExp); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return null; + } + + /** + * 构建请求信息 + */ + public static String buildInputStr(String function, String value){ + StringBuffer inputSb = new StringBuffer(); + inputSb.append(""); + inputSb.append(""); + inputSb.append(""); + if(StringUtils.equals(function, DatasyncConstant.OP_ORGUNIT)){ + inputSb.append(""); + }else if(StringUtils.equals(function, DatasyncConstant.OP_USER)){ + inputSb.append(""); + }else{ + throw new RuntimeException("参数异常!"); + } + inputSb.append(""); + inputSb.append(""); + return inputSb.toString(); + } + + /** + * 使用SOAP1.2发送消息 + * + * @param postUrl + * @param soapXml + * @param soapAction + * @return + */ + public static String doPostSoap1_2(String postUrl, String soapXml) { + String retStr = ""; + // 创建HttpClientBuilder + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + // HttpClient + CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); + HttpPost httpPost = new HttpPost(postUrl); + // 设置请求和传输超时时间 + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(100000) + .setConnectTimeout(100000).build(); + httpPost.setConfig(requestConfig); + try { + httpPost.setHeader("Content-Type", "text/xml; charset=utf-8"); + 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(">", ">"); + } + // 释放资源 + closeableHttpClient.close(); + } catch (Exception e) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.info("exception in doPostSoap1_2:" + exception); + } + return retStr; + } + +}