Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/SyncOrgUnitAndUserDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/SyncOrgUnitAndUserDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/SyncOrgUnitAndUserDaoImpl.java (revision 27832) @@ -0,0 +1,200 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + + +import java.util.ArrayList; +import java.util.List; + +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitAndUserDao; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.forgon.tools.Constants; + +/** + * 查询his系统科室与人员信息(深圳市第三人民医院) + * @author ZhouPeiMian + * @since 2020-04-17 + * + */ +public class SyncOrgUnitAndUserDaoImpl implements SyncOrgUnitAndUserDao { + + Logger logger = Logger.getLogger(SyncOrgUnitAndUserDaoImpl.class); + + @Override + public UserVo[] getAllUser() { + UserVo[] userVoArray = null; + List userVoList = new ArrayList(); + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_User); + logger.info("his人员同步接口请求信息:" + inputXml); + //String result = CssdUtils.callWebService(DatasyncConstant.WebserviceAddress, inputXml, Constants.CHARSET_UTF8); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_User); + logger.info("his人员同步接口返回信息:" + result); + /*String result = + "" + + "" + + "" + + "3041nullDnull3041吴其恺KAN肝病一科nullnullnullWQK45575559-XnullD4403011964102834721null5null000016139029739731964-10-281262020-04-17nullnullGUID2020-04-16T00:00:004028999a708eb056017185d8727b00d4OK找到数据2013nullDnull2013林敏ST体检科门诊nullnullnullLM45575559-XnullDnull2null7null002406null2012-06-070262020-04-17nullnullGUID2020-04-16T00:00:004028999a708eb056017185d8727b00d4OK找到数据]]>" + + "" + + "" + + "";*/ + 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(); + xmlString = "" + xmlString + "xml" + ""; + JSON json = xmlSerializer.read(xmlString); + JSONObject userVoInfos = (JSONObject)json; + if(userVoInfos != null){ + JSONArray userVoInfoArr = new JSONArray(); + Object userObj = userVoInfos.opt("EmployeeInfo_Response"); + if(userObj instanceof JSONArray){ + userVoInfoArr = (JSONArray) userObj; + } else if (userObj instanceof JSONObject) { + userVoInfoArr.add((JSONObject)userObj); + } + if(userVoInfoArr.size() > 0){ + for (Object object : userVoInfoArr) { + JSONObject userJSON = (JSONObject) object; + String resultMark = userJSON.optString("resultMark", ""); + if(!StringUtils.equals(resultMark, DatasyncConstant.RESULT_MARK)){ + continue; + } + Object coding = userJSON.opt("emp_code"); + Object name = userJSON.opt("emp_name"); + Object orgUnitCoding = userJSON.opt("dept_code"); + UserVo userVo = new UserVo(); + userVo.setCoding(coding instanceof String ? (String)coding : ""); + userVo.setName(name instanceof String ? (String)name : ""); + userVo.setOrgUnitCoding(orgUnitCoding instanceof String ? (String)orgUnitCoding : ""); + //如果人员工号或名称为空,则忽略该条数据 + if(StringUtils.isBlank(userVo.getName()) || StringUtils.isBlank(userVo.getCoding())){ + continue; + } + userVoList.add(userVo); + } + userVoArray = new UserVo[userVoList.size()]; + userVoList.toArray(userVoArray); + } + } else { + logger.info("未找到人员数据"); + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("查询his人员信息失败:" + e); + } + return userVoArray; + } + + @Override + public OrgUnitVo[] getAllOrgUnit() { + OrgUnitVo[] orgUnitVoArray = null; + List orgUnitVoList = new ArrayList(); + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_Department); + logger.info("his科室同步接口请求信息:" + inputXml); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_Department); + logger.info("his科室同步接口返回信息:" + result); + /*String result = + "" + + "" + + "" + + "null1nullCnull心血管专科门诊null013401341null[门诊二楼]nullNTTFTUY0XXGZKMZnullnull心血管专科门诊null011nullnullC45575559-XGUID2020-04-16T00:00:004028999a6b01e362016c283fe7b418b4OK找到数据null0nullNnull皮肤科分诊台null202720270null192.168.16.181nullHETWYC0PFKFZTnullnull皮肤科分诊台nullnull1nullnullN45575559-XGUID2020-04-16T00:00:004028999a6b01e362016c283fe7b418b4OK找到数据]]>" + + "" + + "" + + "";*/ + 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(); + xmlString = "" + xmlString + "xml" + ""; + JSON json = xmlSerializer.read(xmlString); + JSONObject orgUnitVoInfos = (JSONObject)json; + if(orgUnitVoInfos != null){ + JSONArray deptInfoArr = new JSONArray(); + Object deptObj = orgUnitVoInfos.opt("DeptInfo_Response"); + if(deptObj instanceof JSONArray){ + deptInfoArr = (JSONArray) deptObj; + } else if (deptObj instanceof JSONObject) { + deptInfoArr.add((JSONObject)deptObj); + } + if(deptInfoArr.size() > 0){ + for (Object object : deptInfoArr) { + JSONObject orgUnitInfo = (JSONObject) object; + String resultMark = orgUnitInfo.optString("resultMark", ""); + if(!StringUtils.equals(resultMark, DatasyncConstant.RESULT_MARK)){ + continue; + } + Object coding = orgUnitInfo.opt("dept_code"); + Object name = orgUnitInfo.opt("dept_name"); + Object orgUnitCoding = orgUnitInfo.opt("super_code"); + OrgUnitVo orgVo = new OrgUnitVo(); + orgVo.setCoding(coding instanceof String ? (String)coding : ""); + orgVo.setName(name instanceof String ? (String)name : ""); + orgVo.setParentCoding(orgUnitCoding instanceof String ? (String)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[orgUnitVoList.size()]; + orgUnitVoList.toArray(orgUnitVoArray); + } else { + throw new RuntimeException("未找到科室数据..."); + } + } else { + throw new RuntimeException("未找到科室数据..."); + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("查询his科室信息失败" + e); + } + return orgUnitVoArray; + } + + @Override + public OrgUnitVo[] paramToOrgUnitVos(String param) { + // TODO Auto-generated method stub + return null; + } + + @Override + public UserVo[] paramToUserVos(String param) { + // TODO Auto-generated method stub + return null; + } + + @Override + public JSONObject buttjoinResponse(Boolean success, String message, + String param) { + // TODO Auto-generated method stub + return null; + } + + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (revision 27832) @@ -0,0 +1,51 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + +/** + * 深圳市第三人民医院接口相关常量 + * @author ZhouPeiMian + * @since 2020-04-17 + * + */ +public class DatasyncConstant { + + /** + * Webservice地址 + */ + public final static String WebserviceAddress = "http://192.168.25.25:8001/HIP/webService/hl7/HL7Delegate1_1?wsdl"; + + /** + * 按诊疗号查询病人信息的接口方法名 + */ + public final static String MethodName_ClinicNumber = "OutpatientInfoForCSSD"; + + /** + * 按住院号查询病人信息的接口方法名 + */ + public final static String MethodName_HospitalNumber = "InpatientInfoForCSSD"; + + /** + * 科室信息的接口方法名(作为输入参数) + */ + public final static String MethodName_Department = "queryDeptInfo"; + + /** + * 人员信息的接口方法名(作为输入参数) + */ + public final static String MethodName_User = "queryEmployeeInfo"; + + /** + * 病人信息查询成功标识 + */ + public final static String SUCCESS_STATUS = "AA"; + + /** + * 病人信息查询失败标识 + */ + public final static String FAIL_STATUS = "AE"; + + /** + * 科室人员返回状态:OK + */ + public final static String RESULT_MARK = "OK"; + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 27832) @@ -0,0 +1,120 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; +import com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy.DatasyncConstant; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; +import com.forgon.tools.Constants; + +/** + * 根据住院号查询病人信息(深圳市第三人民医院) + * @author ZhouPeiMian + * @since 2020-04-17 + * + */ +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 = "0000225139ZY010000225139周彦光30岁430481198912185017陶红光颈淋巴结清扫术2020/4/16 10:00:00胃肠外科护士站胃肠外科52023500AA]]>"; + 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 = (JSONObject)json; + if(patientInfos != null){ + if(patientInfos != null){ + String status = patientInfos.optString("Status"); + if(StringUtils.equals(DatasyncConstant.FAIL_STATUS, status)){ + logger.info("根据住院号查询病人信息失败:Status = " + status + "; Message = " + patientInfos.optString("Message")); + return null; + } + JSONArray patientInfoArr = new JSONArray(); + Object returnObj = patientInfos.opt("return"); + if(returnObj instanceof JSONArray){ + patientInfoArr = (JSONArray) returnObj; + } else if (returnObj instanceof JSONObject){ + patientInfoArr.add((JSONObject)returnObj); + } + if(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 : ""); + 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 : ""); + 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/szsdsrmyy/WebServiceClientHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (revision 27832) @@ -0,0 +1,200 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + + +import java.nio.charset.Charset; +import java.util.UUID; + +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 com.forgon.tools.date.DateTools; + +/** + * 深圳市第三人民医院webservice帮助类 + * @author ZhouPeiMian + * @since 2020-04-17 + * + */ +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_Department) + || StringUtils.equals(methodName, DatasyncConstant.MethodName_User)){ + StringBuffer inputXmlSB = new StringBuffer(); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // action + inputXmlSB.append("" + methodName + ""); + // message + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // receiver + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // sender + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // controlActProcess + if(StringUtils.equals(methodName, DatasyncConstant.MethodName_Department)){ + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("" + UUID.randomUUID().toString() + ""); + inputXmlSB.append("" + DateTools.getCurrentDayByFormat("yyyy-MM-dd'T'HH:mm:ss") + ""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + } else { + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("" + UUID.randomUUID().toString() + ""); + inputXmlSB.append("" + DateTools.getCurrentDayByFormat("yyyy-MM-dd'T'HH:mm:ss") + ""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + } + inputXmlSB.append(""); + inputXmlSB.append("]]>"); + + inputXmlSB.append(" "); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXml = inputXmlSB.toString(); + } else 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(""); + // action + inputXmlSB.append("" + methodName + ""); + // message + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // receiver + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // sender + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // controlActProcess + if(StringUtils.equals(methodName, DatasyncConstant.MethodName_ClinicNumber)){ + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("" + arg[0] + ""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + } else { + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append("" + arg[0] + ""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + } + + inputXmlSB.append(""); + inputXmlSB.append("]]>"); + + 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(">", ">"); + } + // 释放资源 + 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/szsdsrmyy/FindPatientInfoByTreatmentNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 27832) @@ -0,0 +1,108 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; +import com.forgon.tools.Constants; + +/** + * 根据诊疗号查询病人信息(深圳市第三人民医院) + * @author ZhouPeiMian + * @since 2020-04-17 + * + */ +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 = CssdUtils.callWebService(DatasyncConstant.WebserviceAddress, inputXml, Constants.CHARSET_UTF8); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_ClinicNumber); + //String result = "0000225139ZY010000225139周彦光30岁430481198912185017陶红光颈淋巴结清扫术2020/4/16 10:00:00胃肠外科护士站胃肠外科520235000000225139ZY010000225139周彦光30岁430481198912185017陶红光颈淋巴结清扫术2020/4/16 10:00:00胃肠外科护士站胃肠外科52023500AA]]>"; + 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 = (JSONObject)json; + if(patientInfos != null){ + if(patientInfos != null){ + String status = patientInfos.optString("Status"); + if(StringUtils.equals(DatasyncConstant.FAIL_STATUS, status)){ + logger.info("根据诊疗号查询病人信息失败:Status = " + status + "; Message = " + patientInfos.optString("Message")); + return null; + } + JSONArray patientInfoArr = new JSONArray(); + Object returnObj = patientInfos.opt("return"); + if(returnObj instanceof JSONArray){ + patientInfoArr = (JSONArray) returnObj; + } else if (returnObj instanceof JSONObject){ + patientInfoArr.add((JSONObject)returnObj); + } + if(patientInfoArr.size() > 0){ + int i = 0; + PatientInfoVO[] patientInfoVOArray = new PatientInfoVO[patientInfoArr.size()]; + for (Object object : patientInfoArr) { + JSONObject patientInfo = (JSONObject) object; + Object tNumber = patientInfo.opt("clinicNumber"); + 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 : ""); + 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 : ""); + + patientInfoVOArray[i++] = vo; + } + return patientInfoVOArray; + } + } + } + } catch (Exception e) { + logger.error("根据诊疗号查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + +} Index: ssts-web/src/main/resources/spring/projects/szsdsrmyy/HIS.xml =================================================================== diff -u -r26449 -r27832 --- ssts-web/src/main/resources/spring/projects/szsdsrmyy/HIS.xml (.../HIS.xml) (revision 26449) +++ ssts-web/src/main/resources/spring/projects/szsdsrmyy/HIS.xml (.../HIS.xml) (revision 27832) @@ -48,7 +48,7 @@ --> - + - + - + @@ -116,4 +116,12 @@ + + + + + + + + \ No newline at end of file