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?