Jelajahi Sumber

设备温度优化完成。

zhuoning 3 tahun lalu
induk
melakukan
751bdb7f1a
17 mengubah file dengan 423 tambahan dan 156 penghapusan
  1. 12 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDeviceRegisterEntity.java
  2. 4 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagDeviceRegisterRepo.java
  3. 4 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegisterRepo.java
  4. 10 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/mq/Const.java
  5. 26 7
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/BizConst.java
  6. 11 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/MathUtil.java
  7. 2 11
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/DeviceListener.java
  8. 11 1
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/ICacheService.java
  9. 27 10
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/CacheServiceImpl.java
  10. 215 123
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java
  11. 15 3
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/EartagServiceImpl.java
  12. 1 0
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java
  13. 2 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/producer/Producer.java
  14. 1 0
      huimv-eartag2-platform/huimv-eartag2-manage/pom.xml
  15. 42 1
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/controller/RedisContrller.java
  16. 10 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/ICacheService.java
  17. 30 0
      huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java

+ 12 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDeviceRegisterEntity.java

@@ -70,6 +70,9 @@ public class EartagDeviceRegisterEntity implements Serializable {
     @Column(name = "create_date")
     private Date createDate;
 
+    @Column(name = "update_type")
+    private String updateType;
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -222,6 +225,14 @@ public class EartagDeviceRegisterEntity implements Serializable {
         return createDate;
     }
 
+    public void setUpdateType(String updateType) {
+        this.updateType = updateType;
+    }
+
+    public String getUpdateType() {
+        return updateType;
+    }
+
     @Override
     public String toString() {
         return "EartagDeviceRegisterEntity{" +
@@ -244,6 +255,7 @@ public class EartagDeviceRegisterEntity implements Serializable {
                 "location=" + location + '\'' +
                 "remark=" + remark + '\'' +
                 "createDate=" + createDate + '\'' +
+                "updateType=" + updateType + '\'' +
                 '}';
     }
 }

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

@@ -17,4 +17,8 @@ public interface EartagDeviceRegisterRepo extends JpaRepository<EartagDeviceRegi
 
     @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND device_status=1")
     List<Object[]> getDeviceCountByFarmId(String farmId);
+
+    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND device_status=?2")
+    List<Object[]> getDeviceCountByFarmIdAndLiveStatus(String farmId, Integer liveStatus);
+
 }

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

@@ -12,9 +12,13 @@ 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 COUNT(*) total FROM eartag_eartag_register WHERE farm_id=?1 AND live_status=?2")
+    List<Object[]> getEartagCountByFarmId(String farmId, Integer liveStatus);
+
     @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_register WHERE farm_id=?2 AND earmark=?1")
     EartagEartagRegisterEntity getOneByEarmark(String earmark, String farmId);
 
     @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_register WHERE earmark=?1 LIMIT 1")
     EartagEartagRegisterEntity getEartagByEarmark(String earmark);
+
 }

+ 10 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/mq/Const.java

@@ -27,4 +27,14 @@ public class Const {
     public final static String QUEUE_EARTAG = "topic.eartag.queue";
     public final static String ROUTING_KEY_EARTAG = "topic.eartag.key";
 
+    //////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public final static String EXCHANGE_ASK_DEVICE = "topic.askDevice.exchange";
+    public final static String ROUTING_KEY_ASK_DEVICE = "topic.askDevice.routeKey";
+    public final static String QUEUE_ASK_DEVICE = "topic.askDevice.queue";
+
+    public final static String EXCHANGE_ASK_EARTAG = "topic.askEartag.exchange";
+    public final static String ROUTING_KEY_ASK_EARTAG = "topic.askEartag.routeKey";
+    public final static String QUEUE_ASK_EARTAG = "topic.askEartag.queue";
+
 }

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

@@ -10,31 +10,50 @@ package com.huimv.eartag2.common.utils;
  **/
 public class BizConst {
     //所有设备注册信息都要加入缓存
-    public final static String DEVICE_REGISTER_PREFIX = "device_register_";
+//    public final static String DEVICE_REGISTER_PREFIX = "device_register_";
+    public final static String DEVICE_REGISTER_PREFIX = "hash:register:device:";
 
     //在线设备统计信息加入缓存
-    public final static String DEVICE_ONLINE_PREFIX = "device_online_";
+//    public final static String DEVICE_ONLINE_PREFIX = "device_online_";
+    public final static String DEVICE_ONLINE_PREFIX = "hash:online:device:";
 
     //牧场所有采集器设备编号集合+牧场id(Set)
     public final static String SET_FARM_DEVICE_ALL_PREFIX = "farm_device_all_";
 
     //牧场在线采集器设备编号集合+牧场id(Set)
-    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "set_farm_device_online_";
+//    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "set_farm_device_online_";
+    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "set:onlineDevice:farm:";
 
     //牧场所有耳标编号集合+牧场id(Set)
 //    public final static String SET_FARM_EARMARK_ALL_PREFIX = "farm_eartag_all_";
 
     //耳标注册缓存
-    public final static String EARTAG_REGISTER_PREFIX = "eartag_register_";
+//    public final static String EARTAG_REGISTER_PREFIX = "eartag_register_";
+    public final static String EARTAG_REGISTER_PREFIX = "hash:register:eartag:";
 
     //在线耳标统计信息加入缓存
-    public final static String EARTAG_ONLINE_PREFIX = "eartag_online_";
+//    public final static String EARTAG_ONLINE_PREFIX = "eartag_online_";
+    public final static String EARTAG_ONLINE_PREFIX = "hash:online:eartag:";
 
     //牧场在线耳标编号集合+牧场id(Set)
-    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set_farm_eartag_online_";
+//    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set_farm_eartag_online_";
+    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set:onlineEartag:farm:";
 
     //牧场总状态表+牧场id
-    public final static String FARM_ALL_STATUS_PREFIX = "farm_all_status_";
+    public final static String FARM_ALL_STATUS_PREFIX = "allStatus:farm:";
+
+    //设备总数
+    public final static String FARM_DEVICE_TOTAL_PREFIX = "deviceTotal:farm:";
+    //设备在线总数
+    public final static String FARM_DEVICE_TOTAL_ONLINE_PREFIX = "deviceTotal:online:farm:";
+    //设备取消数量
+    public final static String FARM_DEVICE_CANCEL_PREFIX = "deviceCancel:farm:";
+
+    //耳标总数
+    public final static String FARM_EARTAG_TOTAL_PREFIX = "eartagTotal:farm:";
+    //耳标在线总数
+    public final static String FARM_EARTAG_TOTAL_ONLINE_PREFIX = "eartagTotal:online:farm:";
+
 
     public final static Integer CODE_DEVICE_ONLINE_NO_EXIST = 10001;
     public final static String MSG_DEVICE_ONLINE_NO_EXIST = "今天无在线设备.";

+ 11 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/MathUtil.java

@@ -2,6 +2,7 @@ package com.huimv.eartag2.common.utils;
 
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 
@@ -22,6 +23,16 @@ public class MathUtil {
     public static double D = 0.0000000753805242068686;
     public static double E = -0.0000000204758173596178;
 
+    public static BigDecimal formatScale(String val1,String val2,Integer scale){
+        BigDecimal deviceRateBd= new BigDecimal(val1).divide(new BigDecimal(val2),2,BigDecimal.ROUND_HALF_UP);
+        return deviceRateBd;
+    }
+
+    public static BigDecimal countEnvtemp(String val1,Integer scale){
+        BigDecimal deviceRateBd= new BigDecimal(val1).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+        return deviceRateBd;
+    }
+
     //保留一位小数
     public static  double changeDouble(Double dou) {
         NumberFormat nf = new DecimalFormat("0.0 ");

+ 2 - 11
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/DeviceListener.java

@@ -48,7 +48,7 @@ public class DeviceListener {
     @RabbitListener(queues = Const.QUEUE_ASK_DEVICE)
     @RabbitHandler
     public void processRawdata(Map RawMap) throws ParseException {
-//        System.out.println("<<<<<<<<<<<<<<< RawMap>>"+RawMap.toString());
+        System.out.println("<<<<<<<<<<<<<<< RawMap>>"+RawMap.toString());
         String askText = RawMap.get("askText").toString();
 //        System.out.println("askText>>"+askText);
 //        System.out.println(" >>>>>>>>>>>>>>>>>>>>>>>> 处理设备队列 >>>>>>>>>>>>>>>>>>>>>>>>");
@@ -74,21 +74,12 @@ public class DeviceListener {
             System.out.println("处理心跳");
             System.out.println("askText>>"+askText);
             //{处理设备心跳数据}
-            deviceService.handleDeviceHeartbeat(dataJo);
+//            deviceService.handleDeviceHeartbeat(dataJo);
             /////////////////////////////////////////////////////////////////////////////////////////////////////////
         }else if(type.trim().equalsIgnoreCase("device-temp")){
             //--(2)处理环境数据
-            //--保存设备环境流水数据(MySQL)
-
-            //保存设备环境温度流水数据
-//            deviceService.saveDeviceTemp(dataJo);
-            //发送设备环境温度数据到MQ
-//            processProducer.sendDeviceTemp(dataJo);
-            System.out.println("处理环境温度");
-            System.out.println("askText>>"+askText);
             //{处理设备环境温度数据}
             deviceService.handleDeviceEnvtemp(dataJo);
-            /////////////////////////////////////////////////////////////////////////////////////////////////////////
         }
     }
 

+ 11 - 1
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/ICacheService.java

@@ -3,6 +3,7 @@ package com.huimv.eartag2.device.service;
 import com.huimv.eartag2.common.dao.entity.*;
 
 import java.text.ParseException;
+import java.util.Map;
 
 public interface ICacheService {
     //证是否存在当天总状态数据
@@ -27,7 +28,7 @@ public interface ICacheService {
     boolean isExistDeviceOnlineSet(String farmId, String deviceCode, String todayDateText);
 
     //将deviceCode加入到在线缓存当中
-    void putDeviceToOnline(String farmId, String deviceCode, String todayDateText);
+    void putDeviceToOnlineSet(String farmId, String deviceCode, String todayDateText);
 
     //
     void putDeviceRegister(String deviceCode, EartagDeviceRegisterEntity deviceRegisterEntity);
@@ -66,4 +67,13 @@ public interface ICacheService {
 
     //设置耳标总数缓存
     void putEartagTotal(Integer total, String farmId);
+
+    //获取在线设备数量
+    Integer getDeviceOnlineSum(String farmId, String todayDateText);
+
+    //读取全部注册信息
+    Map<Object, Object> getHashEntries(String deviceCode);
+
+    //读取属性
+    Object getHashProperty(String deviceCode, String deviceAlias);
 }

+ 27 - 10
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/CacheServiceImpl.java

@@ -7,13 +7,13 @@ import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.device.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.Set;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -35,6 +35,19 @@ public class CacheServiceImpl implements ICacheService {
     private Integer eartagOnlineSetExpire=25;
 
     @Override
+    public Map<Object, Object> getHashEntries(String deviceCode) {
+        String hashKey = BizConst.DEVICE_REGISTER_PREFIX+deviceCode;
+        Map<Object, Object> entriesMap = redisTemplate.opsForHash().entries(hashKey);
+        return entriesMap;
+    }
+
+    @Override
+    public Object getHashProperty(String hashKey, String fieldName) {
+        Object obj = redisTemplate.opsForHash().get(hashKey, fieldName);
+        return obj;
+    }
+
+    @Override
     public Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException {
         System.out.println("isExistTodayFarmAllStatus 2.deviceCode>>"+deviceCode);
 
@@ -145,7 +158,6 @@ public class CacheServiceImpl implements ICacheService {
     @Override
     public boolean isExistDeviceOnlineSet(String farmId, String deviceCode, String todayDateText) {
         String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
-        System.out.println("setKey>>"+setKey);
         return redisTemplate.opsForSet().isMember(setKey, deviceCode);
     }
 
@@ -160,7 +172,7 @@ public class CacheServiceImpl implements ICacheService {
      * @Time        : 13:42
      */
     @Override
-    public void putDeviceToOnline(String farmId, String deviceCode, String todayDateText) {
+    public void putDeviceToOnlineSet(String farmId, String deviceCode, String todayDateText) {
         String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
         redisTemplate.opsForSet().add(setKey, deviceCode);
         redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
@@ -201,10 +213,8 @@ public class CacheServiceImpl implements ICacheService {
         map.put("addDate", eartagDeviceOnlineEntity.getAddDate());
         map.put("farmId", eartagDeviceOnlineEntity.getFarmId());
         //更新缓存
-        String deviceOnlineKey = BizConst.DEVICE_ONLINE_PREFIX + deviceCode;
-        redisTemplate.opsForHash().putAll(deviceOnlineKey, map);
-//        Map onlineMap = fromOnlineEntityToMap(newDeviceOnlineEntity);
-//        redisTemplate.opsForHash().putAll(deviceOnlineHashKey, onlineMap);
+        String deviceOnlineHashKey = BizConst.DEVICE_ONLINE_PREFIX + deviceCode;
+        redisTemplate.opsForHash().putAll(deviceOnlineHashKey, map);
     }
 
     /**
@@ -350,10 +360,10 @@ public class CacheServiceImpl implements ICacheService {
     public Integer getEartagTotal(String farmId) {
         String valueKey = BizConst.FARM_EARTAG_TOTAL_PREFIX+farmId;
         Object obj = redisTemplate.opsForValue().get(valueKey);
-        if(obj == null){
-            return null;
-        }else{
+        if(obj != null){
             return Integer.parseInt(String.valueOf(obj));
+        }else{
+            return null;
         }
     }
 
@@ -363,6 +373,13 @@ public class CacheServiceImpl implements ICacheService {
         redisTemplate.opsForValue().set(valueKey,total);
     }
 
+    @Override
+    public Integer getDeviceOnlineSum(String farmId, String todayDateText) {
+        String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
+        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+        return resultSet.size();
+    }
+
     /**
      * @Method : RegisterEntityToMap
      * @Description :

+ 215 - 123
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java

@@ -103,9 +103,9 @@ public class DeviceServiceImpl implements IDeviceService {
 
         //Step1:更新设备注册表[设置活动状态为1,设置活动状态更新时间]
         //Step2:更新在线统计[心跳数+1,心跳第一次上传时间,心跳最后一次时间],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
-
+        String updateType="设备心跳";
         //# 更新设备注册表 #
-        updateDeviceRegister(farmId, deviceCode,nowTimestamp);
+        updateDeviceRegister(farmId, deviceCode,nowTimestamp,updateType);
         //# 更新在线统计 #
         updateDeviceOnlineCount(farmId, deviceCode,todayDateText,nowTimestamp,todayDate);
 
@@ -118,8 +118,9 @@ public class DeviceServiceImpl implements IDeviceService {
             updateDeviceAllStatus(farmId, deviceCode,todayDateText,nowTimestamp,todayDate);
 
             //# 将新设备编号加入在线缓存 #
-            cacheService.putDeviceToOnline(farmId, deviceCode,todayDateText);
+            cacheService.putDeviceToOnlineSet(farmId, deviceCode,todayDateText);
         }
+        System.out.println("## END 心跳.");
         //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     }
 
@@ -194,7 +195,7 @@ public class DeviceServiceImpl implements IDeviceService {
             Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
             Integer total = Integer.parseInt(deviceRegObj[0].toString());
             //设置缓存
-            cacheService.putDeviceCancel(total,farmId);
+            cacheService.putDeviceTotal(total,farmId);
             //设备总数
             return total;
         }
@@ -207,10 +208,12 @@ public class DeviceServiceImpl implements IDeviceService {
         if(deviceCancel != null) {
             return deviceCancel;
         }else {
-            List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmId(farmId);
-            Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
+            //注销状态
+            Integer liveStatus = 2;
+            List<Object[]> deviceCancelList = deviceRegisterRepo.getDeviceCountByFarmIdAndLiveStatus(farmId,liveStatus);
+            Object[] deviceRegObj = (Object[]) deviceCancelList.get(0);
             Integer total = Integer.parseInt(deviceRegObj[0].toString());
-            //设置缓存
+            //设置注销缓存
             cacheService.putDeviceCancel(total,farmId);
             //设备总数
             return total;
@@ -257,32 +260,39 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     //更新设备注册表
-    private void updateDeviceRegister(String farmId, String deviceCode, Timestamp nowTimestamp) {
+    private void updateDeviceRegister(String farmId, String deviceCode, Timestamp nowTimestamp,String updateType) {
         //--更新mysql
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
         if (deviceRegisterEntity != null) {
             //设备注册数据存在
             deviceRegisterEntity.setActiveStatus(1);
-            deviceRegisterEntity.setActiveTime(new Timestamp(new Date().getTime()));
+            deviceRegisterEntity.setActiveTime(nowTimestamp);
+            deviceRegisterEntity.setUpdateType(updateType);
             deviceRegisterRepo.saveAndFlush(deviceRegisterEntity);
             //更新缓存中设备注册信息
             cacheService.putDeviceRegister(deviceCode,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,newDeviceRegisterEntity);
+            newDeviceRegister(farmId,deviceCode,nowTimestamp,updateType);
         }
     }
 
+    //新建设备注册记录
+    public void newDeviceRegister(String farmId,String deviceCode,Timestamp nowTimestamp,String updateType){
+        EartagDeviceRegisterEntity newDeviceRegisterEntity = new EartagDeviceRegisterEntity();
+        newDeviceRegisterEntity.setDeviceCode(deviceCode);
+        newDeviceRegisterEntity.setFarmId(farmId);
+        newDeviceRegisterEntity.setRegisterTime(nowTimestamp);
+        newDeviceRegisterEntity.setActiveStatus(1);
+        newDeviceRegisterEntity.setActiveTime(nowTimestamp);
+        newDeviceRegisterEntity.setDeviceStatus(1);
+        newDeviceRegisterEntity.setUpdateType(updateType);
+        deviceRegisterRepo.saveAndFlush(newDeviceRegisterEntity);
+        //更新缓存中设备注册信息
+        cacheService.putDeviceRegister(deviceCode,newDeviceRegisterEntity);
+    }
+
     /**
      * @Method      : handleDeviceEnvtemp
      * @Description : 处理设备环境温度数据
@@ -301,165 +311,247 @@ public class DeviceServiceImpl implements IDeviceService {
         //2、更新设备注册表(活动状态、活动更新时间,更新类型)
         //3、更新在线统计表(环境温度计数,环境温度最早上传时间,最新环境温度,环境温度最后一次上传时间)
         //4、更新总状态表
-        //保存设备心跳记录
-//        saveDeviceHeartbeat(dataJo);
-        //{更新设备注册表}
-//        updateDeviceRegister(dataJo);
-        //{更新在线统计表}
-//        updateDeviceOnline(dataJo);
-        //{更新总状态表}
-//        updateAllStatus(dataJo);
-        //------------------------------------------------------------------------------------
         String deviceCode = dataJo.getString("device");
         String farmId = getFarmIdByDeviceCode(deviceCode);
-
+        String temp = dataJo.getString("temp");
+        String envtemp = com.huimv.eartag2.common.utils.MathUtil.countEnvtemp(temp,2).toString();
         String todayDateText = new com.huimv.eartag2.common.utils.DateUtil().getTodayDateText();
         java.sql.Date todayDate = new java.sql.Date(new java.util.Date().getTime());
         Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
 
-        //# 更新在线统计 #
-        updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
-//            System.out.println("## ++++1");
-        //# 更新设备注册表 #
-        updateDeviceRegister(farmId, deviceCode,nowTimestamp);
-
-        //            //# 更新设备注册表 #
-//            updateDeviceRegister(farmId, deviceCode,nowTimestamp);
-//            //# 更新在线统计 #
-//            updateDeviceOnlineWithEnvtemp(farmId, deviceCode);
-
+        //1.保存环境温度流水
+        saveDeviceTemp(dataJo);
+        String updateType = "环境温度";
+        //2.{更新设备注册表}
+        updateDeviceRegister(farmId, deviceCode,nowTimestamp,updateType);
+        //3.{更新在线统计表}
+        updateDeviceOnlineWithEnvtemp(farmId, deviceCode,envtemp,todayDate,nowTimestamp);
         //判断该设备编号是否存在牧场缓存在线集合当中;
         Boolean isExist = cacheService.isExistDeviceOnlineSet(farmId, deviceCode,todayDateText);
-        System.out.println("## 处理环境温度 isExist>>"+isExist);
         if (!isExist) {
-            //Step1:更新总状态表[device_online+1,device_offline-1,device_rate],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
-            //Step2:更新设备注册表[active_status=1,active_time=当前时间]
-            //Step3:更新在线统计[],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
-            //Step4:将新设备编号加入缓存
-            System.out.println("## ----");
-            //# 更新总状态表 #
-            updateEnvtempOfDeviceAllStatus(farmId, deviceCode);
-            //# 将新设备编号加入在线缓存 #
-            cacheService.putDeviceToOnline(farmId, deviceCode, todayDateText);
-            System.out.println("## END");
+            //4.{更新总状态表}
+            updateEnvtempOfDeviceAllStatus(farmId, todayDateText,todayDate,nowTimestamp);
+            //{将新设备编号加入在线缓存}
+            cacheService.putDeviceToOnlineSet(farmId, deviceCode, todayDateText);
         }
-        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        System.out.println("## END 环境数据");
     }
 
-    public void updateEnvtempOfDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
-//        System.out.println("## (A)");
-        String todayDateText = new com.huimv.eartag2.common.utils.DateUtil().getTodayDateText();
+    //更新设备环境信息
+    public void updateEnvtempOfDeviceAllStatus(String farmId, String todayDateText, java.sql.Date todayDate, Timestamp nowTimestamp) throws ParseException {
+        //{获取处于工作状态的设备数量}
+        Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
+        //设备在线数量
+        Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
+        deviceOnlineSum++;
+        //设备离线数量
+        Integer deviceOfflineSum = 0;
+        if(deviceTotal > deviceOnlineSum){
+            deviceOfflineSum = deviceTotal - deviceOnlineSum;
+        }
+        //设备在线率
+        BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+        Float deviceOnlineRate = Float.parseFloat(deviceRateBd.toString());
+        //{获取注销设备数量}
+        Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
+        //耳标总数量
+        Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+        //耳标在线数量
+        Integer eartagOnlineSum = eartagService.getEartagOnelineTotal(farmId,todayDateText);
+        //耳标在线率
+        BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
+        Float eartagOnlineRate = Float.parseFloat(eartagRateBd.toString());
         //
         EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
         if(farmAllStatusEntity == null){
-//            System.out.println("## (A.1)");
-            //设备总状态表信息不存在
-            //创建设备状态记录并更新缓存cache()
-            createNewFarmAllStatus(farmId,deviceCode);
-            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+            //{新建设备状态记录并更新缓存cache}
+            createNewFarmAllStatus(farmId,todayDate,nowTimestamp,deviceTotal,deviceOnlineSum,deviceOfflineSum,deviceCancelSum,deviceOnlineRate,eartagTotal,eartagOnlineSum,eartagOnlineRate);
         }else{
-//            System.out.println("## (A.2)");
-            //设备总状态表信息存在
             //计算设备状态并更新缓存cache(在线数+1,离线数-1,计算设备在线率)
-            int onlineNum = farmAllStatusEntity.getDeviceOnline();
-            int offlineNum = farmAllStatusEntity.getDeviceOffline();
-            int total = farmAllStatusEntity.getDeviceTotal();
-            onlineNum++;
-            offlineNum--;
-            BigDecimal rateBd= new BigDecimal(onlineNum).divide(new BigDecimal(total),1,BigDecimal.ROUND_HALF_UP);
-            farmAllStatusEntity.setDeviceOnline(onlineNum);
-            farmAllStatusEntity.setDeviceOffline(offlineNum);
-            farmAllStatusEntity.setDeviceRate(Float.parseFloat(rateBd.toString()));
-            farmAllStatusEntity.setUpdateTime(new Timestamp(new Date().getTime()));
+            farmAllStatusEntity.setDeviceTotal(deviceTotal);
+            farmAllStatusEntity.setDeviceOnline(deviceOnlineSum);
+            farmAllStatusEntity.setDeviceOffline(deviceOfflineSum);
+            farmAllStatusEntity.setDeviceRate(deviceOnlineRate);
+            farmAllStatusEntity.setDeviceCancel(deviceCancelSum);
+            farmAllStatusEntity.setEartagTotal(eartagTotal);
+            farmAllStatusEntity.setEartagOnline(eartagOnlineSum);
+            farmAllStatusEntity.setEartagRate(eartagOnlineRate);
+            farmAllStatusEntity.setUpdateTime(nowTimestamp);
             eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
             //# 同步更新牧场总状态缓存相关字段 #
             cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
         }
     }
 
-    //# 创建总状态记录 #
-    private void createNewFarmAllStatus(String farmId,String deviceCode) {
-        System.out.println("## (A.1.1)");
+    //计算处于不同生存状态的设备数量
+    private Integer getDeviceSum(String farmId,Integer liveStatus){
         //# 计算处于工作状态的设备总数(设备注册表)
-        List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmId(farmId);
+        List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmIdAndLiveStatus(farmId,liveStatus);
         Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
         //设备总数
-        int deviceTotal = 0;
-        deviceTotal = Integer.parseInt(deviceRegObj[0].toString());
-        System.out.println("## total>>"+deviceTotal);
-        if(deviceTotal == 0){
+        return Integer.parseInt(deviceRegObj[0].toString());
+    }
+
+    //# 创建总状态记录 #
+    private void createNewFarmAllStatus(String farmId, java.sql.Date todayDate, Timestamp nowTimestamp, Integer deviceTotal, Integer deviceOnlineSum, Integer deviceOfflineSum, Integer deviceCancelSum, Float deviceOnlineRate, Integer eartagTotal, Integer eartagOnlineSum, Float eartagOnlineRate) {
+        Integer liveStatus = 1;
+        if(getDeviceSum(farmId,liveStatus) == 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();
+            //{获取处于工作状态的设备数量}
+//            Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
+            //设备在线数量
+//            Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
+//            deviceOnlineSum++;
+            //设备离线数量
+//            Integer deviceOfflineSum = 0;
+//            if(deviceTotal > deviceOnlineSum){
+//                deviceOfflineSum = deviceTotal - deviceOnlineSum;
+//            }
+            //{获取注销设备数量}
+//            Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
+//            //耳标总数量
+//            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+//            //耳标在线数量
+//            Integer eartagOnlineSum = eartagService.getEartagOnelineTotal(farmId,todayDateText);
+            //设备在线率
+//            BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+            //耳标在线率
+//            BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
             farmAllStatusEntity.setDeviceTotal(deviceTotal);
-            farmAllStatusEntity.setDeviceOnline(onlineNum);
-            farmAllStatusEntity.setDeviceOffline(offlineNum);
-            farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+            farmAllStatusEntity.setDeviceOnline(deviceOnlineSum);
+            farmAllStatusEntity.setDeviceOffline(deviceOfflineSum);
+            farmAllStatusEntity.setDeviceRate(deviceOnlineRate);
+            farmAllStatusEntity.setDeviceCancel(deviceCancelSum);
             farmAllStatusEntity.setEartagTotal(eartagTotal);
-            farmAllStatusEntity.setEartagOnline(1);
-            farmAllStatusEntity.setUpdateTime(new Timestamp(new Date().getTime()));
-            farmAllStatusEntity.setCreateDate(new java.sql.Date(new Date().getTime()));
+            farmAllStatusEntity.setEartagOnline(eartagOnlineSum);
+            farmAllStatusEntity.setEartagRate(eartagOnlineRate);
+            farmAllStatusEntity.setFarmId(farmId);
+            farmAllStatusEntity.setUpdateTime(nowTimestamp);
+            farmAllStatusEntity.setCreateDate(todayDate);
             eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+            //设置总状态缓存
+            cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
+        }
+    }
 
-            //Redis Cache:farm_all_status_+farmId
+    //# 创建总状态记录 #
+    private void createNewFarmAllStatus(String farmId,String todayDateText, java.sql.Date todayDate, Timestamp nowTimestamp) {
+        Integer liveStatus = 1;
+        if(getDeviceSum(farmId,liveStatus) == 0){
+            log.error("该牧场没有任何处于工作状态的采集器设备.");
+        }else{
+            //# 计算耳标总数(耳标注册表)
+            EartarFarmAllStatusEntity farmAllStatusEntity = new EartarFarmAllStatusEntity();
+            //{获取处于工作状态的设备数量}
+            Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
+            //设备在线数量
+            Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
+            deviceOnlineSum++;
+            //设备离线数量
+            Integer deviceOfflineSum = 0;
+            if(deviceTotal > deviceOnlineSum){
+                deviceOfflineSum = deviceTotal - deviceOnlineSum;
+            }
+            BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+            //{获取注销设备数量}
+            Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
+            //耳标总数量
+            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+            //耳标在线数量
+            Integer eartagOnlineSum = eartagService.getEartagOnelineTotal(farmId,todayDateText);
+            //耳标在线率
+            BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
+            farmAllStatusEntity.setDeviceTotal(deviceTotal);
+            farmAllStatusEntity.setDeviceOnline(deviceOnlineSum);
+            farmAllStatusEntity.setDeviceOffline(deviceOfflineSum);
+            farmAllStatusEntity.setDeviceRate(Float.parseFloat(deviceRateBd.toString()));
+            farmAllStatusEntity.setDeviceCancel(deviceCancelSum);
+            farmAllStatusEntity.setEartagTotal(eartagTotal);
+            farmAllStatusEntity.setEartagOnline(eartagOnlineSum);
+            farmAllStatusEntity.setEartagRate(Float.parseFloat(eartagRateBd.toString()));
+            farmAllStatusEntity.setFarmId(farmId);
+            farmAllStatusEntity.setUpdateTime(nowTimestamp);
+            farmAllStatusEntity.setCreateDate(todayDate);
+            eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+            //设置总状态缓存
             cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
         }
     }
 
-    //更新在线统计
-    private void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode) throws ParseException {
-        System.out.println("## (1)/(C)");
-        //# 更新数据库
-        //# 更新在线缓存
+    /**
+     * @Method      : updateDeviceOnlineWithEnvtemp
+     * @Description : 更新在线统计
+     * @Params      :
+     * @Return      :
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/14
+     * @Time        : 14:27
+     */
+    private void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode,String envtemp,java.sql.Date todayDate,Timestamp nowTimestamp) throws ParseException {
+        ///////////////////////////////////////////////
+        //Step1:更新数据库
+        //Step2:更新在线缓存
+        ///////////////////////////////////////////////
         String todayDateText = new com.huimv.eartag2.common.utils.DateUtil().getTodayDateText();
-//        System.out.println("1.todayDateText>>" + todayDateText);
+        String hashKey = BizConst.DEVICE_REGISTER_PREFIX+deviceCode;
+        //计算设备别名
+        String alias = (String)cacheService.getHashProperty(hashKey,"deviceAlias");
         //读取在线日期
         EartagDeviceOnlineEntity eartagDeviceOnlineEntity = eartagDeviceOnlineRepo.getDeviceOnline(deviceCode, todayDateText);
-        String deviceOnlineHashKey = BizConst.DEVICE_ONLINE_PREFIX + deviceCode;
         if (eartagDeviceOnlineEntity == null) {
-            //不存在设备在线统计
-            //创建设备在线统计并创建缓存
-            createNewDeviceOnline(farmId,deviceCode);
+            Integer heartbeatTotal = 0;
+            Integer envtempTotal = 1;
+            Timestamp heartbeatFirstTime = null;
+            Timestamp heartbeatLastTime = null;
+            Timestamp envtempFirstTime = nowTimestamp;
+            Timestamp envtempLastTime = nowTimestamp;
+            //{计算耳标总数}
+            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+            //{新建设备在线统计并创建缓存}
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,envtemp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime);
         }else{
             int envtempTotal = eartagDeviceOnlineEntity.getEnvtempTotal();
-//            System.out.println(">>>>>>>>>>> envtempTotal>>"+envtempTotal);
+            eartagDeviceOnlineEntity.setAlias(alias);
             eartagDeviceOnlineEntity.setEnvtempTotal(++envtempTotal);
-            eartagDeviceOnlineEntity.setLastTime(new Timestamp(new Date().getTime()));
-//            System.out.println(">>>>>>>>>>> eartagDeviceOnlineEntity>>"+eartagDeviceOnlineEntity);
+            eartagDeviceOnlineEntity.setLastEnvtemp(envtemp);
+            eartagDeviceOnlineEntity.setEnvtempLastTime(nowTimestamp);
             eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
             //更新设备在线缓存数据
-            cacheService.putDeviceInOnline(deviceOnlineHashKey,eartagDeviceOnlineEntity);
+            cacheService.putDeviceInOnline(deviceCode,eartagDeviceOnlineEntity);
         }
     }
 
-    //创建
-    private void createNewDeviceOnline(String farmId, String deviceCode) {
-//        System.out.println("## (1.1.1)");
+    /**
+     * @Method      : newDeviceOnline
+     * @Description : 创建设备在线
+     * @Params      : [farmId, deviceCode]
+     * @Return      : void
+     *newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,temp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,nowTimestamp);
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/14
+     * @Time        : 14:27
+     */
+    private void newDeviceOnline(String deviceCode, String alias, Integer heartbeatTotal, Integer envtempTotal, Integer eartagTotal, String temp, java.sql.Date todayDate, String farmId, Timestamp heartbeatFirstTime, Timestamp heartbeatLastTime, Timestamp envtempFirstTime, Timestamp envtempLastTime) {
         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.setAlias(alias);
+        newEartagDeviceOnlineEntity.setHeartbeatTotal(heartbeatTotal);;
+        newEartagDeviceOnlineEntity.setEnvtempTotal(envtempTotal);
+        newEartagDeviceOnlineEntity.setEartagTotal(eartagTotal);
+        newEartagDeviceOnlineEntity.setLastEnvtemp(temp);
+        newEartagDeviceOnlineEntity.setAddDate(todayDate);
         newEartagDeviceOnlineEntity.setFarmId(farmId);
-        newEartagDeviceOnlineEntity.setEnvtempFirstTime(new Timestamp(new Date().getTime()));
-        newEartagDeviceOnlineEntity.setEnvtempLastTime(new Timestamp(new Date().getTime()));
+        newEartagDeviceOnlineEntity.setHeartbeatFirstTime(heartbeatFirstTime);
+        newEartagDeviceOnlineEntity.setHeartbeatLastTime(heartbeatLastTime);
+        newEartagDeviceOnlineEntity.setEnvtempFirstTime(envtempFirstTime);
+        newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
-        cacheService.putDeviceInOnline(BizConst.DEVICE_ONLINE_PREFIX + deviceCode,newEartagDeviceOnlineEntity);
+        cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);
     }
 
     //更新总状态表

+ 15 - 3
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/EartagServiceImpl.java

@@ -46,9 +46,13 @@ public class EartagServiceImpl implements IEartagService {
         if(eartagTotal != null){
             return eartagTotal;
         }else{
-            List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId);
-            Object[] eartagRegObj = (Object[]) eartagRegList.get(0);
-            Integer total = Integer.parseInt(eartagRegObj[0].toString());
+//            List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId);
+//            Object[] eartagRegObj = (Object[]) eartagRegList.get(0);
+//            Integer total = Integer.parseInt(eartagRegObj[0].toString());
+            ///
+            Integer liveStatus = 1;
+            //{读取处于工作状态的耳标总数}
+            Integer total = getEartagSum(farmId,liveStatus);
             //设置耳标总数缓存
             cacheService.putEartagTotal(total,farmId);
             //处于工作状态的耳标总数
@@ -56,6 +60,14 @@ public class EartagServiceImpl implements IEartagService {
         }
     }
 
+    //计算处于不同生存状态的耳标数量
+    private Integer getEartagSum(String farmId,Integer liveStatus){
+        List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId,liveStatus);
+        Object[] eartagRegObj = (Object[]) eartagRegList.get(0);
+        //处于工作状态的耳标总数
+        return Integer.parseInt(eartagRegObj[0].toString());
+    }
+
     @Override
     public Integer getEartagOnelineTotal(String farmId, String todayDateText) {
         return cacheService.getEartagOnlineTotalFromCache(farmId,todayDateText);

+ 1 - 0
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java

@@ -93,6 +93,7 @@ public class EartagServiceImpl implements IEartagService {
         }
     }
 
+    //状态更新
     public void updateEartagOfAllStatus(String earmark, String deviceCode,String todayDateText, String farmId) {
         //# 判断设备和耳标总状态表是否存在
         //      存在:更新在线耳标数量;

+ 2 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/producer/Producer.java

@@ -84,6 +84,8 @@ public class Producer {
         Map map = new HashMap();
         map.put("askText",askText);
 
+        System.out.println("<sendClientAsk2>.map.toString()>>"+map.toString());
+
         String[] dataArray = askText.split("\\+");
         String cmdHeader = dataArray[0];
         if (cmdHeader.trim().equalsIgnoreCase("hm")) {

+ 1 - 0
huimv-eartag2-platform/huimv-eartag2-manage/pom.xml

@@ -37,6 +37,7 @@
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
 
+        <!-- 排除Tomcat容器 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>

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

@@ -1,10 +1,14 @@
 package com.huimv.eartag2.process2.controller;
 
 import com.huimv.eartag2.common.utils.BizConst;
+import com.huimv.eartag2.common.utils.MathUtil;
+import com.huimv.eartag2.process2.service.ICacheService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -22,6 +26,16 @@ import java.util.concurrent.TimeUnit;
 public class RedisContrller {
     @Resource
     private RedisTemplate redisTemplate;
+    @Autowired
+    private ICacheService cacheService;
+
+    @RequestMapping(value = "/get1",method = RequestMethod.GET)
+    public void get1(@RequestParam(value = "farmId",required = true) String farmId) {
+        //
+        Integer deviceTotal = cacheService.getDeviceTotal(farmId);
+        System.out.println("## deviceTotal>>"+deviceTotal);
+    }
+
 
     @RequestMapping(value = "/set",method = RequestMethod.GET)
     public void set1(@RequestParam(value = "name",required = true) String name,String company){
@@ -31,8 +45,9 @@ public class RedisContrller {
         String setKey = "testSet";
         redisTemplate.opsForSet().add(setKey, name);
 
+        setKey = "set:online:device:101:2022-03-14";
         Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
-        System.out.println(setKey+" >>"+resultSet);
+        System.out.println(setKey+" >>"+resultSet+", "+resultSet.size());
         boolean memberStatus = redisTemplate.opsForSet().isMember(setKey,company);
         System.out.println("memberStatus>>"+memberStatus);
 //        redisTemplate.expire(setKey,2, TimeUnit.HOURS);
@@ -57,6 +72,32 @@ public class RedisContrller {
         }else{
             System.out.println("!=0");
         }
+    }
+
+    @RequestMapping(value = "/getSetSize",method = RequestMethod.GET)
+    public void getSetSize(){
+        String setKey = "set:online:device:101:2022-03-14";
+        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+        System.out.println(setKey+" >>"+resultSet);
+        System.out.println(setKey+" 数量 >>"+resultSet.size());
+    }
+
+    @RequestMapping(value = "/countRate",method = RequestMethod.GET)
+    public void countRate(){
+        String temp = "2328";
+//        BigDecimal deviceRateBd= new BigDecimal(temp).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+        BigDecimal deviceRateBd = MathUtil.countEnvtemp(temp,2);
+
+        System.out.println("deviceRateBd 333 >>"+deviceRateBd);
+    }
+
+    @RequestMapping(value = "/getRegisterByFarmId",method = RequestMethod.GET)
+    public void getRegisterByFarmId(@RequestParam(value = "deviceCode",required = true) String deviceCode){
+        //202007239999869
+        Map<Object, Object> map = cacheService.getDeviceRegister(deviceCode);
+        System.out.println("map >>"+map.toString());
 
+        String deviceAlias = (String)cacheService.getDeviceRegisterProperty(deviceCode,"deviceAlias");
+        System.out.println("deviceAlias>>"+deviceAlias);
     }
 }

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

@@ -3,6 +3,7 @@ package com.huimv.eartag2.process2.service;
 import com.huimv.eartag2.common.dao.entity.*;
 
 import java.text.ParseException;
+import java.util.Map;
 
 public interface ICacheService {
     //证是否存在当天总状态数据
@@ -49,4 +50,13 @@ public interface ICacheService {
 
     //更新耳标在线统计
     void putEartagOnlineCount(String earmark, EartagEartagOnlineEntity eartagOnlineEntity);
+
+    //
+    Integer getDeviceTotal(String farmId);
+
+    //读取全部注册信息
+    Map<Object, Object> getDeviceRegister(String farmId);
+
+    //读取属性
+    Object getDeviceRegisterProperty(String deviceCode, String deviceAlias);
 }

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

@@ -14,6 +14,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;
 
 /**
@@ -309,6 +310,35 @@ public class CacheServiceImpl implements ICacheService {
         redisTemplate.opsForHash().putAll(earmarkOnlineKey, map);
     }
 
+    @Override
+    public Integer getDeviceTotal(String farmId) {
+        String valueKey = BizConst.FARM_DEVICE_TOTAL_PREFIX+farmId;
+//        String value = (String) redisTemplate.opsForValue().get(valueKey);
+//        System.out.println("## value>>"+value);
+//        redisTemplate.opsForValue().set(valueKey,"50");
+        Object obj = redisTemplate.opsForValue().get(valueKey);
+        if(obj == null){
+            return null;
+        }else{
+            return Integer.parseInt(String.valueOf(obj));
+        }
+    }
+
+    @Override
+    public Map<Object, Object> getDeviceRegister(String deviceCode) {
+        String hashKey = BizConst.DEVICE_REGISTER_PREFIX+deviceCode;
+        Map<Object, Object> entriesMap = redisTemplate.opsForHash().entries(hashKey);
+        return entriesMap;
+    }
+
+    @Override
+    public Object getDeviceRegisterProperty(String deviceCode, String fieldName) {
+        String hashKey = BizConst.DEVICE_REGISTER_PREFIX+deviceCode;
+        Object obj = redisTemplate.opsForHash().get(hashKey, fieldName);
+        return obj;
+    }
+
+
     /**
      * @Method : RegisterEntityToMap
      * @Description :