package com.smartor.service.impl; import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.parser.PipeParser; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.HospitalRecord; import com.smartor.domain.HospitalUserinfo; import com.smartor.domain.ServiceThirdData; import com.smartor.mapper.ServiceThirdDataMapper; import com.smartor.service.IHospitalRecordService; import com.smartor.service.IHospitalUserinfoService; import com.smartor.service.IServiceThirdDataService; import com.smartor.yiwudataanalysis.ADT_A01; import com.smartor.yiwudataanalysis.ADT_A03; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 第三方厂商数据Service业务层处理 * * @author ruoyi * @date 2023-10-10 */ @Slf4j @Service public class ServiceThirdDataServiceImpl implements IServiceThirdDataService { @Autowired private ServiceThirdDataMapper serviceThirdDataMapper; @Autowired private IHospitalRecordService iHospitalRecordService; @Autowired private IHospitalUserinfoService iHospitalUserinfoService; @Override public List queryList(ServiceThirdData serviceThirdData) { log.error("------serviceThirdData的入参:{}", serviceThirdData); List serviceThirdDataList = serviceThirdDataMapper.selectServiceThirdDataList(serviceThirdData); log.error("------serviceThirdDataList获取数据的数量:{}", serviceThirdDataList.size()); for (ServiceThirdData std : serviceThirdDataList) { PipeParser parser = new PipeParser(); Message message = null; try { String dataInfo = std.getDataInfo().substring(1); dataInfo = dataInfo.replaceAll("\n", ""); dataInfo = dataInfo.substring(0, dataInfo.length() - 1); message = parser.parse(dataInfo); List objectList = new ArrayList<>(); if (serviceThirdData.getDataType().equals("ADT^A03")) { ADT_A03 adt_a03 = new ADT_A03(); objectList = adt_a03.explainPID(message, dataInfo); } else if (serviceThirdData.getDataType().equals("ADT^A01")) { ADT_A01 adt_a01 = new ADT_A01(); objectList = adt_a01.explainPID(message, dataInfo); } HospitalUserinfo hospitalUserinfo = (HospitalUserinfo) objectList.get(1); Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = formatter.format(currentTime); hospitalUserinfo.setCreateTime(currentTime); //只有入院才会往userInfo里写用户信息 if (serviceThirdData.getDataType().equals("ADT^A03") && StringUtils.isNotBlank(hospitalUserinfo.getPatientID())) { //先判断一下,patientid是否已经在表中存在,如果存在,就不插入了,不存在,就插入 HospitalUserinfo hospitalUserinfo1 = new HospitalUserinfo(); hospitalUserinfo1.setPatientID(hospitalUserinfo.getPatientID()); List hospitalUserinfos = iHospitalUserinfoService.selectHospitalUserinfoList(hospitalUserinfo1); if (CollectionUtils.isEmpty(hospitalUserinfos)) { iHospitalUserinfoService.insertHospitalUserinfo(hospitalUserinfo); } else { iHospitalUserinfoService.updateHospitalUserinfoByPatientID(hospitalUserinfo); hospitalUserinfo.setID(hospitalUserinfos.get(0).getID()); } } HospitalRecord hospitalRecord = (HospitalRecord) objectList.get(0); log.error("hospitalRecord的值为:{}", hospitalRecord); //如果patientid为空,再存record就成脏数据了 if (StringUtils.isNotBlank(hospitalUserinfo.getPatientID())) { hospitalRecord.setMessageID(std.getId().toString()); iHospitalRecordService.insertHospitalRecord(hospitalRecord); } //将service_third_data的id放到messageid里,方便后面查看问题 ServiceThirdData serviceThirdData2 = new ServiceThirdData(); serviceThirdData2.setId(std.getId()); if (StringUtils.isEmpty(hospitalUserinfo.getPatientID())) { serviceThirdData2.setRemark("PatientID为空"); } serviceThirdData2.setUserInfoId(hospitalUserinfo.getID()); log.error("serviceThirdData2的参数:{}", serviceThirdData2); int ii = serviceThirdDataMapper.updateIsDeal(serviceThirdData2); log.error("是否修改成功:{}", ii); } catch (HL7Exception e) { e.printStackTrace(); } } return new ArrayList<>(); } }