|
|
@@ -3,22 +3,24 @@ package com.nb.mq.listener;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.nb.core.utils.ExceptionUtil;
|
|
|
import com.nb.mq.entity.PcAnalgesicScoreEntity;
|
|
|
import com.nb.mq.entity.PcPatientEntity;
|
|
|
import com.nb.mq.entity.PcPumpEntity;
|
|
|
-import com.nb.web.api.entity.BusClinicEntity;
|
|
|
-import com.nb.web.api.entity.BusDeviceEntity;
|
|
|
-import com.nb.web.api.entity.BusEvaluationEntity;
|
|
|
-import com.nb.web.api.entity.BusInfusionHistoryEntity;
|
|
|
+import com.nb.web.api.entity.*;
|
|
|
import com.nb.web.api.entity.common.BusDeviceRunningEntity;
|
|
|
import com.nb.web.api.enums.DeviceRegisterEnum;
|
|
|
import com.nb.web.api.enums.DeviceStatusEnum2;
|
|
|
+import com.nb.web.api.enums.HospitalLogEnum;
|
|
|
import com.nb.web.api.feign.*;
|
|
|
import com.nb.web.api.feign.result.PatientMonitorDetailResult;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.amqp.rabbit.annotation.Queue;
|
|
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.messaging.handler.annotation.Payload;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
@@ -42,6 +44,8 @@ public class RabbitMqListener {
|
|
|
private final IClinicClient clinicClient;
|
|
|
private final IDeviceClient deviceClient;
|
|
|
private final IIotMsgHandler iotMsgHandler;
|
|
|
+ private final IHospitalLogClient hospitalLogService;
|
|
|
+
|
|
|
/**
|
|
|
* 描述: 监听病人队列
|
|
|
* @author lifang
|
|
|
@@ -53,41 +57,56 @@ public class RabbitMqListener {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void patientQueue(@Payload String body) {
|
|
|
log.info("消息队列中,病人队列{cloud.patient},接受消息:{}",body);
|
|
|
- PcPatientEntity source = JSONUtil.toBean(body, PcPatientEntity.class);
|
|
|
- String patientId = patientClient.lookPatientId(source.getHospitalCode(), source.getPatientCode());
|
|
|
- BusClinicEntity clinic= source.toClinic(patientId);
|
|
|
- PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
|
|
|
- BusClinicEntity existClinic = patientDetail.getClinic();
|
|
|
- if(Boolean.TRUE.equals(clinic.getFinished())){
|
|
|
- //进行撤泵处理
|
|
|
- clinicClient.finish(existClinic.getId(),existClinic.getTenantId());
|
|
|
- if (patientDetail.getInfusion()!=null) {
|
|
|
- //刷新分包标识
|
|
|
- deviceClient.refreshClassification(patientDetail.getInfusion().getDeviceId());
|
|
|
+ BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
|
|
|
+ hospitalLog.setMsgId(IdWorker.getIdStr());
|
|
|
+ hospitalLog.setInput(body);
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ try {
|
|
|
+ PcPatientEntity source = JSONUtil.toBean(body, PcPatientEntity.class);
|
|
|
+ hospitalLog.setIdentityCode(source.getPumpCode());
|
|
|
+ hospitalLog.setTenantId(source.getHospitalCode());
|
|
|
+ String patientId = patientClient.lookPatientId(source.getHospitalCode(), source.getPatientCode());
|
|
|
+ BusClinicEntity clinic= source.toClinic(patientId);
|
|
|
+ PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
|
|
|
+ BusClinicEntity existClinic = patientDetail.getClinic();
|
|
|
+ if(Boolean.TRUE.equals(clinic.getFinished())){
|
|
|
+ //进行撤泵处理
|
|
|
+ clinicClient.finish(existClinic.getId(),existClinic.getTenantId());
|
|
|
+ if (patientDetail.getInfusion()!=null) {
|
|
|
+ //刷新分包标识
|
|
|
+ deviceClient.refreshClassification(patientDetail.getInfusion().getDeviceId());
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|
|
|
- return;
|
|
|
- }
|
|
|
- //当上一个临床状态为已结束时,对比临床信息是否发生改变,生成新的临床信息
|
|
|
- boolean sameClinic=false;
|
|
|
- if(StrUtil.isNotEmpty(existClinic.getId())){
|
|
|
- sameClinic=(clinic.getSurgeryName()+
|
|
|
- Optional.ofNullable(clinic.getWard()).orElse("")+
|
|
|
- Optional.ofNullable(clinic.getBedNo()).orElse("")).equals(
|
|
|
- existClinic.getSurgeryName()+
|
|
|
- Optional.ofNullable(existClinic.getWard()).orElse("")+
|
|
|
- Optional.ofNullable(existClinic.getBedNo()).orElse(""));
|
|
|
- }
|
|
|
- if(!sameClinic){
|
|
|
- //为了避免网络延迟,开始时间往前推1个小时
|
|
|
- clinic.setStartTime(DateUtil.offsetHour(new Date(),0));
|
|
|
+ //当上一个临床状态为已结束时,对比临床信息是否发生改变,生成新的临床信息
|
|
|
+ boolean sameClinic=false;
|
|
|
+ if(StrUtil.isNotEmpty(existClinic.getId())){
|
|
|
+ sameClinic=(clinic.getSurgeryName()+
|
|
|
+ Optional.ofNullable(clinic.getWard()).orElse("")+
|
|
|
+ Optional.ofNullable(clinic.getBedNo()).orElse("")).equals(
|
|
|
+ existClinic.getSurgeryName()+
|
|
|
+ Optional.ofNullable(existClinic.getWard()).orElse("")+
|
|
|
+ Optional.ofNullable(existClinic.getBedNo()).orElse(""));
|
|
|
+ }
|
|
|
+ if(!sameClinic){
|
|
|
+ //为了避免网络延迟,开始时间往前推1个小时
|
|
|
+ clinic.setStartTime(DateUtil.offsetHour(new Date(),0));
|
|
|
|
|
|
- clinic=clinicClient.insertFromHis(clinic);
|
|
|
- clinicClient.setCurrentClinicByHis(clinic,Boolean.TRUE.equals(existClinic.getFinished()));
|
|
|
- }else {
|
|
|
- clinic.setStartTime(existClinic.getStartTime());
|
|
|
- clinicClient.update(existClinic.getId(),clinic);
|
|
|
+ clinic=clinicClient.insertFromHis(clinic);
|
|
|
+ clinicClient.setCurrentClinicByHis(clinic,Boolean.TRUE.equals(existClinic.getFinished()));
|
|
|
+ }else {
|
|
|
+ clinic.setStartTime(existClinic.getStartTime());
|
|
|
+ clinicClient.update(existClinic.getId(),clinic);
|
|
|
+ }
|
|
|
+ hospitalLog.setResult(JSONUtil.toJsonStr(clinic));
|
|
|
+ }catch (Exception e){
|
|
|
+ log.info("消息队列【cloud.patient】处理消息{}失败,",body,e);
|
|
|
+ hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
|
|
|
+ hospitalLog.setSuccess(false);
|
|
|
}
|
|
|
-
|
|
|
+ long entTime = System.currentTimeMillis();
|
|
|
+ hospitalLog.setUseTime(entTime-startTime);
|
|
|
+ hospitalLogService.save(hospitalLog);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -100,19 +119,38 @@ public class RabbitMqListener {
|
|
|
@RabbitListener(queuesToDeclare = @Queue("cloud.pump"))
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void pumpQueue(@Payload String body) {
|
|
|
- log.info("消息队列中,网络泵队列{cloud.pump},接受消息:{}",body);
|
|
|
- PcPumpEntity source = JSONUtil.toBean(body, PcPumpEntity.class);
|
|
|
- BusDeviceRunningEntity device = source.toDevice();
|
|
|
- if (!deviceClient.existDevice(device.getDeviceId())) {
|
|
|
- deviceClient.saveDevice(createDevice(device));
|
|
|
- deviceClient.setExistDevice(device.getDeviceId());
|
|
|
+ BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
|
|
|
+ hospitalLog.setMsgId(IdWorker.getIdStr());
|
|
|
+ hospitalLog.setType(HospitalLogEnum.MQ_PUMP);
|
|
|
+ hospitalLog.setInput(body);
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ try {
|
|
|
+ log.info("消息队列中,网络泵队列{cloud.pump},接受消息:{}",body);
|
|
|
+ PcPumpEntity source = JSONUtil.toBean(body, PcPumpEntity.class);
|
|
|
+ hospitalLog.setIdentityCode(source.getPumpCode());
|
|
|
+ hospitalLog.setTenantId(source.getHospitalCode());
|
|
|
+ BusDeviceRunningEntity device = source.toDevice();
|
|
|
+ if (!deviceClient.existDevice(device.getDeviceId())) {
|
|
|
+ deviceClient.saveDevice(createDevice(device));
|
|
|
+ deviceClient.setExistDevice(device.getDeviceId());
|
|
|
+ }
|
|
|
+ device.setClassification(deviceClient.getClassification(device.getDeviceId()));
|
|
|
+ device.setDataNumber(deviceClient.nextDataNumber(device.getDeviceId()));
|
|
|
+ BusDeviceRunningEntity sync = iotMsgHandler.sync(device, device.getDeviceId());
|
|
|
+ hospitalLog.setResult(JSONUtil.toJsonStr(sync));
|
|
|
+ hospitalLog.setSuccess(true);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.info("消息队列【cloud.pump】处理消息{}失败,",body,e);
|
|
|
+ hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
|
|
|
+ hospitalLog.setSuccess(false);
|
|
|
}
|
|
|
- device.setClassification(deviceClient.getClassification(device.getDeviceId()));
|
|
|
- device.setDataNumber(deviceClient.nextDataNumber(device.getDeviceId()));
|
|
|
- iotMsgHandler.sync(device,device.getDeviceId());
|
|
|
+ long entTime = System.currentTimeMillis();
|
|
|
+ hospitalLog.setUseTime(entTime-startTime);
|
|
|
+ hospitalLogService.save(hospitalLog);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- private BusDeviceEntity createDevice( BusDeviceRunningEntity source ){
|
|
|
+ private BusDeviceEntity createDevice(BusDeviceRunningEntity source ){
|
|
|
BusDeviceEntity result = new BusDeviceEntity();
|
|
|
result.setDeviceId(source.getDeviceId());
|
|
|
result.setTenantId(source.getTenantId());
|
|
|
@@ -130,19 +168,33 @@ public class RabbitMqListener {
|
|
|
@RabbitListener(queuesToDeclare = @Queue("cloud.analgesicScore"))
|
|
|
public void analgesicScoreQueue(@Payload String body) {
|
|
|
log.info("消息队列中,评分队列{cloud.analgesicScore},接受消息:{}",body);
|
|
|
- PcAnalgesicScoreEntity source = JSONUtil.toBean(body, PcAnalgesicScoreEntity.class);
|
|
|
-
|
|
|
- String patientId = patientClient.lookPatientId(source.getHospitalCode(), source.getPatientCode());
|
|
|
+ BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
|
|
|
+ hospitalLog.setMsgId(IdWorker.getIdStr());
|
|
|
+ hospitalLog.setInput(body);
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ try {
|
|
|
+ PcAnalgesicScoreEntity source = JSONUtil.toBean(body, PcAnalgesicScoreEntity.class);
|
|
|
+ hospitalLog.setIdentityCode(source.getPumpCode());
|
|
|
+ hospitalLog.setTenantId(source.getHospitalCode());
|
|
|
|
|
|
- PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
|
|
|
-
|
|
|
- BusInfusionHistoryEntity infusion = Optional.ofNullable(patientDetail.getInfusion()).orElse(new BusInfusionHistoryEntity());
|
|
|
-
|
|
|
- BusEvaluationEntity eval = source.toEval(patientId,
|
|
|
- infusion.getDeviceId(),
|
|
|
- infusion.getId(),
|
|
|
- patientDetail.getClinic().getId());
|
|
|
- clinicEvalClient.save(eval);
|
|
|
+ String patientId = patientClient.lookPatientId(source.getHospitalCode(), source.getPatientCode());
|
|
|
+ PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
|
|
|
+ BusInfusionHistoryEntity infusion = Optional.ofNullable(patientDetail.getInfusion()).orElse(new BusInfusionHistoryEntity());
|
|
|
+ BusEvaluationEntity eval = source.toEval(patientId,
|
|
|
+ infusion.getDeviceId(),
|
|
|
+ infusion.getId(),
|
|
|
+ patientDetail.getClinic().getId());
|
|
|
+ clinicEvalClient.save(eval);
|
|
|
+ hospitalLog.setResult(JSONUtil.toJsonStr(eval));
|
|
|
+ hospitalLog.setSuccess(true);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.info("消息队列【cloud.analgesicScore】处理消息{}失败,",body,e);
|
|
|
+ hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
|
|
|
+ hospitalLog.setSuccess(false);
|
|
|
+ }
|
|
|
+ long entTime = System.currentTimeMillis();
|
|
|
+ hospitalLog.setUseTime(entTime-startTime);
|
|
|
+ hospitalLogService.save(hospitalLog);
|
|
|
}
|
|
|
|
|
|
}
|