Index: ssts-web/src/main/webapp/disinfectsystem/config/szslhqzxyy/spring/HIS.xml =================================================================== diff -u -r31031 -r31346 --- ssts-web/src/main/webapp/disinfectsystem/config/szslhqzxyy/spring/HIS.xml (.../HIS.xml) (revision 31031) +++ ssts-web/src/main/webapp/disinfectsystem/config/szslhqzxyy/spring/HIS.xml (.../HIS.xml) (revision 31346) @@ -60,31 +60,12 @@ - - - - - - - - - - - - - - - - - - - - - + + - + + + Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/HTTPClientHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/HTTPClientHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/HTTPClientHelper.java (revision 31346) @@ -0,0 +1,165 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslhqzxyy; + +import java.util.Calendar; +import java.util.UUID; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.apache.commons.lang3.StringUtils; +import com.forgon.tools.date.DateTools; + +/** + * 深圳市龙华区中心医院帮助类 + * @author ZhouPeiMian + * @since 2021-05-18 + * + */ +public class HTTPClientHelper { + + /** + * 构建请求信息 + { + "service": {//固定(serviceCode、serviceName、eventCode、eventName) + "serviceCode": "S0028", + "serviceName": "住院就诊信息查询服务" + }, + "event": { + "eventCode": "E002803", + "eventName": "查询患者最近一次住院信息" + }, + "id": "22a0f9e0-4454-11dc-a6be-3603d6504810",//我方规则生成要求唯一 + "creationTime": "20130116T112855",//格式固定,查询时间(年月日+T+时分秒) + "sender": { + "id": "6000",//固定 + "softwareName": { + "code": "CSSD",//固定 + "name": "消毒供应质量追溯系统"//固定 + }, + "softwareProvider": { + "code": "DXsoft",//固定 + "name": "广州丁香软件有限公司"//固定 + }, + "organization": { + "code": "20", + "name": "深圳市龙华区中心医院"//固定,根据医院变化,code和name + } + }, + "receiver": { + "id": "1200", + "softwareName": { + "code": "ESB",//固定 + "name": "区域集成平台"//固定 + }, + "softwareProvider": { + "code": "Caradigm",//固定 + "name": "恺恩泰(北京)科技有限公司"//固定 + }, + "organization": { + "code": "20",//固定 + "name": "深圳市龙华区中心医院"//固定 + } + }, + "query": { + "ENCOUNTER": { + "ENCOUNTER_INPATIENT": [ + { + "DATA_ELEMENT_ID": "LHDE0020001",//固定 + "DATA_ELEMENT_NAME": "患者主索引号码",//固定 + "DATA_ELEMENT_EN_NAME": "EMPI_ID",//固定 + "DATA_ELEMENT_VALUE": "10889150"//非固定,需要输入病人门诊号 + } + ] + } + } + }*/ + public static JSONObject buildInputStr(String serviceCode, String serviceName, String eventCode, String eventName, String value){ + JSONObject requestBody = new JSONObject(); + JSONObject service = new JSONObject(); + service.put("serviceCode", serviceCode); + service.put("serviceName", serviceName); + requestBody.put("service", service); + + JSONObject event = new JSONObject(); + event.put("eventCode", eventCode); + event.put("eventName", eventName); + requestBody.put("event", event); + + requestBody.put("id", UUID.randomUUID().toString()); + requestBody.put("creationTime", DateTools.formatTime(Calendar.getInstance(), "yyyyMMdd'T'HHmmss")); + + JSONObject sender = new JSONObject(); + sender.put("id", "6000"); + JSONObject softwareNameS = new JSONObject(); + softwareNameS.put("code", "CSSD"); + softwareNameS.put("name", "消毒供应质量追溯系统"); + sender.put("softwareName", softwareNameS); + JSONObject softwareProviderS = new JSONObject(); + softwareProviderS.put("code", "DXsoft"); + softwareProviderS.put("name", "广州丁香软件有限公司"); + sender.put("softwareProvider", softwareProviderS); + JSONObject organizationS = new JSONObject(); + organizationS.put("code", "20"); + organizationS.put("name", "深圳市龙华区中心医院"); + sender.put("organization", organizationS); + requestBody.put("sender", sender); + + JSONObject receiver = new JSONObject(); + receiver.put("id", "1200"); + JSONObject softwareNameR = new JSONObject(); + softwareNameR.put("code", "ESB"); + softwareNameR.put("name", "区域集成平台"); + receiver.put("softwareName", softwareNameR); + JSONObject softwareProviderR = new JSONObject(); + softwareProviderR.put("code", "Caradigm"); + softwareProviderR.put("name", "恺恩泰(北京)科技有限公司"); + receiver.put("softwareProvider", softwareProviderR); + JSONObject organizationR = new JSONObject(); + organizationR.put("code", "20"); + organizationR.put("name", "深圳市龙华区中心医院"); + receiver.put("organization", organizationR); + requestBody.put("receiver", receiver); + + JSONObject query = new JSONObject(); + JSONObject ENCOUNTER = new JSONObject(); + JSONArray ENCOUNTER_INPATIENT = new JSONArray(); + JSONObject queryMessage = new JSONObject(); + queryMessage.put("DATA_ELEMENT_ID", "LHDE0020001"); + queryMessage.put("DATA_ELEMENT_NAME", "患者主索引号码"); + queryMessage.put("DATA_ELEMENT_EN_NAME", "EMPI_ID"); + queryMessage.put("DATA_ELEMENT_VALUE", value); + ENCOUNTER_INPATIENT.add(queryMessage); + ENCOUNTER.put("ENCOUNTER_INPATIENT", ENCOUNTER_INPATIENT); + query.put("ENCOUNTER", ENCOUNTER); + requestBody.put("query", query); + + return requestBody; + } + + /** + * 患者年龄处理: + * 根据患者出生日期(YYYYMMDD)计算年龄 + * @param birthday(YYYY-MM-DD hh:mm:ss ) + * @return age + */ + public static String birthdayToAge(String birthday) { + if(StringUtils.isNotBlank(birthday)) { + Integer year = Integer.parseInt(birthday.substring(0, 4)); + Integer month = Integer.parseInt(birthday.substring(4, 6)); + Integer day = Integer.parseInt(birthday.substring(6, 8)); + Calendar now = Calendar.getInstance(); + Integer currentYear = now.get(Calendar.YEAR); + Integer currentMonth = now.get(Calendar.MONTH) + 1; + Integer currentDay = now.get(Calendar.DAY_OF_MONTH); + Integer age = currentYear - year; + if(currentMonth == month) { + if(currentDay < day) { + age -= 1; + } + } else if(currentMonth < month) { + age -= 1; + } + return age.toString(); + } + return null; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByHospitalNumDaoImpl.java (revision 31346) @@ -0,0 +1,141 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslhqzxyy; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +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 com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据住院号查询病人信息(深圳市龙华区中心医院) + * @author ZhouPeiMian + * @since 2021-05-18 + * + */ +public class FindPatientInfoByHospitalNumDaoImpl implements + FindPatientInfoByHospitalNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByHospitalNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNum(String hospitalNum) { + try { + JSONObject json = HTTPClientHelper.buildInputStr(DatasyncConstant.ServiceCode_ZY, DatasyncConstant.ServiceName_ZY, + DatasyncConstant.EventCode_ZY, DatasyncConstant.EventName_ZY, hospitalNum); + logger.info("住院病人信息同步接口请求信息:" + json); + JSONObject result = CssdUtils.sendJSONRequestByHttpPost(DatasyncConstant.URL, json); + //String resultStr = "{'service':{'serviceCode':'S0028','serviceName':'住院就诊信息查询服务'},'event':{'eventCode':'E002803','eventName':'查询患者最近一次住院信息'},'id':'1d1d8b06-8e21-403d-85c2-1378f0b1b5e5','creationTime':'20210421T052630','sender':{'id':'1200','softwareName':{'code':'ESB','name':'区域集成平台'},'softwareProvider':{'code':'Caradigm','name':'恺恩泰(北京)科技有限公司'},'organization':{'code':'20','name':'深圳市龙华区中心医院'}},'receiver':{'id':'2000','softwareName':{'code':'HIS','name':'医院信息管理系统'},'softwareProvider':{'code':'Neusoft','name':'东软集团股份有限公司'},'organization':{'code':'20','name':'深圳市龙华区中心医院'}},'queryAck':{'ackCode':'AA','targetMessageId':'22a0f9e0-4454-11dc-a6be-3603d6504810','ackDetail':'消息处理成功','ENCOUNTERS':[{'ENCOUNTER_INPATIENT':[{'DATA_ELEMENT_ID':'LHDE0020001','DATA_ELEMENT_NAME':'患者主索引号码','DATA_ELEMENT_EN_NAME':'EMPI_ID','DATA_ELEMENT_VALUE':'10889150'},{'DATA_ELEMENT_ID':'LHDE0020002','DATA_ELEMENT_NAME':'患者主键','DATA_ELEMENT_EN_NAME':'PK_PATIENT','DATA_ELEMENT_VALUE':'20_2000_0101996716'},{'DATA_ELEMENT_ID':'LHDE0020003','DATA_ELEMENT_NAME':'就诊ID','DATA_ELEMENT_EN_NAME':'ENCOUNTER_ID','DATA_ELEMENT_VALUE':'20_3_2000_580852'},{'DATA_ELEMENT_ID':'LHDE0020004','DATA_ELEMENT_NAME':'机构/院部代码','DATA_ELEMENT_EN_NAME':'ORG_CODE','DATA_ELEMENT_VALUE':'20'},{'DATA_ELEMENT_ID':'LHDE0020005','DATA_ELEMENT_NAME':'机构/院部名称','DATA_ELEMENT_EN_NAME':'ORG_NAME','DATA_ELEMENT_VALUE':'深圳市龙华区中心医院'},{'DATA_ELEMENT_ID':'LHDE0020006','DATA_ELEMENT_NAME':'就诊类别代码','DATA_ELEMENT_EN_NAME':'ENCOUNTER_TYPE_CODE','DATA_ELEMENT_VALUE':'3'},{'DATA_ELEMENT_ID':'LHDE0020007','DATA_ELEMENT_NAME':'就诊类别名称','DATA_ELEMENT_EN_NAME':'ENCOUNTER_TYPE_NAME','DATA_ELEMENT_VALUE':'住院'},{'DATA_ELEMENT_ID':'LHDE0020008','DATA_ELEMENT_NAME':'就诊流水号','DATA_ELEMENT_EN_NAME':'VISIT_ID','DATA_ELEMENT_VALUE':'580852'},{'DATA_ELEMENT_ID':'LHDE0020009','DATA_ELEMENT_NAME':'就诊次数','DATA_ELEMENT_EN_NAME':'VISIT_NO','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020010','DATA_ELEMENT_NAME':'病人姓名','DATA_ELEMENT_EN_NAME':'PATIENT_NAME','DATA_ELEMENT_VALUE':'陈富长'},{'DATA_ELEMENT_ID':'LHDE0020011','DATA_ELEMENT_NAME':'性别代码','DATA_ELEMENT_EN_NAME':'GENDER_CODE','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020012','DATA_ELEMENT_NAME':'性别名称','DATA_ELEMENT_EN_NAME':'GENDER_NAME','DATA_ELEMENT_VALUE':'男性'},{'DATA_ELEMENT_ID':'LHDE0020013','DATA_ELEMENT_NAME':'出生日期','DATA_ELEMENT_EN_NAME':'DATE_OF_BIRTH','DATA_ELEMENT_VALUE':'19590716'},{'DATA_ELEMENT_ID':'LHDE0020014','DATA_ELEMENT_NAME':'年龄-年','DATA_ELEMENT_EN_NAME':'AGE_YEAR','DATA_ELEMENT_VALUE':'61'},{'DATA_ELEMENT_ID':'LHDE0020015','DATA_ELEMENT_NAME':'年龄-月','DATA_ELEMENT_EN_NAME':'AGE_MONTH','DATA_ELEMENT_VALUE':'0'},{'DATA_ELEMENT_ID':'LHDE0020016','DATA_ELEMENT_NAME':'年龄-天','DATA_ELEMENT_EN_NAME':'AGE_DAY','DATA_ELEMENT_VALUE':'0'},{'DATA_ELEMENT_ID':'LHDE0020017','DATA_ELEMENT_NAME':'年龄-时','DATA_ELEMENT_EN_NAME':'AGE_HOUR','DATA_ELEMENT_VALUE':'0'},{'DATA_ELEMENT_ID':'LHDE0020018','DATA_ELEMENT_NAME':'婚姻状况代码','DATA_ELEMENT_EN_NAME':'MARITAL_STATUS_CODE','DATA_ELEMENT_VALUE':'90'},{'DATA_ELEMENT_ID':'LHDE0020019','DATA_ELEMENT_NAME':'婚姻状况名称','DATA_ELEMENT_EN_NAME':'MARITAL_STATUS_NAME','DATA_ELEMENT_VALUE':'未说明的婚姻状况'},{'DATA_ELEMENT_ID':'LHDE0020020','DATA_ELEMENT_NAME':'病人来源代码','DATA_ELEMENT_EN_NAME':'PATIENT_RESOURCE_CODE','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020021','DATA_ELEMENT_NAME':'病人来源名称','DATA_ELEMENT_EN_NAME':'PATIENT_RESOURCE_NAME','DATA_ELEMENT_VALUE':'本市'},{'DATA_ELEMENT_ID':'LHDE0020022','DATA_ELEMENT_NAME':'病人类别代码','DATA_ELEMENT_EN_NAME':'PATIENT_TYPE_CODE','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020023','DATA_ELEMENT_NAME':'病人类别名称','DATA_ELEMENT_EN_NAME':'PATIENT_TYPE_NAME','DATA_ELEMENT_VALUE':'自费'},{'DATA_ELEMENT_ID':'LHDE0020068','DATA_ELEMENT_NAME':'住院在院标志','DATA_ELEMENT_EN_NAME':'IN_HOSPITAL_FLAG','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020069','DATA_ELEMENT_NAME':'入院方式','DATA_ELEMENT_EN_NAME':'ADMISSION_MODE','DATA_ELEMENT_VALUE':'2'},{'DATA_ELEMENT_ID':'LHDE0020070','DATA_ELEMENT_NAME':'入院途径代码','DATA_ELEMENT_EN_NAME':'ADMISSION_WAY_CODE','DATA_ELEMENT_VALUE':'2'},{'DATA_ELEMENT_ID':'LHDE0020071','DATA_ELEMENT_NAME':'入院途径名称','DATA_ELEMENT_EN_NAME':'ADMISSION_WAY_NAME','DATA_ELEMENT_VALUE':'门诊'},{'DATA_ELEMENT_ID':'LHDE0020072','DATA_ELEMENT_NAME':'入院状态代码','DATA_ELEMENT_EN_NAME':'ADMISSION_STATUS_CODE','DATA_ELEMENT_VALUE':'2'},{'DATA_ELEMENT_ID':'LHDE0020073','DATA_ELEMENT_NAME':'入院状态名称','DATA_ELEMENT_EN_NAME':'ADMISSION_STATUS_NAME','DATA_ELEMENT_VALUE':'急'},{'DATA_ELEMENT_ID':'LHDE0020074','DATA_ELEMENT_NAME':'入院时间','DATA_ELEMENT_EN_NAME':'ADMISSION_DATE_TIME','DATA_ELEMENT_VALUE':'20210421T123030'},{'DATA_ELEMENT_ID':'LHDE0020075','DATA_ELEMENT_NAME':'入院科室代码','DATA_ELEMENT_EN_NAME':'ADMISSION_DEPT_ID','DATA_ELEMENT_VALUE':'342'},{'DATA_ELEMENT_ID':'LHDE0020076','DATA_ELEMENT_NAME':'入院科室名称','DATA_ELEMENT_EN_NAME':'ADMISSION_DEPT_NAME','DATA_ELEMENT_VALUE':'脊柱关节外科住院'},{'DATA_ELEMENT_ID':'LHDE0020077','DATA_ELEMENT_NAME':'入院病区代码','DATA_ELEMENT_EN_NAME':'ADMISSION_WARD_ID','DATA_ELEMENT_VALUE':'200342'},{'DATA_ELEMENT_ID':'LHDE0020078','DATA_ELEMENT_NAME':'入院病区名称','DATA_ELEMENT_EN_NAME':'ADMISSION_WARD_NAME','DATA_ELEMENT_VALUE':'脊柱关节外科'},{'DATA_ELEMENT_ID':'LHDE0020079','DATA_ELEMENT_NAME':'当前病区代码','DATA_ELEMENT_EN_NAME':'VISIT_WARD_ID','DATA_ELEMENT_VALUE':'200342'},{'DATA_ELEMENT_ID':'LHDE0020080','DATA_ELEMENT_NAME':'当前病区名称','DATA_ELEMENT_EN_NAME':'VISIT_WARD_NAME','DATA_ELEMENT_VALUE':'脊柱关节外科'},{'DATA_ELEMENT_ID':'LHDE0020081','DATA_ELEMENT_NAME':'床号','DATA_ELEMENT_EN_NAME':'BED_NO','DATA_ELEMENT_VALUE':'28'},{'DATA_ELEMENT_ID':'LHDE0020082','DATA_ELEMENT_NAME':'科主任医师ID','DATA_ELEMENT_EN_NAME':'DIVISION_DIRECTOR_ID','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020083','DATA_ELEMENT_NAME':'科主任医师名称','DATA_ELEMENT_EN_NAME':'DIVISION_DIRECTOR_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020084','DATA_ELEMENT_NAME':'主任医师ID','DATA_ELEMENT_EN_NAME':'CHIEF_DOCTOR_ID','DATA_ELEMENT_VALUE':'10001991'},{'DATA_ELEMENT_ID':'LHDE0020085','DATA_ELEMENT_NAME':'主任医师名称','DATA_ELEMENT_EN_NAME':'CHIEF_DOCTOR_NAME','DATA_ELEMENT_VALUE':'周炳华'},{'DATA_ELEMENT_ID':'LHDE0020086','DATA_ELEMENT_NAME':'主治医师ID','DATA_ELEMENT_EN_NAME':'ATTEND_DOCTOR_ID','DATA_ELEMENT_VALUE':'10001890'},{'DATA_ELEMENT_ID':'LHDE0020087','DATA_ELEMENT_NAME':'主治医师姓名','DATA_ELEMENT_EN_NAME':'ATTEND_DOCTOR_NAME','DATA_ELEMENT_VALUE':'杨寿志'},{'DATA_ELEMENT_ID':'LHDE0020088','DATA_ELEMENT_NAME':'住院医师ID','DATA_ELEMENT_EN_NAME':'RESIDENT_DOCTOR_ID','DATA_ELEMENT_VALUE':'10001890'},{'DATA_ELEMENT_ID':'LHDE0020089','DATA_ELEMENT_NAME':'住院医师姓名','DATA_ELEMENT_EN_NAME':'RESIDENT_DOCTOR_NAME','DATA_ELEMENT_VALUE':'杨寿志'},{'DATA_ELEMENT_ID':'LHDE0020090','DATA_ELEMENT_NAME':'责任医师ID','DATA_ELEMENT_EN_NAME':'RESPONSIBLE_DOCTOR_ID','DATA_ELEMENT_VALUE':'10001890'},{'DATA_ELEMENT_ID':'LHDE0020091','DATA_ELEMENT_NAME':'责任医师姓名','DATA_ELEMENT_EN_NAME':'RESPONSIBLE_DOCTOR_NAME','DATA_ELEMENT_VALUE':'杨寿志'},{'DATA_ELEMENT_ID':'LHDE0020092','DATA_ELEMENT_NAME':'责任护士ID','DATA_ELEMENT_EN_NAME':'RESPONSIBLE_NURSE_ID','DATA_ELEMENT_VALUE':'10001190'},{'DATA_ELEMENT_ID':'LHDE0020093','DATA_ELEMENT_NAME':'责任护士姓名','DATA_ELEMENT_EN_NAME':'RESPONSIBLE_NURSE_NAME','DATA_ELEMENT_VALUE':'丛云萍'},{'DATA_ELEMENT_ID':'LHDE0020094','DATA_ELEMENT_NAME':'入院诊断代码','DATA_ELEMENT_EN_NAME':'ADMISSION_DIAG_CODE','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020095','DATA_ELEMENT_NAME':'入院诊断名称','DATA_ELEMENT_EN_NAME':'ADMISSION_DIAG_NAME','DATA_ELEMENT_VALUE':'腰椎骨折'},{'DATA_ELEMENT_ID':'LHDE0020096','DATA_ELEMENT_NAME':'入院诊断描述','DATA_ELEMENT_EN_NAME':'ADMISSION_DIAG_DESC','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020097','DATA_ELEMENT_NAME':'出院诊断时间','DATA_ELEMENT_EN_NAME':'DISCHARGE_DIAG_DATE_TIME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020098','DATA_ELEMENT_NAME':'出院诊断代码','DATA_ELEMENT_EN_NAME':'DISCHARGE_DIAG_CODE','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020099','DATA_ELEMENT_NAME':'出院诊断名称','DATA_ELEMENT_EN_NAME':'DISCHARGE_DIAG_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020100','DATA_ELEMENT_NAME':'出院诊断描述','DATA_ELEMENT_EN_NAME':'DISCHARGE_DIAG_DESC','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020101','DATA_ELEMENT_NAME':'出院时间','DATA_ELEMENT_EN_NAME':'DISCHARGE_DATE_TIME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020102','DATA_ELEMENT_NAME':'出院科室代码','DATA_ELEMENT_EN_NAME':'DISCHARGE_DEPT_ID','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020103','DATA_ELEMENT_NAME':'出院科室名称','DATA_ELEMENT_EN_NAME':'DISCHARGE_DEPT_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020104','DATA_ELEMENT_NAME':'出院病区代码','DATA_ELEMENT_EN_NAME':'DISCHARGE_WARD_ID','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020105','DATA_ELEMENT_NAME':'出院病区名称','DATA_ELEMENT_EN_NAME':'DISCHARGE_WARD_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020106','DATA_ELEMENT_NAME':'离院方式代码','DATA_ELEMENT_EN_NAME':'DISCHARGE_METHOD_CODE','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020107','DATA_ELEMENT_NAME':'离院方式名称','DATA_ELEMENT_EN_NAME':'DISCHARGE_METHOD_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020108','DATA_ELEMENT_NAME':'出院方式','DATA_ELEMENT_EN_NAME':'DISCHARGE_MODE','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020109','DATA_ELEMENT_NAME':'出院31天内再住院标志','DATA_ELEMENT_EN_NAME':'REINPAT_31D_FLAG','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020110','DATA_ELEMENT_NAME':'实施临床路径标志代码','DATA_ELEMENT_EN_NAME':'CP_TYPE_CODE','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020111','DATA_ELEMENT_NAME':'临床路径代码','DATA_ELEMENT_EN_NAME':'CP_CODE','DATA_ELEMENT_VALUE':''}]}]}}"; + //JSONObject result = JSONObject.fromObject(resultStr); + logger.info("住院病人信息同步接口返回信息:" + result); + if(result == null){ + return null; + } + JSONObject queryAck = result.optJSONObject("queryAck"); + if(queryAck == null){ + logger.info("住院病人信息同步接口返回信息没有queryAck节点"); + return null; + } + if(!StringUtils.equals(queryAck.optString("ackCode"), "AA")){ + logger.info("住院病人信息同步接口返回信息: ackCode = " + queryAck.optString("ackCode") + "; ackDetail = " + queryAck.optString("ackDetail")); + return null; + } + JSONArray ENCOUNTERS = queryAck.optJSONArray("ENCOUNTERS"); + if(ENCOUNTERS == null){ + logger.info("住院病人信息同步接口返回信息没有ENCOUNTERS节点"); + return null; + } + + List patientInfoVOList = new ArrayList(); + for (Object object : ENCOUNTERS) { + JSONObject jsonObj = (JSONObject) object; + JSONArray ENCOUNTER_INPATIENT = jsonObj.optJSONArray("ENCOUNTER_INPATIENT"); + if(ENCOUNTER_INPATIENT == null){ + logger.info("住院病人信息同步接口返回信息没有ENCOUNTER_INPATIENT节点"); + continue; + } + PatientInfoVO vo = new PatientInfoVO(); + String PATIENT_NAME = ""; + String DATE_OF_BIRTH = ""; + String GENDER_CODE = ""; + String GENDER_NAME = "男"; + String AGE_MONTH = ""; + String AGE_DAY = ""; + String AGE_HOUR = ""; + String VISIT_WARD_NAME = ""; + String BED_NO = ""; + String VISIT_NO = ""; + for (Object object2 : ENCOUNTER_INPATIENT) { + JSONObject jsonObj2 = (JSONObject) object2; + String DATA_ELEMENT_EN_NAME = jsonObj2.optString("DATA_ELEMENT_EN_NAME"); + String DATA_ELEMENT_VALUE = jsonObj2.optString("DATA_ELEMENT_VALUE"); + if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "PATIENT_NAME")){ + PATIENT_NAME = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "DATE_OF_BIRTH")){ + DATE_OF_BIRTH = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "AGE_MONTH")){ + AGE_MONTH = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "AGE_DAY")){ + AGE_DAY = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "AGE_HOUR")){ + AGE_HOUR = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "GENDER_CODE")){ + GENDER_CODE = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "VISIT_WARD_NAME")){ + VISIT_WARD_NAME = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "BED_NO")){ + BED_NO = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "VISIT_NO")){ + VISIT_NO = DATA_ELEMENT_VALUE; + } + } + String patientAge = HTTPClientHelper.birthdayToAge(DATE_OF_BIRTH); + if(StringUtils.equals(patientAge, "0")){ + if(!StringUtils.equals(AGE_MONTH, "0")){ + patientAge = AGE_MONTH + "月"; + }else if(!StringUtils.equals(AGE_DAY, "0")){ + patientAge = AGE_MONTH + "天"; + }else if(!StringUtils.equals(AGE_HOUR, "0")){ + patientAge = AGE_MONTH + "时"; + } + } + if(StringUtils.equals(GENDER_CODE, "2")){ + GENDER_NAME = "女"; + } + vo.setHospitalNumber(hospitalNum); + vo.setPatientName(PATIENT_NAME); + vo.setPatientAge(patientAge); + vo.setPatientSex(GENDER_NAME); + vo.setAscriptionDepartment(VISIT_WARD_NAME); + vo.setBedNumber(BED_NO); + vo.setVisitAmount(VISIT_NO); + patientInfoVOList.add(vo); + } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + PatientInfoVO[] patientInfoArray = {patientInfoVOList.get(0)}; + logger.info("完成解析住院病人信息,姓名为:" + patientInfoVOList.get(0).getPatientName()); + return patientInfoArray; + } + } catch (Exception e) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("根据病人住院号查询病人信息失败" + exception); + e.printStackTrace(); + } + return null; + } + + @Override + public PatientInfoVO[] findPatientInfoByHospitalNumBeforeOperation( + String hospitalNum) { + return findPatientInfoByHospitalNum(hospitalNum); + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByTreatmentNumDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/FindPatientInfoByTreatmentNumDaoImpl.java (revision 31346) @@ -0,0 +1,104 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslhqzxyy; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +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 com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 根据诊疗号查询病人信息(深圳市龙华区中心医院) + * @author ZhouPeiMian + * @since 2021-05-19 + * + */ +public class FindPatientInfoByTreatmentNumDaoImpl implements + FindPatientInfoByTreatmentNumDao { + + Logger logger = Logger.getLogger(FindPatientInfoByTreatmentNumDaoImpl.class); + + @Override + public PatientInfoVO[] findPatientInfoByTreatmentNum(String clinicNumber) { + try { + JSONObject json = HTTPClientHelper.buildInputStr(DatasyncConstant.ServiceCode_MZ, DatasyncConstant.ServiceName_MZ, + DatasyncConstant.EventCode_MZ, DatasyncConstant.EventName_MZ, clinicNumber); + logger.info("门诊病人信息同步接口请求信息:" + json); + JSONObject result = CssdUtils.sendJSONRequestByHttpPost(DatasyncConstant.URL, json); + //String resultStr = "{'service':{'serviceCode':'S0025','serviceName':'门诊就诊信息查询服务'},'event':{'eventCode':'E002501','eventName':'查询门诊就诊信息'},'id':'ae9576d3-a7bd-46d0-ac4d-abfffde9e4dd','creationTime':'20210506T1114385','sender':{'id':'1200','softwareName':{'code':'ESB','name':'区域集成平台'},'softwareProvider':{'code':'Caradigm','name':'恺恩泰(北京)科技有限公司'},'organization':{'code':'20','name':'深圳市龙华区中心医院'}},'receiver':{'id':'3100','softwareName':{'code':'LIS','name':'区域临床检验信息系统'},'softwareProvider':{'code':'Xhlis','name':'上海杏和软件有限公司'},'organization':{'code':'20','name':'深圳市龙华区中心医院'}},'queryAck':{'ackCode':'AA','targetMessageId':'22a0f9e0-4454-12dc-a6be-1235','ackDetail':'消息处理成功','ENCOUNTERS':[{'ENCOUNTER_OUTPATIENT':[{'DATA_ELEMENT_ID':'LHDE0020001','DATA_ELEMENT_NAME':'患者主索引号码','DATA_ELEMENT_EN_NAME':'EMPI_ID','DATA_ELEMENT_VALUE':'10001294'},{'DATA_ELEMENT_ID':'LHDE0020006','DATA_ELEMENT_NAME':'就诊类别代码','DATA_ELEMENT_EN_NAME':'ENCOUNTER_TYPE_CODE','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020007','DATA_ELEMENT_NAME':'就诊类别名称','DATA_ELEMENT_EN_NAME':'ENCOUNTER_TYPE_NAME','DATA_ELEMENT_VALUE':'门诊'},{'DATA_ELEMENT_ID':'LHDE0020008','DATA_ELEMENT_NAME':'就诊流水号','DATA_ELEMENT_EN_NAME':'VISIT_ID','DATA_ELEMENT_VALUE':'191425'},{'DATA_ELEMENT_ID':'LHDE0020009','DATA_ELEMENT_NAME':'就诊次数','DATA_ELEMENT_EN_NAME':'VISIT_NO','DATA_ELEMENT_VALUE':'1'},{'DATA_ELEMENT_ID':'LHDE0020010','DATA_ELEMENT_NAME':'病人姓名','DATA_ELEMENT_EN_NAME':'PATIENT_NAME','DATA_ELEMENT_VALUE':'罗会琴'},{'DATA_ELEMENT_ID':'LHDE0020011','DATA_ELEMENT_NAME':'性别代码','DATA_ELEMENT_EN_NAME':'GENDER_CODE','DATA_ELEMENT_VALUE':'2'},{'DATA_ELEMENT_ID':'LHDE0020029','DATA_ELEMENT_NAME':'挂号科室代码','DATA_ELEMENT_EN_NAME':'REGISTER_DEPT_ID','DATA_ELEMENT_VALUE':'393'},{'DATA_ELEMENT_ID':'LHDE0020030','DATA_ELEMENT_NAME':'挂号科室名称','DATA_ELEMENT_EN_NAME':'REGISTER_DEPT_NAME','DATA_ELEMENT_VALUE':'妇科门诊'},{'DATA_ELEMENT_ID':'LHDE0020050','DATA_ELEMENT_NAME':'就诊科室代码','DATA_ELEMENT_EN_NAME':'VISIT_DEPT_ID','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020051','DATA_ELEMENT_NAME':'就诊科室名称','DATA_ELEMENT_EN_NAME':'VISIT_DEPT_NAME','DATA_ELEMENT_VALUE':''},{'DATA_ELEMENT_ID':'LHDE0020052','DATA_ELEMENT_NAME':'就诊开始时间','DATA_ELEMENT_EN_NAME':'VISIT_START_DATE_TIME','DATA_ELEMENT_VALUE':'20201217T000000'},{'DATA_ELEMENT_ID':'LHDE0020053','DATA_ELEMENT_NAME':'就诊结束时间','DATA_ELEMENT_EN_NAME':'VISIT_END_DATE_TIME','DATA_ELEMENT_VALUE':'20201217T000000'}]}]}}"; + //JSONObject result = JSONObject.fromObject(resultStr); + logger.info("门诊病人信息同步接口返回信息:" + result); + if(result == null){ + return null; + } + JSONObject queryAck = result.optJSONObject("queryAck"); + if(queryAck == null){ + logger.info("门诊病人信息同步接口返回信息没有queryAck节点"); + return null; + } + if(!StringUtils.equals(queryAck.optString("ackCode"), "AA")){ + logger.info("门诊病人信息同步接口返回信息: ackCode = " + queryAck.optString("ackCode") + "; ackDetail = " + queryAck.optString("ackDetail")); + return null; + } + JSONArray ENCOUNTERS = queryAck.optJSONArray("ENCOUNTERS"); + if(ENCOUNTERS == null){ + logger.info("门诊病人信息同步接口返回信息没有ENCOUNTERS节点"); + return null; + } + + List patientInfoVOList = new ArrayList(); + for (Object object : ENCOUNTERS) { + JSONObject jsonObj = (JSONObject) object; + JSONArray ENCOUNTER_INPATIENT = jsonObj.optJSONArray("ENCOUNTER_OUTPATIENT"); + if(ENCOUNTER_INPATIENT == null){ + logger.info("门诊病人信息同步接口返回信息没有ENCOUNTER_OUTPATIENT节点"); + continue; + } + PatientInfoVO vo = new PatientInfoVO(); + String PATIENT_NAME = ""; + String GENDER_CODE = ""; + String VISIT_DEPT_NAME = ""; + for (Object object2 : ENCOUNTER_INPATIENT) { + JSONObject jsonObj2 = (JSONObject) object2; + String DATA_ELEMENT_EN_NAME = jsonObj2.optString("DATA_ELEMENT_EN_NAME"); + String DATA_ELEMENT_VALUE = jsonObj2.optString("DATA_ELEMENT_VALUE"); + if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "PATIENT_NAME")){ + PATIENT_NAME = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "GENDER_CODE")){ + GENDER_CODE = DATA_ELEMENT_VALUE; + }else if(StringUtils.equals(DATA_ELEMENT_EN_NAME, "VISIT_DEPT_NAME")){ + VISIT_DEPT_NAME = DATA_ELEMENT_VALUE; + } + } + String GENDER_NAME = "男"; + if(StringUtils.equals(GENDER_CODE, "2")){ + GENDER_NAME = "女"; + } + vo.setClinicNumber(clinicNumber); + vo.setPatientName(PATIENT_NAME); + vo.setPatientSex(GENDER_NAME); + vo.setAscriptionDepartment(VISIT_DEPT_NAME); + patientInfoVOList.add(vo); + } + if (CollectionUtils.isNotEmpty(patientInfoVOList)) { + PatientInfoVO[] patientInfoArray = {patientInfoVOList.get(0)}; + logger.info("完成解析门诊病人信息,姓名为:" + patientInfoVOList.get(0).getPatientName()); + return patientInfoArray; + } + } catch (Exception e) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("根据病人诊疗号查询病人信息失败" + exception); + e.printStackTrace(); + } + return null; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslhqzxyy/DatasyncConstant.java (revision 31346) @@ -0,0 +1,44 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szslhqzxyy; + +/** + * 深圳市龙华区中心医院接口相关常量 + * @author ZhouPeiMian + * @since 2021-05-18 + * + */ +public class DatasyncConstant { + + /** + * HTTP接口地址http://10.254.147.41/hipmessage/CSSD + */ + public final static String URL = "http://10.254.147.41/hipmessage/CSSD"; + + /** + * 获取门诊病人信息的serviceCode(入参) + */ + public final static String ServiceCode_MZ = "S0025"; + + public final static String ServiceName_MZ = "门诊就诊信息查询服务"; + + /** + * 获取门诊病人信息的eventCode(入参) + */ + public final static String EventCode_MZ = "E002501"; + + public final static String EventName_MZ = "查询门诊就诊信息"; + + + /** + * 获取住院病人信息的serviceCode(入参) + */ + public final static String ServiceCode_ZY = "S0028"; + + public final static String ServiceName_ZY = "住院就诊信息查询服务"; + + /** + * 获取住院病人信息的eventCode(入参) + */ + public final static String EventCode_ZY = "E002803"; + + public final static String EventName_ZY = "查询患者最近一次住院信息"; +}