Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdateDepartmentQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdateDepartmentQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdateDepartmentQueueListener.java (revision 34786) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.ksdqdyrmyy; + +import javax.jms.Message; +import javax.jms.MessageListener; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; + +/** + * 修改科室的队列的监听器KSDQDYRMYY-17 + * + */ +public class UpdateDepartmentQueueListener implements MessageListener { + + private static Logger logger = Logger.getLogger(UpdateDepartmentQueueListener.class); + + DataSynchronizationManager dataSynchronizationManager; + + public void setDataSynchronizationManager(DataSynchronizationManager dataSynchronizationManager) { + this.dataSynchronizationManager = dataSynchronizationManager; + } + + @Override + public void onMessage(Message message) { + String jmsDestination = MQHelper.XDGY_updateDepartmentQueue; + String messageBody = ""; + try { + //读取消息内容 + messageBody = MQHelper.readMessage(jmsDestination, message); + try { + //解析消息中的科室信息 + OrgUnitVo[] allVos = MQHelper.getAllOrgUnitVoData(jmsDestination, messageBody); + //根据同步到的组织机构数据进行处理 + dataSynchronizationManager.processSyncOrgUnitData(allVos); + } catch (Exception e) { + logger.info("解析【" + jmsDestination +"】消息失败:" + e.getMessage()); + } + //回调下平台服务 + new Thread(){ + @Override + public void run() { + try { + MQHelper.sentAck(jmsDestination, message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } catch (Exception e) { + logger.info("监听【" + jmsDestination +"】消息队列失败:" + e.getMessage()); + e.printStackTrace(); + } + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS112.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS112.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS112.xml (revision 34786) @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdatePractitionerQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdatePractitionerQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/UpdatePractitionerQueueListener.java (revision 34786) @@ -0,0 +1,58 @@ +package com.forgon.disinfectsystem.mq.dao.ksdqdyrmyy; + +import javax.jms.Message; +import javax.jms.MessageListener; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; + +/** + * 修改人员的队列的监听器KSDQDYRMYY-17 + * + */ +public class UpdatePractitionerQueueListener implements MessageListener { + + private static Logger logger = Logger.getLogger(UpdatePractitionerQueueListener.class); + + private DataSynchronizationManager dataSynchronizationManager; + + public void setDataSynchronizationManager( + DataSynchronizationManager dataSynchronizationManager) { + this.dataSynchronizationManager = dataSynchronizationManager; + } + + @Override + public void onMessage(Message message) { + String jmsDestination = MQHelper.XDGY_updatePractitionerQueue; + String messageBody = ""; + try { + //读取消息内容 + messageBody = MQHelper.readMessage(jmsDestination, message); + try { + //解析消息中的用户信息 + UserVo[] allVos = MQHelper.getAllUserVoData(jmsDestination, messageBody); + //根据同步到的用户数据进行处理 + dataSynchronizationManager.processSyncUserData(allVos); + } catch (Exception e) { + logger.info("解析【" + jmsDestination +"】消息失败:" + e.getMessage()); + } + //回调下平台服务 + new Thread(){ + @Override + public void run() { + try { + MQHelper.sentAck(jmsDestination, message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } catch (Exception e) { + logger.info("监听【" + jmsDestination +"】消息队列失败:" + e.getMessage()); + e.printStackTrace(); + } + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS111.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS111.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/ksdqdyrmyy/spring/IBMMQListenerKS111.xml (revision 34786) @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: build.gradle =================================================================== diff -u -r34671 -r34786 --- build.gradle (.../build.gradle) (revision 34671) +++ build.gradle (.../build.gradle) (revision 34786) @@ -564,6 +564,9 @@ compile group: 'com.ibm.mq', name: 'hamcrest-core', version: '1.1' compile group: 'com.ibm.mq', name: 'connector', version: '1.0' compile group: 'com.ibm.mq', name: 'jsr305', version: '1.3.7' + compile group: 'org.springframework', name: 'spring-jms', version:springVersion + compile group: 'javax.jms', name: 'javax.jms-api', version: '2.0.1' + compile group: 'com.ibm.mq', name: 'com.ibm.mq.allclient', version: '9.3.0.1' compile group: 'com.ibm.mq', name: 'MQSDK1.6', version: '3.0.1' Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreateDepartmentQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreateDepartmentQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreateDepartmentQueueListener.java (revision 34786) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.ksdqdyrmyy; + +import javax.jms.Message; +import javax.jms.MessageListener; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; + +/** + * 新建科室的队列的监听器KSDQDYRMYY-17 + * + */ +public class CreateDepartmentQueueListener implements MessageListener { + + private static Logger logger = Logger.getLogger(CreateDepartmentQueueListener.class); + + DataSynchronizationManager dataSynchronizationManager; + + public void setDataSynchronizationManager(DataSynchronizationManager dataSynchronizationManager) { + this.dataSynchronizationManager = dataSynchronizationManager; + } + + @Override + public void onMessage(Message message) { + String jmsDestination = MQHelper.XDGY_createDepartmentQueue; + String messageBody = ""; + try { + //读取消息内容 + messageBody = MQHelper.readMessage(jmsDestination, message); + try { + //解析消息中的科室信息 + OrgUnitVo[] allVos = MQHelper.getAllOrgUnitVoData(jmsDestination, messageBody); + //根据同步到的组织机构数据进行处理 + dataSynchronizationManager.processSyncOrgUnitData(allVos); + } catch (Exception e) { + logger.info("解析【" + jmsDestination +"】消息失败:" + e.getMessage()); + } + //回调下平台服务 + new Thread(){ + @Override + public void run() { + try { + MQHelper.sentAck(jmsDestination, message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } catch (Exception e) { + logger.info("监听【" + jmsDestination +"】消息队列失败:" + e.getMessage()); + e.printStackTrace(); + } + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreatePractitionerQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreatePractitionerQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/CreatePractitionerQueueListener.java (revision 34786) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.ksdqdyrmyy; + +import javax.jms.Message; +import javax.jms.MessageListener; + +import org.apache.log4j.Logger; + +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; + +/** + * 新建人员的队列的监听器KSDQDYRMYY-17 + * + */ +public class CreatePractitionerQueueListener implements MessageListener { + + private static Logger logger = Logger.getLogger(CreatePractitionerQueueListener.class); + + private DataSynchronizationManager dataSynchronizationManager; + + public void setDataSynchronizationManager(DataSynchronizationManager dataSynchronizationManager) { + this.dataSynchronizationManager = dataSynchronizationManager; + } + + @Override + public void onMessage(Message message) { + String jmsDestination = MQHelper.XDGY_createPractitionerQueue; + String messageBody = ""; + try { + //读取消息内容 + messageBody = MQHelper.readMessage(jmsDestination, message); + try { + //解析消息中的用户信息 + UserVo[] allVos = MQHelper.getAllUserVoData(jmsDestination, messageBody); + //根据同步到的用户数据进行处理 + dataSynchronizationManager.processSyncUserData(allVos); + } catch (Exception e) { + logger.info("解析【" + jmsDestination +"】消息失败:" + e.getMessage()); + } + //回调下平台服务 + new Thread(){ + @Override + public void run() { + try { + MQHelper.sentAck(jmsDestination, message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } catch (Exception e) { + logger.info("监听【" + jmsDestination +"】消息队列失败:" + e.getMessage()); + e.printStackTrace(); + } + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/MQHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/MQHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/ksdqdyrmyy/MQHelper.java (revision 34786) @@ -0,0 +1,419 @@ +package com.forgon.disinfectsystem.mq.dao.ksdqdyrmyy; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.jms.BytesMessage; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.TextMessage; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringEscapeUtils; +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 org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.ibm.jms.JMSBytesMessage; +import com.ibm.msg.client.wmq.WMQConstants; + +/** + * MQ队列帮助类 + * + */ +public class MQHelper { + + private static Logger logger = Logger.getLogger(MQHelper.class); + + /** + * 医疗卫生机构(科室)信息注册服务队列名称XD_createDepartment + */ + public static final String XDGY_createDepartmentQueue = "XDGY_createDepartment"; + /** + * 医疗卫生机构(科室)信息更新服务队列名称XD_updateDepartment + */ + public static final String XDGY_updateDepartmentQueue = "XDGY_updateDepartment"; + /** + * 医疗卫生人员信息注册服务队列名称XD_createPractitioner + */ + public static final String XDGY_createPractitionerQueue = "XDGY_createPractitioner"; + /** + * 医疗卫生人员信息更新服务队列名称XD_updatePractitioner + */ + public static final String XDGY_updatePractitionerQueue = "XDGY_updatePractitioner"; + + /** + * ACK地址 + */ + public static final String ackUrl = "http://192.168.11.139:7800/ack"; + + /** + * DOMAIN + */ + public static final String domain = "XDGY"; + + /** + * GTM8_SEC取值为8小时(平台规定的时间) + */ + public static final Long GTM8_SEC = 1000l * 60 * 60 * 8; + + /** + * 获取消息后,回调下平台服务 + * @param destination 队列名称 + * @param message 消息 + * @return + * @throws JMSException + */ + public static boolean sentAck(String destination,Message message) throws JMSException { + + if (StringUtils.isEmpty(ackUrl)) { + return false; + } + + try { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + Map map= new HashMap(); + map.put("queue", destination); + map.put("localTransId", message.getJMSCorrelationID()==null? "":message.getJMSCorrelationID() ); + map.put("operTime", timestampToDateTime(message.getJMSTimestamp())); + map.put("domain", domain); + + HttpEntity> request = new HttpEntity<>(map, headers); + + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(ackUrl, request, String.class); + + if(HttpStatus.OK == response.getStatusCode()) { + logger.info("sent ack message success."); + return true; + } + } + catch (Exception ex) { + logger.error("sent ack message error.", ex); + } + + return false; + } + + private static String timestampToDateTime(long timeStamp) { + SimpleDateFormat sdfData = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss.SSS"); + Date optDate = new Date(timeStamp - GTM8_SEC); + return sdfData.format(optDate) +"T"+ sdfTime.format(optDate); + } + + /** + * 测试用:从xml文件读取xml字符串 + */ + /*@SuppressWarnings("unused") + private static List xmlFileToStr(String path) { + List strList = new ArrayList(); + String message = null; + try { + SAXReader saxReader = new SAXReader(); + File f = new File(path); + Document doc; + doc = saxReader.read(f); + message = doc.asXML(); + System.out.println(message); + strList.add(message); + } catch (DocumentException e) { + e.printStackTrace(); + } + return strList; + }*/ + + /** + * 解析并获取科室Vo + * @param jmsDestination + * @param messageBody + * @return + */ + @SuppressWarnings("unchecked") + public static OrgUnitVo[] getAllOrgUnitVoData(String jmsDestination, String messageBody) throws Exception { + List orgUnitVoList = new ArrayList(); + + if(StringUtils.isBlank(messageBody)){ + return null; + } + + if(StringUtils.equals(jmsDestination, XDGY_createDepartmentQueue)){ + //messageBody = xmlFileToStr("D:\\项目\\喀什地区第一人民医院\\科室新增.xml").get(0); + messageBody = StringEscapeUtils.unescapeHtml(messageBody); + int beginIndex = messageBody.indexOf(""); + if(beginIndex == -1 || endIndex == -1){ + return null; + } + messageBody = messageBody.substring(beginIndex, endIndex + "".length()); + Document document = DocumentHelper.parseText(messageBody.trim()); + Map nameSpaceURIMap = new HashMap(); + nameSpaceURIMap.put("s", "urn:hl7-org:v3"); + + //subject节点可以有多个,一个节点代表一个手术申请单 + String subjectXpath = "/PRPM_IN401030UV01/s:controlActProcess/s:subject"; + XPath xpath = document.createXPath(subjectXpath); + xpath.setNamespaceURIs(nameSpaceURIMap); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return null; + } + + for(int i=1;i<=subjectNodeList.size();i++){ + OrgUnitVo vo = new OrgUnitVo(); + + //科室名称 + //PRPM_IN401030UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/assignedPrincipalOrganization/name/item[@use='OR']/part + String nameXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:assignedPrincipalOrganization/s:name/s:item[@use='OR']/s:part/@value"; + String name = processDataByXpath(document, nameSpaceURIMap, nameXpath); + vo.setName(name); + + //科室编码 + //PRPM_IN401030UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/id/item + String codingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:id/s:item/@extension"; + String coding = processDataByXpath(document, nameSpaceURIMap, codingXpath); + vo.setCoding(coding); + + //上级科室编码 + //PRPM_IN401030UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/assignedPrincipalOrganization/asAffiliate/scoper2/id/item + String parentCodingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:assignedPrincipalOrganization/s:asAffiliate/s:scoper2/s:id/s:item/@extension"; + String parentCoding = processDataByXpath(document, nameSpaceURIMap, parentCodingXpath); + vo.setParentCoding(parentCoding); + + orgUnitVoList.add(vo); + } + }else if(StringUtils.equals(jmsDestination, XDGY_updateDepartmentQueue)){ + //messageBody = xmlFileToStr("D:\\项目\\喀什地区第一人民医院\\科室变更.xml").get(0); + messageBody = StringEscapeUtils.unescapeHtml(messageBody); + int beginIndex = messageBody.indexOf(""); + if(beginIndex == -1 || endIndex == -1){ + return null; + } + messageBody = messageBody.substring(beginIndex, endIndex + "".length()); + Document document = DocumentHelper.parseText(messageBody.trim()); + Map nameSpaceURIMap = new HashMap(); + nameSpaceURIMap.put("s", "urn:hl7-org:v3"); + + //subject节点可以有多个,一个节点代表一个手术申请单 + String subjectXpath = "/PRPM_IN403010UV01/s:controlActProcess/s:subject"; + XPath xpath = document.createXPath(subjectXpath); + xpath.setNamespaceURIs(nameSpaceURIMap); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return null; + } + + for(int i=1;i<=subjectNodeList.size();i++){ + OrgUnitVo vo = new OrgUnitVo(); + + //科室名称 + //PRPM_IN403010UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/assignedPrincipalOrganization/name/item[@use='OR']/part + String nameXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:assignedPrincipalOrganization/s:name/s:item[@use='OR']/s:part/@value"; + String name = processDataByXpath(document, nameSpaceURIMap, nameXpath); + vo.setName(name); + + //科室编码 + //PRPM_IN403010UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/id/item + String codingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:id/s:item/@extension"; + String coding = processDataByXpath(document, nameSpaceURIMap, codingXpath); + vo.setCoding(coding); + + //上级科室编码 + //PRPM_IN403010UV01/controlActProcess/subject/registrationRequest/subject1/assignedEntity/assignedPrincipalOrganization/asAffiliate/affiliatedPrincipalOrganization/id/item + String parentCodingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:assignedEntity/s:assignedPrincipalOrganization/s:asAffiliate/s:affiliatedPrincipalOrganization/s:id/s:item/@extension"; + String parentCoding = processDataByXpath(document, nameSpaceURIMap, parentCodingXpath); + vo.setParentCoding(parentCoding); + + orgUnitVoList.add(vo); + } + } + + if(CollectionUtils.isNotEmpty(orgUnitVoList)){ + OrgUnitVo[] orgUnitVos = new OrgUnitVo[orgUnitVoList.size()]; + for (int i=0;i userVoList = new ArrayList(); + + if(StringUtils.isBlank(messageBody)){ + return null; + } + + if(StringUtils.equals(jmsDestination, MQHelper.XDGY_createPractitionerQueue)){ + //messageBody = xmlFileToStr("D:\\项目\\喀什地区第一人民医院\\人员新增.xml").get(0); + messageBody = StringEscapeUtils.unescapeHtml(messageBody); + int beginIndex = messageBody.indexOf(""); + if(beginIndex == -1 || endIndex == -1){ + return null; + } + messageBody = messageBody.substring(beginIndex, endIndex + "".length()); + Document document = DocumentHelper.parseText(messageBody.trim()); + Map nameSpaceURIMap = new HashMap(); + nameSpaceURIMap.put("s", "urn:hl7-org:v3"); + + //subject节点可以有多个,一个节点代表一个手术申请单 + String subjectXpath = "/PRPM_IN301010UV01/s:controlActProcess/s:subject"; + XPath xpath = document.createXPath(subjectXpath); + xpath.setNamespaceURIs(nameSpaceURIMap); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return null; + } + + for(int i=1;i<=subjectNodeList.size();i++){ + UserVo userVo = new UserVo(); + + //工号 + //PRPM_IN301010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/id/item + String codingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:id/s:item/@extension"; + String coding = processDataByXpath(document, nameSpaceURIMap, codingXpath); + userVo.setCoding(coding); + //姓名 + //PRPM_IN301010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/healthCarePrincipalPerson/name/item[@use='OR']/part[value] + String nameXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:healthCarePrincipalPerson/s:name/s:item[@use='OR']/s:part/@value"; + String name = processDataByXpath(document, nameSpaceURIMap, nameXpath); + userVo.setName(name); + //所属科室编码 + //PRPM_IN301010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/healthCarePrincipalPerson/asAffiliate/affiliatedPrincipalOrganization/id/item + String deptCodeXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:healthCarePrincipalPerson/s:asAffiliate/s:affiliatedPrincipalOrganization/s:id/s:item/@extension"; + String deptCode = processDataByXpath(document, nameSpaceURIMap, deptCodeXpath); + userVo.setDeptCode(deptCode); + + userVoList.add(userVo); + } + }else if(StringUtils.equals(jmsDestination, MQHelper.XDGY_updatePractitionerQueue)){ + //messageBody = xmlFileToStr("D:\\项目\\喀什地区第一人民医院\\人员变更.xml").get(0); + messageBody = StringEscapeUtils.unescapeHtml(messageBody); + int beginIndex = messageBody.indexOf(""); + if(beginIndex == -1 || endIndex == -1){ + return null; + } + messageBody = messageBody.substring(beginIndex, endIndex + "".length()); + Document document = DocumentHelper.parseText(messageBody.trim()); + Map nameSpaceURIMap = new HashMap(); + nameSpaceURIMap.put("s", "urn:hl7-org:v3"); + + //subject节点可以有多个,一个节点代表一个手术申请单 + String subjectXpath = "/PRPM_IN303010UV01/s:controlActProcess/s:subject"; + XPath xpath = document.createXPath(subjectXpath); + xpath.setNamespaceURIs(nameSpaceURIMap); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return null; + } + + for(int i=1;i<=subjectNodeList.size();i++){ + UserVo userVo = new UserVo(); + + //工号 + //PRPM_IN303010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/id/item + String codingXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:id/s:item/@extension"; + String coding = processDataByXpath(document, nameSpaceURIMap, codingXpath); + userVo.setCoding(coding); + //姓名 + //PRPM_IN303010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/healthCarePrincipalPerson/name/item[@use='OR']/part[value] + String nameXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:healthCarePrincipalPerson/s:name/s:item[@use='OR']/s:part/@value"; + String name = processDataByXpath(document, nameSpaceURIMap, nameXpath); + userVo.setName(name); + //所属科室编码 + //PRPM_IN303010UV01/controlActProcess/subject/registrationRequest/subject1/healthCareProvider/healthCarePrincipalPerson/asAffiliate/affiliatedPrincipalOrganization/id/item + String deptCodeXpath = subjectXpath + "[" + i + "]/s:registrationRequest/s:subject1/s:healthCareProvider/s:healthCarePrincipalPerson/s:asAffiliate/s:affiliatedPrincipalOrganization/s:id/s:item/@extension"; + String deptCode = processDataByXpath(document, nameSpaceURIMap, deptCodeXpath); + userVo.setDeptCode(deptCode); + + userVoList.add(userVo); + } + } + + if(CollectionUtils.isNotEmpty(userVoList)){ + UserVo[] userVos = new UserVo[userVoList.size()]; + for(int i=0;i nameSpaceURIMap, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null) && (nameSpaceURIMap != null)) { + XPath xpath = document.createXPath(xpathExp); + xpath.setNamespaceURIs(nameSpaceURIMap); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return ""; + } + + + /** + * 获取消息内容 + * @param jmsDestination + * @param message + * @return + */ + public static String readMessage(String jmsDestination, Message message) throws Exception { + if(message == null){ + return null; + } + String messageBody = ""; + logger.info("成功监听【" + jmsDestination +"】消息队列,消息内容为:"); + logger.info(message); + if(message instanceof JMSBytesMessage){ + BytesMessage bm = (BytesMessage) message; + byte[] bys = null; + bys = new byte[(int) bm.getBodyLength()]; + bm.readBytes(bys); + String codePage = message.getStringProperty(WMQConstants.JMS_IBM_CHARACTER_SET); + messageBody = new String(bys, codePage); + }else{ + TextMessage msg = (TextMessage) message; + messageBody = msg.getText(); + } + logger.info(messageBody); + return messageBody; + } + +}