Procházet zdrojové kódy

设备数据完成。

zhuoning před 3 roky
rodič
revize
9347758504
16 změnil soubory, kde provedl 979 přidání a 231 odebrání
  1. 75 3
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDeviceOnlineEntity.java
  2. 36 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagRegisterEntity.java
  3. 5 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagDeviceRegisterRepo.java
  4. 5 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegisterRepo.java
  5. 4 4
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/BizConst.java
  6. 41 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/controller/RedisContrller.java
  7. 138 46
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/DeviceListener.java
  8. 48 9
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/EartagListener.java
  9. 46 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/ICacheService.java
  10. 18 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IDeviceService.java
  11. 0 20
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IRedisService.java
  12. 266 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java
  13. 255 32
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/DeviceServiceImpl.java
  14. 0 105
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/RedisServiceImpl.java
  15. 1 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/resources/application.properties
  16. 41 12
      huimv-eartag2-platform/huimv-eartag2-process2/src/test/java/com/huimv/eartag2/process2/utils/RedisUtil.java

+ 75 - 3
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDeviceOnlineEntity.java

@@ -47,7 +47,25 @@ public class EartagDeviceOnlineEntity implements Serializable {
     private Date addDate;
 
     @Column(name = "farm_id")
-    private Integer farmId;
+    private String farmId;
+
+    @Column(name = "heartbeat_first_time")
+    private Timestamp heartbeatFirstTime;
+
+    @Column(name = "heartbeat_last_time")
+    private Timestamp heartbeatLastTime;
+
+    @Column(name = "envtemp_first_time")
+    private Timestamp envtempFirstTime;
+
+    @Column(name = "envtemp_last_time")
+    private Timestamp envtempLastTime;
+
+    @Column(name = "eartag_first_time")
+    private Timestamp eartagFirstTime;
+
+    @Column(name = "eartag_last_time")
+    private Timestamp eartagLastTime;
 
     public void setId(Integer id) {
         this.id = id;
@@ -137,14 +155,62 @@ public class EartagDeviceOnlineEntity implements Serializable {
         return addDate;
     }
 
-    public void setFarmId(Integer farmId) {
+    public void setFarmId(String farmId) {
         this.farmId = farmId;
     }
 
-    public Integer getFarmId() {
+    public String getFarmId() {
         return farmId;
     }
 
+    public void setHeartbeatFirstTime(Timestamp heartbeatFirstTime) {
+        this.heartbeatFirstTime = heartbeatFirstTime;
+    }
+
+    public Timestamp getHeartbeatFirstTime() {
+        return heartbeatFirstTime;
+    }
+
+    public void setHeartbeatLastTime(Timestamp heartbeatLastTime) {
+        this.heartbeatLastTime = heartbeatLastTime;
+    }
+
+    public Timestamp getHeartbeatLastTime() {
+        return heartbeatLastTime;
+    }
+
+    public void setEnvtempFirstTime(Timestamp envtempFirstTime) {
+        this.envtempFirstTime = envtempFirstTime;
+    }
+
+    public Timestamp getEnvtempFirstTime() {
+        return envtempFirstTime;
+    }
+
+    public void setEnvtempLastTime(Timestamp envtempLastTime) {
+        this.envtempLastTime = envtempLastTime;
+    }
+
+    public Timestamp getEnvtempLastTime() {
+        return envtempLastTime;
+    }
+
+    public void setEartagFirstTime(Timestamp eartagFirstTime) {
+        this.eartagFirstTime = eartagFirstTime;
+    }
+
+    public Timestamp getEartagFirstTime() {
+        return eartagFirstTime;
+    }
+
+    public void setEartagLastTime(Timestamp eartagLastTime) {
+        this.eartagLastTime = eartagLastTime;
+    }
+
+    public Timestamp getEartagLastTime() {
+        return eartagLastTime;
+    }
+
     @Override
     public String toString() {
         return "EartagDeviceOnlineEntity{" +
@@ -160,6 +226,12 @@ public class EartagDeviceOnlineEntity implements Serializable {
                 "lastEartag=" + lastEartag + '\'' +
                 "addDate=" + addDate + '\'' +
                 "farmId=" + farmId + '\'' +
+                "heartbeatFirstTime=" + heartbeatFirstTime + '\'' +
+                "heartbeatLastTime=" + heartbeatLastTime + '\'' +
+                "envtempFirstTime=" + envtempFirstTime + '\'' +
+                "envtempLastTime=" + envtempLastTime + '\'' +
+                "eartagFirstTime=" + eartagFirstTime + '\'' +
+                "eartagLastTime=" + eartagLastTime + '\'' +
                 '}';
     }
 }

+ 36 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagRegisterEntity.java

@@ -42,6 +42,15 @@ public class EartagEartagRegisterEntity implements Serializable {
     @Column(name = "farm_id")
     private Integer farmId;
 
+    @Column(name = "active_status")
+    private Integer activeStatus;
+
+    @Column(name = "active_time")
+    private Timestamp activeTime;
+
+    @Column(name = "live_status")
+    private Integer liveStatus;
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -122,6 +131,30 @@ public class EartagEartagRegisterEntity implements Serializable {
         return farmId;
     }
 
+    public void setActiveStatus(Integer activeStatus) {
+        this.activeStatus = activeStatus;
+    }
+
+    public Integer getActiveStatus() {
+        return activeStatus;
+    }
+
+    public void setActiveTime(Timestamp activeTime) {
+        this.activeTime = activeTime;
+    }
+
+    public Timestamp getActiveTime() {
+        return activeTime;
+    }
+
+    public void setLiveStatus(Integer liveStatus) {
+        this.liveStatus = liveStatus;
+    }
+
+    public Integer getLiveStatus() {
+        return liveStatus;
+    }
+
     @Override
     public String toString() {
         return "EartagEartagRegisterEntity{" +
@@ -135,6 +168,9 @@ public class EartagEartagRegisterEntity implements Serializable {
                 "registerType=" + registerType + '\'' +
                 "remark=" + remark + '\'' +
                 "farmId=" + farmId + '\'' +
+                "activeStatus=" + activeStatus + '\'' +
+                "activeTime=" + activeTime + '\'' +
+                "liveStatus=" + liveStatus + '\'' +
                 '}';
     }
 }

+ 5 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagDeviceRegisterRepo.java

@@ -5,6 +5,8 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 
+import java.util.List;
+
 public interface EartagDeviceRegisterRepo extends JpaRepository<EartagDeviceRegisterEntity, Integer>, JpaSpecificationExecutor<EartagDeviceRegisterEntity> {
 
 //    @Query(nativeQuery = true,value = "UPDATE ")
@@ -12,4 +14,7 @@ public interface EartagDeviceRegisterRepo extends JpaRepository<EartagDeviceRegi
 
     @Query(nativeQuery = true,value = "SELECT * FROM eartag_device_register WHERE device_code=?1")
     EartagDeviceRegisterEntity getDeviceRegister(String deviceCode);
+
+    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND device_status=1")
+    List<Object[]> getDeviceCountByFarmId(String farmId);
 }

+ 5 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegisterRepo.java

@@ -3,7 +3,12 @@ package com.huimv.eartag2.common.dao.repo;
 import com.huimv.eartag2.common.dao.entity.EartagEartagRegisterEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
 
 public interface EartagEartagRegisterRepo extends JpaRepository<EartagEartagRegisterEntity, Integer>, JpaSpecificationExecutor<EartagEartagRegisterEntity> {
 
+    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_eartag_register WHERE farm_id=?1 AND live_status=1")
+    List<Object[]> getEartagCountByFarmId(String farmId);
 }

+ 4 - 4
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/BizConst.java

@@ -16,16 +16,16 @@ public class BizConst {
     public final static String DEVICE_ONLINE_PREFIX = "device_online_";
 
     //牧场所有采集器设备编号集合+牧场id(Set)
-    public final static String FARM_DEVICE_ALL_PREFIX = "farm_device_all_";
+    public final static String SET_FARM_DEVICE_ALL_PREFIX = "farm_device_all_";
 
     //牧场在线采集器设备编号集合+牧场id(Set)
-    public final static String FARM_DEVICE_DAY_PREFIX = "farm_device_day_";
+    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "farm_device_online_";
 
     //牧场所有耳标编号集合+牧场id(Set)
-    public final static String FARM_EARMARK_ALL_PREFIX = "farm_earmark_all_";
+    public final static String SET_FARM_EARMARK_ALL_PREFIX = "farm_earmark_all_";
 
     //牧场在线耳标编号集合+牧场id(Set)
-    public final static String FARM_EARMARK_DAY_PREFIX = "farm_earmark_day_";
+    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "farm_earmark_online_";
 
     //牧场总状态表+牧场id
     public final static String FARM_ALL_STATUS_PREFIX = "farm_all_status_";

+ 41 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/controller/RedisContrller.java

@@ -0,0 +1,41 @@
+package com.huimv.eartag2.process2.controller;
+
+import com.huimv.eartag2.common.utils.BizConst;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@RestController
+@RequestMapping("/redis")
+public class RedisContrller {
+    @Resource
+    private RedisTemplate redisTemplate;
+
+    @RequestMapping(value = "/set",method = RequestMethod.GET)
+    public void set1(@RequestParam(value = "name",required = true) String name,String company){
+        if(name == null || name == ""){
+            name="java";
+        }
+        String setKey = "testSet";
+        redisTemplate.opsForSet().add(setKey, name);
+
+        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+        System.out.println(setKey+" >>"+resultSet);
+        boolean memberStatus = redisTemplate.opsForSet().isMember(setKey,company);
+        System.out.println("memberStatus>>"+memberStatus);
+        redisTemplate.expire(setKey,2, TimeUnit.HOURS);
+        //根据key获取过期时间
+        System.out.println("过期时间>>"+redisTemplate.getExpire(setKey));
+    }
+}

+ 138 - 46
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/DeviceListener.java

@@ -1,20 +1,23 @@
 package com.huimv.eartag2.process2.listener;
 
-import cn.hutool.core.text.csv.CsvUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.huimv.eartag2.common.mq.Const;
+import com.huimv.eartag2.common.utils.BizConst;
+import com.huimv.eartag2.common.utils.DateUtil;
+import com.huimv.eartag2.process2.service.ICacheService;
 import com.huimv.eartag2.process2.service.IDeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.SetOperations;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Project : huimv.shiwan
@@ -31,87 +34,176 @@ public class DeviceListener {
     private RedisTemplate redisTemplate;
     @Autowired
     private IDeviceService deviceService;
+    @Autowired
+    private ICacheService cacheService;
 
     /**
-     * @Method      : processDeviceHeartbeat
+     * @Method : processDeviceHeartbeat
      * @Description : 处理设备心跳数据
-     * @Params      : [RawMap]
-     * @Return      : void
-     * 
-     * @Author      : ZhuoNing
-     * @Date        : 2022/2/15       
-     * @Time        : 8:56
+     * @Params : [RawMap]
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/2/15
+     * @Time : 8:56
      */
     @RabbitListener(queues = Const.QUEUE_DEVICE_HEARTBEAT)
     @RabbitHandler
     public void processDeviceHeartbeat(Map DeviceMap) throws ParseException {
-        System.out.println("222 <<<<<<<<<<<<<<< 处理设备心跳数据>>"+DeviceMap.toString());
+        System.out.println("222 <<<<<<<<<<<<<<< 处理设备心跳数据>>" + DeviceMap.toString());
         //--更新设备注册数据(MySQL,Redis)-
         //--保存设备在线统计数据(MySQL,Redis)-
         //--保存设备状态数据(MySQL,Redis)-
         JSONObject deviceJo = JSON.parseObject(DeviceMap.get("heartbeat").toString());
         String deviceCode = deviceJo.getString("device");
-        System.out.println("deviceCode>>"+deviceCode);
+        System.out.println("deviceCode>>" + deviceCode);
+        //获取牧场id
+        String farmId = deviceService.getFarmIdByDeviceCode(deviceCode);
+        String todayDateText = new DateUtil().getTodayDateText();
+        //判断该设备编号是否存在缓存在线集合当中;
+        if (cacheService.isExistDeviceOnlineSet(farmId, deviceCode, todayDateText)) {
+            //Step1:更新设备注册表[设置活动状态为1,设置活动状态更新时间]
+            //Step2:更新在线统计[心跳数+1,心跳第一次上传时间,心跳最后一次时间],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
+
+            //# 更新设备注册表 #
+            deviceService.updateDeviceRegister(farmId, deviceCode);
+
+            //# 更新在线统计 #
+            deviceService.updateDeviceOnline(farmId, deviceCode);
+        } else {
+            //Step1:更新总状态表[device_online+1,device_offline-1,device_rate],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
+            //Step2:更新设备注册表[active_status=1,active_time=当前时间]
+            //Step3:更新在线统计[],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
+            //Step4:将新设备编号加入缓存[]
+
+            //# 更新总状态表 #
+            deviceService.updateDeviceAllStatus(farmId, deviceCode);
+
+            //# 更新设备注册表 #
+            deviceService.updateDeviceRegister(farmId, deviceCode);
+
+            //# 更新在线统计 #
+            deviceService.updateDeviceOnline(farmId, deviceCode);
+
+            //# 将新设备编号加入在线缓存 #
+            cacheService.putDeviceToOnline(farmId, deviceCode,todayDateText);
+        }
+
         //--设备在线统计表
         //--设备状态每日统计表
         //--设备和耳标总状态表
 
-//        test1();
+//        test1(farmId,deviceCode);
 
-        //# 心跳数加1,更改在线统计数据表(MySQL),更新Redis; #
-        deviceService.updateDeviceRegister(deviceCode);
+//        //# 心跳数加1,更改在线统计数据表(MySQL),更新Redis; #
+//        deviceService.updateDeviceRegister(deviceCode);
+//
+//        //# 心跳数加1,更改在线统计数据表(MySQL),更新Redis; #
+//        deviceService.updateDeviceOnline(deviceCode);
+//
+//        //# 处理状态数据 #
+//        deviceService.updateFarmDeviceStatus(deviceCode);
+    }
 
-        //# 心跳数加1,更改在线统计数据表(MySQL),更新Redis; #
-        deviceService.updateDeviceOnline(deviceCode);
+    private void test1(String farmId, String deviceCode) {
+//            String deviceCode = "202007239999869";
+////            Map map = new HashMap<>();
+////            map.put("name","栋舍");
+////            map.put("id","001");
+////            System.out.println("map>>"+map.toString());
+//            String deviceRegHashKey = "device_register_"+deviceCode;
+//            //为hash结构设置多个键值对(hmset)
+////        redisTemplate.opsForHash().putAll(deviceRegHashKey, map);
+//
+//
+////            Object actObj = redisTemplate.opsForHash().get(deviceCode, "act");
+////            System.out.println("actObj>>"+actObj);
+//        Object nameObj = redisTemplate.opsForHash().get(deviceRegHashKey,"name");
+//        System.out.println("nameObj>>"+nameObj.toString());
 
-        //# 处理状态数据 #
-        deviceService.updateFarmDeviceStatus(deviceCode);
-    }
+//        System.out.println("test1()");
+//        redisTemplate.opsForSet().add("testSet", "java");
+//
+//        //定义一个set集合并设置集合值
+//         SetOperations<String, String> set = redisTemplate.opsForSet();
+//         set.add("set1","22");
+//         set.add("set1","33");
+//         set.add("set1","44");
+//         // 通过key获取set集合中的对象值
+//         Set<String> resultSet = redisTemplate.opsForSet().members("set1");
+//         System.out.println("resultSet>>"+resultSet);
+        SetOperations<String, String> set = redisTemplate.opsForSet();
+        set.add(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId, deviceCode);
 
-    private void test1() {
-            String deviceCode = "202007239999869";
-//            Map map = new HashMap<>();
-//            map.put("name","栋舍");
-//            map.put("id","001");
-//            System.out.println("map>>"+map.toString());
-            String deviceRegHashKey = "device_register_"+deviceCode;
-            //为hash结构设置多个键值对(hmset)
-//        redisTemplate.opsForHash().putAll(deviceRegHashKey, map);
-
-
-//            Object actObj = redisTemplate.opsForHash().get(deviceCode, "act");
-//            System.out.println("actObj>>"+actObj);
-        Object nameObj = redisTemplate.opsForHash().get(deviceRegHashKey,"name");
-        System.out.println("nameObj>>"+nameObj.toString());
+        Set<String> resultSet = redisTemplate.opsForSet().members(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId);
+        System.out.println(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId + " >>" + resultSet);
     }
 
     /**
-     * @Method      : processDeviceTemp
+     * @Method : processDeviceTemp
      * @Description : 处理设备温度数据
-     * @Params      : [RawMap]
-     * @Return      : void
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/2/15
-     * @Time        : 9:05
+     * @Params : [RawMap]
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/2/15
+     * @Time : 9:05
      */
     @RabbitListener(queues = Const.QUEUE_DEVICE_TEMP)
     @RabbitHandler
     public void processDeviceTemp(Map DeviceTempMap) throws ParseException {
-        System.out.println("333 <<<<<<<<<<<<<<< 处理设备温度数据>>"+DeviceTempMap.toString());
+        System.out.println("333 <<<<<<<<<<<<<<< 处理设备温度数据>>" + DeviceTempMap.toString());
         JSONObject deviceJo = JSON.parseObject(DeviceTempMap.get("deviceTemp").toString());
         String deviceCode = deviceJo.getString("device");
-        System.out.println("333 设备编号>>"+deviceCode);
+        System.out.println("333 设备编号>>" + deviceCode);
         //--保存设备注册数据(MySQL,Redis)
         //--保存设备状态数据(MySQL,Redis)
 
         //--设备在线统计表
         //--设备状态每日统计表
         //--设备和耳标总状态表
+        //获取牧场id
+        String farmId = deviceService.getFarmIdByDeviceCode(deviceCode);
 
-//        test1();
-        //# 处理状态数据 #
-        deviceService.updateFarmDeviceStatus(deviceCode);
+//        test1(farmId,deviceCode);
+//        //# 处理状态数据 #
+//        deviceService.updateFarmDeviceStatus(deviceCode);
 
+        //# 判断在线缓存集合中是否存在该设备 #
+        //# 如果存在:
+        //      (1)更新设备在线数据[envtemp_total++,envtemp_first_time,envtemp_last_time]
+        //      (2)更新注册设备数据[active_status=1,active_time]
+        //# 如果不存在:
+        //      (A) 更新总状态表;
+        //      (B)更新设备注册表;
+        //      (C)更新在线统计;
+        //      (D)将设备好加入到在线缓存集合当中;
+        String todayDateText = new DateUtil().getTodayDateText();
+        //判断该设备编号是否存在牧场缓存在线集合当中;
+        if (cacheService.isExistDeviceOnlineSet(farmId, deviceCode,todayDateText)) {
+            System.out.println("## ++++");
+            //# 更新在线统计 #
+            deviceService.updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
+            System.out.println("## ++++1");
+            //# 更新设备注册表 #
+            deviceService.updateDeviceRegister(farmId, deviceCode);
+            System.out.println("## ++++2");
+        } else {
+            //Step1:更新总状态表[device_online+1,device_offline-1,device_rate],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
+            //Step2:更新设备注册表[active_status=1,active_time=当前时间]
+            //Step3:更新在线统计[],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
+            //Step4:将新设备编号加入缓存
+            System.out.println("## ----");
+            //# 更新总状态表 #
+            deviceService.updateEnvtempOfDeviceAllStatus(farmId, deviceCode);
+            System.out.println("## ----1");
+            //# 更新设备注册表 #
+            deviceService.updateDeviceRegister(farmId, deviceCode);
+            System.out.println("## ----2");
+            //# 更新在线统计 #
+            deviceService.updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
+            System.out.println("## ----3");
+            //# 将新设备编号加入在线缓存 #
+            cacheService.putDeviceToOnline(farmId, deviceCode, todayDateText);
+            System.out.println("## END");
+        }
     }
 }

+ 48 - 9
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/EartagListener.java

@@ -1,12 +1,18 @@
 package com.huimv.eartag2.process2.listener;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.huimv.eartag2.common.mq.Const;
+import com.huimv.eartag2.common.utils.BizConst;
+import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.process2.producer.ProcessProducer;
+import com.huimv.eartag2.process2.service.ICacheService;
+import com.huimv.eartag2.process2.service.IDeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
@@ -25,21 +31,41 @@ import java.util.Map;
 public class EartagListener {
     @Autowired
     private ProcessProducer processProducer;
+    @Autowired
+    private ICacheService cacheService;
+    @Autowired
+    private IDeviceService deviceService;
+    @Value("${redis.expire.eartag_online_set}")
+    private Integer eartagOnlineSetExpire;
 
     /**
-     * @Method      : processRawdata
+     * @Method : processRawdata
      * @Description : 订阅耳标数据队列数据
-     * @Params      : [RawMap]
-     * @Return      : void
-     * 
-     * @Author      : ZhuoNing
-     * @Date        : 2022/2/15       
-     * @Time        : 8:55
+     * @Params : [RawMap]
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/2/15
+     * @Time : 8:55
      */
-//    @RabbitListener(queues = Const.QUEUE_EARTAG)
-//    @RabbitHandler
+    @RabbitListener(queues = Const.QUEUE_EARTAG)
+    @RabbitHandler
     public void processRawdata(Map RawMap) throws ParseException {
         System.out.println("444 <<<<<<<<<<<<<<< 处理耳标数据>>" + RawMap.toString());
+        JSONObject eartagJo = JSON.parseObject(RawMap.get("eartag").toString());
+        //设备编码
+        String deviceCode = eartagJo.getString("device");
+        System.out.println("333 设备编号>>" + deviceCode);
+        //耳标号
+        String earmark = eartagJo.getString("earmark");
+        System.out.println("333 耳标号>>" + earmark);
+        //--保存设备注册数据(MySQL,Redis)
+        //--保存设备状态数据(MySQL,Redis)
+        String todayDateText = new DateUtil().getTodayDateText();
+        //--设备在线统计表
+        //--设备状态每日统计表
+        //--设备和耳标总状态表
+        //获取牧场id
+        String farmId = deviceService.getFarmIdByDeviceCode(deviceCode);
 //        String askText = RawMap.get("askText").toString();
 ////        System.out.println("askText>>" + askText);
 ////        JSONObject dataJo = new JSONObject();
@@ -49,7 +75,20 @@ public class EartagListener {
         //--保存耳标注册数据(MySQL,Redis)-processProducer
         //--保存耳标在线数据(MySQL,Redis)-processProducer
         //--保存耳标状态数据(MySQL,Redis)-processProducer
+//判断该设备编号是否存在牧场缓存在线集合当中;
+        if (cacheService.isExistEartagOnlineSet(farmId, earmark,todayDateText)) {
+            //#更新耳标在线统计数据[]
+            //#更新注册表中统计数据
+
+        } else {
+            //#更新总状态数据
+            //#更新耳标在线数据
+            //#更新耳标注册数据
+            //#将耳标号加入到耳标在线集合当中
 
+            //#将耳标号加入到耳标在线集合当中
+            cacheService.putEartagToOnlineInSet(farmId, earmark,todayDateText);
+        }
 
     }
 }

+ 46 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/ICacheService.java

@@ -0,0 +1,46 @@
+package com.huimv.eartag2.process2.service;
+
+import com.huimv.eartag2.common.dao.entity.EartagDeviceOnlineEntity;
+import com.huimv.eartag2.common.dao.entity.EartagDeviceRegisterEntity;
+import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
+
+import java.text.ParseException;
+
+public interface ICacheService {
+    //证是否存在当天总状态数据
+    Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException;
+
+    //
+    Object getFarmIdByDeviceCode(String deviceCode);
+
+    //
+    Object getCreateDateByFarmId(String farmId);
+
+    //
+    void putFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException;
+
+    //
+    void putAllFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException;
+
+    //
+    void flashAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity);
+
+    //判断是否在线状态
+    boolean isExistDeviceOnlineSet(String farmId, String deviceCode, String todayDateText);
+
+    //将deviceCode加入到在线缓存当中
+    void putDeviceToOnline(String farmId, String deviceCode, String todayDateText);
+
+    //
+    void putDeviceRegister(String deviceCode, EartagDeviceRegisterEntity deviceRegisterEntity);
+
+    //将设备数据保存到在线数据中
+    void putDeviceInOnline(String deviceOnlineHashKey, EartagDeviceOnlineEntity eartagDeviceOnlineEntity);
+
+    //
+    boolean isExistEartagOnlineSet(String farmId, String earmark, String todayDateText);
+
+
+    void putEartagToOnlineInSet(String farmId, String earmark, String todayDateText) throws ParseException;
+
+}

+ 18 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IDeviceService.java

@@ -18,4 +18,22 @@ public interface IDeviceService {
 
     //处理状态数据
     void updateFarmDeviceStatus(String deviceCode) throws ParseException;
+
+    //
+    String getFarmIdByDeviceCode(String deviceCode);
+
+    //更新设备注册信息
+    void updateDeviceRegister(String farmId, String deviceCode);
+
+    //更新设备在线信息
+    void updateDeviceOnline(String farmId, String deviceCode) throws ParseException;
+
+    //更新设备总状态信息
+    void updateDeviceAllStatus(String farmId, String deviceCode) throws ParseException;
+
+    //更新设备在线表中的环境温度参数
+    void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode) throws ParseException;
+
+    //更新总状态中的环境温度
+    void updateEnvtempOfDeviceAllStatus(String farmId, String deviceCode) throws ParseException;
 }

+ 0 - 20
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IRedisService.java

@@ -1,20 +0,0 @@
-package com.huimv.eartag2.process2.service;
-
-import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
-
-import java.text.ParseException;
-import java.util.Map;
-
-public interface IRedisService {
-    //证是否存在当天总状态数据
-    Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException;
-
-    //
-    Object getFarmIdByDeviceCode(String deviceCode);
-
-    //
-    Object getCreateDateByFarmId(String farmId);
-
-    //
-    void putFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException;
-}

+ 266 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java

@@ -0,0 +1,266 @@
+package com.huimv.eartag2.process2.service.impl;
+
+import com.huimv.eartag2.common.dao.entity.EartagDeviceOnlineEntity;
+import com.huimv.eartag2.common.dao.entity.EartagDeviceRegisterEntity;
+import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
+import com.huimv.eartag2.common.dao.repo.EartagDeviceRegisterRepo;
+import com.huimv.eartag2.common.utils.BizConst;
+import com.huimv.eartag2.common.utils.DateUtil;
+import com.huimv.eartag2.process2.service.ICacheService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+@Slf4j
+public class CacheServiceImpl implements ICacheService {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private EartagDeviceRegisterRepo eartagDeviceRegisterRepo;
+    @Value("${redis.expire.eartag_online_set}")
+    private Integer eartagOnlineSetExpire;
+
+    @Override
+    public Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException {
+        System.out.println("isExistTodayFarmAllStatus 2.deviceCode>>"+deviceCode);
+
+        //(1)从注册表缓存中(device_register_牧场id)取出牧场id,(2)如果缓存没有则从注册表(eartag_device_register)中查询00
+        //(1)
+        Object farmIdObj = redisTemplate.opsForHash().get(BizConst.DEVICE_REGISTER_PREFIX + deviceCode,"farmId");
+        System.out.println("2.farmIdObj>>"+farmIdObj);
+        String farmId = "";
+        if(farmIdObj != null){
+            farmId = farmIdObj.toString();
+        }else{
+            //(2)
+            EartagDeviceRegisterEntity eartagDeviceRegisterEntity = eartagDeviceRegisterRepo.getDeviceRegister(deviceCode);
+            System.out.println("2.eartagDeviceRegisterEntity>>"+eartagDeviceRegisterEntity.toString());
+            if(eartagDeviceRegisterEntity == null){
+                log.error("设备编号:"+deviceCode+",不存在.");
+                return null;
+            }
+            farmId = eartagDeviceRegisterEntity.getFarmId();
+        }
+        System.out.println("2.farmId>>"+farmId);
+        //从牧场总状态缓存中获取最近一次日期
+        Object createDateObj = redisTemplate.opsForHash().get(BizConst.FARM_ALL_STATUS_PREFIX + farmId,"createDate");
+        System.out.println("2.createDateObj>>"+createDateObj);
+        if(createDateObj == null){
+            //--总状态记录记录不存在
+            System.out.println("A.");
+            return false;
+        }else{
+            //
+            String createDate = createDateObj.toString();
+            System.out.println("缓存中上次操作日期 createDate>>"+createDate);
+            if(new DateUtil().getTodayDateText().trim().equalsIgnoreCase(createDate)){
+                //--当天记录存在,就返回true;
+                System.out.println("B.");
+                return true;
+            }else{
+                //--当天记录不存在,就返回false;
+                System.out.println("C.");
+                return false;
+            }
+        }
+    }
+
+    //# 读根据设备编码读取牧场id
+    @Override
+    public Object getFarmIdByDeviceCode(String deviceCode) {
+        Object farmIdObj = redisTemplate.opsForHash().get(BizConst.DEVICE_REGISTER_PREFIX + deviceCode,"farmId");
+        return farmIdObj;
+    }
+
+    @Override
+    public Object getCreateDateByFarmId(String farmId) {
+        return redisTemplate.opsForHash().get(BizConst.FARM_ALL_STATUS_PREFIX + farmId,"createDate");
+    }
+
+    @Override
+    public void putFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException {
+        DateUtil duObj = new DateUtil();
+        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceOnline",farmAllStatusEntity.getDeviceOnline());
+        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceOffline",farmAllStatusEntity.getDeviceOffline());
+        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceRate",farmAllStatusEntity.getDeviceRate());
+        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"updateTime",duObj.formatDateTime(duObj.getTodayText()));
+    }
+
+    @Override
+    public void putAllFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException {
+        Map allStatusMap = new HashMap();
+//        allStatusMap.put("id",farmAllStatusEntity.getId());
+        allStatusMap.put("deviceTotal",farmAllStatusEntity.getDeviceTotal());
+        allStatusMap.put("deviceOnline",farmAllStatusEntity.getDeviceOnline());
+        allStatusMap.put("deviceOffline",farmAllStatusEntity.getDeviceOffline());
+        allStatusMap.put("deviceRate",farmAllStatusEntity.getDeviceRate());
+        allStatusMap.put("deviceCancel",farmAllStatusEntity.getDeviceCancel());
+        allStatusMap.put("eartagTotal",farmAllStatusEntity.getEartagTotal());
+        allStatusMap.put("eartagOnline",farmAllStatusEntity.getEartagOnline());
+        allStatusMap.put("farmId",farmId);
+//        allStatusMap.put("updateTime",duObj.formatDateTime(duObj.getTodayText()));
+//        allStatusMap.put("createDate",duObj.getTodayDate());
+        allStatusMap.put("updateTime",farmAllStatusEntity.getUpdateTime());
+        allStatusMap.put("createDate",farmAllStatusEntity.getCreateDate());
+
+        System.out.println("allStatusMap>>"+allStatusMap.toString());
+        redisTemplate.opsForHash().putAll(BizConst.FARM_ALL_STATUS_PREFIX+farmId, allStatusMap);
+    }
+
+    @Override
+    public void flashAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) {
+        Map allStatusMap = new HashMap();
+        allStatusMap.put("id",farmAllStatusEntity.getId());
+        allStatusMap.put("deviceTotal",farmAllStatusEntity.getDeviceTotal());
+        allStatusMap.put("deviceOnline",farmAllStatusEntity.getDeviceOnline());
+        allStatusMap.put("deviceOffline",farmAllStatusEntity.getDeviceOffline());
+        allStatusMap.put("deviceRate",farmAllStatusEntity.getDeviceRate());
+        allStatusMap.put("deviceCancel",farmAllStatusEntity.getDeviceCancel());
+        allStatusMap.put("eartagTotal",farmAllStatusEntity.getEartagTotal());
+        allStatusMap.put("eartagOnline",farmAllStatusEntity.getEartagOnline());
+        allStatusMap.put("farmId",farmId);
+//        allStatusMap.put("updateTime",duObj.formatDateTime(duObj.getTodayText()));
+//        allStatusMap.put("createDate",duObj.getTodayDate());
+        allStatusMap.put("updateTime",farmAllStatusEntity.getUpdateTime());
+        allStatusMap.put("createDate",farmAllStatusEntity.getCreateDate());
+
+        System.out.println("allStatusMap>>"+allStatusMap.toString());
+        redisTemplate.opsForHash().putAll(BizConst.FARM_ALL_STATUS_PREFIX+farmId, allStatusMap);
+    }
+
+    @Override
+    public boolean isExistDeviceOnlineSet(String farmId, String deviceCode, String todayDateText) {
+        return redisTemplate.opsForSet().isMember(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+"_"+todayDateText, deviceCode);
+    }
+
+    /**
+     * @Method      : putDeviceCode
+     * @Description : 将新的设备编号加入到缓存当中;
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1
+     * @Time        : 13:42
+     */
+    @Override
+    public void putDeviceToOnline(String farmId, String deviceCode, String todayDateText) {
+        System.out.println("## (D)");
+        String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+"_"+todayDateText;
+        redisTemplate.opsForSet().add(setKey, deviceCode);
+        redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
+    }
+
+    @Override
+    public void putDeviceRegister(String deviceCode, EartagDeviceRegisterEntity deviceRegisterEntity) {
+        //--更新redis中注册表数据
+        String deviceRegHashKey = BizConst.DEVICE_REGISTER_PREFIX + deviceCode;
+        //将Entity转为Map
+        Map registerMap = RegisterEntityToMap(deviceRegisterEntity);
+        redisTemplate.opsForHash().putAll(deviceRegHashKey, registerMap);
+    }
+
+    /**
+     * @Method      : putDeviceInOnline
+     * @Description : 将数据库中的在线数据更新对应的缓存数据中
+     * @Params      : [deviceOnlineHashKey, eartagDeviceOnlineEntity]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1       
+     * @Time        : 16:07
+     */
+    @Override
+    public void putDeviceInOnline(String deviceOnlineHashKey, EartagDeviceOnlineEntity eartagDeviceOnlineEntity) {
+        Map map = new HashMap();
+        map.put("id", eartagDeviceOnlineEntity.getId());
+        map.put("deviceCode", eartagDeviceOnlineEntity.getDeviceCode());
+        map.put("alias", eartagDeviceOnlineEntity.getAlias());
+        map.put("heartbeatTotal", eartagDeviceOnlineEntity.getHeartbeatTotal());
+        map.put("envtempTotal", eartagDeviceOnlineEntity.getEnvtempTotal());
+        map.put("eartagTotal", eartagDeviceOnlineEntity.getEartagTotal());
+        map.put("firstTime", eartagDeviceOnlineEntity.getFirstTime());
+        map.put("lastTime", eartagDeviceOnlineEntity.getLastTime());
+        map.put("lastEnvtemp", eartagDeviceOnlineEntity.getLastEnvtemp());
+        map.put("lastEartag", eartagDeviceOnlineEntity.getLastEartag());
+        map.put("addDate", eartagDeviceOnlineEntity.getAddDate());
+        map.put("farmId", eartagDeviceOnlineEntity.getFarmId());
+        //更新缓存
+        redisTemplate.opsForHash().putAll(deviceOnlineHashKey, map);
+    }
+
+    /**
+     * @Method      : isExistEartagOnlineStatus
+     * @Description : 
+     * @Params      : [farmId, earmark]
+     * @Return      : boolean
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1       
+     * @Time        : 21:18
+     */
+    @Override
+    public boolean isExistEartagOnlineSet(String farmId, String earmark, String todayDateText) {
+//        redisTemplate.opsForSet().add(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+"_"+todayDateText, earmark);
+        redisTemplate.opsForSet().isMember(BizConst.SET_FARM_EARMARK_ONLINE_PREFIX + farmId+"_"+todayDateText, earmark);
+        return false;
+    }
+
+    @Override
+    public void putEartagToOnlineInSet(String farmId, String earmark, String todayDateText) throws ParseException {
+        String setKey = BizConst.SET_FARM_EARMARK_ONLINE_PREFIX + farmId+"_"+todayDateText;
+        redisTemplate.opsForSet().add(setKey, earmark);
+        redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
+    }
+
+    /**
+     * @Method : RegisterEntityToMap
+     * @Description :
+     * @Params : [deviceRegisterEntity]
+     * @Return : java.util.Map
+     * @Author : ZhuoNing
+     * @Date : 2022/2/21
+     * @Time : 14:03
+     */
+    private Map RegisterEntityToMap(EartagDeviceRegisterEntity deviceRegisterEntity) {
+        Map map = new HashMap();
+        map.put("Id", deviceRegisterEntity.getId());
+        map.put("deviceCode", deviceRegisterEntity.getDeviceCode());
+        map.put("farmId", deviceRegisterEntity.getFarmId());
+        map.put("farmName", deviceRegisterEntity.getFarmName());
+        map.put("typeF", deviceRegisterEntity.getTypeF());
+        map.put("stage", deviceRegisterEntity.getStage());
+        map.put("pigpenId", deviceRegisterEntity.getPigpenId());
+        map.put("unitId", deviceRegisterEntity.getUnitId());
+        map.put("registerTime", deviceRegisterEntity.getRegisterTime());
+        map.put("lastTime", deviceRegisterEntity.getLastTime());
+        map.put("activeStatus", deviceRegisterEntity.getActiveStatus());
+        map.put("activeTime", deviceRegisterEntity.getActiveTime());
+        map.put("deviceStatus", deviceRegisterEntity.getDeviceStatus());
+        map.put("deviceAlias", deviceRegisterEntity.getDeviceAlias());
+        map.put("location", deviceRegisterEntity.getLocation());
+        map.put("remark", deviceRegisterEntity.getRemark());
+        return map;
+    }
+    //#
+    public Object getValByKey(String hashKey,String key){
+        Object valueObj = redisTemplate.opsForHash().get(hashKey,key);
+        return valueObj;
+    }
+}

+ 255 - 32
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/DeviceServiceImpl.java

@@ -10,7 +10,7 @@ import com.huimv.eartag2.common.utils.BizConst;
 import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.process2.service.IDeviceService;
 //import com.huimv.eartag2.process2.utils.DateUtil;
-import com.huimv.eartag2.process2.service.IRedisService;
+import com.huimv.eartag2.process2.service.ICacheService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -21,6 +21,7 @@ import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -47,13 +48,13 @@ public class DeviceServiceImpl implements IDeviceService {
     @Autowired
     private EartagDeviceOnlineRepo eartagDeviceOnlineRepo;
     @Autowired
-    private IRedisService redisService;
+    private ICacheService cacheService;
     @Autowired
     private EartarFarmAllStatusRepo eartagFarmAllStatusRepo;
     @Autowired
     private EartagEartagRegisterRepo eartagRegisterRepo;
-    @Autowired
-    private EartagDeviceRegisterRepo eartagDeviceRegisterRepo;
+//    @Autowired
+//    private EartagDeviceRegisterRepo deviceRegisterRepo;
 
 
     // 保存在线数据
@@ -172,11 +173,12 @@ public class DeviceServiceImpl implements IDeviceService {
                 deviceAlias = deviceAliasObj.toString();
             } else {
                 //从设备注册表读取设备别名
+
                 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
             }
             //# 查询牧场id #
 //            Object farmIdObj = redisTemplate.opsForHash().get(BizConst.DEVICE_REGISTER_PREFIX + deviceCode,"farmId");
-            Object farmIdObj = redisService.getFarmIdByDeviceCode(deviceCode);
+            Object farmIdObj = cacheService.getFarmIdByDeviceCode(deviceCode);
             System.out.println("TEST farmIdObj>>" + farmIdObj.toString());
             //(1)
             EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
@@ -188,17 +190,18 @@ public class DeviceServiceImpl implements IDeviceService {
             newEartagDeviceOnlineEntity.setFirstTime(new Timestamp(new Date().getTime()));
             newEartagDeviceOnlineEntity.setLastTime(new Timestamp(new Date().getTime()));
             newEartagDeviceOnlineEntity.setAddDate(new java.sql.Date(new Date().getTime()));
-            newEartagDeviceOnlineEntity.setFarmId(Integer.parseInt(farmIdObj.toString()));
+            newEartagDeviceOnlineEntity.setFarmId(farmIdObj.toString());
             eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
             //(2)
             //将onlineEntity转为Map
             Map onlineMap = fromOnlineEntityToMap(newEartagDeviceOnlineEntity);
             redisTemplate.opsForHash().putAll(deviceOnlineHashKey, onlineMap);
         } else {
-            //# 修改今天在线记录(1),并将记录同步到redis(2) #
+            //# 修改今天数据库在线记录(1),并将记录同步到缓存中(2) #
             //(1)
             int total = eartagDeviceOnlineEntity.getHeartbeatTotal();
             eartagDeviceOnlineEntity.setHeartbeatTotal(total + 1);
+            eartagDeviceOnlineEntity.setLastTime(new Timestamp(new Date().getTime()));
             eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
             //(2)
             //将onlineEntity转为Map
@@ -242,19 +245,20 @@ public class DeviceServiceImpl implements IDeviceService {
 
         //(1)判断牧场总状态缓存是否存在
         Object createDateObj = checkIsExistFarmAllStatusCache(deviceCode);
+        System.out.println("## createDateObj>>"+createDateObj);
         if (createDateObj == null) {
             log.error("这个设备(" + deviceCode + ")的注册数据不存在,请检查具体原因.");
             System.out.println("1.");
             //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         } else if (createDateObj.toString().equalsIgnoreCase("0")) {
             System.out.println("牧场总状态缓存记录不存在.");
-            // B流程
+            // B流程(新建缓存)
             handleDeviceStatus(deviceCode);
             System.out.println("2.");
         }else if (createDateObj.toString().trim().equalsIgnoreCase(todayDateText)) {
             //计算在线状态,并同步到缓存
-            Object farmIdObj = redisService.getFarmIdByDeviceCode(deviceCode);
-            countDeviceStatus(farmIdObj.toString(),deviceCode,todayDateText);
+            Object farmIdObj = cacheService.getFarmIdByDeviceCode(deviceCode);
+            countAndFlashDeviceStatus(farmIdObj.toString(),deviceCode,todayDateText);
             System.out.println("3.");
             //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         } else {
@@ -266,11 +270,175 @@ public class DeviceServiceImpl implements IDeviceService {
         }
     }
 
+    @Override
+    public String getFarmIdByDeviceCode(String deviceCode) {
+        EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
+        return deviceRegisterEntity.getFarmId();
+    }
+
+    /**
+     * @Method      : updateDeviceRegister
+     * @Description : 
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1       
+     * @Time        : 10:56
+     */
+    @Override
+    public void updateDeviceRegister(String farmId, String deviceCode) {
+        System.out.println("## (2)/(B)");
+        //--更新mysql
+        EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
+        if (deviceRegisterEntity != null) {
+            deviceRegisterEntity.setActiveStatus(1);
+            deviceRegisterEntity.setActiveTime(new Timestamp(new Date().getTime()));
+            deviceRegisterRepo.saveAndFlush(deviceRegisterEntity);
+        }
+        //更新缓存中设备注册信息
+        cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
+    }
+
+    @Override
+    public void updateDeviceOnline(String farmId, String deviceCode) throws ParseException {
+        //# 先判断今天在线记录是否存在 #
+        //# 更新数据表 #
+        //# 更新缓存 #
+        //
+        updateDeviceOnlineCount(deviceCode);
+    }
+
+    @Override
+    public void updateDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
+        String todayDateText = new DateUtil().getTodayDateText();
+        System.out.println("1.todayDateText>>" + todayDateText);
+
+        //(1)判断牧场总状态缓存是否存在
+        Object createDateObj = checkIsExistFarmAllStatusCache(deviceCode);
+        System.out.println("## createDateObj>>"+createDateObj);
+        if (createDateObj == null) {
+            log.error("这个设备(" + deviceCode + ")的注册数据不存在,请检查具体原因.");
+            System.out.println("1.");
+        } else if (createDateObj.toString().equalsIgnoreCase("0")) {
+            System.out.println("牧场总状态缓存记录不存在.");
+            // B流程(新建缓存)
+            handleDeviceStatus(deviceCode);
+            System.out.println("2.");
+        }else if (createDateObj.toString().trim().equalsIgnoreCase(todayDateText)) {
+            //计算在线状态,并同步到缓存
+            Object farmIdObj = cacheService.getFarmIdByDeviceCode(deviceCode);
+            countAndFlashDeviceStatus(farmIdObj.toString(),deviceCode,todayDateText);
+            System.out.println("3.");
+        } else {
+            //缓存日期非当日日期
+            // B流程
+            handleDeviceStatus(deviceCode);
+            System.out.println("4.");
+        }
+    }
+
+    /**
+     * @Method      : updateDeviceOnlineWithEnvtemp
+     * @Description : 更新设备在线当中的环境温度参数
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1
+     * @Time        : 15:11
+     */
+    @Override
+    public void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode) throws ParseException {
+        System.out.println("## (1)/(C)");
+        //# 更新数据库
+        //# 更新在线缓存
+        String todayDateText = new DateUtil().getTodayDateText();
+        System.out.println("1.todayDateText>>" + todayDateText);
+        //读取在线日期
+        EartagDeviceOnlineEntity eartagDeviceOnlineEntity = eartagDeviceOnlineRepo.getDeviceOnline(deviceCode, todayDateText);
+        String deviceOnlineHashKey = BizConst.DEVICE_ONLINE_PREFIX + deviceCode;
+        if (eartagDeviceOnlineEntity == null) {
+            System.out.println("## (1.1)");
+            //不存在设备在线统计
+            //创建设备在线统计并创建缓存
+            createNewDeviceOnline(farmId,deviceCode);
+        }else{
+            System.out.println("## (1.2)");
+            int envtempTotal = eartagDeviceOnlineEntity.getEnvtempTotal();
+            System.out.println(">>>>>>>>>>> envtempTotal>>"+envtempTotal);
+            eartagDeviceOnlineEntity.setEnvtempTotal(++envtempTotal);
+            eartagDeviceOnlineEntity.setLastTime(new Timestamp(new Date().getTime()));
+            System.out.println(">>>>>>>>>>> eartagDeviceOnlineEntity>>"+eartagDeviceOnlineEntity);
+            eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
+            //更新设备在线缓存数据
+            cacheService.putDeviceInOnline(deviceOnlineHashKey,eartagDeviceOnlineEntity);
+        }
+    }
+
+    @Override
+    public void updateEnvtempOfDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
+        System.out.println("## (A)");
+        String todayDateText = new DateUtil().getTodayDateText();
+        //
+        EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
+        if(farmAllStatusEntity == null){
+            System.out.println("## (A.1)");
+            //设备总状态表信息不存在
+            //创建设备状态记录并更新缓存cache()
+            createNewFarmAllStatus(farmId,deviceCode);
+            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        }else{
+            System.out.println("## (A.2)");
+            //设备总状态表信息存在
+            //计算设备状态并更新缓存cache(在线数+1,离线数-1,计算设备在线率)
+            int onlineNum = farmAllStatusEntity.getDeviceOnline();
+            int offlineNum = farmAllStatusEntity.getDeviceOffline();
+            int total = farmAllStatusEntity.getDeviceTotal();
+            onlineNum++;
+            offlineNum--;
+            BigDecimal reateBd= new BigDecimal(onlineNum).divide(new BigDecimal(total),1,BigDecimal.ROUND_HALF_UP);
+            farmAllStatusEntity.setDeviceOnline(onlineNum);
+            farmAllStatusEntity.setDeviceOffline(offlineNum);
+            farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+            farmAllStatusEntity.setUpdateTime(new Timestamp(new Date().getTime()));
+            eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+            //# 同步更新牧场总状态缓存相关字段 #
+            cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
+        }
+    }
+
+    /**
+     * @Method      : createNewDeviceOnline
+     * @Description : 
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/1       
+     * @Time        : 16:33
+     */
+    private void createNewDeviceOnline(String farmId, String deviceCode) {
+        System.out.println("## (1.1.1)");
+        EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
+        newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
+        newEartagDeviceOnlineEntity.setHeartbeatTotal(0);;
+        newEartagDeviceOnlineEntity.setEnvtempTotal(1);
+        newEartagDeviceOnlineEntity.setEartagTotal(0);
+        newEartagDeviceOnlineEntity.setAddDate(new java.sql.Date(new Date().getTime()));
+        newEartagDeviceOnlineEntity.setFarmId(farmId);
+        newEartagDeviceOnlineEntity.setEnvtempFirstTime(new Timestamp(new Date().getTime()));
+        newEartagDeviceOnlineEntity.setEnvtempLastTime(new Timestamp(new Date().getTime()));
+        eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
+        //将新建的设备在线数据更新到设备在线缓存
+        cacheService.putDeviceInOnline(BizConst.DEVICE_ONLINE_PREFIX + deviceCode,newEartagDeviceOnlineEntity);
+    }
+
     //# 处理设备状态 #
     private void handleDeviceStatus(String deviceCode) throws ParseException {
         //(1)判断今天的牧场总状态记录是否存在
         //从设备注册表读取牧场id
-        EartagDeviceRegisterEntity deviceRegisterEntity = eartagDeviceRegisterRepo.getDeviceRegister(deviceCode);
+        EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
         String farmId = "";
         if(deviceRegisterEntity == null){
             log.error("这个设备(" + deviceCode + ")的注册数据不存在,请检查具体原因.");
@@ -282,10 +450,9 @@ public class DeviceServiceImpl implements IDeviceService {
         if(farmAllStatusEntity == null){
             //设备注册表信息不存在
             //创建设备状态记录并更新缓存cache()
-            createFarmAllStatus(deviceCode);
-            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+            createNewFarmAllStatus(farmId,deviceCode);
         }else{
-            //设备注册表信息存在
+            //设备注册表信息存在()
             //计算设备状态并更新缓存cache()
             countDeviceStatus(farmId,deviceCode,todayDateText);
         }
@@ -293,7 +460,7 @@ public class DeviceServiceImpl implements IDeviceService {
 
     //# 计算在线状态,并同步到缓存 #
     private void countDeviceStatus(String farmId,String deviceCode,String todayDateText) throws ParseException {
-        //读取牧场总状态数据
+        //读取牧场总状态数据(数据库记录确定存在)
         EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
         //在线数+1,离线数-1,计算设备在线率
         int onlineNum = farmAllStatusEntity.getDeviceOnline();
@@ -305,17 +472,44 @@ public class DeviceServiceImpl implements IDeviceService {
         farmAllStatusEntity.setDeviceOnline(onlineNum);
         farmAllStatusEntity.setDeviceOffline(offlineNum);
         farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+        farmAllStatusEntity.setUpdateTime(new Timestamp(new Date().getTime()));
         System.out.println("## farmAllStatusEntity>>"+farmAllStatusEntity);
         eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
-        //# 设置牧场总状态缓存相关字段 #
-        redisService.putFarmAllStatusCache(farmId,farmAllStatusEntity);
+        //# 同步更新牧场总状态缓存相关字段 #
+//        cacheService.putAllFarmAllStatusCache(farmId,farmAllStatusEntity);
+        cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
     }
 
+    //# 计算在线状态,并同步到缓存 #
+    private void countAndFlashDeviceStatus(String farmId,String deviceCode,String todayDateText) throws ParseException {
+        //读取牧场总状态数据(数据库记录确定存在)
+        EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
+        if(farmAllStatusEntity == null){
+            System.out.println("## farmAllStatusEntity == null");
+        }else{
+            System.out.println("## farmAllStatusEntity != null");
+        }
+        System.out.println("## farmAllStatusEntity>>"+farmAllStatusEntity.toString());
+        //在线数+1,离线数-1,计算设备在线率
+        int onlineNum = farmAllStatusEntity.getDeviceOnline();
+        int offlineNum = farmAllStatusEntity.getDeviceOffline();
+        int total = farmAllStatusEntity.getDeviceTotal();
+        onlineNum++;
+        offlineNum--;
+        BigDecimal reateBd= new BigDecimal(onlineNum).divide(new BigDecimal(total),1,BigDecimal.ROUND_HALF_UP);
+        farmAllStatusEntity.setDeviceOnline(onlineNum);
+        farmAllStatusEntity.setDeviceOffline(offlineNum);
+        farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+        System.out.println("## farmAllStatusEntity>>"+farmAllStatusEntity.toString());
+        eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+        //# 同步更新牧场总状态缓存相关字段 #
+        cacheService.putFarmAllStatusCache(farmId,farmAllStatusEntity);
+    }
 
     //断牧场总状态缓存是否存在
     private Object checkIsExistFarmAllStatusCache(String deviceCode) {
         //从缓存中获取farmId
-        Object farmIdObj = redisService.getFarmIdByDeviceCode(deviceCode);
+        Object farmIdObj = cacheService.getFarmIdByDeviceCode(deviceCode);
         System.out.println("22.farmIdObj>>" + farmIdObj);
         String farmId = "";
         if (farmIdObj != null) {
@@ -323,7 +517,7 @@ public class DeviceServiceImpl implements IDeviceService {
         } else {
             log.info("设备注册缓存里没有设备编号为" + deviceCode + "的设备注册信息");
             //(2)
-            EartagDeviceRegisterEntity eartagDeviceRegisterEntity = eartagDeviceRegisterRepo.getDeviceRegister(deviceCode);
+            EartagDeviceRegisterEntity eartagDeviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
             System.out.println("22.eartagDeviceRegisterEntity>>" + eartagDeviceRegisterEntity.toString());
             if (eartagDeviceRegisterEntity == null) {
                 log.error("设备注册记录不存在设备编号为" + deviceCode + "的设备注册信息.");
@@ -334,7 +528,7 @@ public class DeviceServiceImpl implements IDeviceService {
         }
         System.out.println("22.farmId>>" + farmId);
         //从牧场总状态缓存中获取最近一次日期
-        Object createDateObj = redisService.getCreateDateByFarmId(farmId);
+        Object createDateObj = cacheService.getCreateDateByFarmId(farmId);
         System.out.println("22.createDateObj>>" + createDateObj);
         if (createDateObj == null) {
             return "0";
@@ -347,7 +541,7 @@ public class DeviceServiceImpl implements IDeviceService {
 //        System.out.println("updateDeviceStatus 1.deviceCode>>" + deviceCode);
 //        //# 验证是否存在当天总状态记录
 //        //(1)
-//        if (redisService.isExistTodayFarmAllStatus(deviceCode)) {
+//        if (cacheService.isExistTodayFarmAllStatus(deviceCode)) {
 //            //缓存中存在该牧场当当天的总状态记录
 //            System.out.println("缓存中存在该记录:Yes");
 //            //更新总状态记录
@@ -360,23 +554,52 @@ public class DeviceServiceImpl implements IDeviceService {
 //    }
 
     //# 创建总状态记录 #
-    private void createFarmAllStatus(String deviceCode) {
-        //#从farm_all_status读取最近一天的数据
-        Map lastFarmAllStatusMap = getLastFarmAllStatus(deviceCode);
-
-        //MySQL:farm_all_status
-
-
-        //Redis:farm_all_status_farmId
-
-
+    private void createNewFarmAllStatus(String farmId,String deviceCode) {
+        System.out.println("## (A.1.1)");
+        //# 计算处于工作状态的设备总数(设备注册表)
+        List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmId(farmId);
+        Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
+        //设备总数
+        int deviceTotal = 0;
+        deviceTotal = Integer.parseInt(deviceRegObj[0].toString());
+        System.out.println("## total>>"+deviceTotal);
+        if(deviceTotal == 0){
+            log.error("该牧场没有任何处于工作状态的采集器设备.");
+            System.out.println("## (A.1.1.1)");
+        }else{
+            System.out.println("## (A.1.1.2)");
+            //# 计算耳标总数(耳标注册表)
+            int eartagTotal = 0;
+            List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId);
+            Object[] eartagRegObj = (Object[]) eartagRegList.get(0);
+            //处于工作状态的耳标总数
+            eartagTotal = Integer.parseInt(eartagRegObj[0].toString());
+
+            int onlineNum = 1;
+            int offlineNum = deviceTotal-1;
+            BigDecimal reateBd= new BigDecimal(onlineNum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+            //MySQL:farm_all_status
+            EartarFarmAllStatusEntity farmAllStatusEntity = new EartarFarmAllStatusEntity();
+            farmAllStatusEntity.setDeviceTotal(deviceTotal);
+            farmAllStatusEntity.setDeviceOnline(onlineNum);
+            farmAllStatusEntity.setDeviceOffline(offlineNum);
+            farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+            farmAllStatusEntity.setEartagTotal(eartagTotal);
+            farmAllStatusEntity.setEartagOnline(1);
+            farmAllStatusEntity.setUpdateTime(new Timestamp(new Date().getTime()));
+            farmAllStatusEntity.setCreateDate(new java.sql.Date(new Date().getTime()));
+            eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+
+            //Redis Cache:farm_all_status_+farmId
+            cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
+        }
     }
 
     //#
     private Map getLastFarmAllStatus(String deviceCode) {
 //        farmAllStatusRepo.getLastFarmAllStatus();
         //获取farmId,然后用farmId获取最近一天的数据
-        Object farmIdObj = redisService.getFarmIdByDeviceCode(deviceCode);
+        Object farmIdObj = cacheService.getFarmIdByDeviceCode(deviceCode);
         System.out.println("redis.farmIdObj>>" + farmIdObj);
         if (farmIdObj == null) {
             //# 初始化MySQL:farm_all_status

+ 0 - 105
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/RedisServiceImpl.java

@@ -1,105 +0,0 @@
-package com.huimv.eartag2.process2.service.impl;
-
-import com.huimv.eartag2.common.dao.entity.EartagDeviceRegisterEntity;
-import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
-import com.huimv.eartag2.common.dao.repo.EartagDeviceRegisterRepo;
-import com.huimv.eartag2.common.utils.BizConst;
-import com.huimv.eartag2.common.utils.DateUtil;
-import com.huimv.eartag2.process2.service.IRedisService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Service;
-
-import java.text.ParseException;
-import java.util.Map;
-
-/**
- * @Project : huimv.shiwan
- * @Package : com.huimv.biosafety.uface.controller
- * @Description : TODO
- * @Version : 1.0
- * @Author : ZhuoNing
- * @Create : 2020-12-25
- **/
-@Service
-@Slf4j
-public class RedisServiceImpl implements IRedisService {
-    @Autowired
-    private RedisTemplate redisTemplate;
-    @Autowired
-    private EartagDeviceRegisterRepo eartagDeviceRegisterRepo;
-
-    @Override
-    public Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException {
-        System.out.println("isExistTodayFarmAllStatus 2.deviceCode>>"+deviceCode);
-
-        //(1)从注册表缓存中(device_register_牧场id)取出牧场id,(2)如果缓存没有则从注册表(eartag_device_register)中查询00
-        //(1)
-        Object farmIdObj = redisTemplate.opsForHash().get(BizConst.DEVICE_REGISTER_PREFIX + deviceCode,"farmId");
-        System.out.println("2.farmIdObj>>"+farmIdObj);
-        String farmId = "";
-        if(farmIdObj != null){
-            farmId = farmIdObj.toString();
-        }else{
-            //(2)
-            EartagDeviceRegisterEntity eartagDeviceRegisterEntity = eartagDeviceRegisterRepo.getDeviceRegister(deviceCode);
-            System.out.println("2.eartagDeviceRegisterEntity>>"+eartagDeviceRegisterEntity.toString());
-            if(eartagDeviceRegisterEntity == null){
-                log.error("设备编号:"+deviceCode+",不存在.");
-                return null;
-            }
-            farmId = eartagDeviceRegisterEntity.getFarmId();
-        }
-        System.out.println("2.farmId>>"+farmId);
-        //从牧场总状态缓存中获取最近一次日期
-        Object createDateObj = redisTemplate.opsForHash().get(BizConst.FARM_ALL_STATUS_PREFIX + farmId,"createDate");
-        System.out.println("2.createDateObj>>"+createDateObj);
-        if(createDateObj == null){
-            //--总状态记录记录不存在
-            System.out.println("A.");
-            return false;
-        }else{
-            //
-            String createDate = createDateObj.toString();
-            System.out.println("缓存中上次操作日期 createDate>>"+createDate);
-            if(new DateUtil().getTodayDateText().trim().equalsIgnoreCase(createDate)){
-                //--当天记录存在,就返回true;
-                System.out.println("B.");
-                return true;
-            }else{
-                //--当天记录不存在,就返回false;
-                System.out.println("C.");
-                return false;
-            }
-        }
-    }
-
-    //# 读根据设备编码读取牧场id
-    @Override
-    public Object getFarmIdByDeviceCode(String deviceCode) {
-        Object farmIdObj = redisTemplate.opsForHash().get(BizConst.DEVICE_REGISTER_PREFIX + deviceCode,"farmId");
-        return farmIdObj;
-    }
-
-    @Override
-    public Object getCreateDateByFarmId(String farmId) {
-        return redisTemplate.opsForHash().get(BizConst.FARM_ALL_STATUS_PREFIX + farmId,"createDate");
-    }
-
-    @Override
-    public void putFarmAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) throws ParseException {
-        DateUtil duObj = new DateUtil();
-//        redisTemplate.opsForHash().putAll(BizConst.FARM_ALL_STATUS_PREFIX+farmId, allStatusMap);
-        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceOnline",farmAllStatusEntity.getDeviceOnline());
-        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceOffline",farmAllStatusEntity.getDeviceOffline());
-        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"deviceRate",farmAllStatusEntity.getDeviceRate());
-        redisTemplate.opsForHash().put(BizConst.FARM_ALL_STATUS_PREFIX+farmId,"updateTime",duObj.formatDateTime(duObj.getTodayText()));
-    }
-
-    //#
-    public Object getValByKey(String hashKey,String key){
-        Object valueObj = redisTemplate.opsForHash().get(hashKey,key);
-        return valueObj;
-    }
-}

+ 1 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/resources/application.properties

@@ -1,2 +1,3 @@
 spring.profiles.active=dev
 device.register.prefix=device_register_
+redis.expire.eartag_online_set=25

+ 41 - 12
huimv-eartag2-platform/huimv-eartag2-process2/src/test/java/com/huimv/eartag2/process2/utils/RedisUtil.java

@@ -1,12 +1,16 @@
 package com.huimv.eartag2.process2.utils;
 
+import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.redis.core.RedisTemplate;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Project : huimv.shiwan
@@ -18,22 +22,47 @@ import java.util.Map;
  **/
 @SpringBootTest
 public class RedisUtil {
-    @Autowired
+//    @Autowired
+//    private RedisTemplate redisTemplate;
+    @Resource
     private RedisTemplate redisTemplate;
 
     @Test
+    public void redisSetTest() {
+        redisTemplate.opsForSet().add("testSet", "java");
+        Assert.assertTrue(redisTemplate.opsForSet().isMember("testSet", "java"));
+        redisTemplate.opsForSet().add("testSet", "python");
+        Assert.assertTrue(redisTemplate.opsForSet().isMember("testSet", "python"));
+        redisTemplate.opsForSet().add("testSet", "perl");
+        Assert.assertTrue(redisTemplate.opsForSet().isMember("testSet", "perl"));
+        Set<String> stringSet = new HashSet<>();
+        stringSet.add("java");
+        stringSet.add("python");
+        stringSet.add("perl");
+        Assert.assertEquals(redisTemplate.opsForSet().members("testSet"), stringSet);
+        Assert.assertFalse(redisTemplate.opsForSet().isMember("testSet",
+                redisTemplate.opsForSet().pop("testSet")));
+        Assert.assertFalse(redisTemplate.opsForSet().isMember("testSet",
+                redisTemplate.opsForSet().pop("testSet")));
+        Assert.assertFalse(redisTemplate.opsForSet().isMember("testSet",
+                redisTemplate.opsForSet().pop("testSet")));
+    }
+
+    @Test
     public void test1(){
+//        System.out.println("test1");
+//        String deviceCode = "202007239999869";
+//        Map map = new HashMap<>();
+//        map.put("name","栋舍");
+//        map.put("id","001");
+//        System.out.println("map>>"+map.toString());
+//        //为hash结构设置多个键值对(hmset)
+////        redisTemplate.opsForHash().putAll("device_register_"+deviceCode, map);
+//
+//
+//        Object actObj = redisTemplate.opsForHash().get(deviceCode, "act");
+//        System.out.println("actObj>>"+actObj);
         System.out.println("test1");
-        String deviceCode = "202007239999869";
-        Map map = new HashMap<>();
-        map.put("name","栋舍");
-        map.put("id","001");
-        System.out.println("map>>"+map.toString());
-        //为hash结构设置多个键值对(hmset)
-//        redisTemplate.opsForHash().putAll("device_register_"+deviceCode, map);
-
-
-        Object actObj = redisTemplate.opsForHash().get(deviceCode, "act");
-        System.out.println("actObj>>"+actObj);
     }
+
 }