Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/WebServiceClientHelper.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/WebServiceClientHelper.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/WebServiceClientHelper.java (revision 35438)
@@ -0,0 +1,128 @@
+package com.forgon.disinfectsystem.datasynchronization.dao.zsszyy;
+
+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;
+
+/**
+ * 中山市中医院接口相关常量
+ * @since 2023-01-16
+ */
+public class WebServiceClientHelper {
+
+ public static Logger logger = Logger.getLogger(WebServiceClientHelper.class);
+
+ /**
+ * 构造接口输入参数
+ * @param methodName
+ * @param arg
+ * @return
+ */
+ public static String buildInputXml(String methodName, int pageIndex, String... args){
+ String inputXml = "";
+ if(pageIndex <= 0){
+ pageIndex = DatasyncConstant.PageIndex;
+ }
+ if (DatasyncConstant.MethodName_HospitalNumber.equals(methodName)) {
+ // 根据住院号查询病人信息
+ String param = ""
+ + "" + args[0] + ""
+ + "" + DatasyncConstant.PageSize + ""
+ + "" + DatasyncConstant.PageIndex + ""
+ + "]]>";
+ inputXml = ""
+ + ""
+ + ""
+ + ""
+ + ""
+ + "" + methodName + "XML" + DatasyncConstant.AccessKey + "]]>"
+ + ""
+ + ""
+ + param
+ + ""
+ + ""
+ +""
+ +"";
+ } else {
+ throw new RuntimeException("不存在此methodName:" + methodName);
+ }
+ return inputXml;
+ }
+
+ /**
+ * 根据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;
+ }
+
+ /**
+ * 使用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");
+ httpPost.setHeader("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(">", ">");
+ }
+ // 释放资源
+ 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;
+ }
+
+}
Index: ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml
===================================================================
diff -u -r32361 -r35438
--- ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml (.../applicationContext-his.xml) (revision 32361)
+++ ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml (.../applicationContext-his.xml) (revision 35438)
@@ -69,17 +69,7 @@
-
-
-
-
-
-
-
-
-
-
+
patientInfoVOList = new ArrayList();
+ try {
+ patientInfoVOList = findPatientInfoByHospitalNumPage(hospitalNum);
+ } catch (Exception e) {
+ logger.info("住院号接口查询异常:" + e.getMessage());
+ e.printStackTrace();
+ }
+ if(CollectionUtils.isEmpty(patientInfoVOList)){
+ return null;
+ }
+ PatientInfoVO[] patientInfoArray = {patientInfoVOList.get(0)};
+ return patientInfoArray;
+ }
+
+ /**
+ * 分页循环查询住院号病人信息,最多查询1000次
+ * @param hospitalNum
+ * @return
+ * @throws Exception
+ */
+ private List findPatientInfoByHospitalNumPage(String hospitalNum) throws Exception {
+
+ List patientInfoVOList = new ArrayList();
+ for(int pageIndex=1; pageIndex<=1000; pageIndex++){
+ List patientInfoVOPageList = new ArrayList();
+ String inputXml = WebServiceClientHelper.buildInputXml(DatasyncConstant.MethodName_HospitalNumber, pageIndex, hospitalNum);
+ //测试数据,建议代码保留往后可以本地调试
+ /*String xmlResult = " AA成功1000424457 22102骨一科一区病区92023-02-03 18:25:582023-02-12 18:29:28R4672613 赖扬福1男3621321975101538352023-02-1493137 颈椎骨折切开复位内固定术03.53022103000 李世豪22101骨一科一区门诊22102 骨一科一区病区24203手术室]]>";
+ if(pageIndex > 1){
+ xmlResult = "";
+ }*/
+ String xmlResult = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebServiceAddress, inputXml);
+ logger.info("住院病人接口查询页码:" + pageIndex + ",每页最大行数:" + DatasyncConstant.PageSize);
+ logger.info("住院病人接口请求信息:" + inputXml);
+ logger.info("住院病人接口返回信息:" + xmlResult);
+ if(StringUtils.isBlank(xmlResult)){
+ logger.info("根据住院号查询病人信息失败,接口返回信息为空!");
+ break;
+ }
+
+ int startIndex = xmlResult.indexOf("");
+ int endIndex = xmlResult.indexOf("");
+
+ if(startIndex == -1 || endIndex == -1 || endIndex < startIndex){
+ logger.info("根据住院号查询病人信息失败,接口返回信息没有节点!");
+ break;
+ }
+
+ xmlResult = xmlResult.substring(startIndex, endIndex + "".length());
+
+ Document document = DocumentHelper.parseText(xmlResult);
+
+ if(document == null){
+ break;
+ }
+
+ if(document != null){
+ //响应码
+ String processResultCodeXpath = "/root/processResultCode";
+ String processResultCode = WebServiceClientHelper.processDataByXpath(document, processResultCodeXpath);
+ //响应信息
+ String processResultXpath = "/root/processResult";
+ String processResult = WebServiceClientHelper.processDataByXpath(document, processResultXpath);
+ if(StringUtils.equals(DatasyncConstant.FAIL_CODE, processResultCode)){
+ if(StringUtils.isBlank(processResult)){
+ processResult = "processResultCode = AE";
+ }
+ logger.info("根据住院号查询病人信息失败,接口返回信息:" + processResult);
+ break;
+ }
+
+ String itemXpath = "/root/returnContents/returnContent";
+ XPath xpath = document.createXPath(itemXpath);
+ @SuppressWarnings("unchecked")
+ List nodeList = xpath.selectNodes(document, xpath);
+ if(CollectionUtils.isEmpty(nodeList)){
+ break;
+ }
+ for(int i=1; i <= nodeList.size(); i++){
+
+ String returnContentXpath = itemXpath + "[" + i + "]";
+
+ //病人标识号
+ //String patientIdXpath = returnContentXpath + "/patientId";
+ //所在病房名称
+ String wardRoomNameXpath = returnContentXpath + "/wardRoomName";
+ //所在科室代码
+ String deptNameXpath = returnContentXpath + "/deptName";
+ //床号
+ String bedNoXpath = returnContentXpath + "/bedNo";
+
+ //入院日期及时间
+ //String admissionDateTimeXpath = returnContentXpath + "/admissionDateTime";
+ //住院号
+ String eventNoXpath = returnContentXpath + "/eventNo";
+ //姓名
+ String patientNameXpath = returnContentXpath + "/patientName";
+ //性别名称
+ String sexNameXpath = returnContentXpath + "/sexName";
+
+ //身份证号码
+ String identityNoXpath = returnContentXpath + "/identityNo";
+ //手术时间
+ String operateTimeXpath = returnContentXpath + "/operateTime";
+ //手术申请单号
+ String operationApplyNoXpath = returnContentXpath + "/operationApplyNo";
+ //手术名称
+ String operateNameXpath = returnContentXpath + "/operateName";
+
+ //手术医生姓名
+ String doctorNameXpath = returnContentXpath + "/operatDoctorName";
+
+ String roomNumber = WebServiceClientHelper.processDataByXpath(document, wardRoomNameXpath);
+ String ascriptionDepartment = WebServiceClientHelper.processDataByXpath(document, deptNameXpath);
+ String bedNumber = WebServiceClientHelper.processDataByXpath(document, bedNoXpath);
+ hospitalNum = WebServiceClientHelper.processDataByXpath(document, eventNoXpath);
+ String patientName = WebServiceClientHelper.processDataByXpath(document, patientNameXpath);
+ String patientSex = WebServiceClientHelper.processDataByXpath(document, sexNameXpath);
+ String patientIDCard = WebServiceClientHelper.processDataByXpath(document, identityNoXpath);
+ String operationTime = WebServiceClientHelper.processDataByXpath(document, operateTimeXpath);
+ String operationApplyNo = WebServiceClientHelper.processDataByXpath(document, operationApplyNoXpath);
+ String operationName = WebServiceClientHelper.processDataByXpath(document, operateNameXpath);
+ String operDoctorName = WebServiceClientHelper.processDataByXpath(document, doctorNameXpath);
+
+ PatientInfoVO patientInfoVO = new PatientInfoVO();
+ patientInfoVO.setRoomNumber(roomNumber);
+ patientInfoVO.setPatientName(patientName);
+ patientInfoVO.setPatientSex(patientSex);
+ patientInfoVO.setPatientIDCard(patientIDCard);
+ if(StringUtils.isNotBlank(operationTime)){
+ Date operationTimeObj = DateTools.coverStrToDate(operationTime, DateTools.COMMON_DATE_ONLY);
+ if(operationTimeObj != null){
+ patientInfoVO.setOperationTime(DateTools.getFormatDateStr(operationTimeObj, DateTools.COMMON_DATE_HM));
+ }
+ }
+ patientInfoVO.setAscriptionDepartment(ascriptionDepartment);
+ patientInfoVO.setBedNumber(bedNumber);
+ patientInfoVO.setHospitalNumber(hospitalNum);
+ patientInfoVO.setOperation(operationName);
+ patientInfoVO.setDoctorName(operDoctorName);
+ patientInfoVO.setOperationScheduleId(operationApplyNo);
+ patientInfoVOPageList.add(patientInfoVO);
+ }
+ logger.info("住院病人接口返回记录行数:" + patientInfoVOPageList.size());
+ if(CollectionUtils.isEmpty(patientInfoVOPageList)){
+ break;
+ }
+ patientInfoVOList.addAll(patientInfoVOPageList);
+ if(patientInfoVOPageList.size() < DatasyncConstant.PageSize){
+ break;
+ }
+ }
+ }
+
+ if(CollectionUtils.isNotEmpty(patientInfoVOList)){
+ patientInfoVOList.sort(new Comparator() {
+ @Override
+ public int compare(PatientInfoVO o1, PatientInfoVO o2) {
+ return StringUtils.compare(o2.getOperationScheduleId(), o1.getOperationScheduleId());
+ }
+ });
+ }
+
+ return patientInfoVOList;
+ }
+
+ @Override
+ public PatientInfoVO[] findPatientInfoByHospitalNumBeforeOperation(
+ String hospitalNum) {
+ return findPatientInfoByHospitalNum(hospitalNum);
+ }
+
+}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java (revision 35438)
@@ -0,0 +1,44 @@
+package com.forgon.disinfectsystem.datasynchronization.dao.zsszyy;
+
+/**
+ * 中山市中医院接口相关常量
+ * @since 2023-01-16
+ */
+public class DatasyncConstant {
+ /**
+ * webService接口地址
+ */
+ //http://10.0.253.227:8688/Select-Service/SelectEntranceWs?wsdl
+ public final static String WebServiceAddress = "http://10.0.253.227:8688/Select-Service/SelectEntranceWs";
+
+ /**
+ * 授权码
+ */
+ public final static String AccessKey = "yvLX8eNAhtqXUbWrJqzaDgxsT57fPexSkG9ulDTUzEzcjykZvdnfew==";
+
+ /**
+ * 接口方法名:住院病人(作为输入参数)
+ */
+ public final static String MethodName_HospitalNumber = "operationScheduleInfoQuery";
+
+ /**
+ * 每页行数(不超过1200)必填
+ */
+ public final static Integer PageSize = 1000;
+
+ /**
+ * 页码
+ */
+ public final static Integer PageIndex = 1;
+
+ /**
+ * 处理结果代码(AA成功AE失败)
+ */
+ public final static String SUCC_CODE = "AA";
+
+ /**
+ * 处理结果代码(AA成功AE失败)
+ */
+ public final static String FAIL_CODE = "AE";
+
+}