Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/UpdatePractitionerQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/UpdatePractitionerQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/UpdatePractitionerQueueListener.java (revision 35651) @@ -0,0 +1,58 @@ +package com.forgon.disinfectsystem.mq.dao.gzs12rmyy; + +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; + +/** + * 修改人员的队列的监听器GZS12RMYY-48 + * + */ +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/gzs12rmyy/spring/replicaJmsIbmListener.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/replicaJmsIbmListener.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/replicaJmsIbmListener.xml (revision 35651) @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/primaryJmsIbmListener.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/primaryJmsIbmListener.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/primaryJmsIbmListener.xml (revision 35651) @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreatePractitionerQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreatePractitionerQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreatePractitionerQueueListener.java (revision 35651) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.gzs12rmyy; + +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; + +/** + * 新建人员的队列的监听器GZS12RMYY-48 + * + */ +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-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/applicationContext-his-gzs12rmyy.xml =================================================================== diff -u -r27968 -r35651 --- ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/applicationContext-his-gzs12rmyy.xml (.../applicationContext-his-gzs12rmyy.xml) (revision 27968) +++ ssts-web/src/main/webapp/disinfectsystem/config/gzs12rmyy/spring/applicationContext-his-gzs12rmyy.xml (.../applicationContext-his-gzs12rmyy.xml) (revision 35651) @@ -94,4 +94,17 @@ + + + + + + + + + + + + + \ No newline at end of file Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreateDepartmentQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreateDepartmentQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/CreateDepartmentQueueListener.java (revision 35651) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.gzs12rmyy; + +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; + +/** + * 新建科室的队列的监听器GZS12RMYY-48 + * + */ +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/gzs12rmyy/UpdateDepartmentQueueListener.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/UpdateDepartmentQueueListener.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/UpdateDepartmentQueueListener.java (revision 35651) @@ -0,0 +1,57 @@ +package com.forgon.disinfectsystem.mq.dao.gzs12rmyy; + +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; + +/** + * 修改科室的队列的监听器GZS12RMYY-48 + * + */ +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-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/MQHelper.java =================================================================== diff -u -r31415 -r35651 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/MQHelper.java (.../MQHelper.java) (revision 31415) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/gzs12rmyy/MQHelper.java (.../MQHelper.java) (revision 35651) @@ -3,16 +3,25 @@ import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.Hashtable; 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 net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json.JSONObject; +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; @@ -21,18 +30,25 @@ import org.dom4j.Node; import org.dom4j.XPath; import org.dom4j.io.SAXReader; +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.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.model.UserVo; -import com.forgon.log.service.LogManager; +import com.ibm.jms.JMSBytesMessage; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import com.ibm.mq.constants.MQConstants; +import com.ibm.msg.client.wmq.WMQConstants; /** * MQ队列帮助类 @@ -64,8 +80,343 @@ * 人员队列名称 */ public static final String USERMQUEUE = "OUT.S023.MS024.LQ"; + + /** + * 医疗卫生机构(科室)信息注册服务队列名称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.7.183:7800/ack"; + + /** + * DOMAIN + */ + public static final String domain = "DX_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); + } + /** + * 解析并获取科室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 objList = getClinicPatientMessageFromMQ(); - System.out.println(objList.size()); - - } - - /** * 获取科室字典 * 服务器IP:192.168.2.180 * 通道名称:IE.SVRCONN @@ -365,7 +703,7 @@ * @return */ private static String processDataByXpath(Document document, Map nameSpaceURIMap, String xpathExp) { - logger.debug("调用processDataByXpath方法解析数据..."); + //logger.debug("调用processDataByXpath方法解析数据..."); if ((StringUtils.isNotBlank(xpathExp)) && (document != null) && (nameSpaceURIMap != null)) { XPath xpath = document.createXPath(xpathExp); xpath.setNamespaceURIs(nameSpaceURIMap);