Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/SyncOrgUnitAndUserDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/SyncOrgUnitAndUserDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/SyncOrgUnitAndUserDaoImpl.java (revision 29798) @@ -0,0 +1,220 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslgzxyy; + +import java.util.ArrayList; +import java.util.List; + +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitAndUserDao; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; + +/** + * 查询his系统科室与人员信息(深圳市龙岗中心医院) + * @author zhouPeiMian + * @since 2020-12-05 + * + */ +public class SyncOrgUnitAndUserDaoImpl implements SyncOrgUnitAndUserDao { + + Logger logger = Logger.getLogger(SyncOrgUnitAndUserDaoImpl.class); + + /** + * 同步人员信息 + */ + @Override + public UserVo[] getAllUser() { + UserVo[] userVoArray = null; + List userVoList = new ArrayList(); + try{ + String inxml = "" + + "" + + ""; + logger.info("用户信息接口请求信息:" + inxml); + String result = WebServiceClientHelper.axisInvokeWebservice(inxml); + /*String result = "" + + "" + + "测试用户001" + + "CSYH001" + + "CSKS001" + + "" + + "" + + "测试用户002" + + "CSYH002" + + "CSKS002" + + "" + + "";*/ + //由于返回的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 = "/result/item"; // 返回结果可能存在多条住院病人信息 + 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 = "/result/item[" + 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){ + logger.error("查人员信息失败:" + e); + } + + return userVoArray; + } + + /** + * 同步科室信息 + */ + @Override + public OrgUnitVo[] getAllOrgUnit() { + OrgUnitVo[] orgUnitVoArray = null; + List orgUnitVoList = new ArrayList(); + try{ + String inxml = "" + + "" + + ""; + logger.info("科室信息接口请求信息:" + inxml); + String result = WebServiceClientHelper.axisInvokeWebservice(inxml); + /*String result = "" + + "" + + "测试科室001" + + "CSKS001" + + "0" + + "" + + "" + + "测试科室002" + + "CSKS002" + + "0" + + "" + + "";*/ + //由于返回的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 = "/result/item"; // 返回结果可能存在多条住院病人信息 + 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 = "/result/item[" + 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){ + e.printStackTrace(); + logger.error("获取科室信息失败" + 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-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml =================================================================== diff -u -r28893 -r29798 --- ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml (.../HIS.xml) (revision 28893) +++ ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml (.../HIS.xml) (revision 29798) @@ -48,7 +48,7 @@ --> - + + + + + + + - + String endpoint = DatasyncConstant.WebserviceAddress; + //命名空间,在WSDL中对应的标签是:targetNamespace                                     + String targetNamespace = "http://microsoft.com/webservices/"; + //具体方法的调用URI,在WSDL中对应的标签是: + String soapActionURI = "http://microsoft.com/webservices/WebInterFace"; + //具体调用的方法名,在WSDL中对应的标签是: + String method = "WebInterFace"; + //调用接口的参数的名字 + String[] paramNames = {"inxml"}; + //调用接口的参数的值 + String param1 = inxml; + + logger.info("input1 : " + param1); + + Service service = new Service(); + Call call = (Call) service.createCall(); + //call.setTimeout(new Integer(20000)); //设置超时时间 + call.setSOAPActionURI(soapActionURI); + call.setTargetEndpointAddress(new java.net.URL(endpoint)); //设置目标接口的地址 + call.setEncodingStyle(encodingStyle);//设置传入服务端的字符集格式如utf-8等 + call.setOperationName(new QName(targetNamespace, method));// 具体调用的方法名,可以由接口提供方告诉你,也可以自己从WSDL中找 + call.setUseSOAPAction(true); + call.addParameter(paramNames[0], + org.apache.axis.encoding.XMLType.XSD_STRING, + javax.xml.rpc.ParameterMode.IN);// 接口的参数 + call.setReturnClass(java.lang.String.class); //返回字符串类型 + // 给方法传递参数,并且调用方法 ,如果无参,则new Obe + String result = (String)call.invoke(new String[] {param1}); + // 打印返回值 + logger.info("result is " + result); + return result; + } + + /** + * 根据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; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 29798) @@ -0,0 +1,214 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslgzxyy; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据住院号查询病人信息(深圳市龙岗中心医院) + * @author ZhouPeiMian + * @since 2020-12-05 + * + */ +public class FindPatientInfoByHospitalNumDaoImpl implements + FindPatientInfoByHospitalNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByHospitalNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNum(String hospitalNum) { + try { + String inxml = "" + + "" + hospitalNum + "" + + ""; + logger.info("住院病人信息同步接口请求信息:" + inxml); + String result = WebServiceClientHelper.axisInvokeWebservice(inxml); + /*String result = "" + + "" + + "8714532" + + "4830422" + + "黄婷婷" + + "999" + + "" + + "155658158911254568" + + "刘医生" + + "手术名称" + + "2020-12-05 12:00:00" + + "病区" + + "病室" + + "床位" + + "备注" + + "洗手护士" + + "巡回护士" + + "" + + "" + + "8714532" + + "4830423" + + "黄婷婷" + + "999" + + "" + + "155658158911254568" + + "刘医生" + + "手术名称" + + "2020-12-05 13:00:00" + + "病区" + + "病室" + + "床位" + + "备注" + + "洗手护士" + + "巡回护士" + + "" + + "";*/ + logger.info("病人信息同步接口返回信息:" + result); + 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 = "/result/item"; // 返回结果可能存在多条住院病人信息 + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + List patientInfoVOList = new ArrayList(); + for (int i = 1; i <= nodeList.size(); i++) { + String msgXpath = "/result/item[" + i + "]"; + // 住院号 + String hospitalNumberXpath = msgXpath + "/hospitalNumber"; + // 当前住院流水号 + String serialNumberXpath = msgXpath + "/searialNumber"; + // 病人姓名 + String patientNameXpath = msgXpath + "/patientName"; + // 病人年龄 + String patientAgeXpath = msgXpath + "/patientAge"; + // 病人性别 + String patientSexXpath = msgXpath + "/patientSex"; + // 病人身份证号 + String patientIDCardXpath = msgXpath + "/patientIDCard"; + // 医生姓名 + String doctorNameXpath = msgXpath + "/doctorName"; + // 手术名称 + String operationXpath = msgXpath + "/operation"; + // 手术时间 + String operationTimeXpath = msgXpath + "/operationTime"; + // 病人所属病区 + String patientAreaXpath = msgXpath + "/patientArea"; + // 病室 + String roomNumberXpath = msgXpath + "/roomNumber"; // 没有对应的房间号字段 + // 病人床位号 + String bedNumberXpath = msgXpath + "/bedNumber"; + // 备注 + String remarkXpath = msgXpath + "/remark"; + // 洗手护士 + String washHandNurseXpath = msgXpath + "/washHandNurse"; + // 巡回护士 + String circuitNurseNurseXpath = msgXpath + "/circuitNurse"; + + String hospitalNumber = WebServiceClientHelper.processDataByXpath(document, hospitalNumberXpath); + String serialNumber = WebServiceClientHelper.processDataByXpath(document, serialNumberXpath); + String patientName = WebServiceClientHelper.processDataByXpath(document, patientNameXpath); + String patientAge = WebServiceClientHelper.processDataByXpath(document, patientAgeXpath); + String patientSex = WebServiceClientHelper.processDataByXpath(document, patientSexXpath); + String patientIDCard = WebServiceClientHelper.processDataByXpath(document, patientIDCardXpath); + String doctorName = WebServiceClientHelper.processDataByXpath(document, doctorNameXpath); + String operation = WebServiceClientHelper.processDataByXpath(document, operationXpath); + String operationTime = WebServiceClientHelper.processDataByXpath(document, operationTimeXpath); + String patientArea = WebServiceClientHelper.processDataByXpath(document, patientAreaXpath); + String roomNumber = WebServiceClientHelper.processDataByXpath(document, roomNumberXpath); + String bedNumber = WebServiceClientHelper.processDataByXpath(document, bedNumberXpath); + String remark = WebServiceClientHelper.processDataByXpath(document, remarkXpath); + String washHandNurse = WebServiceClientHelper.processDataByXpath(document, washHandNurseXpath); + String circuitNurse = WebServiceClientHelper.processDataByXpath(document, circuitNurseNurseXpath); + + PatientInfoVO patientInfoVO = new PatientInfoVO(); + patientInfoVO.setHospitalNumber(hospitalNumber); + patientInfoVO.setSerialNumber(serialNumber); + patientInfoVO.setPatientName(patientName); + patientInfoVO.setPatientAge(patientAge); + patientInfoVO.setPatientSex(patientSex); + patientInfoVO.setPatientIDCard(patientIDCard); + patientInfoVO.setDoctorName(doctorName); + patientInfoVO.setOperation(operation); + patientInfoVO.setOperationTime(operationTime); + patientInfoVO.setPatientArea(patientArea); + patientInfoVO.setRoomNumber(roomNumber); + patientInfoVO.setBedNumber(bedNumber); + patientInfoVO.setRemark(remark); + patientInfoVO.setWashHandNurse(washHandNurse); + patientInfoVO.setCircuitNurse(circuitNurse); + + patientInfoVOList.add(patientInfoVO); + } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + // 根据记录手术时间operationTime排序,只取最新记录 + patientInfoVOList.sort(new Comparator() { + @Override + public int compare(PatientInfoVO o1, PatientInfoVO o2) { + if (StringUtils.isBlank(o1.getOperationTime()) && StringUtils.isNotBlank(o2.getOperationTime())) { + return -1; + } + if (StringUtils.isBlank(o2.getOperationTime()) && StringUtils.isNotBlank(o1.getOperationTime())) { + return 1; + } + if (StringUtils.isBlank(o1.getOperationTime()) && StringUtils.isBlank(o2.getOperationTime())){ + return 0; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date1 = sdf.parse(o1.getOperationTime()); + Date date2 = sdf.parse(o2.getOperationTime()); + return date2.compareTo(date1); + } catch (ParseException e) { + logger.debug("病人信息排序出错(手术时间【operationTime】字段格式错误)!"); + e.printStackTrace(); + } + return 0; + } + }); + // 只取最新录入的一条记录 + PatientInfoVO patientInfoVO = patientInfoVOList.get(0); + logger.debug("完成住院病人信息解析,病人住院号为:" + patientInfoVO.getHospitalNumber()); + PatientInfoVO[] patientInfoArray = {patientInfoVO}; + return patientInfoArray; + } + } + } catch (Exception e) { + logger.error("根据病人住院号号查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNumBeforeOperation( + String hospitalNum) { + return findPatientInfoByHospitalNum(hospitalNum); + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/DatasyncConstant.java (revision 29798) @@ -0,0 +1,36 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslgzxyy; + +/** + * 深圳市龙岗中心医院接口相关常量 + * @author ZhouPeiMian + * @since 2020-12-05 + * + */ +public class DatasyncConstant { + + /** + * Webservice地址 + */ + public final static String WebserviceAddress = "http://192.168.0.144/Service.asmx"; + + /** + * 获取门诊病人信息的方法名称(入参) + */ + public final static String FunctionName_MZ = "Mz_Patientinfo"; + + /** + * 获取住院病人信息的方法名称(入参) + */ + public final static String FunctionName_ZY = "Zy_Patientinfo"; + + /** + * 获取科室信息的方法名称(入参) + */ + public final static String FunctionName_DeptList = "DeptList"; + + /** + * 获取用户信息的方法名称(入参) + */ + public final static String FunctionName_UserList = "UserList"; + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByTreatmentNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 29798) @@ -0,0 +1,196 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslgzxyy; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据诊疗号查询病人信息(深圳市龙岗中心医院) + * @author ZhouPeiMian + * @since 2020-12-05 + * + */ +public class FindPatientInfoByTreatmentNumDaoImpl implements + FindPatientInfoByTreatmentNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByTreatmentNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByTreatmentNum(String clinicNumber) { + try { + String inxml = "" + + "" + clinicNumber + "" + + ""; + logger.info("门诊病人信息同步接口请求信息:" + inxml); + String result = WebServiceClientHelper.axisInvokeWebservice(inxml); + /*String result = "" + + "" + + "8714532" + + "4830422" + + "黄婷婷" + + "999" + + "" + + "155658158911254568" + + "刘医生" + + "手术名称" + + "2020-12-05 12:00:00" + + "病区" + + "病室" + + "床位" + + "备注" + + "" + + "" + + "8714532" + + "4830423" + + "黄婷婷" + + "999" + + "" + + "155658158911254568" + + "刘医生" + + "手术名称" + + "2020-12-05 13:00:00" + + "病区" + + "病室" + + "床位" + + "备注" + + "" + + "";*/ + logger.info("门诊病人信息同步接口返回信息:" + result); + 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 = "/result/item"; // 返回结果可能存在多条门诊病人信息 + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + List patientInfoVOList = new ArrayList(); + for (int i = 1; i <= nodeList.size(); i++) { + String msgXpath = "/result/item[" + i + "]"; + // 住院号 + String clinicNumberXpath = msgXpath + "/clinicNumber"; + // 当前住院流水号 + String serialNumberXpath = msgXpath + "/serialNumber"; + // 病人姓名 + String patientNameXpath = msgXpath + "/patientName"; + // 病人年龄 + String patientAgeXpath = msgXpath + "/patientAge"; + // 病人性别 + String patientSexXpath = msgXpath + "/patientSex"; + // 病人身份证号 + String patientIDCardXpath = msgXpath + "/patientIDCard"; + // 医生姓名 + String doctorNameXpath = msgXpath + "/doctorName"; + // 手术名称 + String operationXpath = msgXpath + "/operation"; + // 手术时间 + String operationTimeXpath = msgXpath + "/operationTime"; + // 病人所属病区 + String patientAreaXpath = msgXpath + "/patientArea"; + // 病室 + String roomNumberXpath = msgXpath + "/roomNumber"; + // 病人床位号 + String bedNumberXpath = msgXpath + "/bedNumber"; + // 备注 + String remarkXpath = msgXpath + "/remark"; + + String clinicNum = WebServiceClientHelper.processDataByXpath(document, clinicNumberXpath); + String serialNumber = WebServiceClientHelper.processDataByXpath(document, serialNumberXpath); + String patientName = WebServiceClientHelper.processDataByXpath(document, patientNameXpath); + String patientAge = WebServiceClientHelper.processDataByXpath(document, patientAgeXpath); + String patientSex = WebServiceClientHelper.processDataByXpath(document, patientSexXpath); + String patientIDCard = WebServiceClientHelper.processDataByXpath(document, patientIDCardXpath); + String doctorName = WebServiceClientHelper.processDataByXpath(document, doctorNameXpath); + String operation = WebServiceClientHelper.processDataByXpath(document, operationXpath); + String operationTime = WebServiceClientHelper.processDataByXpath(document, operationTimeXpath); + String patientArea = WebServiceClientHelper.processDataByXpath(document, patientAreaXpath); + String roomNumber = WebServiceClientHelper.processDataByXpath(document, roomNumberXpath); + String bedNumber = WebServiceClientHelper.processDataByXpath(document, bedNumberXpath); + String remark = WebServiceClientHelper.processDataByXpath(document, remarkXpath); + + PatientInfoVO patientInfoVO = new PatientInfoVO(); + patientInfoVO.setClinicNumber(clinicNum); + patientInfoVO.setSerialNumber(serialNumber); + patientInfoVO.setPatientName(patientName); + patientInfoVO.setPatientAge(patientAge); + patientInfoVO.setPatientSex(patientSex); + patientInfoVO.setPatientIDCard(patientIDCard); + patientInfoVO.setDoctorName(doctorName); + patientInfoVO.setOperation(operation); + patientInfoVO.setOperationTime(operationTime); + patientInfoVO.setPatientArea(patientArea); + patientInfoVO.setRoomNumber(roomNumber); + patientInfoVO.setBedNumber(bedNumber); + patientInfoVO.setRemark(remark); + + patientInfoVOList.add(patientInfoVO); + } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + // 根据记录手术时间operationTime排序,只取最新记录 + patientInfoVOList.sort(new Comparator() { + @Override + public int compare(PatientInfoVO o1, PatientInfoVO o2) { + if (StringUtils.isBlank(o1.getOperationTime()) && StringUtils.isNotBlank(o2.getOperationTime())) { + return -1; + } + if (StringUtils.isBlank(o2.getOperationTime()) && StringUtils.isNotBlank(o1.getOperationTime())) { + return 1; + } + if (StringUtils.isBlank(o1.getOperationTime()) && StringUtils.isBlank(o2.getOperationTime())){ + return 0; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date1 = sdf.parse(o1.getOperationTime()); + Date date2 = sdf.parse(o2.getOperationTime()); + return date2.compareTo(date1); + } catch (ParseException e) { + logger.debug("病人信息排序出错(手术时间【operationTime】字段格式错误)!"); + e.printStackTrace(); + } + return 0; + } + }); + // 只取最新录入的一条记录 + PatientInfoVO patientInfoVO = patientInfoVOList.get(0); + logger.debug("完成门诊病人信息解析,病人门诊号为:" + patientInfoVO.getHospitalNumber()); + PatientInfoVO[] patientInfoArray = {patientInfoVO}; + return patientInfoArray; + } + } + } catch (Exception e) { + logger.error("根据病人门诊号号查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + +}