Explorar el Código

耳标数据完成。

zhuoning hace 3 años
padre
commit
4fd869974b
Se han modificado 12 ficheros con 368 adiciones y 104 borrados
  1. 16 16
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagOnlineEntity.java
  2. 24 12
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagRegisterEntity.java
  3. 13 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagOnlineRepo.java
  4. 3 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegisterRepo.java
  5. 11 1
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/controller/RedisContrller.java
  6. 53 46
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/DeviceListener.java
  7. 40 10
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/EartagListener.java
  8. 2 1
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IDeviceService.java
  9. 19 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IEartagService.java
  10. 9 3
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java
  11. 49 15
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/DeviceServiceImpl.java
  12. 129 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/EartagServiceImpl.java

+ 16 - 16
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagOnlineEntity.java

@@ -16,8 +16,8 @@ public class EartagEartagOnlineEntity implements Serializable {
     @Column(name = "id", nullable = false)
     private Integer id;
 
-    @Column(name = "device_code")
-    private Integer deviceCode;
+    @Column(name = "earmark")
+    private String earmark;
 
     @Column(name = "total")
     private Integer total;
@@ -29,16 +29,16 @@ public class EartagEartagOnlineEntity implements Serializable {
     private Timestamp lastTime;
 
     @Column(name = "env_temp")
-    private Float envTemp;
+    private String envTemp;
 
     @Column(name = "eartag_temp")
-    private Float eartagTemp;
+    private String eartagTemp;
 
     @Column(name = "add_date")
     private Date addDate;
 
     @Column(name = "farm_id")
-    private Integer farmId;
+    private String farmId;
 
     public void setId(Integer id) {
         this.id = id;
@@ -48,12 +48,12 @@ public class EartagEartagOnlineEntity implements Serializable {
         return id;
     }
 
-    public void setDeviceCode(Integer deviceCode) {
-        this.deviceCode = deviceCode;
+    public void setEarmark(String earmark) {
+        this.earmark = earmark;
     }
 
-    public Integer getDeviceCode() {
-        return deviceCode;
+    public String getEarmark() {
+        return earmark;
     }
 
     public void setTotal(Integer total) {
@@ -80,19 +80,19 @@ public class EartagEartagOnlineEntity implements Serializable {
         return lastTime;
     }
 
-    public void setEnvTemp(Float envTemp) {
+    public void setEnvTemp(String envTemp) {
         this.envTemp = envTemp;
     }
 
-    public Float getEnvTemp() {
+    public String getEnvTemp() {
         return envTemp;
     }
 
-    public void setEartagTemp(Float eartagTemp) {
+    public void setEartagTemp(String eartagTemp) {
         this.eartagTemp = eartagTemp;
     }
 
-    public Float getEartagTemp() {
+    public String getEartagTemp() {
         return eartagTemp;
     }
 
@@ -104,11 +104,11 @@ public class EartagEartagOnlineEntity 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;
     }
 
@@ -116,7 +116,7 @@ public class EartagEartagOnlineEntity implements Serializable {
     public String toString() {
         return "EartagEartagOnlineEntity{" +
                 "id=" + id + '\'' +
-                "deviceCode=" + deviceCode + '\'' +
+                "earmark=" + earmark + '\'' +
                 "total=" + total + '\'' +
                 "firstTime=" + firstTime + '\'' +
                 "lastTime=" + lastTime + '\'' +

+ 24 - 12
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEartagRegisterEntity.java

@@ -16,7 +16,7 @@ public class EartagEartagRegisterEntity implements Serializable {
     private Integer id;
 
     @Column(name = "earmark")
-    private Integer earmark;
+    private String earmark;
 
     @Column(name = "first_time")
     private Timestamp firstTime;
@@ -25,10 +25,13 @@ public class EartagEartagRegisterEntity implements Serializable {
     private Timestamp lastTime;
 
     @Column(name = "first_device")
-    private Integer firstDevice;
+    private String firstDevice;
 
     @Column(name = "belong_device")
-    private Integer belongDevice;
+    private String belongDevice;
+
+    @Column(name = "last_device")
+    private String lastDevice;
 
     @Column(name = "register_time")
     private Timestamp registerTime;
@@ -40,7 +43,7 @@ public class EartagEartagRegisterEntity implements Serializable {
     private String remark;
 
     @Column(name = "farm_id")
-    private Integer farmId;
+    private String farmId;
 
     @Column(name = "active_status")
     private Integer activeStatus;
@@ -59,11 +62,11 @@ public class EartagEartagRegisterEntity implements Serializable {
         return id;
     }
 
-    public void setEarmark(Integer earmark) {
+    public void setEarmark(String earmark) {
         this.earmark = earmark;
     }
 
-    public Integer getEarmark() {
+    public String getEarmark() {
         return earmark;
     }
 
@@ -83,22 +86,30 @@ public class EartagEartagRegisterEntity implements Serializable {
         return lastTime;
     }
 
-    public void setFirstDevice(Integer firstDevice) {
+    public void setFirstDevice(String firstDevice) {
         this.firstDevice = firstDevice;
     }
 
-    public Integer getFirstDevice() {
+    public String getFirstDevice() {
         return firstDevice;
     }
 
-    public void setBelongDevice(Integer belongDevice) {
+    public void setBelongDevice(String belongDevice) {
         this.belongDevice = belongDevice;
     }
 
-    public Integer getBelongDevice() {
+    public String getBelongDevice() {
         return belongDevice;
     }
 
+    public void setLastDevice(String lastDevice) {
+        this.lastDevice = lastDevice;
+    }
+
+    public String getLastDevice() {
+        return lastDevice;
+    }
+
     public void setRegisterTime(Timestamp registerTime) {
         this.registerTime = registerTime;
     }
@@ -123,11 +134,11 @@ public class EartagEartagRegisterEntity implements Serializable {
         return remark;
     }
 
-    public void setFarmId(Integer farmId) {
+    public void setFarmId(String farmId) {
         this.farmId = farmId;
     }
 
-    public Integer getFarmId() {
+    public String getFarmId() {
         return farmId;
     }
 
@@ -164,6 +175,7 @@ public class EartagEartagRegisterEntity implements Serializable {
                 "lastTime=" + lastTime + '\'' +
                 "firstDevice=" + firstDevice + '\'' +
                 "belongDevice=" + belongDevice + '\'' +
+                "lastDevice=" + lastDevice + '\'' +
                 "registerTime=" + registerTime + '\'' +
                 "registerType=" + registerType + '\'' +
                 "remark=" + remark + '\'' +

+ 13 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagOnlineRepo.java

@@ -3,7 +3,20 @@ package com.huimv.eartag2.common.dao.repo;
 import com.huimv.eartag2.common.dao.entity.EartagEartagOnlineEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 
 public interface EartagEartagOnlineRepo extends JpaRepository<EartagEartagOnlineEntity, Integer>, JpaSpecificationExecutor<EartagEartagOnlineEntity> {
 
+    /**
+     * @Method      : getOneByEarmarkAndFarmId
+     * @Description : 
+     * @Params      : [earmark, todayDateText, farmId]
+     * @Return      : com.huimv.eartag2.common.dao.entity.EartagEartagOnlineEntity
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/2       
+     * @Time        : 16:09
+     */
+    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE earmark=?1 AND DATE_FORMAT(add_date,'%Y-%m-%d')=DATE_FORMAT(?2,'%Y-%m-%d') AND farm_id=?3")
+    EartagEartagOnlineEntity getOneByEarmarkAndFarmId(String earmark, String todayDateText, String farmId);
 }

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

@@ -11,4 +11,7 @@ public interface EartagEartagRegisterRepo extends JpaRepository<EartagEartagRegi
 
     @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_eartag_register WHERE farm_id=?1 AND live_status=1")
     List<Object[]> getEartagCountByFarmId(String farmId);
+
+    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_register WHERE farm_id=?2 AND earmark=?1")
+    EartagEartagRegisterEntity getOneByEarmark(String earmark, String farmId);
 }

+ 11 - 1
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/controller/RedisContrller.java

@@ -34,8 +34,18 @@ public class RedisContrller {
         System.out.println(setKey+" >>"+resultSet);
         boolean memberStatus = redisTemplate.opsForSet().isMember(setKey,company);
         System.out.println("memberStatus>>"+memberStatus);
-        redisTemplate.expire(setKey,2, TimeUnit.HOURS);
+//        redisTemplate.expire(setKey,2, TimeUnit.HOURS);
+        redisTemplate.expire(setKey,2, TimeUnit.MINUTES);
         //根据key获取过期时间
         System.out.println("过期时间>>"+redisTemplate.getExpire(setKey));
+
+        setKey = "farm_earmark_online_101_2022-03-02";
+        Set<String> resultSet2 = redisTemplate.opsForSet().members(setKey);
+        System.out.println(setKey+" members >>"+resultSet2);
+
+        setKey = "farm_earmark_online_101_2022-03-02";
+        boolean memberStatus2 = redisTemplate.opsForSet().isMember(setKey,company);
+        System.out.println(setKey+" isMember >>"+memberStatus2);
+
     }
 }

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

@@ -15,6 +15,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.SetOperations;
 import org.springframework.stereotype.Component;
 
+import java.sql.Date;
+import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Map;
 import java.util.Set;
@@ -59,13 +61,16 @@ public class DeviceListener {
         //获取牧场id
         String farmId = deviceService.getFarmIdByDeviceCode(deviceCode);
         String todayDateText = new DateUtil().getTodayDateText();
+        Date todayDate = new Date(new java.util.Date().getTime());
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
+
         //判断该设备编号是否存在缓存在线集合当中;
         if (cacheService.isExistDeviceOnlineSet(farmId, deviceCode, todayDateText)) {
             //Step1:更新设备注册表[设置活动状态为1,设置活动状态更新时间]
             //Step2:更新在线统计[心跳数+1,心跳第一次上传时间,心跳最后一次时间],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
 
             //# 更新设备注册表 #
-            deviceService.updateDeviceRegister(farmId, deviceCode);
+            deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
 
             //# 更新在线统计 #
             deviceService.updateDeviceOnline(farmId, deviceCode);
@@ -75,15 +80,15 @@ public class DeviceListener {
             //Step3:更新在线统计[],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
             //Step4:将新设备编号加入缓存[]
 
-            //# 更新总状态表 #
-            deviceService.updateDeviceAllStatus(farmId, deviceCode);
-
             //# 更新设备注册表 #
-            deviceService.updateDeviceRegister(farmId, deviceCode);
+            deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
 
-            //# 更新在线统计 #
+            //# 更新在线统计 #【重写】
             deviceService.updateDeviceOnline(farmId, deviceCode);
 
+            //# 更新总状态表 # 【重写】
+            deviceService.updateDeviceAllStatus(farmId, deviceCode);
+
             //# 将新设备编号加入在线缓存 #
             cacheService.putDeviceToOnline(farmId, deviceCode,todayDateText);
         }
@@ -104,39 +109,39 @@ public class DeviceListener {
 //        deviceService.updateFarmDeviceStatus(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);
+//    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());
 //
+////        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);
 //
-////            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());
-
-//        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);
-
-        Set<String> resultSet = redisTemplate.opsForSet().members(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId);
-        System.out.println(BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId + " >>" + resultSet);
-    }
+//        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
@@ -177,30 +182,32 @@ public class DeviceListener {
         //      (C)更新在线统计;
         //      (D)将设备好加入到在线缓存集合当中;
         String todayDateText = new DateUtil().getTodayDateText();
+        Date todayDate = new Date(new java.util.Date().getTime());
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
         //判断该设备编号是否存在牧场缓存在线集合当中;
         if (cacheService.isExistDeviceOnlineSet(farmId, deviceCode,todayDateText)) {
-            System.out.println("## ++++");
+//            System.out.println("## ++++");
             //# 更新在线统计 #
             deviceService.updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
-            System.out.println("## ++++1");
+//            System.out.println("## ++++1");
             //# 更新设备注册表 #
-            deviceService.updateDeviceRegister(farmId, deviceCode);
-            System.out.println("## ++++2");
+            deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
+//            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("## ----");
+//            System.out.println("## ----");
             //# 更新总状态表 #
             deviceService.updateEnvtempOfDeviceAllStatus(farmId, deviceCode);
-            System.out.println("## ----1");
+//            System.out.println("## ----1");
             //# 更新设备注册表 #
-            deviceService.updateDeviceRegister(farmId, deviceCode);
-            System.out.println("## ----2");
+            deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
+//            System.out.println("## ----2");
             //# 更新在线统计 #
             deviceService.updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
-            System.out.println("## ----3");
+//            System.out.println("## ----3");
             //# 将新设备编号加入在线缓存 #
             cacheService.putDeviceToOnline(farmId, deviceCode, todayDateText);
             System.out.println("## END");

+ 40 - 10
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/EartagListener.java

@@ -2,12 +2,14 @@ package com.huimv.eartag2.process2.listener;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.huimv.eartag2.common.dao.repo.EartagEartagRegisterRepo;
 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 com.huimv.eartag2.process2.service.IEartagService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
@@ -15,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.sql.Date;
+import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Map;
 
@@ -35,6 +39,10 @@ public class EartagListener {
     private ICacheService cacheService;
     @Autowired
     private IDeviceService deviceService;
+    @Autowired
+    private IEartagService eartagService;
+    @Autowired
+    private EartagEartagRegisterRepo eartagRegisterRepo;
     @Value("${redis.expire.eartag_online_set}")
     private Integer eartagOnlineSetExpire;
 
@@ -54,13 +62,18 @@ public class EartagListener {
         JSONObject eartagJo = JSON.parseObject(RawMap.get("eartag").toString());
         //设备编码
         String deviceCode = eartagJo.getString("device");
-        System.out.println("333 设备编号>>" + deviceCode);
+//        System.out.println("444 设备编号>>" + deviceCode);
         //耳标号
         String earmark = eartagJo.getString("earmark");
-        System.out.println("333 耳标号>>" + earmark);
+//        System.out.println("444 耳标号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + earmark);
+
         //--保存设备注册数据(MySQL,Redis)
         //--保存设备状态数据(MySQL,Redis)
         String todayDateText = new DateUtil().getTodayDateText();
+        Date todayDate = new Date(new java.util.Date().getTime());
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
+
+//        System.out.println("## eartagOnlineSetExpire>>"+eartagOnlineSetExpire);
         //--设备在线统计表
         //--设备状态每日统计表
         //--设备和耳标总状态表
@@ -75,18 +88,35 @@ public class EartagListener {
         //--保存耳标注册数据(MySQL,Redis)-processProducer
         //--保存耳标在线数据(MySQL,Redis)-processProducer
         //--保存耳标状态数据(MySQL,Redis)-processProducer
-//判断该设备编号是否存在牧场缓存在线集合当中;
+
+        //判断该设备编号是否存在牧场缓存在线集合当中;
         if (cacheService.isExistEartagOnlineSet(farmId, earmark,todayDateText)) {
-            //#更新耳标在线统计数据[]
-            //#更新注册表中统计数据
+            //Step1:更新耳标在线统计数据[上传记录数、最后上传时间、环境温度数据、耳标温度数据]
+            //Step2:更新耳标注册表中统计数据[活动状态、活动状态更新时间]
 
+            //Step1:更新耳标在线统计数据
+            eartagService.updateEartagOnline(earmark,deviceCode,todayDateText,todayDate,nowTimestamp,eartagJo,farmId);
+
+            //Step2:更新耳标注册表中统计数据
+            eartagService.updateEartagRegister(earmark,deviceCode,nowTimestamp,farmId);
+//            System.out.println("## 4.11111111111111111111111111");
         } else {
-            //#更新总状态数据
-            //#更新耳标在线数据
-            //#更新耳标注册数据
-            //#将耳标号加入到耳标在线集合当中
+            //Step1:更新耳标注册数据
+            //Step2:更新耳标在线数据
+            //Step3:更新总状态数据
+            //Step4:将耳标号加入到耳标在线集合当中
+//            System.out.println("## 4.A");
+
+            //Step1:更新耳标注册数据
+            eartagService.updateEartagRegister(earmark,deviceCode,nowTimestamp,farmId);
+
+            //Step2:更新耳标在线数据
+            eartagService.updateEartagOnline(earmark,deviceCode,todayDateText,todayDate,nowTimestamp,eartagJo,farmId);
+
+            //Step3:更新总状态数据
+            eartagService.updateEartagOfAllStatus(earmark,deviceCode,todayDateText,farmId);
 
-            //#将耳标号加入到耳标在线集合当中
+            //Step4:将耳标号加入到耳标在线集合当中
             cacheService.putEartagToOnlineInSet(farmId, earmark,todayDateText);
         }
 

+ 2 - 1
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IDeviceService.java

@@ -1,5 +1,6 @@
 package com.huimv.eartag2.process2.service;
 
+import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Map;
 
@@ -23,7 +24,7 @@ public interface IDeviceService {
     String getFarmIdByDeviceCode(String deviceCode);
 
     //更新设备注册信息
-    void updateDeviceRegister(String farmId, String deviceCode);
+    void updateDeviceRegister(String farmId, String deviceCode, Timestamp nowTimestamp);
 
     //更新设备在线信息
     void updateDeviceOnline(String farmId, String deviceCode) throws ParseException;

+ 19 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/IEartagService.java

@@ -0,0 +1,19 @@
+package com.huimv.eartag2.process2.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.sql.Date;
+import java.sql.Timestamp;
+
+public interface IEartagService {
+    //
+    void updateEartagRegister(String earmark, String deviceCode, Timestamp nowTimestamp, String farmId);
+    //
+    void updateEartagOnline(String earmark, String deviceCode, String todayDateText, Date todayDate, Timestamp nowTimestamp, JSONObject eartagJo, String farmId);
+    //
+    void updateEartagOfAllStatus(String earmark, String deviceCode, String todayDateText,String farmId);
+
+
+    //读取耳标注册数据
+    Integer getEartagRegTotalByFarmId(String farmId);
+}

+ 9 - 3
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
 import java.text.ParseException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -161,7 +162,7 @@ public class CacheServiceImpl implements ICacheService {
      */
     @Override
     public void putDeviceToOnline(String farmId, String deviceCode, String todayDateText) {
-        System.out.println("## (D)");
+//        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);
@@ -218,15 +219,19 @@ public class CacheServiceImpl implements ICacheService {
     @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;
+        String setKey = BizConst.SET_FARM_EARMARK_ONLINE_PREFIX + farmId+"_"+todayDateText;
+        System.out.println("## eartag.setKey .isExistEartagOnlineSet >>"+setKey+",earmark>>"+earmark);
+        return redisTemplate.opsForSet().isMember(setKey, earmark);
     }
 
     @Override
     public void putEartagToOnlineInSet(String farmId, String earmark, String todayDateText) throws ParseException {
         String setKey = BizConst.SET_FARM_EARMARK_ONLINE_PREFIX + farmId+"_"+todayDateText;
+        System.out.println("## eartag.setKey .putEartagToOnlineInSet>>"+setKey+",earmark>>"+earmark);
         redisTemplate.opsForSet().add(setKey, earmark);
         redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
+        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+        System.out.println("## "+setKey+">>"+resultSet.size()+" >>"+resultSet);
     }
 
     /**
@@ -258,6 +263,7 @@ public class CacheServiceImpl implements ICacheService {
         map.put("remark", deviceRegisterEntity.getRemark());
         return map;
     }
+
     //#
     public Object getValByKey(String hashKey,String key){
         Object valueObj = redisTemplate.opsForHash().get(hashKey,key);

+ 49 - 15
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/DeviceServiceImpl.java

@@ -287,14 +287,26 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Time        : 10:56
      */
     @Override
-    public void updateDeviceRegister(String farmId, String deviceCode) {
-        System.out.println("## (2)/(B)");
+    public void updateDeviceRegister(String farmId, String deviceCode,Timestamp nowTimestamp) {
+//        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);
+        }else{
+            //设备注册数据不存在
+            //新建设备注册记录
+            EartagDeviceRegisterEntity newDeviceRegisterEntity = new EartagDeviceRegisterEntity();
+            newDeviceRegisterEntity.setDeviceCode(deviceCode);
+            newDeviceRegisterEntity.setFarmId(farmId);
+            newDeviceRegisterEntity.setRegisterTime(nowTimestamp);
+            newDeviceRegisterEntity.setActiveStatus(1);
+            newDeviceRegisterEntity.setActiveTime(nowTimestamp);
+            newDeviceRegisterEntity.setDeviceStatus(1);
+            deviceRegisterRepo.saveAndFlush(newDeviceRegisterEntity);
         }
         //更新缓存中设备注册信息
         cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
@@ -305,15 +317,37 @@ public class DeviceServiceImpl implements IDeviceService {
         //# 先判断今天在线记录是否存在 #
         //# 更新数据表 #
         //# 更新缓存 #
-        //
-        updateDeviceOnlineCount(deviceCode);
-    }
 
+        //+++++++++++++++++++++++++++++++++++++++++++++++++++++ 3.3
+
+        //--(优化思路) --//
+//        updateDeviceOnlineCount(deviceCode);
+
+    }
+    
+    /**
+     * @Method      : updateDeviceAllStatus
+     * @Description : 更新总状态
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/2       
+     * @Time        : 20:51
+     */
     @Override
     public void updateDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
+
+        //+++++++++++++++++++++++++++++++++++++++++++++++++++++ 3.3
+    }
+
+//    @Override
+    public void updateDeviceAllStatus_old1(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);
@@ -350,26 +384,26 @@ public class DeviceServiceImpl implements IDeviceService {
      */
     @Override
     public void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode) throws ParseException {
-        System.out.println("## (1)/(C)");
+//        System.out.println("## (1)/(C)");
         //# 更新数据库
         //# 更新在线缓存
         String todayDateText = new DateUtil().getTodayDateText();
-        System.out.println("1.todayDateText>>" + todayDateText);
+//        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)");
+//            System.out.println("## (1.1)");
             //不存在设备在线统计
             //创建设备在线统计并创建缓存
             createNewDeviceOnline(farmId,deviceCode);
         }else{
-            System.out.println("## (1.2)");
+//            System.out.println("## (1.2)");
             int envtempTotal = eartagDeviceOnlineEntity.getEnvtempTotal();
-            System.out.println(">>>>>>>>>>> envtempTotal>>"+envtempTotal);
+//            System.out.println(">>>>>>>>>>> envtempTotal>>"+envtempTotal);
             eartagDeviceOnlineEntity.setEnvtempTotal(++envtempTotal);
             eartagDeviceOnlineEntity.setLastTime(new Timestamp(new Date().getTime()));
-            System.out.println(">>>>>>>>>>> eartagDeviceOnlineEntity>>"+eartagDeviceOnlineEntity);
+//            System.out.println(">>>>>>>>>>> eartagDeviceOnlineEntity>>"+eartagDeviceOnlineEntity);
             eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
             //更新设备在线缓存数据
             cacheService.putDeviceInOnline(deviceOnlineHashKey,eartagDeviceOnlineEntity);
@@ -378,18 +412,18 @@ public class DeviceServiceImpl implements IDeviceService {
 
     @Override
     public void updateEnvtempOfDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
-        System.out.println("## (A)");
+//        System.out.println("## (A)");
         String todayDateText = new DateUtil().getTodayDateText();
         //
         EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
         if(farmAllStatusEntity == null){
-            System.out.println("## (A.1)");
+//            System.out.println("## (A.1)");
             //设备总状态表信息不存在
             //创建设备状态记录并更新缓存cache()
             createNewFarmAllStatus(farmId,deviceCode);
             //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         }else{
-            System.out.println("## (A.2)");
+//            System.out.println("## (A.2)");
             //设备总状态表信息存在
             //计算设备状态并更新缓存cache(在线数+1,离线数-1,计算设备在线率)
             int onlineNum = farmAllStatusEntity.getDeviceOnline();
@@ -419,7 +453,7 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Time        : 16:33
      */
     private void createNewDeviceOnline(String farmId, String deviceCode) {
-        System.out.println("## (1.1.1)");
+//        System.out.println("## (1.1.1)");
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setHeartbeatTotal(0);;

+ 129 - 0
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/EartagServiceImpl.java

@@ -0,0 +1,129 @@
+package com.huimv.eartag2.process2.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.eartag2.common.dao.entity.EartagEartagOnlineEntity;
+import com.huimv.eartag2.common.dao.entity.EartagEartagRegisterEntity;
+import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
+import com.huimv.eartag2.common.dao.repo.EartagEartagOnlineRepo;
+import com.huimv.eartag2.common.dao.repo.EartagEartagRegisterRepo;
+import com.huimv.eartag2.common.dao.repo.EartarFarmAllStatusRepo;
+import com.huimv.eartag2.process2.service.IEartagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Date;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+public class EartagServiceImpl implements IEartagService {
+    @Autowired
+    private EartagEartagRegisterRepo eartagRegisterRepo;
+    @Autowired
+    private EartagEartagOnlineRepo eartagOnlineRepo;
+    @Autowired
+    private EartarFarmAllStatusRepo farmAllStatusRepo;
+
+    @Override
+    public void updateEartagRegister(String earmark, String deviceCode, Timestamp nowTimestamp, String farmId) {
+        //# 判断耳标注册表是否存在;
+        //      如果不存在就注册耳标;
+        //      如果存在就更新活动状态(active_status)和活动状态更新时间(active_time)
+        //
+        EartagEartagRegisterEntity eartagRegisterEntity = eartagRegisterRepo.getOneByEarmark(earmark,farmId);
+        if(eartagRegisterEntity == null){
+            //#创建耳标注册记录#
+            EartagEartagRegisterEntity newEartagRegisterEntity = new EartagEartagRegisterEntity();
+            newEartagRegisterEntity.setEarmark(earmark);
+            newEartagRegisterEntity.setFirstTime(nowTimestamp);
+            newEartagRegisterEntity.setLastTime(nowTimestamp);
+            newEartagRegisterEntity.setFirstDevice(deviceCode);
+            newEartagRegisterEntity.setBelongDevice(deviceCode);
+            newEartagRegisterEntity.setLastDevice(deviceCode);
+            newEartagRegisterEntity.setRegisterTime(nowTimestamp);
+            newEartagRegisterEntity.setRegisterType(1);
+            newEartagRegisterEntity.setFarmId(farmId);
+            newEartagRegisterEntity.setActiveStatus(1);
+            newEartagRegisterEntity.setActiveTime(nowTimestamp);
+            newEartagRegisterEntity.setLiveStatus(1);
+            eartagRegisterRepo.saveAndFlush(newEartagRegisterEntity);
+        }else{
+            eartagRegisterEntity.setActiveStatus(1);
+            eartagRegisterEntity.setActiveTime(nowTimestamp);
+            eartagRegisterRepo.saveAndFlush(eartagRegisterEntity);
+        }
+    }
+
+    @Override
+    public void updateEartagOnline(String earmark, String deviceCode, String todayDateText, Date todayDate, Timestamp nowTimestamp, JSONObject eartagJo, String farmId) {
+        //# 判断耳标在线统计数据是否存在
+        //      存在,则更新上传记录数、最后上传时间、环境温度,耳根温度,并将上面数据更新到缓存数据中;
+        //      不存在,则创建耳标在线记录,并更新到缓存数据中;
+        //耳根温度
+        String earTemp =  eartagJo.getString("earTemp1");
+        //环境温度
+        String envTemp =  eartagJo.getString("envTemp");
+        EartagEartagOnlineEntity eartagOnlineEntity = eartagOnlineRepo.getOneByEarmarkAndFarmId(earmark,todayDateText,farmId);
+        if(eartagOnlineEntity == null){
+            //# 不存在
+            EartagEartagOnlineEntity newEartagOnlineEntity = new EartagEartagOnlineEntity();
+            newEartagOnlineEntity.setEarmark(earmark);
+            newEartagOnlineEntity.setTotal(1);
+            newEartagOnlineEntity.setFirstTime(nowTimestamp);
+            newEartagOnlineEntity.setLastTime(nowTimestamp);
+            newEartagOnlineEntity.setEnvTemp(envTemp);
+            newEartagOnlineEntity.setEartagTemp(earTemp);
+            newEartagOnlineEntity.setAddDate(todayDate);
+            newEartagOnlineEntity.setFarmId(farmId);
+            eartagOnlineRepo.saveAndFlush(newEartagOnlineEntity);
+        }else{
+            //# 存在
+            int total = eartagOnlineEntity.getTotal();
+            eartagOnlineEntity.setTotal(++total);
+            eartagOnlineEntity.setLastTime(nowTimestamp);
+            eartagOnlineEntity.setEnvTemp(envTemp);
+            eartagOnlineEntity.setEartagTemp(earTemp);
+            eartagOnlineRepo.saveAndFlush(eartagOnlineEntity);
+        }
+    }
+
+    @Override
+    public void updateEartagOfAllStatus(String earmark, String deviceCode,String todayDateText, String farmId) {
+        //# 判断设备和耳标总状态表是否存在
+        //      存在:更新在线耳标数量;
+        //      不存在:创建状态
+        EartarFarmAllStatusEntity farmAllStatusEntity = farmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
+        if(farmAllStatusEntity == null){
+            //#获取耳标注册数量#
+            int eartagTotal =  getEartagRegTotalByFarmId(farmId);
+            //#总状态记录不存在;
+            EartarFarmAllStatusEntity newFarmAllStatusEntity = new EartarFarmAllStatusEntity();
+            newFarmAllStatusEntity.setEartagTotal(eartagTotal);
+            newFarmAllStatusEntity.setEartagOnline(1);
+            farmAllStatusRepo.saveAndFlush(newFarmAllStatusEntity);
+        }else{
+            //#存在;
+            int total = farmAllStatusEntity.getEartagOnline();
+            farmAllStatusEntity.setEartagOnline(++total);
+            farmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+        }
+    }
+
+    //读取耳标注册数据
+    @Override
+    public Integer getEartagRegTotalByFarmId(String farmId){
+        int eartagTotal = 0;
+        List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId);
+        Object[] eartagRegObj = (Object[]) eartagRegList.get(0);
+        //处于工作状态的耳标总数
+        return Integer.parseInt(eartagRegObj[0].toString());
+    }
+}