Index: ssts-web/src/main/resources/mqConfig/esbmq-config.xml =================================================================== diff -u --- ssts-web/src/main/resources/mqConfig/esbmq-config.xml (revision 0) +++ ssts-web/src/main/resources/mqConfig/esbmq-config.xml (revision 26621) @@ -0,0 +1,63 @@ + + + + + 20.100.2.6 + + 5017 + + QMGR.S17 + + C.S17.C + + 1381 + + 1392 + + D:\test + + EQ.S17.BS35008.PUT + EQ.S17.BS35008.GET + + + + 20.100.2.4 + + 4017 + + QMGR.P17_1 + + C.P17.C + + 1381 + + 1386 + + D:\test + + EQ.S17.PS10032.PUT + EQ.S17.PS10032.GET + EQ.S17.PS10032.COLLECT + EQ.S17.PS10033.PUT + EQ.S17.PS10033.GET + EQ.S17.PS10033.COLLECT + + + +     20.100.2.6  +     4001    +     QMGR.P01    +     C.P01.C   +     1381  +     1386  +     D:\test +    +         EQ.S01.PS10032.PUT +         EQ.S01.PS10032.GET + +         EQ.S01.PS10033.PUT +         EQ.S01.PS10033.GET +     + + + \ No newline at end of file Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQDataDaoImpl.java =================================================================== diff -u -r26566 -r26621 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQDataDaoImpl.java (.../MQDataDaoImpl.java) (revision 26566) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQDataDaoImpl.java (.../MQDataDaoImpl.java) (revision 26621) @@ -93,7 +93,7 @@ String orgUnitString = message.getMsg(); if (StringUtils.isNotBlank(orgUnitString)) { // 解析xml - logger.debug("开始同步科室"); + logger.debug("开始同步科室" + orgUnitString); Document doc = DocumentHelper.parseText(orgUnitString); String actionXpath = "/ESBEntry/MsgInfo/Msg/@action"; //action判断增、删、改 String codingXpath = "/ESBEntry/MsgInfo/Msg/DEPT_CODE"; // 科室代码 @@ -175,7 +175,7 @@ String userString = message.getMsg(); if (StringUtils.isNotBlank(userString)) { // 解析xml - logger.debug("开始同步人员信息"); + logger.debug("开始同步人员信息" + userString); Document doc = DocumentHelper.parseText(userString); String actionXpath = "/ESBEntry/MsgInfo/Msg/@action"; //action判断增、删、改 String codeXpath = "/ESBEntry/MsgInfo/Msg/STAFF_CODE"; // 职工工号 @@ -259,9 +259,10 @@ patientAdmissionInfo.setSurgeryName(patientInfoVO.getOperation()); patientAdmissionInfo.setTime(new Date()); if (StringUtils.isNotBlank(patientInfoVO.getOperationTime())) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + //2019-06-26T10:25:40 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date inDate; - inDate = sdf.parse(patientInfoVO.getOperationTime().trim()); + inDate = sdf.parse(patientInfoVO.getOperationTime().replace('T', ' ').trim()); patientAdmissionInfo.setInDate(inDate); } if(StringUtils.isNotBlank(patientInfoVO.getVisitAmount())) { Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQHelper.java =================================================================== diff -u -r26570 -r26621 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQHelper.java (.../MQHelper.java) (revision 26570) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/mq/dao/bjcylyy/MQHelper.java (.../MQHelper.java) (revision 26621) @@ -3,12 +3,15 @@ import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.Hashtable; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -18,6 +21,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.dom4j.Document; @@ -53,16 +57,6 @@ private static Logger logger = Logger.getLogger(MQHelper.class); /** - * 该main方法可以直接运行 - * - * @param args - * @throws Exception - */ - public static void main(String[] args) throws Exception { - - } - - /** * 获取入院病人信息(北京垂杨柳医院) * 需要发送带有住院号的xml消息到平台,然后平台再返回对应的住院病人信息 * @return @@ -91,7 +85,8 @@ - + // + @@ -114,8 +109,9 @@ String Req = "1XG123456BS35008" + "BS35008S17S002019-05-25 14:00:0" + "0500" - + "" + + "" + ""; + logger.debug("请求信息:" + Req); String responce = sc.putReqAndGetResp(fid, Req, 5); if (StringUtils.isNotBlank(responce)) { logger.debug("成功接收住院病人信息:" + responce); @@ -126,67 +122,97 @@ String RetCon = processDataByXpath(doc, RetConXpath); if ("查询成功".equals(RetCon)) { // 解析住院病人信息并入库 - String MsgXpath = "/ESBEntry/MsgInfo/Msg[1]"; // 返回结果可能存在多条住院病人信息,暂时只取第一条 - String patientInfo = processDataByXpath(doc, MsgXpath); // 住院病人信息 - if (StringUtils.isNotBlank(patientInfo)) { - System.out.println(patientInfo); - if (StringUtils.isNotBlank(patientInfo)) { - Document document = DocumentHelper.parseText(patientInfo); - // 解析住院病人信息并入库 - String hospitalNumberXpath = "/msg/body/row/INHOSP_INDEX_NO"; - String serialNumberXpath = "/msg/body/row/INHOSP_NO"; - String patientNameXpath = "/msg/body/row/PAT_NAME"; - String patientBirthdayXpath = "/msg/body/row/DATE_BIRTH"; - String patientSexXpath = "/msg/body/row/PHYSI_SEX_NAME"; - String patientIDCardXpath = "/msg/body/row/ID_NUMBER"; - String doctorNameXpath = "/msg/body/row/APPLY_DR_NAME"; - String operationXpath = "/msg/body/row/SURGERY_OPER_NAME"; - String operationTimeXpath = "/msg/body/row/SURGERY_APPLY_DATE"; - String patientAreaXpath = "/msg/body/row/WARD_NAME"; - String roomNumberXpath = null; // 没有对应的房间号字段 - String bedNumberXpath = "/msg/body/row/BED_INDEX_NO"; - String remarkXpath = "/msg/body/row/NOTE"; - - String hospitalNumber = processDataByXpath(document, hospitalNumberXpath); - String serialNumber = processDataByXpath(document, serialNumberXpath); - String patientName = processDataByXpath(document, patientNameXpath); - String patientBirthday = processDataByXpath(document, patientBirthdayXpath); - String patientSex = processDataByXpath(document, patientSexXpath); - String patientIDCard = processDataByXpath(document, patientIDCardXpath); - String doctorName = processDataByXpath(document, doctorNameXpath); - String operation = processDataByXpath(document, operationXpath); - String operationTime = processDataByXpath(document, operationTimeXpath); - String patientArea = processDataByXpath(document, patientAreaXpath); - String roomNumber = processDataByXpath(document, roomNumberXpath); - String bedNumber = processDataByXpath(document, bedNumberXpath); - String remark = processDataByXpath(document, remarkXpath); - - PatientInfoVO patientInfoVO = new PatientInfoVO(); - patientInfoVO.setHospitalNumber(hospitalNumber); - patientInfoVO.setSerialNumber(serialNumber); - patientInfoVO.setPatientName(patientName); - patientInfoVO.setPatientAge(birthdayToAge(patientBirthday)); - 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); - - if (!checkObjAllFieldsIsNull(patientInfoVO)) { - PatientInfoVO[] patientInfoArray = {patientInfoVO}; - logger.debug("完成解析住院病人信息,住院号为:" + patientInfoVO.getHospitalNumber()); - return patientInfoArray; + String MsgXpath = "/ESBEntry/MsgInfo/Msg"; // 返回结果可能存在多条住院病人信息 + XPath xpath = doc.createXPath(MsgXpath); + List nodeList2 = xpath.selectNodes(doc, xpath); + if (nodeList2 != null && nodeList2.size() > 0) { + List patientInfoVOList = new LinkedList(); + // 解析返回信息中所有住院病人信息 + for (int i = 1; i <= nodeList2.size(); i++) { + String msgXpath = "/ESBEntry/MsgInfo/Msg[" + i + "]"; + String patientInfo = processDataByXpath(doc, msgXpath); // 住院病人信息 + if (StringUtils.isNotBlank(patientInfo)) { + Document document = DocumentHelper.parseText(patientInfo); + // 解析住院病人信息并入库 + String hospitalNumberXpath = "/msg/body/row/MR_NO"; + String serialNumberXpath = "/msg/body/row/INHOSP_NO"; + String patientNameXpath = "/msg/body/row/PAT_NAME"; + String patientBirthdayXpath = "/msg/body/row/DATE_BIRTH"; + String patientSexXpath = "/msg/body/row/PHYSI_SEX_NAME"; + String patientIDCardXpath = "/msg/body/row/ID_NUMBER"; + String doctorNameXpath = "/msg/body/row/APPLY_DR_NAME"; + String operationXpath = "/msg/body/row/SURGERY_OPER_NAME"; + String operationTimeXpath = "/msg/body/row/SURGERY_APPLY_DATE"; + String patientAreaXpath = "/msg/body/row/WARD_NAME"; + String roomNumberXpath = null; // 没有对应的房间号字段 + String bedNumberXpath = "/msg/body/row/BED_INDEX_NO"; + String remarkXpath = "/msg/body/row/NOTE"; + String visitDateXpath = "/msg/body/row/RECORD_DATE"; + + String hospitalNumber = processDataByXpath(document, hospitalNumberXpath); + String serialNumber = processDataByXpath(document, serialNumberXpath); + String patientName = processDataByXpath(document, patientNameXpath); + String patientBirthday = processDataByXpath(document, patientBirthdayXpath); + String patientSex = processDataByXpath(document, patientSexXpath); + String patientIDCard = processDataByXpath(document, patientIDCardXpath); + String doctorName = processDataByXpath(document, doctorNameXpath); + String operation = processDataByXpath(document, operationXpath); + String operationTime = processDataByXpath(document, operationTimeXpath); + String patientArea = processDataByXpath(document, patientAreaXpath); + String roomNumber = processDataByXpath(document, roomNumberXpath); + String bedNumber = processDataByXpath(document, bedNumberXpath); + String remark = processDataByXpath(document, remarkXpath); + String visitDate = processDataByXpath(document, visitDateXpath); // 记录录入时间 + + PatientInfoVO patientInfoVO = new PatientInfoVO(); + patientInfoVO.setHospitalNumber(hospitalNumber); + patientInfoVO.setSerialNumber(serialNumber); + patientInfoVO.setPatientName(patientName); + patientInfoVO.setPatientAge(birthdayToAge(patientBirthday)); + 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.setVisitDate(visitDate); + + if (!checkObjAllFieldsIsNull(patientInfoVO)) { + patientInfoVOList.add(patientInfoVO); + } } - logger.debug("解析住院病人信息出错,接收到的信息为:" + responce); - return null; } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + // 根据记录录入时间visitDate排序,只取最新记录 + patientInfoVOList.sort(new Comparator() { + @Override + public int compare(PatientInfoVO o1, PatientInfoVO o2) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date1 = sdf.parse(o1.getVisitDate()); + Date date2 = sdf.parse(o2.getVisitDate()); + return date2.compareTo(date1); + } catch (ParseException e) { + logger.debug("住院病人信息排序出错(录入时间【RECORD_DATE】字段格式错误)!"); + e.printStackTrace(); + } + return 0; + } + }); + // 只取最新录入的一条记录 + PatientInfoVO[] patientInfoArray = {patientInfoVOList.get(0)}; + logger.debug("完成解析住院病人信息,住院号为:" + patientInfoVOList.get(0).getHospitalNumber()); + return patientInfoArray; + } + } else { + logger.debug("查询返回的数据不包含住院病人信息!"); + return null; } } else { - logger.debug("查询失败!"); + logger.debug("查询失败!【RetCon】 = " + RetCon); return null; } } catch (Exception e) { @@ -196,6 +222,7 @@ logger.debug("查询住院病人信息失败,未找到住院号为:【" + HospitalNumber + "】的住院病人信息!"); return null; } + logger.debug("查询失败!"); return null; } Fisheye: Tag 26621 refers to a dead (removed) revision in file `ssts-datasync-default-impl/src/main/java/mqConfig/esbmq-config.xml'. Fisheye: No comparison available. Pass `N' to diff?