Index: ssts-webservice/src/main/java/com/goodwillcis/HL7V2ServiceImpl.java =================================================================== diff -u -r21740 -r22521 --- ssts-webservice/src/main/java/com/goodwillcis/HL7V2ServiceImpl.java (.../HL7V2ServiceImpl.java) (revision 21740) +++ ssts-webservice/src/main/java/com/goodwillcis/HL7V2ServiceImpl.java (.../HL7V2ServiceImpl.java) (revision 22521) @@ -1,19 +1,11 @@ package com.goodwillcis; - -import java.util.Calendar; -import java.util.Date; - import javax.jws.WebParam; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dom4j.Document; import org.springframework.beans.factory.annotation.Autowired; - -import com.forgon.disinfectsystem.entity.useRecord.gyey.PatientAdmissionInfo; import com.forgon.disinfectsystem.useRecord.service.gyey.PatientAdmissionInfoManager; import com.forgon.tools.HL7ToXmlConverter; -import com.forgon.tools.MathTools; /** * 病人数据webservice接口服务实现类(广医二院) @@ -26,109 +18,45 @@ private PatientAdmissionInfoManager patientAdmissionInfoManager; @Override public String send(@WebParam(name = "hl7v2") String hl7v2) { + String returnhl7 =""; logger.warn("Hl7v2=" + hl7v2); - // 针对gyey解析hl7v2成xmL + // 1. 针对gyey解析hl7v2成xmL Document document = HL7ToXmlConverter.convertToXmlObject(hl7v2); - // 保存患者入院信息 - String returnhl7=savepatientAdmissionInfo(document); - //返回 hl7回复信息 - return returnhl7; - } - - /* - * 保存患者入院信息 - */ - private String savepatientAdmissionInfo(Document document) { - String returnhl7=null; - // 获得住院流水号 - String hospitalSerialNumber = HL7ToXmlConverter.getText(document,"PID/PID.2"); - // 获得住院号 - String hospitalNumber = HL7ToXmlConverter.getText(document,"PID/PID.3/PID.3.1"); - if (StringUtils.isNotBlank(hospitalSerialNumber)) { - // 获得出身日期 - String birthdayyear = HL7ToXmlConverter.getText(document,"PID/PID.7"); - String patientAge = null; - if (StringUtils.isNotBlank(birthdayyear)) { + // 2. 获得消息头事件类型:手术申请:SRM_S01 ,患者入科:A01 + String eventType = HL7ToXmlConverter.getText(document,"MSH/MSH.9/MSH.9.2"); + if(StringUtils.isNotEmpty(eventType)){ + // 3 . 根据事件类型保存、更新入院信息 + switch (eventType) { + //手术申请:SRM_S01 + case "SRM_S01": try { - Long patientbirthday = Long.parseLong(birthdayyear.substring(0, 4)); - Calendar cal = Calendar.getInstance(); - long year = (cal.get(Calendar.YEAR)); - // 计算年龄 - Long Age = MathTools.sub(year, patientbirthday).longValue(); - patientAge = Age.toString(); + // 更新手术申请信息 + returnhl7 = patientAdmissionInfoManager.updatePatientAdmissionInfo(document); } catch (Exception e) { e.printStackTrace(); - return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:"+e.getMessage()); + return HL7ToXmlConverter.returnHl7(document,"AE","执行手术申请失败:"+e.getMessage()); } - } - // 获得性别 - String Sex = HL7ToXmlConverter.getText(document, "PID/PID.8"); - String patientSex = null; - if (StringUtils.isNotBlank(Sex)) { - switch (Sex) { - case "F": - patientSex = "女"; - break; - case "M": - patientSex = "男"; - break; - default: - patientSex = Sex; - break; - } - } - // 获得住院次数 - String Amount = HL7ToXmlConverter.getText(document, "PV1/PV1.1"); - Long visitAmount = null; - if (StringUtils.isNotBlank(Amount)) { + break; + //患者入科:A01 + case "A01": try { - visitAmount = Long.parseLong(Amount); + // 保存患者入院信息 + returnhl7 = patientAdmissionInfoManager.savePatientAdmissionInfo(document); } catch (Exception e) { e.printStackTrace(); return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:"+e.getMessage()); } + break; + default: + logger.error("xml:EVN/EVN.1 消息头事件类型不为:手术申请:SRM_S01/患者入科:A01"); + return HL7ToXmlConverter.returnHl7(document,"AE","xml:EVN/EVN.1 消息头事件类型不为:手术申请:SRM_S01/患者入科:A01"); } - String Name = HL7ToXmlConverter.getText(document,"PID/PID.5"); - String patientName=Name; - if(Name.contains("^")){ - patientName=Name.substring(Name.indexOf("^")+1); - } - String patientIDCard = HL7ToXmlConverter.getText(document,"PID/PID.19"); - String patientArea = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.1"); - String roomNumber = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.2"); - String bedNumber = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.3"); - String orgunitId = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.4.1"); - String orgunitName = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.4.2"); - String doctorName = HL7ToXmlConverter.getText(document,"PV1/PV1.7/PV1.7.3"); - // 设置患者入院信息 - PatientAdmissionInfo patientAdmissionInfo = new PatientAdmissionInfo(); - try { - patientAdmissionInfo.setPatientName(patientName); - patientAdmissionInfo.setPatientSex(patientSex); - patientAdmissionInfo.setPatientAge(patientAge); - patientAdmissionInfo.setPatientIDCard(patientIDCard); - patientAdmissionInfo.setVisitAmount(visitAmount); - patientAdmissionInfo.setPatientArea(patientArea); - patientAdmissionInfo.setRoomNumber(roomNumber); - patientAdmissionInfo.setBedNumber(bedNumber); - patientAdmissionInfo.setOrgunitId(orgunitId); - patientAdmissionInfo.setOrgunitName(orgunitName); - patientAdmissionInfo.setDoctorName(doctorName); - patientAdmissionInfo.setHospitalNumber(hospitalNumber); - patientAdmissionInfo.setHospitalSerialNumber(hospitalSerialNumber); - patientAdmissionInfo.setTime(new Date()); - } catch (Exception e) { - e.printStackTrace(); - return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:"+e.getMessage()); - } - patientAdmissionInfoManager.save(patientAdmissionInfo); - return HL7ToXmlConverter.returnHl7(document,"AA","执行患者入院成功"); - } else { - logger.error("xml:PID/PID.2 住院流水号不存在"); - return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:xml:PID/PID.2 住院流水号不存在"); + }else{ + logger.error("xml:EVN/EVN.1 消息头事件类型不存在"); + return HL7ToXmlConverter.returnHl7(document,"AE","xml:EVN/EVN.1 消息头事件类型不存在"); } - + // 4. 返回 hl7回复信息 + return returnhl7; } - } \ No newline at end of file Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManager.java =================================================================== diff -u -r21814 -r22521 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManager.java (.../PatientAdmissionInfoManager.java) (revision 21814) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManager.java (.../PatientAdmissionInfoManager.java) (revision 22521) @@ -1,9 +1,24 @@ package com.forgon.disinfectsystem.useRecord.service.gyey; +import org.dom4j.Document; + import com.forgon.disinfectsystem.entity.useRecord.gyey.PatientAdmissionInfo; import com.forgon.tools.hibernate.BasePoManager; public interface PatientAdmissionInfoManager extends BasePoManager { + /** + * 保存患者入院信息 + * @param document + * @return String 返回消息 + */ + public String savePatientAdmissionInfo(Document document); + + /** + * 根据手术申请更新患者入院信息 + * @param document + * @return String 返回消息 + */ + public String updatePatientAdmissionInfo(Document document); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/gyey/PatientAdmissionInfo.java =================================================================== diff -u -r21402 -r22521 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/gyey/PatientAdmissionInfo.java (.../PatientAdmissionInfo.java) (revision 21402) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/gyey/PatientAdmissionInfo.java (.../PatientAdmissionInfo.java) (revision 22521) @@ -74,6 +74,10 @@ * 数据存入日期 */ private Date time; + /** + *手术名称 + */ + private String surgeryName; @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -169,5 +173,10 @@ public void setTime(Date time) { this.time = time; } - + public String getSurgeryName() { + return surgeryName; + } + public void setSurgeryName(String surgeryName) { + this.surgeryName = surgeryName; + } } Index: forgon-tools/src/main/java/com/forgon/tools/HL7ToXmlConverter.java =================================================================== diff -u -r21493 -r22521 --- forgon-tools/src/main/java/com/forgon/tools/HL7ToXmlConverter.java (.../HL7ToXmlConverter.java) (revision 21493) +++ forgon-tools/src/main/java/com/forgon/tools/HL7ToXmlConverter.java (.../HL7ToXmlConverter.java) (revision 22521) @@ -3,6 +3,7 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; +import java.util.Arrays; import java.util.Calendar; import java.util.List; @@ -59,11 +60,20 @@ || sFields[a].indexOf('&') > 0) {// 0:如果这一行有任一分隔符 // 通过~分隔 String[] sComponents = getRepetitions(sFields[a]); - if (sComponents.length > 1) {// 1:如果可以分隔0001^郭靖^体检号^EQ^AND~0002^东一区^病区号^EQ^AND - for (int b = 0; b < sComponents.length; b++) { - // Element fieldEl1 = el.addElement(sFields[0] + "." + a); - createComponents(el, sComponents[b], - sFields[0], a, b); + if (sComponents.length > 1) { + if(!sFields[a].contains("^") && !sFields[a].contains("&")){//如果不包含^,&分割字符 如:1001001~张三 + Element componentEl = el.addElement(sFields[0] + "." + a); + Element repetitionEl = null; + for (int b = 0; b < sComponents.length; b++) { + repetitionEl = componentEl.addElement(sFields[0] + "." + a+ "." + (b+1)); + repetitionEl.setText(sComponents[b]); + } + }else{// 1:如果可以分隔0001^郭靖^体检号^EQ^AND~0002^东一区^病区号^EQ^AND + for (int b = 0; b < sComponents.length; b++) { + // Element fieldEl1 = el.addElement(sFields[0] + "." + a); + createComponents(el, sComponents[b],sFields[0], a, b); + } + } } else {// 1:如果真的只有一个值的 0001^郭靖^体检号^EQ^AND // 为字段创建第二级节点 Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManagerImpl.java =================================================================== diff -u -r21814 -r22521 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManagerImpl.java (.../PatientAdmissionInfoManagerImpl.java) (revision 21814) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/gyey/PatientAdmissionInfoManagerImpl.java (.../PatientAdmissionInfoManagerImpl.java) (revision 22521) @@ -1,11 +1,153 @@ package com.forgon.disinfectsystem.useRecord.service.gyey; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.dom4j.Document; +import org.dom4j.Element; + import com.forgon.disinfectsystem.entity.useRecord.gyey.PatientAdmissionInfo; +import com.forgon.tools.HL7ToXmlConverter; +import com.forgon.tools.MathTools; import com.forgon.tools.hibernate.BasePoManagerImpl; -public class PatientAdmissionInfoManagerImpl -extends BasePoManagerImpl -implements PatientAdmissionInfoManager { +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +public class PatientAdmissionInfoManagerImpl extends BasePoManagerImpl implements PatientAdmissionInfoManager { + private static Logger logger = Logger.getLogger(PatientAdmissionInfo.class); + /* + * 保存患者入院信息 + */ + @Override + public String savePatientAdmissionInfo(Document document) { + // 获得住院流水号 + String hospitalSerialNumber = HL7ToXmlConverter.getText(document,"PID/PID.2"); + // 获得住院号 + String hospitalNumber = HL7ToXmlConverter.getText(document,"PID/PID.3/PID.3.1"); + if (StringUtils.isNotBlank(hospitalSerialNumber)) { + // 获得出身日期 + String birthdayyear = HL7ToXmlConverter.getText(document,"PID/PID.7"); + String patientAge = null; + if (StringUtils.isNotBlank(birthdayyear)) { + try { + Long patientbirthday = Long.parseLong(birthdayyear.substring(0, 4)); + Calendar cal = Calendar.getInstance(); + long year = (cal.get(Calendar.YEAR)); + // 计算年龄 + Long Age = MathTools.sub(year, patientbirthday).longValue(); + patientAge = Age.toString(); + } catch (Exception e) { + e.printStackTrace(); + return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:"+e.getMessage()); + } + } + // 获得性别 + String Sex = HL7ToXmlConverter.getText(document, "PID/PID.8"); + String patientSex = null; + if (StringUtils.isNotBlank(Sex)) { + switch (Sex) { + case "F": + patientSex = "女"; + break; + case "M": + patientSex = "男"; + break; + default: + patientSex = Sex; + break; + } + } + // 获得住院次数 + String Amount = HL7ToXmlConverter.getText(document, "PV1/PV1.1"); + Long visitAmount = null; + if (StringUtils.isNotBlank(Amount)) { + try { + visitAmount = Long.parseLong(Amount); + } catch (Exception e) { + e.printStackTrace(); + return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:"+e.getMessage()); + } + } + // 获得病人姓名 + String Name = HL7ToXmlConverter.getText(document,"PID/PID.5"); + String patientName=Name; + if(Name.contains("^")){ + patientName=Name.substring(Name.indexOf("^")+1); + } + String patientIDCard = HL7ToXmlConverter.getText(document,"PID/PID.19"); + String patientArea = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.1"); + String roomNumber = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.2"); + String bedNumber = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.3"); + String orgunitId = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.4.1"); + String orgunitName = HL7ToXmlConverter.getText(document,"PV1/PV1.3/PV1.3.4.2"); + String doctorName = HL7ToXmlConverter.getText(document,"PV1/PV1.7/PV1.7.3"); + // 设置患者入院信息 + PatientAdmissionInfo patientAdmissionInfo = new PatientAdmissionInfo(); + patientAdmissionInfo.setPatientName(patientName); + patientAdmissionInfo.setPatientSex(patientSex); + patientAdmissionInfo.setPatientAge(patientAge); + patientAdmissionInfo.setPatientIDCard(patientIDCard); + patientAdmissionInfo.setVisitAmount(visitAmount); + patientAdmissionInfo.setPatientArea(patientArea); + patientAdmissionInfo.setRoomNumber(roomNumber); + patientAdmissionInfo.setBedNumber(bedNumber); + patientAdmissionInfo.setOrgunitId(orgunitId); + patientAdmissionInfo.setOrgunitName(orgunitName); + patientAdmissionInfo.setDoctorName(doctorName); + patientAdmissionInfo.setHospitalNumber(hospitalNumber); + patientAdmissionInfo.setHospitalSerialNumber(hospitalSerialNumber); + patientAdmissionInfo.setTime(new Date()); + objectDao.save(patientAdmissionInfo); + return HL7ToXmlConverter.returnHl7(document,"AA","执行患者入院成功"); + } else { + logger.error("xml:PID/PID.2 住院流水号不存在"); + return HL7ToXmlConverter.returnHl7(document,"AE","执行患者入院失败:xml:PID/PID.2 住院流水号不存在"); + } + + } + + /* + * 根据手术申请更新患者入院信息 + */ + @Override + public String updatePatientAdmissionInfo(Document document) { + // 1.获得住院流水号 + String hospitalSerialNumber = HL7ToXmlConverter.getText(document,"PID/PID.2"); + // 2.获得手术医生 + String doctorName = HL7ToXmlConverter.getText(document,"ARQ/ARQ.15/ARQ.15.2"); + // 3.获得手术名称 + String surgeryName = null; + @SuppressWarnings("unchecked") + List netList = HL7ToXmlConverter.getTexts(document,"NTE/NTE.3"); + if(netList.size() >= 2){ + Element e = (Element)netList.get(1); + surgeryName = e.getText();//获取第二个NTE.3为手术名称 + }else{ + logger.error("xml:NTE/NTE.3 获取不到第二个NTE.3为手术名称"); + return HL7ToXmlConverter.returnHl7(document,"AE","执行手术申请失败:xml:NTE/NTE.3 获取第二个NTE.3为手术名称"); + } + // 4.更新病人入院信息 + if(StringUtils.isNotBlank(hospitalSerialNumber)){ + //根据住院流水号获得gyey病人入院信息 + PatientAdmissionInfo patientAdmissionInfo = this.getForUpdate("hospitalSerialNumber", hospitalSerialNumber); + if(patientAdmissionInfo !=null){ + //更新医生,手术名称 + patientAdmissionInfo.setDoctorName(doctorName); + patientAdmissionInfo.setSurgeryName(surgeryName); + objectDao.update(patientAdmissionInfo); + return HL7ToXmlConverter.returnHl7(document,"AA","执行手术申请成功"); + }else{ + logger.error("执行手术申请失败:获取不到住院流水号为"+hospitalSerialNumber+"的病人信息"); + return HL7ToXmlConverter.returnHl7(document,"AE","执行手术申请失败:获取不到住院流水号为"+hospitalSerialNumber+"的病人信息"); + } + }else{ + logger.error("xml:PID/PID.2 住院流水号不存在"); + return HL7ToXmlConverter.returnHl7(document,"AE","执行手术申请失败:xml:PID/PID.2 住院流水号不存在"); + } + } + }