瀏覽代碼

add 病人信息缓存
add 设备信息缓存

18339543638 3 年之前
父節點
當前提交
6999775a7e

+ 7 - 0
coffee-system/src/main/java/com/coffee/bus/bean/DeviceBasicInfo.java

@@ -1,5 +1,7 @@
 package com.coffee.bus.bean;
 
+import com.coffee.bus.entity.BusDeviceRegisteredEntity;
+import com.coffee.bus.entity.BusPumpEntity;
 import com.coffee.common.enums.SexEnum;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -61,6 +63,7 @@ public class DeviceBasicInfo {
 
     private String remark;
 
+    private String clinicId;
     /*****泵正在运行状态********/
 
     public DeviceBasicInfo(String deviceId, String alias, Integer enable, String tenantId) {
@@ -77,4 +80,8 @@ public class DeviceBasicInfo {
     public static DeviceBasicInfo of(String deviceId) {
         return new DeviceBasicInfo(deviceId,null,null,null);
     }
+
+    public static DeviceBasicInfo of(BusPumpEntity pump, BusDeviceRegisteredEntity deviceRegistered) {
+        return new DeviceBasicInfo(pump.getDeviceId(), pump.getAlias(),deviceRegistered.getEnable(),pump.getTenantId());
+    }
 }

+ 0 - 52
coffee-system/src/main/java/com/coffee/bus/device/ClusterDeviceRegistry.java

@@ -1,52 +0,0 @@
-package com.coffee.bus.device;
-
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
-import com.coffee.bus.bean.DeviceBasicInfo;
-import com.coffee.common.redis.RedisUtils;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.Map;
-
-/**
- * @author lifang
- * @version 1.0.0
- * @ClassName ClusterDeviceRegistry.java
- * @Description TODO
- * @createTime 2022年04月01日 17:10:00
- */
-@AllArgsConstructor
-@Service
-public class ClusterDeviceRegistry implements DeviceRegistry {
-    private final RedisUtils redisUtils;
-
-    @Override
-    public DeviceOperator getDevice(String deviceId) {
-        if(StrUtil.isEmpty(deviceId)){
-            return DeviceOperator.of(new DeviceBasicInfo(),redisUtils);
-        }
-        Map<Object, Object> result = redisUtils.hmget(deviceId);
-        if(result==null||result.size()==0){
-            return DeviceOperator.of(DeviceBasicInfo.of(deviceId),redisUtils);
-
-        }
-        return DeviceOperator.of(JSONUtil.toBean(JSONUtil.toJsonStr(result),DeviceBasicInfo.class),redisUtils);
-    }
-
-    @Override
-    public void register(DeviceBasicInfo basicInfo) {
-        if(StrUtil.isNotEmpty(basicInfo.getDeviceId())){
-            DeviceOperator.of(basicInfo, redisUtils).sysn();
-        }
-    }
-
-    @Override
-    public void unRegister(String deviceId) {
-        DeviceBasicInfo deviceBasicInfo = DeviceBasicInfo.of(deviceId);
-        deviceBasicInfo.setDeviceId(deviceId);
-        DeviceOperator.of(deviceBasicInfo, redisUtils).clear();
-    }
-
-
-}

+ 73 - 0
coffee-system/src/main/java/com/coffee/bus/registry/device/ClusterDeviceRegistry.java

@@ -0,0 +1,73 @@
+package com.coffee.bus.registry.device;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.coffee.bus.bean.DeviceBasicInfo;
+import com.coffee.bus.entity.BusDeviceRegisteredEntity;
+import com.coffee.bus.entity.BusPumpEntity;
+import com.coffee.bus.service.LocalBusDeviceRegisteredService;
+import com.coffee.bus.service.LocalBusPumpService;
+import com.coffee.common.redis.RedisUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ClusterDeviceRegistry.java
+ * @Description TODO
+ * @createTime 2022年04月01日 17:10:00
+ */
+@AllArgsConstructor
+@Service
+public class ClusterDeviceRegistry implements DeviceRegistry {
+    private final RedisUtils redisUtils;
+    private final LocalBusPumpService pumpService;
+    private final LocalBusDeviceRegisteredService deviceRegisteredService;
+    @Override
+    public DeviceOperator getDevice(String deviceId) {
+        if(StrUtil.isEmpty(deviceId)){
+            return DeviceOperator.of(new DeviceBasicInfo(),redisUtils);
+        }
+        Map<Object, Object> result = redisUtils.hmget(deviceId);
+        if(result==null||result.size()==0){
+            //从数据库中获取数据
+            BusPumpEntity pump = pumpService.getOne(new QueryWrapper<BusPumpEntity>().lambda().eq(BusPumpEntity::getDeviceId, deviceId));
+            BusDeviceRegisteredEntity registeredDevice = deviceRegisteredService.getOne(new QueryWrapper<BusDeviceRegisteredEntity>().lambda()
+                    .eq(BusDeviceRegisteredEntity::getDeviceId, deviceId));
+            if(registeredDevice==null){
+                return DeviceOperator.of(new DeviceBasicInfo(),redisUtils);
+            }
+            if(pump==null){
+                pump=new BusPumpEntity();
+                pump.setAlias(registeredDevice.getAlias());
+                pump.setTenantId(registeredDevice.getTenantId());
+                pump.setDeviceId(registeredDevice.getDeviceId());
+            }
+            DeviceOperator operator = DeviceOperator.of(DeviceBasicInfo.of(pump, registeredDevice), redisUtils);
+            //数据同步到缓存中
+            operator.sysn();
+            return operator;
+        }
+        return DeviceOperator.of(JSONUtil.toBean(JSONUtil.toJsonStr(result),DeviceBasicInfo.class),redisUtils);
+    }
+
+    @Override
+    public void register(DeviceBasicInfo basicInfo) {
+        if(StrUtil.isNotEmpty(basicInfo.getDeviceId())){
+            DeviceOperator.of(basicInfo, redisUtils).sysn();
+        }
+    }
+
+    @Override
+    public void unRegister(String deviceId) {
+        DeviceBasicInfo deviceBasicInfo = DeviceBasicInfo.of(deviceId);
+        deviceBasicInfo.setDeviceId(deviceId);
+        DeviceOperator.of(deviceBasicInfo, redisUtils).clear();
+    }
+
+
+}

+ 17 - 2
coffee-system/src/main/java/com/coffee/bus/device/DeviceOperator.java → coffee-system/src/main/java/com/coffee/bus/registry/device/DeviceOperator.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.device;
+package com.coffee.bus.registry.device;
 
 import cn.hutool.core.util.StrUtil;
 import com.coffee.bus.bean.DeviceBasicInfo;
@@ -139,6 +139,12 @@ public class DeviceOperator {
         return this;
     }
 
+    public DeviceOperator updateClinicId(String clinicId){
+        if(!validate)return this;
+        deviceBasicInfo.setClinicId(clinicId);
+        redisUtils.hset(deviceBasicInfo.getDeviceId(),"clinicId",clinicId);
+        return this;
+    }
 
     public String getDeviceId(){
         return deviceBasicInfo.getDeviceId();
@@ -192,7 +198,9 @@ public class DeviceOperator {
         return deviceBasicInfo.getRemark();
     }
 
-
+    public String getClinicId(){
+        return deviceBasicInfo.getClinicId();
+    }
     /**
      * 判断设备在系统中是否存在
      * @return
@@ -210,6 +218,13 @@ public class DeviceOperator {
         return isExist()&&deviceBasicInfo.getEnable()!=null&&deviceBasicInfo.getEnable()==1 ;
     }
 
+    /**
+     * 该设备
+     * @return
+     */
+    public boolean isFirst(){
+        return StrUtil.isEmpty(deviceBasicInfo.getId());
+    }
 
     public Map<String,Object> getMap(){
         return new HashMap<>();

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/device/DeviceRegistry.java → coffee-system/src/main/java/com/coffee/bus/registry/device/DeviceRegistry.java

@@ -1,4 +1,4 @@
-package com.coffee.bus.device;
+package com.coffee.bus.registry.device;
 
 import com.coffee.bus.bean.DeviceBasicInfo;
 

+ 11 - 0
coffee-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java

@@ -0,0 +1,11 @@
+package com.coffee.bus.registry.patient;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ClusterPatientRegistry.java
+ * @Description 集群缓存
+ * @createTime 2022年04月02日 16:17:00
+ */
+public class ClusterPatientRegistry implements PatientRegistry {
+}

+ 11 - 0
coffee-system/src/main/java/com/coffee/bus/registry/patient/PatientOperator.java

@@ -0,0 +1,11 @@
+package com.coffee.bus.registry.patient;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName PatientOperator.java
+ * @Description 病人信息操作符、
+ * @createTime 2022年04月02日 16:16:00
+ */
+public class PatientOperator {
+}

+ 11 - 0
coffee-system/src/main/java/com/coffee/bus/registry/patient/PatientRegistry.java

@@ -0,0 +1,11 @@
+package com.coffee.bus.registry.patient;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName PatientRegistry.java
+ * @Description 病人信息缓存
+ * @createTime 2022年04月02日 16:16:00
+ */
+public interface PatientRegistry {
+}

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceRegisteredService.java

@@ -2,8 +2,8 @@ package com.coffee.bus.service;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.coffee.bus.bean.DeviceBasicInfo;
-import com.coffee.bus.device.DeviceOperator;
-import com.coffee.bus.device.DeviceRegistry;
+import com.coffee.bus.registry.device.DeviceOperator;
+import com.coffee.bus.registry.device.DeviceRegistry;
 import com.coffee.bus.entity.BusDeviceRegisteredEntity;
 import com.coffee.bus.mapper.BusDeviceRegisteredMapper;
 import com.coffee.common.crud.BaseService;

+ 36 - 31
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -3,8 +3,9 @@ package com.coffee.bus.websocket.listener;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.coffee.bus.device.DeviceOperator;
-import com.coffee.bus.device.DeviceRegistry;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.coffee.bus.registry.device.DeviceOperator;
+import com.coffee.bus.registry.device.DeviceRegistry;
 import com.coffee.bus.entity.BusPumpEntity;
 import com.coffee.bus.enums.NetPumpStatusEnum;
 import com.coffee.bus.listener.event.bean.DeviceAlarmEvent;
@@ -12,7 +13,6 @@ import com.coffee.bus.listener.event.bean.DeviceInfoEvent;
 import com.coffee.bus.service.LocalBusPumpService;
 import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.common.config.websocket.WebSocketConstant;
-import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
@@ -21,7 +21,6 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Date;
@@ -35,7 +34,6 @@ import java.util.List;
  * @createTime 2022年03月27日 11:21:00
  */
 @Component
-@AllArgsConstructor
 @Slf4j
 public class DeviceInfoListener {
 
@@ -55,12 +53,6 @@ public class DeviceInfoListener {
         this.deviceRegistry=deviceRegistry;
     }
 
-    private DeviceInfoListener deviceInfoListener;
-
-    @PostConstruct
-    public void init(){
-        deviceInfoListener=SpringUtil.getBean(DeviceInfoListener.class);
-    }
     /**
      * 监听上传的数据信息,
      * 若设备详情发生变化,则及时通知相应的ws通道
@@ -78,36 +70,31 @@ public class DeviceInfoListener {
             return ;
         }
         BusPumpEntity exist = deviceRunInfoService.getByDeviceId(device.getDeviceId());
-        //2、设备信息发生变化
         device.setMonitorType(1);
-        if(exist==null){
-            //3、将设备和医院、病人进行绑定
+        //首次运行需要与病人、语言进行绑定
+        if(deviceOperator.isFirst()){
+            //处理无泵状态(即泵首次与医院进行绑定)
             Date now = new Date();
+
+            //设置注册时间和泵的开始时间
+            device.setId(String.valueOf(IdWorker.getId()));
+
             device.setRegisterTime(now);
             device.setStartTime(now);
             device.setAlias(deviceOperator.getAlias());
-            //获取设备绑定医院
+            //设备绑定医院
             device.setTenantId(deviceOperator.getTenantId());
+
+            //缓存存储泵的开始时间和注册时间
+            deviceOperator.updateRegisterTime(now);
+            deviceOperator.updateStartTime(now);
+
             //判断是否存在临床信息 ,拉取临床信息
             deviceRunInfoService.save(device);
         }
-//        else if(exist.getIsUndo()){
-////            已撤泵
-//            return;
-//        }
         else {
-            device.setStartTime(exist.getStartTime());
-            device.setRegisterTime(exist.getRegisterTime());
-            device.setPatientCode(exist.getPatientCode());
-            device.setPatientName(exist.getPatientName());
-            device.setPatientSex(exist.getPatientSex());
-            device.setTenantId(deviceOperator.getTenantId());
-            device.setClinicId(exist.getClinicId());
-            device.setWard(exist.getWard());
-            device.setBedNo(exist.getBedNo());
-            device.setAlias(exist.getAlias());
-            device.setRemark(exist.getRemark());
-            device.setId(exist.getId());
+//            fillDeviceInfoFromCache(device,deviceOperator);
+//            deviceRunInfoService.updateById(device);
         }
         //病号是否进行换泵操作
         if (patientService.isChangedDevice(device.getTenantId(),device.getPatientCode(),device.getDeviceId(),device.getStartTime())) {
@@ -149,6 +136,24 @@ public class DeviceInfoListener {
 
     }
 
+    /**
+     * 从缓存中填充设备信息
+     */
+    public void fillDeviceInfoFromCache(BusPumpEntity device,DeviceOperator operator){
+        device.setStartTime(operator.getStartTime());
+        device.setRegisterTime(operator.getRegisterTime());
+        device.setPatientCode(operator.getPatientCode());
+        device.setPatientName(operator.getPatientName());
+        device.setPatientSex(operator.getGender());
+        device.setTenantId(operator.getTenantId());
+        device.setClinicId(operator.getClinicId());
+        device.setWard(operator.getWard());
+        device.setBedNo(operator.getBedNo());
+        device.setAlias(operator.getAlias());
+        device.setRemark(operator.getRemark());
+        device.setId(operator.getRunId());
+    }
+
     @Scheduled(cron = "0/3 * * * * ?")
     public void send(){
         List<BusPumpEntity> list = deviceRunInfoService.list();