Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java =================================================================== diff -u -r35586 -r37101 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java (.../UseRecord.java) (revision 35586) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java (.../UseRecord.java) (revision 37101) @@ -91,6 +91,8 @@ private String hospitalNum;//住院号 + private String patientId;//患者ID + private String patientName;//病人姓名 private String patientAge;//病人年龄 @@ -962,6 +964,7 @@ jsonObject.put("editTime", getEditTime()); jsonObject.put("enteringDate", getEnteringDate()); jsonObject.put("hospitalNum", getHospitalNum()); + jsonObject.put("patientId", getPatientId()); jsonObject.put("operation", getOperation()); jsonObject.put("operationRoom", getOperationRoom()); jsonObject.put("anesthetist", getAnesthetist()); @@ -1110,4 +1113,14 @@ this.doctorAccountDepartCode = doctorAccountDepartCode; } + + public String getPatientId() { + return patientId; + } + + + public void setPatientId(String patientId) { + this.patientId = patientId; + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java =================================================================== diff -u -r37041 -r37101 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 37041) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 37101) @@ -53,6 +53,8 @@ private String hospitalNumber;//住院号 + private String patientId;//患者ID + private String patientArea; // 病区 private String roomNumber; // 病室 @@ -537,6 +539,14 @@ this.hospitalNumber = hospitalNumber; } + public String getPatientId() { + return patientId; + } + + public void setPatientId(String patientId) { + this.patientId = patientId; + } + public String getRoomNumber() { return roomNumber; } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/WebServiceClientHelper.java =================================================================== diff -u -r30814 -r37101 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 30814) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 37101) @@ -2,19 +2,34 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; +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.List; import javax.xml.namespace.QName; +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + import org.apache.axis.client.Call; import org.apache.axis.client.Service; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.inventorymanagement.model.StorageEntry; import com.forgon.tools.Constants; +import com.forgon.tools.date.DateTools; /** * 南方医院webservice帮助类 @@ -63,8 +78,8 @@ String param2 = input2; - logger.info("input1 : " + param1); - logger.info("input2 : " + param2); + /*logger.info("input1 : " + param1); + logger.info("input2 : " + param2);*/ Service service = new Service(); Call call = (Call) service.createCall(); @@ -135,5 +150,419 @@ logger.info("单点登录票据ptickets和系统编码pcode验证返回信息:" + xmlResult); return xmlResult; } + + /** + * 根据患者就诊号查询手术信息 + * @param patientInfoVO + */ + public static List findOperationInfoByPatientInfoVO(PatientInfoVO patientInfoVO) { + if(patientInfoVO == null || StringUtils.isBlank(patientInfoVO.getClinicNumber())){ + return null; + } + List allPatientInfoVO = new ArrayList(); + String AdmNo = patientInfoVO.getClinicNumber(); + //查询手术信息 + List opeartionInfoVOList = findOperationInfoByClinicNumber(AdmNo); + if(CollectionUtils.isEmpty(opeartionInfoVOList)){ + //没有关联的手术信息,只返回患者基础信息 + return allPatientInfoVO; + } + for (PatientInfoVO opeartionInfoVO : opeartionInfoVOList) { + //设置患者基础信息 + setPatientInfoVOBaseInfo(opeartionInfoVO, patientInfoVO); + } + allPatientInfoVO.addAll(opeartionInfoVOList); + return allPatientInfoVO; + } + /** + * 根据患者就诊号查询手术医嘱信息(就诊号)MES0033 + * @param patientInfoVO + */ + public static List findOperationInfoByClinicNumber(String AdmNo) { + if(StringUtils.isBlank(AdmNo)){ + return null; + } + try { + LoginUserData loginUserData = AcegiHelper.getLoginUser(); + String ExtUserID = loginUserData.getUserName(); + String input2 = "丁香软件" + ExtUserID + "" + AdmNo + ""; + logger.info("手术医嘱信息(就诊号)MES0033接口请求信息:" + input2); + String result = WebServiceClientHelper.axisInvokeWebservice(DatasyncConstant.WebserviceAddress, DatasyncConstant.ServiceCode_AdmNo, input2); + /*String result = "" + + "" + + "" + + "" + + "" + + "0" + + "1" + + "" + + "" + + "" + + "" + + "6165550" + + "34130972" + + "895307" + + "10356076" + + "I" + + "102954" + + "78.6101" + + "锁骨内固定装置去除术" + + "400902" + + "聚焦刀门诊" + + "58" + + "2020-08-23 09:20:51" + + "2020-08-24 11:20:00" + + "2020-08-24 12:29:00" + + "221103" + + "03" + + "3" + + "二级手术" + + "220402" + + "创伤骨外科病房" + + "2180" + + "相大勇" + + "余斌" + + "" + + "" + + "全麻" + + "廖志婕" + + "" + + "10" + + "0" + + "I级" + + "" + + "" + + "1" + + "1" + + "1" + + "" + + "" + + "" + + "" + + "" + + "" + + "6165550" + + "34130972" + + "895307" + + "10356076" + + "I" + + "102954" + + "78.6101" + + "锁骨内固定装置去除术" + + "400902" + + "聚焦刀门诊" + + "58" + + "2020-09-23 09:20:51" + + "2020-09-24 11:20:00" + + "2020-09-24 12:29:00" + + "221103" + + "03" + + "3" + + "二级手术" + + "220402" + + "创伤骨外科病房" + + "2180" + + "相大勇" + + "余斌" + + "" + + "" + + "全麻" + + "廖志婕" + + "" + + "10" + + "0" + + "I级" + + "" + + "" + + "1" + + "1" + + "1" + + "" + + "" + + "" + + "" + + "]]>" + + "" + + "" + + "" + + "";*/ + logger.info("手术医嘱信息(就诊号)MES0033接口返回信息:" + result); + int startIndex = result.indexOf(""); + if(startIndex == -1){ + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + XMLSerializer xmlSerializer = new XMLSerializer(); + JSON json = xmlSerializer.read("" + xmlString + ""); + JSONObject opeartionInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; + if(opeartionInfos != null){ + Integer status = opeartionInfos.optInt("ResultCode", -1); + if(DatasyncConstant.ResultCode_Success.intValue() != status.intValue()){ + logger.info("手术医嘱信息(就诊号)MES0033接口查询手术信息失败:ResultCode = " + status + "; Message = " + opeartionInfos.optString("ErrorMsg")); + return null; + } + Object opeartionInfoObj = opeartionInfos.opt("OperationAppInfoList"); + JSONArray opeartionInfoArr = null; + if(opeartionInfoObj instanceof JSONArray){ + opeartionInfoArr = (JSONArray) opeartionInfoObj; + }else if(opeartionInfoObj instanceof JSONObject){ + opeartionInfoArr = new JSONArray(); + JSONObject opeartionInfo = ((JSONObject)opeartionInfoObj).optJSONObject("OperationAppInfo"); + opeartionInfoArr.add(opeartionInfo); + } + if(opeartionInfoArr != null && opeartionInfoArr.size() > 0){ + List opeartionInfoVOList = new ArrayList(); + for (Object object : opeartionInfoArr) { + JSONObject opeartionInfo = (JSONObject) object; + Object OperRoom = opeartionInfo.opt("OperRoom"); + Object doctorName = opeartionInfo.opt("DoctorDesc"); + Object operation = opeartionInfo.opt("OperDesc"); + Object DeptDesc = opeartionInfo.opt("DeptDesc"); + Object operationTime = opeartionInfo.opt("ScheduledST");// + //Object patientArea = opeartionInfo.opt("patientArea"); + Object bedNumber = opeartionInfo.opt("BedNo"); + Object roomNumber = opeartionInfo.opt("OperRoomNo"); + + Object washHandNurse = opeartionInfo.opt("FirstAss"); + Object circuitNurse = opeartionInfo.opt("SecondAss"); + //病案号\住院号 + String hospitalNumber = opeartionInfo.optString("DocmentID"); + String clinicNumber = opeartionInfo.optString("AdmNo"); + String patientId = opeartionInfo.optString("RegisterNo"); + + PatientInfoVO vo = new PatientInfoVO(); + vo.setPatientId(patientId); + vo.setHospitalNumber(hospitalNumber); + vo.setClinicNumber(clinicNumber); + vo.setDoctorName(doctorName instanceof String ? (String)doctorName : ""); + vo.setOperation(operation instanceof String ? (String)operation : ""); + vo.setOpRoomId(OperRoom instanceof String ? (String)OperRoom : ""); + vo.setOperationTime(operationTime instanceof String ? ((String)operationTime).replace(".", "-") : ""); + //vo.setPatientArea(patientArea instanceof String ? (String)patientArea : ""); + vo.setBedNumber(bedNumber instanceof String ? (String)bedNumber : ""); + vo.setRoomNumber(roomNumber instanceof String ? (String)roomNumber : ""); + + vo.setWashHandNurse(washHandNurse instanceof String ? (String)washHandNurse : ""); + vo.setCircuitNurse(circuitNurse instanceof String ? (String)circuitNurse : ""); + vo.setAscriptionDepartment(DeptDesc instanceof String ? (String)DeptDesc : ""); + opeartionInfoVOList.add(vo); + } + if (CollectionUtils.isNotEmpty(opeartionInfoVOList)) { + // 根据记录手术时间operationTime排序,只取最新记录 + opeartionInfoVOList.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; + } + 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; + } + }); + return opeartionInfoVOList; + } + } + } + } catch (Exception e) { + logger.error("手术医嘱信息(就诊号)MES0033接口查询手术信息失败" + e); + e.printStackTrace(); + } + return null; + } + + /** + * 根据住院号或者患者ID查询患者就诊记录信息 S0096 + * @param num + * @param numType + * @return + */ + public static List findPatientInfoByHospitalNumOrPatientID(String num, String numType) { + try { + LoginUserData loginUserData = AcegiHelper.getLoginUser(); + String ExtUserID = loginUserData.getUserName(); + //查询日期范围:2000-01-01 ~ 当前时间的10年后的最后一天 + Calendar calendar1 = Calendar.getInstance(); + calendar1.set(2000, 0, 1); + String startDate = DateTools.getFormatDateStr(calendar1.getTime(), DateTools.COMMON_DATE_ONLY); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR) + 10, 11, 31); + String endDate = DateTools.getFormatDateStr(calendar2.getTime(), DateTools.COMMON_DATE_ONLY); + String input2 = ""; + if(StringUtils.equals(numType, DatasyncConstant.NUM_TYPE_HOSPITAL)){ + input2 = "丁香软件" + num + "" + ExtUserID + "" + startDate + "" + endDate + ""; + }else if(StringUtils.equals(numType, DatasyncConstant.NUM_TYPE_PATIENT_ID)){ + input2 = "丁香软件" + num + "" + ExtUserID + "" + startDate + "" + endDate + ""; + } + logger.info("患者就诊记录信息 S0096接口请求信息:" + input2); + String result = WebServiceClientHelper.axisInvokeWebservice(DatasyncConstant.WebserviceAddress, DatasyncConstant.ServiceCode_PATPatientID, input2); + /*String result = "" + + "" + + "" + + "" + + "" + + "0" + + "2" + + "" + + "" + + "10356076" + + "001622496" + + "张剑萍" + + "" + + "63岁9月9天" + + "15360328272" + + "440726195701133727" + + "I" + + "住院" + + "SNYD" + + "省内异地" + + "220402" + + "创伤骨外科病房" + + "0405" + + "林昂如" + + "2020-09-14 18:13:56" + + "2020-09-30 10:38:01" + + "xp1" + + "项平" + + "2020-09-30 10:38:04" + + "" + + "" + + "10356077" + + "001622497" + + "张剑萍2" + + "" + + "63岁9月9天" + + "15360328272" + + "440726195701133727" + + "I" + + "住院" + + "SNYD" + + "省内异地" + + "220402" + + "创伤骨外科病房" + + "0405" + + "林昂如" + + "2020-09-14 18:13:56" + + "2020-09-30 10:38:01" + + "xp1" + + "项平" + + "2020-09-30 10:38:04" + + "" + + "" + + "]]>" + + "" + + "" + + "" + + "";*/ + logger.info("患者就诊记录信息 S0096接口返回信息:" + result); + int startIndex = result.indexOf(""); + if(startIndex == -1){ + return null; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + return null; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + XMLSerializer xmlSerializer = new XMLSerializer(); + JSON json = xmlSerializer.read("" + xmlString + ""); + JSONObject patientInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; + if(patientInfos != null){ + Integer status = patientInfos.optInt("ResultCode", -1); + if(DatasyncConstant.ResultCode_Success.intValue() != status.intValue()){ + logger.info("根据" + numType + "查询病人信息失败:ResultCode = " + status + "; Message = " + patientInfos.optString("ErrorMsg")); + return null; + } + Object patientInfoObj = patientInfos.opt("AdmNoList"); + JSONArray patientInfoArr = null; + if(patientInfoObj instanceof JSONArray){ + patientInfoArr = (JSONArray) patientInfoObj; + }else if(patientInfoObj instanceof JSONObject){ + patientInfoArr = new JSONArray(); + JSONObject patientInfo = ((JSONObject)patientInfoObj).optJSONObject("AdmNoInfo"); + patientInfoArr.add(patientInfo); + } + if(patientInfoArr != null && patientInfoArr.size() > 0){ + List patientInfoVOList = new ArrayList(); + for (Object object : patientInfoArr) { + JSONObject patientInfo = (JSONObject) object; + Object patientName = patientInfo.opt("Name"); + Object patientAge = patientInfo.opt("Age"); + Object patientSex = patientInfo.opt("Sex"); + Object patientIDCard = patientInfo.opt("CreditID"); + // 临时存储病人就诊号,用于查询手术信息 + Object AdmNo = patientInfo.opt("AdmNo"); + Object remark = patientInfo.opt("remark"); + //Object updateTime = patientInfo.opt("UpdateTime"); + //患者ID + String patientId = patientInfo.optString("PATPatientID"); + + PatientInfoVO vo = new PatientInfoVO(); + vo.setPatientId(patientId); + //页面输入患者ID,查询就诊信息,所以应该返回并显示就诊号 + vo.setPatientNumber(AdmNo instanceof String ? (String)AdmNo : ""); + if(StringUtils.equals(numType, DatasyncConstant.NUM_TYPE_HOSPITAL)){ + vo.setHospitalNumber(num); + } + vo.setClinicNumber(vo.getPatientNumber()); + vo.setAdmNo(vo.getPatientNumber()); + vo.setPatientName(patientName instanceof String ? (String)patientName : ""); + vo.setPatientAge(patientAge instanceof String ? (String)patientAge : ""); + vo.setPatientSex(patientSex instanceof String ? ((String)patientSex).trim() : ""); + vo.setPatientIDCard(patientIDCard instanceof String ? (String)patientIDCard : ""); + vo.setRemark(remark instanceof String ? (String)remark : ""); + vo.setPatientSex(patientSex instanceof String ? (String)patientSex : ""); + //vo.setOperationTime(updateTime instanceof String ? (String)updateTime : ""); + + patientInfoVOList.add(vo); + } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + logger.debug("完成解析病人信息,病人ID号为:" + patientInfoVOList.get(0).getPatientId() + ",记录数为:" + patientInfoVOList.size()); + return patientInfoVOList; + } + return null; + } + } + } catch (Exception e) { + logger.error("患者就诊记录信息 S0096接口查询病人信息失败" + e); + e.printStackTrace(); + } + return null; + } + + /** + * 设置患者基础信息 + * @param patientOperationInfoVO + * @param patientInfoVO + */ + public static void setPatientInfoVOBaseInfo(PatientInfoVO patientOperationInfoVO, PatientInfoVO patientInfoVO) { + if(patientOperationInfoVO == null + || patientInfoVO == null){ + return; + } + patientOperationInfoVO.setPatientId(patientInfoVO.getPatientId()); + //patientOperationInfoVO.setClinicNumber(patientInfoVO.getClinicNumber()); + //patientOperationInfoVO.setHospitalNumber(patientInfoVO.getHospitalNumber()); + patientOperationInfoVO.setPatientName(patientInfoVO.getPatientName()); + patientOperationInfoVO.setPatientAge(patientInfoVO.getPatientAge()); + patientOperationInfoVO.setPatientIDCard(patientInfoVO.getPatientIDCard()); + patientOperationInfoVO.setPatientSex(patientInfoVO.getPatientSex()); + patientOperationInfoVO.setPatientIDCard(patientInfoVO.getPatientIDCard()); + } + } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u -r32684 -r37101 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByHospitalNumDaoImpl.java (.../FindPatientInfoByHospitalNumDaoImpl.java) (revision 32684) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByHospitalNumDaoImpl.java (.../FindPatientInfoByHospitalNumDaoImpl.java) (revision 37101) @@ -1,365 +1,58 @@ package com.forgon.disinfectsystem.datasynchronization.dao.nfykdxnfyy; -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.List; -import net.sf.json.JSON; -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; -import net.sf.json.xml.XMLSerializer; - import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; -import com.forgon.directory.acegi.tools.AcegiHelper; -import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; -import com.forgon.tools.date.DateTools; /** * 根据住院号查询病人信息(南方医院) - * @author ZhouPeiMian - * @since 2020-11-05 - * + * 1、根据住院号查询【患者就诊记录信息 S0096】接口,获取就诊号; + * 2、根据步骤1的就诊号,关联查询【手术医嘱信息(就诊号)MES0033】接口,获取手术信息。 */ -public class FindPatientInfoByHospitalNumDaoImpl implements - FindPatientInfoByHospitalNumDao { +public class FindPatientInfoByHospitalNumDaoImpl implements FindPatientInfoByHospitalNumDao { Logger logger = Logger.getLogger(FindPatientInfoByHospitalNumDaoImpl.class); @Override public PatientInfoVO[] findPatientInfoByHospitalNum(String hospitalNum) { - try { - LoginUserData loginUserData = AcegiHelper.getLoginUser(); - String ExtUserID = loginUserData.getUserName(); - //查询日期范围:2000-01-01 ~ 当前时间的10年后的最后一天 - Calendar calendar1 = Calendar.getInstance(); - calendar1.set(2000, 0, 1); - String startDate = DateTools.getFormatDateStr(calendar1.getTime(), DateTools.COMMON_DATE_ONLY); - Calendar calendar2 = Calendar.getInstance(); - calendar2.set(calendar2.get(Calendar.YEAR) + 10, 11, 31); - String endDate = DateTools.getFormatDateStr(calendar2.getTime(), DateTools.COMMON_DATE_ONLY); - String input2 = "丁香软件" + hospitalNum + "" + ExtUserID + "" + startDate + "" + endDate + ""; - logger.info("病人信息同步接口请求信息:" + input2); - String result = WebServiceClientHelper.axisInvokeWebservice(DatasyncConstant.WebserviceAddress, DatasyncConstant.ServiceCode_PATPatientID, input2); - /*String result = "" - + "" - + "" - + "" - + "" - + "0" - + "2" - + "" - + "" - + "10356076" - + "001622496" - + "张剑萍" - + "" - + "63岁9月9天" - + "15360328272" - + "440726195701133727" - + "I" - + "住院" - + "SNYD" - + "省内异地" - + "220402" - + "创伤骨外科病房" - + "0405" - + "林昂如" - + "2020-09-14 18:13:56" - + "2020-09-30 10:38:01" - + "xp1" - + "项平" - + "2020-09-30 10:38:04" - + "" - + "" - + "]]>" - + "" - + "" - + "" - + "";*/ - logger.info("病人信息同步接口返回信息:" + result); - int startIndex = result.indexOf(""); - if(startIndex == -1){ - return null; + //根据住院号查询患者就诊记录(就诊号),一个患者ID对应多个就诊号记录 + List patientInfoVOList = WebServiceClientHelper.findPatientInfoByHospitalNumOrPatientID(hospitalNum, DatasyncConstant.NUM_TYPE_HOSPITAL); + if(CollectionUtils.isEmpty(patientInfoVOList)){ + return null; + } + List allPatientInfoVOList = new ArrayList(); + for (int i=0; i tempPatientInfoVOList = WebServiceClientHelper.findOperationInfoByPatientInfoVO(patientInfoVO); + logger.info(String.format("住院号【%s】,就诊号【%s】的手术信息记录数为:%s", hospitalNum, patientInfoVO.getAdmNo(), + (tempPatientInfoVOList == null ? 0 : tempPatientInfoVOList.size()))); + if(CollectionUtils.isNotEmpty(tempPatientInfoVOList)){ + allPatientInfoVOList.addAll(tempPatientInfoVOList); + }else{ + //只返回患者基础信息 + allPatientInfoVOList.add(patientInfoVO); } - int endIndex = result.indexOf(""); - if(endIndex == -1 || endIndex < startIndex){ - return null; - } - String xmlString = result.substring(startIndex + "".length(), endIndex); - XMLSerializer xmlSerializer = new XMLSerializer(); - JSON json = xmlSerializer.read("" + xmlString + ""); - JSONObject patientInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; - if(patientInfos != null){ - Integer status = patientInfos.optInt("ResultCode", -1); - if(DatasyncConstant.ResultCode_Success.intValue() != status.intValue()){ - logger.info("根据病人ID号查询病人信息失败:ResultCode = " + status + "; Message = " + patientInfos.optString("ErrorMsg")); - return null; - } - Object patientInfoObj = patientInfos.opt("AdmNoList"); - JSONArray patientInfoArr = null; - if(patientInfoObj instanceof JSONArray){ - patientInfoArr = (JSONArray) patientInfoObj; - }else if(patientInfoObj instanceof JSONObject){ - patientInfoArr = new JSONArray(); - JSONObject patientInfo = ((JSONObject)patientInfoObj).optJSONObject("AdmNoInfo"); - patientInfoArr.add(patientInfo); - } - if(patientInfoArr != null && patientInfoArr.size() > 0){ - List patientInfoVOList = new ArrayList(); - for (Object object : patientInfoArr) { - JSONObject patientInfo = (JSONObject) object; - Object patientName = patientInfo.opt("Name"); - Object patientAge = patientInfo.opt("Age"); - Object patientSex = patientInfo.opt("Sex"); - Object patientIDCard = patientInfo.opt("CreditID"); - // 临时存储病人就诊号,用于查询手术信息 - Object AdmNo = patientInfo.opt("AdmNo"); - Object remark = patientInfo.opt("remark"); - Object updateTime = patientInfo.opt("UpdateTime"); - - PatientInfoVO vo = new PatientInfoVO(); - //页面输入患者ID,查询就诊信息,所以应该返回并显示就诊号 - vo.setPatientNumber(AdmNo instanceof String ? (String)AdmNo : ""); - vo.setHospitalNumber(vo.getPatientNumber()); - vo.setPatientName(patientName instanceof String ? (String)patientName : ""); - vo.setPatientAge(patientAge instanceof String ? (String)patientAge : ""); - vo.setPatientSex(patientSex instanceof String ? ((String)patientSex).trim() : ""); - vo.setPatientIDCard(patientIDCard instanceof String ? (String)patientIDCard : ""); - vo.setAdmNo(AdmNo instanceof String ? (String)AdmNo : ""); - vo.setRemark(remark instanceof String ? (String)remark : ""); - vo.setOperationTime(updateTime instanceof String ? (String)updateTime : ""); - - patientInfoVOList.add(vo); - } - 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; - } - 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; - } - }); - // 只取最新录入的一条记录 - logger.debug("完成解析病人信息,病人ID号为:" + patientInfoVOList.get(0).getHospitalNumber()); - PatientInfoVO patientInfoVO = patientInfoVOList.get(0); - // 根据患者就诊号查询手术信息 - findOperationInfoByPatientInfoVO(patientInfoVO); - PatientInfoVO[] patientInfoArray = {patientInfoVO}; - return patientInfoArray; - } - return null; - } - } - } catch (Exception e) { - logger.error("根据病人ID号查询病人信息失败" + e); - e.printStackTrace(); } - return null; - } - - /** - * 根据患者就诊号查询手术信息 - * @param patientInfoVO - */ - private void findOperationInfoByPatientInfoVO(PatientInfoVO patientInfoVO) { - if(patientInfoVO == null || StringUtils.isBlank(patientInfoVO.getAdmNo())){ - return; + if(CollectionUtils.isEmpty(allPatientInfoVOList)){ + return null; } - String AdmNo = patientInfoVO.getAdmNo(); - try { - LoginUserData loginUserData = AcegiHelper.getLoginUser(); - String ExtUserID = loginUserData.getUserName(); - String input2 = "丁香软件" + ExtUserID + "" + AdmNo + ""; - logger.info("手术信息同步接口请求信息:" + input2); - String result = WebServiceClientHelper.axisInvokeWebservice(DatasyncConstant.WebserviceAddress, DatasyncConstant.ServiceCode_AdmNo, input2); - /*String result = "" - + "" - + "" - + "" - + "" - + "0" - + "1" - + "" - + "" - + "" - + "" - + "6165550" - + "34130972" - + "895307" - + "10356076" - + "I" - + "102954" - + "78.6101" - + "锁骨内固定装置去除术" - + "400902" - + "聚焦刀门诊" - + "58" - + "2020-09-23 09:20:51" - + "2020-09-24 11:20:00" - + "2020-09-24 12:29:00" - + "221103" - + "03" - + "3" - + "二级手术" - + "220402" - + "创伤骨外科病房" - + "2180" - + "相大勇" - + "余斌" - + "" - + "" - + "全麻" - + "廖志婕" - + "" - + "10" - + "0" - + "I级" - + "" - + "" - + "1" - + "1" - + "1" - + "" - + "" - + "" - + "" - + "]]>" - + "" - + "" - + "" - + "";*/ - logger.info("手术信息同步接口返回信息:" + result); - int startIndex = result.indexOf(""); - if(startIndex == -1){ - return; - } - int endIndex = result.indexOf(""); - if(endIndex == -1 || endIndex < startIndex){ - return; - } - String xmlString = result.substring(startIndex + "".length(), endIndex); - XMLSerializer xmlSerializer = new XMLSerializer(); - JSON json = xmlSerializer.read("" + xmlString + ""); - JSONObject opeartionInfos = json.isArray() ? ((JSONArray)json).getJSONObject(0) : (JSONObject)json; - if(opeartionInfos != null){ - Integer status = opeartionInfos.optInt("ResultCode", -1); - if(DatasyncConstant.ResultCode_Success.intValue() != status.intValue()){ - logger.info("根据病人就诊号查询手术信息失败:ResultCode = " + status + "; Message = " + opeartionInfos.optString("ErrorMsg")); - return; - } - Object opeartionInfoObj = opeartionInfos.opt("OperationAppInfoList"); - JSONArray opeartionInfoArr = null; - if(opeartionInfoObj instanceof JSONArray){ - opeartionInfoArr = (JSONArray) opeartionInfoObj; - }else if(opeartionInfoObj instanceof JSONObject){ - opeartionInfoArr = new JSONArray(); - JSONObject opeartionInfo = ((JSONObject)opeartionInfoObj).optJSONObject("OperationAppInfo"); - opeartionInfoArr.add(opeartionInfo); - } - if(opeartionInfoArr != null && opeartionInfoArr.size() > 0){ - List opeartionInfoVOList = new ArrayList(); - for (Object object : opeartionInfoArr) { - JSONObject opeartionInfo = (JSONObject) object; - Object OperRoom = opeartionInfo.opt("OperRoom"); - Object doctorName = opeartionInfo.opt("DoctorDesc"); - Object operation = opeartionInfo.opt("OperDesc"); - Object DeptDesc = opeartionInfo.opt("DeptDesc"); - Object operationTime = opeartionInfo.opt("ScheduledST");// - //Object patientArea = opeartionInfo.opt("patientArea"); - Object bedNumber = opeartionInfo.opt("BedNo"); - Object roomNumber = opeartionInfo.opt("OperRoomNo"); - - Object washHandNurse = opeartionInfo.opt("FirstAss"); - Object circuitNurse = opeartionInfo.opt("SecondAss"); - - PatientInfoVO vo = new PatientInfoVO(); - vo.setDoctorName(doctorName instanceof String ? (String)doctorName : ""); - vo.setOperation(operation instanceof String ? (String)operation : ""); - vo.setOpRoomId(OperRoom instanceof String ? (String)OperRoom : ""); - vo.setOperationTime(operationTime instanceof String ? ((String)operationTime).replace(".", "-") : ""); - //vo.setPatientArea(patientArea instanceof String ? (String)patientArea : ""); - vo.setBedNumber(bedNumber instanceof String ? (String)bedNumber : ""); - vo.setRoomNumber(roomNumber instanceof String ? (String)roomNumber : ""); - - vo.setWashHandNurse(washHandNurse instanceof String ? (String)washHandNurse : ""); - vo.setCircuitNurse(circuitNurse instanceof String ? (String)circuitNurse : ""); - vo.setAscriptionDepartment(DeptDesc instanceof String ? (String)DeptDesc : ""); - opeartionInfoVOList.add(vo); - } - if (CollectionUtils.isNotEmpty(opeartionInfoVOList)) { - // 根据记录手术时间operationTime排序,只取最新记录 - opeartionInfoVOList.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; - } - 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 operationInfo = opeartionInfoVOList.get(0); - patientInfoVO.setDoctorName(operationInfo.getDoctorName()); - patientInfoVO.setOperation(operationInfo.getOperation()); - patientInfoVO.setOpRoomId(operationInfo.getOpRoomId()); - patientInfoVO.setOperationTime(operationInfo.getOperationTime()); - //vo.setPatientArea(patientArea instanceof String ? (String)patientArea : ""); - patientInfoVO.setBedNumber(operationInfo.getBedNumber()); - patientInfoVO.setRoomNumber(operationInfo.getRoomNumber()); - - patientInfoVO.setWashHandNurse(operationInfo.getWashHandNurse()); - patientInfoVO.setCircuitNurse(operationInfo.getCircuitNurse()); - patientInfoVO.setAscriptionDepartment(operationInfo.getAscriptionDepartment()); - logger.debug("完成解析住院病人信息,病人ID号为:" + patientInfoVO.getPatientNumber()); - } - } - } - } catch (Exception e) { - logger.error("根据病人就诊号查询手术信息失败" + e); - e.printStackTrace(); + PatientInfoVO[] patientInfoArray = new PatientInfoVO[allPatientInfoVOList.size()]; + for (int i=0; i patientInfoVOList = WebServiceClientHelper.findPatientInfoByHospitalNumOrPatientID(patientId, DatasyncConstant.NUM_TYPE_PATIENT_ID); + if(CollectionUtils.isEmpty(patientInfoVOList)){ + return null; + } + List allPatientInfoVOList = new ArrayList(); + for (int i=0; i tempPatientInfoVOList = WebServiceClientHelper.findOperationInfoByPatientInfoVO(patientInfoVO); + logger.info(String.format("患者ID【%s】,就诊号【%s】的手术信息记录数为:%s", patientId, patientInfoVO.getAdmNo(), + (tempPatientInfoVOList == null ? 0 : tempPatientInfoVOList.size()))); + if(CollectionUtils.isNotEmpty(tempPatientInfoVOList)){ + allPatientInfoVOList.addAll(tempPatientInfoVOList); + }else{ + //只返回患者基础信息 + allPatientInfoVOList.add(patientInfoVO); + } + + } + if(CollectionUtils.isEmpty(allPatientInfoVOList)){ + return null; + } + PatientInfoVO[] patientInfoArray = new PatientInfoVO[allPatientInfoVOList.size()]; + for (int i=0; i + + Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByTreatmentNumDaoImpl.java =================================================================== diff -u -r29499 -r37101 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByTreatmentNumDaoImpl.java (.../FindPatientInfoByTreatmentNumDaoImpl.java) (revision 29499) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/nfykdxnfyy/FindPatientInfoByTreatmentNumDaoImpl.java (.../FindPatientInfoByTreatmentNumDaoImpl.java) (revision 37101) @@ -1,32 +1,55 @@ package com.forgon.disinfectsystem.datasynchronization.dao.nfykdxnfyy; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.CollectionUtils; import org.apache.log4j.Logger; -import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; /** * 根据诊疗号查询病人信息(南方医院) - * @author ZhouPeiMian - * @since 2020-11-05 - * + * 1、根据诊疗号(就诊号)查询【手术医嘱信息(就诊号)MES0033】接口,获取手术信息。 + * 2、根据手术信息中的患者id,查询【患者就诊记录信息 S0096】接口,或者患者基础信息 */ public class FindPatientInfoByTreatmentNumDaoImpl implements FindPatientInfoByTreatmentNumDao { Logger logger = Logger.getLogger(FindPatientInfoByTreatmentNumDaoImpl.class); - - private FindPatientInfoByHospitalNumDao findPatientInfoByHospitalNumDao; - public void setFindPatientInfoByHospitalNumDao( - FindPatientInfoByHospitalNumDao findPatientInfoByHospitalNumDao) { - this.findPatientInfoByHospitalNumDao = findPatientInfoByHospitalNumDao; - } - @Override - public PatientInfoVO[] findPatientInfoByTreatmentNum(String clinicNumber) { - return findPatientInfoByHospitalNumDao.findPatientInfoByHospitalNum(clinicNumber); + public PatientInfoVO[] findPatientInfoByTreatmentNum(String treatmentNum) { + //根据诊疗号查询患者信息,一个诊疗号可能对应多个患者信息 + List patientOperationInfoVOList = WebServiceClientHelper.findOperationInfoByClinicNumber(treatmentNum); + if(CollectionUtils.isEmpty(patientOperationInfoVOList)){ + return null; + } + Map patientInfoVOMap = new HashMap(); + //设置患者姓名等基础信息 + for (PatientInfoVO patientOperationInfoVO : patientOperationInfoVOList) { + String patientID = patientOperationInfoVO.getPatientId(); + PatientInfoVO patientInfoVO = patientInfoVOMap.get(patientID); + if(patientInfoVO == null && !patientInfoVOMap.containsKey(patientID)){ + List patientInfoVOList = WebServiceClientHelper.findPatientInfoByHospitalNumOrPatientID(patientID, DatasyncConstant.NUM_TYPE_PATIENT_ID); + if(CollectionUtils.isEmpty(patientInfoVOList)){ + continue; + } + //根据就诊号匹配患者基础信息vo + patientInfoVO = patientInfoVOList.get(0); + patientInfoVOMap.put(patientID, patientInfoVO); + } + //设置患者姓名等基础信息 + WebServiceClientHelper.setPatientInfoVOBaseInfo(patientOperationInfoVO, patientInfoVO); + } + PatientInfoVO[] patientInfoVOArray = new PatientInfoVO[patientOperationInfoVOList.size()]; + for (int i=0;i