package com.goodwillcis; import java.text.DateFormat; 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.diposablegoods.service.DisposableGoodsStorageRecordManager; 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接口服务实现类(广医二院) * @author shuyongfu * @since 2017-09-05 */ public class HL7V2ServiceImpl implements HL7V2Service { private static Logger logger = Logger.getLogger(HL7V2ServiceImpl.class); @Autowired private PatientAdmissionInfoManager patientAdmissionInfoManager; @Override public String send(@WebParam(name = "hl7v2") String hl7v2) { logger.warn("Hl7v2=" + hl7v2); // 针对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)) { 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(); 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 住院流水号不存在"); } } }