Kaynağa Gözat

add rabbitmq

18339543638 3 yıl önce
ebeveyn
işleme
a8800fbf52

+ 1 - 1
nb-admin/src/main/resources/application-rabbitmq.yml

@@ -7,6 +7,6 @@ spring:
     virtual-host: netpump
     listener:
       simple:
-        acknowledge-mode: none
+        acknowledge-mode: auto
     #    publisher-confirms: true
     publisher-returns: true

+ 1 - 1
nb-admin/src/main/resources/application.yml

@@ -79,7 +79,7 @@ mybatis-plus:
       logic-not-delete-value: 0
       logic-delete-value: 1
   configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
     default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
   type-aliases-package: com.nb.bus.entity
 

+ 4 - 1
nb-service-api/web-service-api/src/main/java/com/nb/web/api/enums/HospitalLogEnum.java

@@ -22,7 +22,10 @@ public enum HospitalLogEnum  implements IEnum<Integer> {
     ALI_STATUS(2,"阿里云-设备上下线"),
     ALI_LIFECYCLE(3,"阿里云-设备生命周期"),
     ALI_DATA_UPLOAD(4,"阿里云-设备数据上传"),
-    ALI_DEL(5,"阿里云-设备删除"),;
+    ALI_DEL(5,"阿里云-设备删除"),
+    MQ_PUMP(6,"消息队列设备数据上传"),
+    MQ_PATIENT(7,"消息队列病人数据上传"),
+    MQ_EVAL(8,"消息队列评价数据上传"),;
 
     private Integer value;
     @Getter

+ 110 - 58
nb-service/iot-service/src/main/java/com/nb/mq/listener/RabbitMqListener.java

@@ -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);
     }
 
 }