Browse Source

修复manage模块部分bug --2022.4.2

zhuoning 3 năm trước cách đây
mục cha
commit
ec6e5cd0a8
20 tập tin đã thay đổi với 561 bổ sung204 xóa
  1. 12 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDeviceOnlineEntity.java
  2. 2 2
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagDeviceRegisterRepo.java
  3. 4 1
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagOnlineRepo.java
  4. 6 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/mq/Const.java
  5. 1 1
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/BizConst.java
  6. 15 2
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/config/TopicRabbitMQConfig.java
  7. 50 13
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/ManageListener.java
  8. 4 1
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/ICacheService.java
  9. 13 0
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/IDeviceService.java
  10. 8 0
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/CacheServiceImpl.java
  11. 157 18
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java
  12. 4 2
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java
  13. 12 5
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java
  14. 4 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application.properties
  15. 17 2
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/config/TopicRabbitMQConfig.java
  16. 28 1
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/producer/ManageProducer.java
  17. 16 5
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceRegisterServiceImpl.java
  18. 4 1
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceServiceImpl.java
  19. 190 149
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/EartagServiceImpl.java
  20. 14 1
      huimv-eartag2-platform/huimv-eartag2-manage/src/test/java/com/huimv/eartag2/manage/utils/CacheTest.java

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

@@ -67,6 +67,9 @@ public class EartagDeviceOnlineEntity implements Serializable {
     @Column(name = "eartag_last_time")
     private Timestamp eartagLastTime;
 
+    @Column(name = "live_status")
+    private Integer liveStatus;
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -211,6 +214,14 @@ public class EartagDeviceOnlineEntity implements Serializable {
         return eartagLastTime;
     }
 
+    public void setLiveStatus(Integer liveStatus) {
+        this.liveStatus = liveStatus;
+    }
+
+    public Integer getLiveStatus() {
+        return liveStatus;
+    }
+
     @Override
     public String toString() {
         return "EartagDeviceOnlineEntity{" +
@@ -232,6 +243,7 @@ public class EartagDeviceOnlineEntity implements Serializable {
                 "envtempLastTime=" + envtempLastTime + '\'' +
                 "eartagFirstTime=" + eartagFirstTime + '\'' +
                 "eartagLastTime=" + eartagLastTime + '\'' +
+                "liveStatus=" + liveStatus + '\'' +
                 '}';
     }
 }

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

@@ -14,8 +14,8 @@ public interface EartagDeviceRegisterRepo extends JpaRepository<EartagDeviceRegi
     @Query(nativeQuery = true,value = "SELECT * FROM eartag_device_register WHERE id=?1")
     EartagDeviceRegisterEntity getDeviceRegisterByRowId(String id);
 
-
-    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND (device_status=1 OR device_status=0)")
+//    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND (device_status=0 OR device_status=1 OR device_status=2)")
+    @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND device_status IN(0,1,2)")
     List<Object[]> getDeviceCountByFarmId(String farmId);
 
     @Query(nativeQuery = true,value = "SELECT COUNT(*) total FROM eartag_device_register WHERE farm_id=?1 AND device_status=?2")

+ 4 - 1
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagOnlineRepo.java

@@ -32,7 +32,7 @@ public interface EartagEartagOnlineRepo extends JpaRepository<EartagEartagOnline
      * @Date        : 2022/3/8       
      * @Time        : 18:43
      */
-    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE earmark=?1 AND add_date BETWEEN DATE_FORMAT(?2,'%Y-%m-%d') AND DATE_FORMAT(?3,'%Y-%m-%d') ORDER BY add_date DESC")
+    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE earmark=?1 AND add_date BETWEEN DATE_FORMAT(?2,'%Y-%m-%d') AND DATE_FORMAT(?3,'%Y-%m-%d') ORDER BY add_date ASC")
     List<EartagEartagOnlineEntity> getEartagOnlineByEarmarkAndDate(String earmark, String startDateText, String todayDateText);
 
     /**
@@ -48,6 +48,9 @@ public interface EartagEartagOnlineRepo extends JpaRepository<EartagEartagOnline
     @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE farm_id=?1 AND DATE_FORMAT(add_date,'%Y-%m-%d')=DATE_FORMAT(?2,'%Y-%m-%d') ORDER BY add_date ASC")
     List<EartagEartagOnlineEntity> getEartagOnlineByFarmIdAndDate(String farmId, String addDate);
 
+    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE earmark=?1 AND add_date BETWEEN DATE_FORMAT(?2,'%Y-%m-%d') AND DATE_FORMAT(?3,'%Y-%m-%d') ORDER BY add_date DESC")
+    List<EartagEartagOnlineEntity> getEartagOnlineRecordsByEarmarkAndDate(String earmark, String startDateText, String todayDateText);
+
 //    @Query(nativeQuery = true,value = "SELECT * FROM eartag_eartag_online WHERE farm_id=?1 AND add_date = DATE_FORMAT(,'%Y-%m-%d')=DATE_FORMAT(?2,'%Y-%m-%d') ORDER BY add_date ASC")
 //    List<EartagEartagOnlineEntity> getEartagOnlineByEarmarkAndStartDateAndEndDate(String earmark, String todayDateText, String startDateText);
 }

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

@@ -41,7 +41,13 @@ public class Const {
     public final static String EXCHANGE_SYNC_DEVICE_REGISTER = "topic.syncDeviceRegister.exchange";
     public final static String ROUTING_KEY_SYNC_DEVICE_REGISTER = "topic.syncDeviceRegister.routeKey";
 
+    // ========================== 同步设备总数 ========================== //
     public final static String QUEUE_SYNC_EARTAG_REGISTER = "topic.syncEartagRegister.queue";
     public final static String EXCHANGE_SYNC_EARTAG_REGISTER = "topic.syncEartagRegister.exchange";
     public final static String ROUTING_KEY_SYNC_EARTAG_REGISTER = "topic.syncEartagRegister.routeKey";
+
+    // -------------------------- 同步设备总数 -------------------------- //
+    public final static String QUEUE_SYNC_DEVICE_TOTAL = "topic.syncDeviceTotal.queue";
+    public final static String EXCHANGE_SYNC_DEVICE_TOTAL = "topic.syncDeviceTotal.exchange";
+    public final static String ROUTING_KEY_SYNC_DEVICE_TOTAL = "topic.syncDeviceTotal.routeKey";
 }

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

@@ -48,7 +48,7 @@ public class BizConst {
     //牧场总状态表+牧场id
     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:";

+ 15 - 2
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/config/TopicRabbitMQConfig.java

@@ -62,7 +62,7 @@ public class TopicRabbitMQConfig {
         return BindingBuilder.bind(eartagQueue()).to(eartagExchange()).with(Const.ROUTING_KEY_EARTAG);
     }
 
-    // ############################# 设备绑定队列 ############################# //
+    // ============================= 设备绑定队列 ============================= //
     @Bean
     public Queue syncDeviceRegisterQueue() {
         return new Queue(Const.QUEUE_SYNC_DEVICE_REGISTER);
@@ -76,7 +76,7 @@ public class TopicRabbitMQConfig {
         return BindingBuilder.bind(syncDeviceRegisterQueue()).to(syncDeviceRegisterExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_REGISTER);
     }
 
-    // ############################# 耳标绑定队列 ############################# //
+    // =============================耳标绑定队列 ============================= //
     @Bean
     public Queue syncEartagRegisterQueue() {
         return new Queue(Const.QUEUE_SYNC_EARTAG_REGISTER);
@@ -90,4 +90,17 @@ public class TopicRabbitMQConfig {
         return BindingBuilder.bind(syncEartagRegisterQueue()).to(syncEartagRegisterExchange()).with(Const.ROUTING_KEY_SYNC_EARTAG_REGISTER);
     }
 
+    // ============================= 同步设备总数-绑定队列 ============================= //
+    @Bean
+    public Queue syncDeviceTotalQueue() {
+        return new Queue(Const.QUEUE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    TopicExchange syncDeviceTotalExchange() {
+        return new TopicExchange(Const.EXCHANGE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    Binding bindingDeviceTotalExchangeMessage() {
+        return BindingBuilder.bind(syncDeviceTotalQueue()).to(syncDeviceTotalExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_TOTAL);
+    }
 }

+ 50 - 13
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/ManageListener.java

@@ -3,6 +3,7 @@ package com.huimv.eartag2.device.listener;
 import com.alibaba.fastjson.JSONObject;
 import com.huimv.eartag2.common.mq.Const;
 import com.huimv.eartag2.device.service.IDeviceService;
+import com.huimv.eartag2.device.utils.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
@@ -41,6 +42,9 @@ public class ManageListener {
         System.out.println("device queue>>");
         JSONObject deviceRegisterJo = JSONObject.parseObject(map.get("deviceRegister").toString()) ;
         System.out.println("deviceRegisterJo>>"+deviceRegisterJo.toJSONString());
+        DateUtil dateUtil = new DateUtil();
+        String todayDateText = dateUtil.getTodayDateText();
+
 //        System.out.println("同步设备注册信息>>"+deviceRegisterJo);
         //{计算有效设备总数并存储到缓存}
         deviceService.countEffectiveDeviceTotal(deviceRegisterJo);
@@ -49,6 +53,10 @@ public class ManageListener {
         //{计算设备和耳标总状态}
         deviceService.countFarmAllStatus(deviceRegisterJo);
         System.out.println("5.");
+
+        //{}
+        deviceService.unCancelDeviceOnlineLiveStatus(deviceRegisterJo,todayDateText);
+        System.out.println("6.");
     }
 
     /**
@@ -61,20 +69,49 @@ public class ManageListener {
      * @Date        : 2022/3/25       
      * @Time        : 10:14
      */
-    @RabbitListener(queues = Const.QUEUE_SYNC_EARTAG_REGISTER)
+//    @RabbitListener(queues = Const.QUEUE_SYNC_EARTAG_REGISTER)
+//    @RabbitHandler
+//    public void processSyncEartagRegister(Map map) throws ParseException {
+//        System.out.println("eartag queue>>");
+//        JSONObject deviceRegisterJo = JSONObject.parseObject(map.get("eartagRegister").toString()) ;
+//        System.out.println("deviceRegisterJo>>"+deviceRegisterJo.toJSONString());
+//
+////        System.out.println("同步设备注册信息>>"+deviceRegisterJo);
+//        //{计算有效耳标总数并存储到缓存}
+////        deviceService.countEffectiveDeviceTotal(deviceRegisterJo);
+//        System.out.println("4.");
+//
+//        //{计算设备和耳标总状态}
+////        deviceService.countFarmAllStatus(deviceRegisterJo);
+//        System.out.println("5.");
+//    }
+
+
+    /**
+     * @Method      : processSyncDeviceTotal
+     * @Description : 同步设备总数
+     * @Params      : [map]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/4/1       
+     * @Time        : 11:34
+     */
+    @RabbitListener(queues = Const.QUEUE_SYNC_DEVICE_TOTAL)
     @RabbitHandler
-    public void processSyncEartagRegister(Map map) throws ParseException {
-        System.out.println("eartag queue>>");
-        JSONObject deviceRegisterJo = JSONObject.parseObject(map.get("eartagRegister").toString()) ;
-        System.out.println("deviceRegisterJo>>"+deviceRegisterJo.toJSONString());
-//        System.out.println("同步设备注册信息>>"+deviceRegisterJo);
-        //{计算有效耳标总数并存储到缓存}
-//        deviceService.countEffectiveDeviceTotal(deviceRegisterJo);
-        System.out.println("4.");
+    public void processSyncDeviceTotal(Map map) throws ParseException {
+//        System.out.println("device_total queue>>"+map.toString());
+        DateUtil dateUtil = new DateUtil();
+        String todayDateText = dateUtil.getTodayDateText();
+        //{重新计算有效设备总数并存储到缓存}
+        deviceService.countEffectiveDeviceTotal(map);
 
-        //{计算设备和耳标总状态}
-//        deviceService.countFarmAllStatus(deviceRegisterJo);
-        System.out.println("5.");
-    }
+        //{更新总状态}
+        deviceService.cancelFarmAllStatus(map);
 
+        //{}
+        deviceService.cancelDeviceOnlineLiveStatus(map,todayDateText);
+
+        System.out.println("重新计算有效设备总数并存储到缓存完成.");
+    }
 }

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

@@ -34,7 +34,7 @@ public interface ICacheService {
     void putDeviceRegister(String deviceCode, EartagDeviceRegisterEntity deviceRegisterEntity);
 
     //将设备数据保存到在线数据中
-    void putDeviceInOnline(String deviceOnlineHashKey, EartagDeviceOnlineEntity eartagDeviceOnlineEntity);
+    void putDeviceInOnline(String deviceCode, EartagDeviceOnlineEntity eartagDeviceOnlineEntity);
 
     //
     boolean isExistEartagOnlineSet(String farmId, String earmark, String todayDateText);
@@ -76,4 +76,7 @@ public interface ICacheService {
 
     //读取属性
     Object getHashProperty(String deviceCode, String deviceAlias);
+
+    //
+    void deleteDeviceToOnlineSet(String farmId, String deviceCode, String todayDateText);
 }

+ 13 - 0
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/IDeviceService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import java.sql.Date;
 import java.sql.Timestamp;
 import java.text.ParseException;
+import java.util.Map;
 
 public interface IDeviceService {
     void remoteProcessFarmAllStatus(String farmId) throws ParseException;
@@ -33,4 +34,16 @@ public interface IDeviceService {
 
     //
     void countFarmAllStatus(JSONObject deviceRegisterJo) throws ParseException;
+
+    //
+    void countEffectiveDeviceTotal(Map inMap);
+
+    //
+    void cancelFarmAllStatus(Map map) throws ParseException;
+
+    //
+    void cancelDeviceOnlineLiveStatus(Map map, String todayDateText);
+
+    //
+    void unCancelDeviceOnlineLiveStatus(JSONObject deviceRegisterJo, String todayDateText);
 }

+ 8 - 0
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/CacheServiceImpl.java

@@ -48,6 +48,14 @@ public class CacheServiceImpl implements ICacheService {
     }
 
     @Override
+    public void deleteDeviceToOnlineSet(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);
+        redisTemplate.opsForSet().remove(setKey,deviceCode);
+    }
+
+    @Override
     public Boolean isExistTodayFarmAllStatus(String deviceCode) throws ParseException {
         System.out.println("isExistTodayFarmAllStatus 2.deviceCode>>"+deviceCode);
 

+ 157 - 18
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java

@@ -78,9 +78,9 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Description : 处理设备心跳数据
      * @Params      : [dataJo]
      * @Return      : void
-     * 
+     *
      * @Author      : ZhuoNing
-     * @Date        : 2022/3/12       
+     * @Date        : 2022/3/12
      * @Time        : 19:16
      */
     @Override
@@ -242,11 +242,12 @@ public class DeviceServiceImpl implements IDeviceService {
             Timestamp envtempLastTime = null;
             Timestamp firstTime = nowTimestamp;
             Timestamp lastTime = nowTimestamp;
+            Integer liveStatus = 1;
             //{计算耳标总数}
 //            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
             Integer eartagTotal = 0;
             //{新建设备在线统计并创建缓存}
-            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime);
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime,liveStatus);
         }else{
             eartagDeviceOnlineEntity.setAlias(alias);
             int heartbeatTotal = eartagDeviceOnlineEntity.getHeartbeatTotal();
@@ -339,9 +340,9 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Description : 处理设备环境温度数据
      * @Params      : [dataJo]
      * @Return      : void
-     * 
+     *
      * @Author      : ZhuoNing
-     * @Date        : 2022/3/12       
+     * @Date        : 2022/3/12
      * @Time        : 19:16
      */
     @Override
@@ -394,24 +395,95 @@ public class DeviceServiceImpl implements IDeviceService {
         System.out.println("## farmId>>"+farmId);
         //{获取处于工作状态的设备数量}
         Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
-        System.out.println("## deviceTotal>>"+deviceTotal);
+        System.out.println("## 1.deviceTotal>>"+deviceTotal);
         if(deviceTotal == 0){
             log.error("出错:设备总数(deviceTotal)不能为0.");
         }
         //设备在线数量
         Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
-//        System.out.println("# 设备当前在线数量(deviceOnlineSum)="+deviceOnlineSum);
+        System.out.println("## 2.设备当前在线数量(deviceOnlineSum)="+deviceOnlineSum);
         deviceOnlineSum++;
+        System.out.println("## 3.设备当前在线数量(deviceOnlineSum) 2="+deviceOnlineSum);
+        //设备离线数量
+        Integer deviceOfflineSum = 0;
+        if(deviceTotal > deviceOnlineSum){
+            deviceOfflineSum = deviceTotal - deviceOnlineSum;
+        }
+        System.out.println("## 4.deviceOfflineSum>>"+deviceOfflineSum);
+        //设备在线率
+        BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+        Float deviceOnlineRate = Float.parseFloat(deviceRateBd.toString());
+        System.out.println("## 5.deviceOnlineRate>>"+deviceOnlineRate);
+        //{获取注销设备数量}
+        Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
+        Integer eartagOnlineSum = 0;
+        Float eartagOnlineRate = 0F;
+        //耳标总数量
+        Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+        if(eartagTotal != 0){
+            //耳标在线数量
+            eartagOnlineSum = eartagService.getEartagOnelineTotal(farmId,todayDateText);
+            //耳标在线率
+            BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
+            eartagOnlineRate = Float.parseFloat(eartagRateBd.toString());
+        }
+        //
+        EartarFarmAllStatusEntity farmAllStatusEntity = eartagFarmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
+        if(farmAllStatusEntity == null){
+            //{新建设备状态记录并更新缓存cache}
+            createNewFarmAllStatus(farmId,todayDate,nowTimestamp,deviceTotal,deviceOnlineSum,deviceOfflineSum,deviceCancelSum,deviceOnlineRate,eartagTotal,eartagOnlineSum,eartagOnlineRate);
+        }else{
+            //计算设备状态并更新缓存cache(在线数+1,离线数-1,计算设备在线率)
+            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);
+            System.out.println("## 更新的内容="+farmAllStatusEntity);
+            //# 同步更新牧场总状态缓存相关字段 #
+            cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
+        }
+    }
+
+    /**
+     * @Method      : cancelEnvtempOfDeviceAllStatus
+     * @Description :
+     * @Params      : [farmId, todayDateText, todayDate, nowTimestamp]
+     * @Return      : void
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/4/1
+     * @Time        : 16:26
+     */
+    public void cancelEnvtempOfDeviceAllStatus(String farmId, String todayDateText, java.sql.Date todayDate, Timestamp nowTimestamp) throws ParseException {
+//        System.out.println("## farmId>>"+farmId);
+        //{获取处于工作状态的设备数量}
+        Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
+        System.out.println("## A.deviceTotal>>"+deviceTotal);
+        if(deviceTotal == 0){
+            log.error("出错:设备总数(deviceTotal)不能为0.");
+        }
+        //设备在线数量
+        Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
+        System.out.println("# B.设备当前在线数量(deviceOnlineSum)="+deviceOnlineSum);
+//        deviceOnlineSum--;
 //        System.out.println("# 设备当前在线数量(deviceOnlineSum) 2="+deviceOnlineSum);
         //设备离线数量
         Integer deviceOfflineSum = 0;
         if(deviceTotal > deviceOnlineSum){
             deviceOfflineSum = deviceTotal - deviceOnlineSum;
         }
-        System.out.println("## deviceOnlineSum>>"+deviceOnlineSum);
+        System.out.println("## C.deviceOnlineSum>>"+deviceOnlineSum);
+        System.out.println("## D.deviceOfflineSum>>"+deviceOfflineSum);
         //设备在线率
         BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
         Float deviceOnlineRate = Float.parseFloat(deviceRateBd.toString());
+        System.out.println("## E.deviceOnlineRate>>"+deviceOnlineRate);
         //{获取注销设备数量}
         Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
         Integer eartagOnlineSum = 0;
@@ -442,6 +514,7 @@ public class DeviceServiceImpl implements IDeviceService {
             farmAllStatusEntity.setEartagRate(eartagOnlineRate);
             farmAllStatusEntity.setUpdateTime(nowTimestamp);
             eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+            System.out.println("## 更新的内容="+farmAllStatusEntity);
             //# 同步更新牧场总状态缓存相关字段 #
             cacheService.flashAllStatusCache(farmId,farmAllStatusEntity);
         }
@@ -554,8 +627,9 @@ public class DeviceServiceImpl implements IDeviceService {
             //{计算耳标总数}
 //            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
             Integer eartagTotal = 0;
+            Integer liveStatus = 1;
             //{新建设备在线统计并创建缓存}
-            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,envtemp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime);
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,envtemp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime,liveStatus);
         }else{
             eartagDeviceOnlineEntity.setAlias(alias);
             int envtempTotal = eartagDeviceOnlineEntity.getEnvtempTotal();
@@ -580,12 +654,12 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Description : 通过心跳创建在线统计记录
      * @Params      : [deviceCode, alias, heartbeatTotal, envtempTotal, eartagTotal, todayDate, farmId, heartbeatFirstTime, heartbeatLastTime, envtempFirstTime, envtempLastTime]
      * @Return      : void
-     * 
+     *
      * @Author      : ZhuoNing
-     * @Date        : 2022/3/14       
+     * @Date        : 2022/3/14
      * @Time        : 21:23
      */
-    private void newDeviceOnline(String deviceCode, String alias, Integer heartbeatTotal, Integer envtempTotal, Integer eartagTotal, java.sql.Date todayDate, String farmId, Timestamp heartbeatFirstTime, Timestamp heartbeatLastTime, Timestamp envtempFirstTime, Timestamp envtempLastTime, Timestamp firstTime, Timestamp lastTime) {
+    private void newDeviceOnline(String deviceCode, String alias, Integer heartbeatTotal, Integer envtempTotal, Integer eartagTotal, java.sql.Date todayDate, String farmId, Timestamp heartbeatFirstTime, Timestamp heartbeatLastTime, Timestamp envtempFirstTime, Timestamp envtempLastTime, Timestamp firstTime, Timestamp lastTime, Integer liveStatus) {
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setAlias(alias);
@@ -600,6 +674,7 @@ public class DeviceServiceImpl implements IDeviceService {
         newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
         newEartagDeviceOnlineEntity.setFirstTime(firstTime);
         newEartagDeviceOnlineEntity.setLastTime(lastTime);
+        newEartagDeviceOnlineEntity.setLiveStatus(liveStatus);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
         cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);
@@ -615,7 +690,7 @@ public class DeviceServiceImpl implements IDeviceService {
      * @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, Timestamp firstTime, Timestamp lastTime) {
+    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, Timestamp firstTime, Timestamp lastTime, Integer liveStatus) {
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setAlias(alias);
@@ -631,6 +706,7 @@ public class DeviceServiceImpl implements IDeviceService {
         newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
         newEartagDeviceOnlineEntity.setFirstTime(firstTime);
         newEartagDeviceOnlineEntity.setLastTime(lastTime);
+        newEartagDeviceOnlineEntity.setLiveStatus(liveStatus);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
         cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);
@@ -660,7 +736,7 @@ public class DeviceServiceImpl implements IDeviceService {
         String farmId = deviceRegisterJo.getString("farmId");
         //{}
         Integer effectiveDeviceTotal = getEffectiveDeviceSum(farmId);
-        System.out.println("## effectiveDeviceTotal>>"+effectiveDeviceTotal);
+        System.out.println("## effectiveDeviceTotal >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+effectiveDeviceTotal);
         //{设置设备总数}
         cacheService.putDeviceTotal(effectiveDeviceTotal,farmId);
     }
@@ -678,6 +754,69 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     @Override
+    public void countEffectiveDeviceTotal(Map inMap) {
+        String farmId = inMap.get("farmId").toString();
+        //{}
+        Integer effectiveDeviceTotal = getEffectiveDeviceSum(farmId);
+        System.out.println("##<注销设备> effectiveDeviceTotal>>"+effectiveDeviceTotal);
+        //{设置设备总数}
+        cacheService.putDeviceTotal(effectiveDeviceTotal,farmId);
+    }
+
+    @Override
+    public void cancelFarmAllStatus(Map map) throws ParseException {
+        String farmId = map.get("farmId").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());
+        //{取消牧场总状态}
+        cancelEnvtempOfDeviceAllStatus(farmId,todayDateText,todayDate,nowTimestamp);
+    }
+
+    @Override
+    public void cancelDeviceOnlineLiveStatus(Map map, String todayDateText) {
+        String deviceCode = map.get("deviceCode").toString();
+        String farmId = map.get("farmId").toString();
+        System.out.println("## <cancelDeviceOnlineLiveStatus> todayDateText="+todayDateText);
+        System.out.println("## <cancelDeviceOnlineLiveStatus> deviceCode="+deviceCode);
+        EartagDeviceOnlineEntity deviceOnlineEntity = eartagDeviceOnlineRepo.getDeviceOnline(deviceCode,todayDateText);
+        System.out.println("## <cancelDeviceOnlineLiveStatus> deviceOnlineEntity="+deviceOnlineEntity);
+        if(deviceOnlineEntity == null){
+            log.error("该设备当天在线记录不存在.");
+            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        }else{
+            Integer liveStatus = 0;
+            deviceOnlineEntity.setLiveStatus(liveStatus);
+            eartagDeviceOnlineRepo.saveAndFlush(deviceOnlineEntity);
+            //更新缓存(从缓存里将该设备从set里取出,同时将该数据表对应的缓存更新)
+            cacheService.putDeviceInOnline(deviceCode,deviceOnlineEntity);
+            //从在线集合种删除设备编码
+            cacheService.deleteDeviceToOnlineSet(farmId,deviceCode,todayDateText);
+        }
+    }
+
+    @Override
+    public void unCancelDeviceOnlineLiveStatus(JSONObject deviceRegisterJo, String todayDateText) {
+        String deviceCode = deviceRegisterJo.getString("deviceCode");
+        String farmId = deviceRegisterJo.getString("farmId");
+        System.out.println("## <unCancelDeviceOnlineLiveStatus> deviceCode="+deviceCode);
+        System.out.println("## <unCancelDeviceOnlineLiveStatus> todayDateText="+todayDateText);
+        EartagDeviceOnlineEntity deviceOnlineEntity = eartagDeviceOnlineRepo.getDeviceOnline(deviceCode,todayDateText);
+        if(deviceOnlineEntity == null){
+            log.error("该设备当天在线记录不存在.");
+            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        }else{
+            Integer liveStatus = 1;
+            deviceOnlineEntity.setLiveStatus(liveStatus);
+            eartagDeviceOnlineRepo.saveAndFlush(deviceOnlineEntity);
+            //更新缓存(从缓存里将该设备从set里取出,同时将该数据表对应的缓存更新)
+            cacheService.putDeviceInOnline(deviceCode,deviceOnlineEntity);
+            //从在线集合种删除设备编码
+            cacheService.putDeviceToOnlineSet(farmId,deviceCode,todayDateText);
+        }
+    }
+
+    @Override
     public void remoteProcessFarmAllStatus(String farmId) throws ParseException {
         String todayDateText = new com.huimv.eartag2.common.utils.DateUtil().getTodayDateText();
         java.sql.Date todayDate = new java.sql.Date(new java.util.Date().getTime());
@@ -711,9 +850,9 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Description : 保存设备心跳数据
      * @Params      : [dataJo]
      * @Return      : void
-     * 
+     *
      * @Author      : ZhuoNing
-     * @Date        : 2022/2/15       
+     * @Date        : 2022/2/15
      * @Time        : 14:39
      */
     @Override
@@ -731,9 +870,9 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Description : 保存设备温度数据
      * @Params      : [dataJo]
      * @Return      : void
-     * 
+     *
      * @Author      : ZhuoNing
-     * @Date        : 2022/2/15       
+     * @Date        : 2022/2/15
      * @Time        : 14:39
      */
     @Override

+ 4 - 2
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java

@@ -135,8 +135,9 @@ public class EartagServiceImpl implements IEartagService {
             Timestamp eartagFirstTime = nowTimestamp;
             Timestamp eartagLastTime = nowTimestamp;
             Integer eartagTotal = 1;
+            Integer liveStatus = 1;
             //{新建设备在线统计并创建缓存}
-            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime,eartagFirstTime,eartagLastTime,earTemp1,envTemp1);
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime,eartagFirstTime,eartagLastTime,earTemp1,envTemp1,liveStatus);
         }else{
 
             eartagDeviceOnlineEntity.setAlias(alias);
@@ -167,7 +168,7 @@ public class EartagServiceImpl implements IEartagService {
      * @Date        : 2022/3/29       
      * @Time        : 9:44
      */
-    private void newDeviceOnline(String deviceCode, String alias, Integer heartbeatTotal, Integer envtempTotal, Integer eartagTotal, java.sql.Date todayDate, String farmId, Timestamp heartbeatFirstTime, Timestamp heartbeatLastTime, Timestamp envtempFirstTime, Timestamp envtempLastTime, Timestamp firstTime, Timestamp lastTime, Timestamp eartagFirstTime, Timestamp eartagLastTime, String earTemp1, String envTemp1) {
+    private void newDeviceOnline(String deviceCode, String alias, Integer heartbeatTotal, Integer envtempTotal, Integer eartagTotal, java.sql.Date todayDate, String farmId, Timestamp heartbeatFirstTime, Timestamp heartbeatLastTime, Timestamp envtempFirstTime, Timestamp envtempLastTime, Timestamp firstTime, Timestamp lastTime, Timestamp eartagFirstTime, Timestamp eartagLastTime, String earTemp1, String envTemp1, Integer liveStatus) {
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setAlias(alias);
@@ -186,6 +187,7 @@ public class EartagServiceImpl implements IEartagService {
         newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
         newEartagDeviceOnlineEntity.setEartagFirstTime(eartagFirstTime);
         newEartagDeviceOnlineEntity.setEartagLastTime(eartagLastTime);
+        newEartagDeviceOnlineEntity.setLiveStatus(liveStatus);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
         cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);

+ 12 - 5
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java

@@ -46,6 +46,8 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
     private IDeviceService deviceService;
     @Value("${data.input.flow}")
     private Integer dataInputFlow;
+    @Value("${data.test.input}")
+    private Integer dataTestInput;
     private StringBuilder askTextSb = null;
     private int num = 0;
 
@@ -75,7 +77,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
 //            System.out.println("askTextSb.内容长度>>"+askTextSb.length());
 //            System.out.println("输入完成.");
             // 处理客户端消息
-            handleClientMessage(askTextSb.toString(),ctx);
+            handleClientEartagMessage(askTextSb.toString(),ctx);
             //清空重置;
             askTextSb.delete(0,askTextSb.length());
             num = 0;
@@ -85,8 +87,10 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
 
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
-        System.out.println("cause.getMessage()>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+cause.getMessage());
-        System.out.println(cause.toString());
+//        System.out.println("cause.getMessage()>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+cause.getMessage());
+        if(cause.getMessage().indexOf("Connection reset") != -1){
+            log.info("相关采集器设备再重启:"+cause.toString());
+        }
 //        cause.printStackTrace();
         ctx.close();
     }
@@ -101,13 +105,16 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
      * @Date        : 2022/3/28       
      * @Time        : 17:36
      */
-    private void handleClientMessage(String clientAskText,ChannelHandlerContext ctx) throws ParseException {
+    private void handleClientEartagMessage(String clientAskText,ChannelHandlerContext ctx) throws ParseException {
 //        System.out.println("## clientAskText>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "+clientAskText);
         clientAskText = clientAskText.replaceAll("\r","").replaceAll("\n","");
         System.out.println("### 服务端接收数据 >>" + clientAskText);
         /////////////////////////////////////////////////////////////
         //TEST-saveRawData()
-//        deviceService.saveRawData(clientAskText);
+        if(dataTestInput == 1){
+            deviceService.saveRawData(clientAskText);
+        }
+
         /////////////////////////////////////////////////////////////
 
         //{}

+ 4 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application.properties

@@ -25,3 +25,7 @@ management.security.enabled=false
 # 数据处理流程
 data.input.flow=2
 
+# 是否写入测试数据(1:可以写入 0:不能写入)
+data.test.input=1
+
+

+ 17 - 2
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/config/TopicRabbitMQConfig.java

@@ -18,7 +18,7 @@ import org.springframework.context.annotation.Configuration;
  **/
 @Configuration
 public class TopicRabbitMQConfig {
-    // ############################# 设备绑定队列 ############################# //
+    // ============================== 设备绑定队列 ============================== //
     @Bean
     public Queue syncDeviceRegisterQueue() {
         return new Queue(Const.QUEUE_SYNC_DEVICE_REGISTER);
@@ -32,7 +32,7 @@ public class TopicRabbitMQConfig {
         return BindingBuilder.bind(syncDeviceRegisterQueue()).to(syncDeviceRegisterExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_REGISTER);
     }
 
-    // ############################# 耳标绑定队列 ############################# //
+    // ============================== 耳标绑定队列 ============================== //
     @Bean
     public Queue syncEartagRegisterQueue() {
         return new Queue(Const.QUEUE_SYNC_EARTAG_REGISTER);
@@ -45,4 +45,19 @@ public class TopicRabbitMQConfig {
     Binding bindingEartagRegisterExchangeMessage() {
         return BindingBuilder.bind(syncEartagRegisterQueue()).to(syncEartagRegisterExchange()).with(Const.ROUTING_KEY_SYNC_EARTAG_REGISTER);
     }
+
+    // ============================= 同步设备总数-绑定队列 ============================= //
+    @Bean
+    public Queue syncDeviceTotalQueue() {
+        return new Queue(Const.QUEUE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    TopicExchange syncDeviceTotalExchange() {
+        return new TopicExchange(Const.EXCHANGE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    Binding bindingDeviceTotalExchangeMessage() {
+        return BindingBuilder.bind(syncDeviceTotalQueue()).to(syncDeviceTotalExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_TOTAL);
+    }
+
 }

+ 28 - 1
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/producer/ManageProducer.java

@@ -22,7 +22,16 @@ public class ManageProducer {
     @Autowired
     RabbitTemplate rabbitTemplate;  //使用RabbitTemplate,这提供了接收/发送等等方法
 
-    //处理同步设备注册相关信息
+    /**
+     * @Method      : sendSyncDeviceRegister
+     * @Description : 处理同步设备注册相关信息
+     * @Params      : [deviceRegister]
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/4/1
+     * @Time        : 15:19
+     */
     public String sendSyncDeviceRegister(String deviceRegister) {
         Map map = new HashMap();
         map.put("deviceRegister",deviceRegister);
@@ -31,4 +40,22 @@ public class ManageProducer {
         return "ok";
     }
 
+    /**
+     * @Method      : sendSyncDeviceTotal
+     * @Description : 发送同步设备总数
+     * @Params      : [farmId]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/4/1       
+     * @Time        : 15:19
+     */
+    public void sendSyncDeviceTotal(String farmId, String deviceCode) {
+//        System.out.println("设置取消状态 2.");
+        Map map = new HashMap();
+        map.put("farmId",farmId);
+        map.put("deviceCode",deviceCode);
+        rabbitTemplate.convertAndSend(Const.EXCHANGE_SYNC_DEVICE_TOTAL, Const.ROUTING_KEY_SYNC_DEVICE_TOTAL, map);
+        System.out.println("设置取消状态 3.同步设备总数信息 >>"+map.toString());
+    }
 }

+ 16 - 5
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceRegisterServiceImpl.java

@@ -179,8 +179,8 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
 
     @Override
     public Result setDeviceStatus(Integer id, Integer deviceStatus) throws ParseException {
-        System.out.println("## <setDeviceStatus> id="+id);
-        System.out.println("## <setDeviceStatus> deviceStatus="+deviceStatus);
+//        System.out.println("## <setDeviceStatus> id="+id);
+//        System.out.println("## <setDeviceStatus> deviceStatus="+deviceStatus);
         //
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getById(id);
         if(deviceRegisterEntity == null){
@@ -201,12 +201,21 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
         return new Result(ResultCode.SUCCESS);
     }
 
-    //设置工作状态
+    /**
+     * @Method      : setDeviceWorkStatus
+     * @Description : 设置工作状态
+     * @Params      : [deviceRegisterEntity]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/4/1       
+     * @Time        : 10:43
+     */
     private void setDeviceWorkStatus(EartagDeviceRegisterEntity deviceRegisterEntity) throws ParseException {
         String deviceCode = deviceRegisterEntity.getDeviceCode();
         String chipId = deviceRegisterEntity.getChipId();
-        String farmId = deviceRegisterEntity.getFarmId();
-        DateUtil dateUtil = new DateUtil();
+//        String farmId = deviceRegisterEntity.getFarmId();
+//        DateUtil dateUtil = new DateUtil();
         //设置设备注册信息缓存
         cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
         //{将该设备编号加入到集合Set当中}
@@ -250,6 +259,8 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
             //{删除芯片ID缓存}
             cacheService.deleteChipIdHashCache(chipId);
         }
+        //发送MQ,处理更新在线设备数
+        producer.sendSyncDeviceTotal(farmId,deviceCode);
     }
 
     @Override

+ 4 - 1
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceServiceImpl.java

@@ -545,7 +545,7 @@ public class DeviceServiceImpl implements IDeviceService {
         DateUtil dateUtil = new DateUtil();
         String todayDate = dateUtil.getTodayDateText();
         //* 这里提供2种方式:1、从数据库读取 2、从缓存中取数(后期优化),但是同时提供2种方式都可用,防止缓存方式失效 */
-        System.out.println("deviceOnlineAccessMode>>" + deviceOnlineAccessMode);
+//        System.out.println("deviceOnlineAccessMode>>" + deviceOnlineAccessMode);
         if (deviceOnlineAccessMode.trim().equalsIgnoreCase("mysql")) {
             //
             return listDeviceOnlineFromMySQL(farmId, addDate, deviceCode, alias, pageNo, pageSize);
@@ -564,6 +564,7 @@ public class DeviceServiceImpl implements IDeviceService {
 //        }else{
 //            return new Result(ResultCode.SUCCESS,JSONObject.toJSONString(deviceOnlineEntityList));
 //        }
+        Integer liveStatus = 1;
         DateUtil dateUtil = new DateUtil();
         //
         Specification<EartagDeviceOnlineEntity> sf = (Specification<EartagDeviceOnlineEntity>) (root, criteriaQuery, criteriaBuilder) -> {
@@ -589,6 +590,7 @@ public class DeviceServiceImpl implements IDeviceService {
             if (null != alias && alias.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("alias").as(String.class), alias));
             }
+            predList.add(criteriaBuilder.equal(root.get("liveStatus").as(Integer.class), liveStatus));
             Predicate[] pred = new Predicate[predList.size()];
             Predicate and = criteriaBuilder.and(predList.toArray(pred));
             criteriaQuery.where(and);
@@ -613,6 +615,7 @@ public class DeviceServiceImpl implements IDeviceService {
         outDataJo.put("empty",pageDeviceOnlineEntity.isEmpty());
 
         List<EartagDeviceOnlineEntity> deviceOnlineEntityList = pageDeviceOnlineEntity.getContent();
+        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>deviceOnlineEntityList.size>>"+deviceOnlineEntityList.size());
         JSONArray outJa = new JSONArray();
         outDataJo.put("content",outJa);
         for(EartagDeviceOnlineEntity deviceOnlineEntity:deviceOnlineEntityList){

+ 190 - 149
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/EartagServiceImpl.java

@@ -46,14 +46,13 @@ public class EartagServiceImpl implements IEartagService {
     private EartagDeviceEartagCountRepo deviceEartagCountRepo;
 
     /**
-     * @Method      : listAllEartagFlow
+     * @Method : listAllEartagFlow
      * @Description : 分页展示所有流水列表
-     * @Params      : [farmId, createDate, deviceCode, earmark, pageNo, pageSize]
-     * @Return      : com.huimv.eartag2.common.utils.Result
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/3/11
-     * @Time        : 11:30
+     * @Params : [farmId, createDate, deviceCode, earmark, pageNo, pageSize]
+     * @Return : com.huimv.eartag2.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/3/11
+     * @Time : 11:30
      */
     @Override
     public Result listAllEartagFlow(String farmId, String createDate, String deviceCode, String earmark, Integer pageNo, Integer pageSize) throws ParseException {
@@ -62,15 +61,15 @@ public class EartagServiceImpl implements IEartagService {
             //
             List<Predicate> predList = new ArrayList<>();
             //farmId
-            if (null != farmId && farmId.trim().length()>0) {
+            if (null != farmId && farmId.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("farmId").as(String.class), farmId));
             }
             //earmark
-            if (null != earmark && earmark.trim().length()>0) {
+            if (null != earmark && earmark.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("earmark").as(String.class), earmark));
             }
             //createDate
-            if (null != createDate && createDate.trim().length()>0) {
+            if (null != createDate && createDate.trim().length() > 0) {
                 try {
                     predList.add(criteriaBuilder.equal(root.get("createDate").as(Date.class), new Date(new DateUtil().parseDateTextToLong(createDate))));
                 } catch (ParseException e) {
@@ -78,8 +77,8 @@ public class EartagServiceImpl implements IEartagService {
                 }
             }
             //deviceCode
-            if (null != deviceCode && deviceCode.trim().length()>0) {
-                predList.add(criteriaBuilder.equal(root.get("deviceCode").as(String.class), deviceCode));
+            if (null != deviceCode && deviceCode.trim().length() > 0) {
+                predList.add(criteriaBuilder.equal(root.get("device").as(String.class), deviceCode));
             }
             Predicate[] pred = new Predicate[predList.size()];
             Predicate and = criteriaBuilder.and(predList.toArray(pred));
@@ -94,22 +93,22 @@ public class EartagServiceImpl implements IEartagService {
 //        return new Result(ResultCode.SUCCESS, eartagDataEntityPage);
         Page<EartagDataEntity> pageEartagData = eartagDataRepo.findAll(sf, pageable);
         JSONObject outDataJo = new JSONObject();
-        outDataJo.put("pageable",pageEartagData.getPageable());
-        outDataJo.put("last",pageEartagData.isLast());
-        outDataJo.put("totalElements",pageEartagData.getTotalElements());
-        outDataJo.put("totalPages",pageEartagData.getTotalPages());
-        outDataJo.put("number",pageEartagData.getNumber());
-        outDataJo.put("size",pageEartagData.getSize());
-        outDataJo.put("sort",pageEartagData.getSort());
-        outDataJo.put("numberOfElements",pageEartagData.getNumberOfElements());
-        outDataJo.put("first",pageEartagData.isFirst());
-        outDataJo.put("empty",pageEartagData.isEmpty());
+        outDataJo.put("pageable", pageEartagData.getPageable());
+        outDataJo.put("last", pageEartagData.isLast());
+        outDataJo.put("totalElements", pageEartagData.getTotalElements());
+        outDataJo.put("totalPages", pageEartagData.getTotalPages());
+        outDataJo.put("number", pageEartagData.getNumber());
+        outDataJo.put("size", pageEartagData.getSize());
+        outDataJo.put("sort", pageEartagData.getSort());
+        outDataJo.put("numberOfElements", pageEartagData.getNumberOfElements());
+        outDataJo.put("first", pageEartagData.isFirst());
+        outDataJo.put("empty", pageEartagData.isEmpty());
 
         List<EartagDataEntity> dataEntityList = pageEartagData.getContent();
         JSONArray outJa = new JSONArray();
-        outDataJo.put("content",outJa);
+        outDataJo.put("content", outJa);
         DateUtil dateUtil = new DateUtil();
-        for(EartagDataEntity eartagDataEntity:dataEntityList) {
+        for (EartagDataEntity eartagDataEntity : dataEntityList) {
             JSONObject outJo = new JSONObject();
             outJa.add(outJo);
             outJo.put("id", eartagDataEntity.getId());
@@ -159,11 +158,11 @@ public class EartagServiceImpl implements IEartagService {
             //
             List<Predicate> predList = new ArrayList<>();
             //farmId
-            if (null != farmId && farmId.trim().length()>0) {
+            if (null != farmId && farmId.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("farmId").as(String.class), farmId));
             }
             //earmark
-            if (null != earmark && earmark.trim().length()>0) {
+            if (null != earmark && earmark.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("earmark").as(String.class), earmark));
             }
             //activeStatus
@@ -179,7 +178,7 @@ public class EartagServiceImpl implements IEartagService {
                 predList.add(criteriaBuilder.equal(root.get("registerType").as(Integer.class), registerType));
             }
             //startDate
-            if (null != startDate && startDate.trim().length()>0) {
+            if (null != startDate && startDate.trim().length() > 0) {
                 try {
                     predList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("createDate").as(Date.class), new Date(new DateUtil().parseDateTextToLong(startDate))));
                 } catch (ParseException e) {
@@ -187,7 +186,7 @@ public class EartagServiceImpl implements IEartagService {
                 }
             }
             //endDate
-            if (null != endDate && endDate.trim().length()>0) {
+            if (null != endDate && endDate.trim().length() > 0) {
                 try {
                     predList.add(criteriaBuilder.lessThanOrEqualTo(root.get("createDate").as(Date.class), new Date(new DateUtil().parseDateTextToLong(endDate))));
                 } catch (ParseException e) {
@@ -217,37 +216,37 @@ public class EartagServiceImpl implements IEartagService {
 
         List<EartagEartagRegisterEntity> eartagRegisterEntityList = eartagRegisterPage.getContent();
         JSONArray outJa = new JSONArray();
-        outDataJo.put("content",outJa);
+        outDataJo.put("content", outJa);
         DateUtil dateUtil = new DateUtil();
-        for(EartagEartagRegisterEntity eartagRegisterEntity:eartagRegisterEntityList){
+        for (EartagEartagRegisterEntity eartagRegisterEntity : eartagRegisterEntityList) {
             JSONObject outJo = new JSONObject();
             outJa.add(outJo);
-            outJo.put("id",eartagRegisterEntity.getId());
-            outJo.put("earmark",eartagRegisterEntity.getEarmark());
-            outJo.put("firstTime",dateUtil.formatDatetimeText(eartagRegisterEntity.getFirstTime()));
-            outJo.put("lastTime",dateUtil.formatDatetimeText(eartagRegisterEntity.getLastTime()));
-            outJo.put("firstDevice",eartagRegisterEntity.getFirstDevice());
-            outJo.put("belongDevice",eartagRegisterEntity.getBelongDevice());
-            outJo.put("lastDevice",eartagRegisterEntity.getLastDevice());
-            outJo.put("registerTime",dateUtil.formatDatetimeText(eartagRegisterEntity.getRegisterTime()));
-            outJo.put("registerType",eartagRegisterEntity.getRegisterType());
-            outJo.put("remark",eartagRegisterEntity.getRemark());
-            outJo.put("farmId",eartagRegisterEntity.getFarmId());
-            outJo.put("activeStatus",eartagRegisterEntity.getActiveStatus());
-            outJo.put("activeTime",dateUtil.formatDatetimeText(eartagRegisterEntity.getActiveTime()));
-            outJo.put("liveStatus",eartagRegisterEntity.getLiveStatus());
-            outJo.put("createDate",eartagRegisterEntity.getCreateDate());
+            outJo.put("id", eartagRegisterEntity.getId());
+            outJo.put("earmark", eartagRegisterEntity.getEarmark());
+            outJo.put("firstTime", dateUtil.formatDatetimeText(eartagRegisterEntity.getFirstTime()));
+            outJo.put("lastTime", dateUtil.formatDatetimeText(eartagRegisterEntity.getLastTime()));
+            outJo.put("firstDevice", eartagRegisterEntity.getFirstDevice());
+            outJo.put("belongDevice", eartagRegisterEntity.getBelongDevice());
+            outJo.put("lastDevice", eartagRegisterEntity.getLastDevice());
+            outJo.put("registerTime", dateUtil.formatDatetimeText(eartagRegisterEntity.getRegisterTime()));
+            outJo.put("registerType", eartagRegisterEntity.getRegisterType());
+            outJo.put("remark", eartagRegisterEntity.getRemark());
+            outJo.put("farmId", eartagRegisterEntity.getFarmId());
+            outJo.put("activeStatus", eartagRegisterEntity.getActiveStatus());
+            outJo.put("activeTime", dateUtil.formatDatetimeText(eartagRegisterEntity.getActiveTime()));
+            outJo.put("liveStatus", eartagRegisterEntity.getLiveStatus());
+            outJo.put("createDate", eartagRegisterEntity.getCreateDate());
         }
-        outDataJo.put("pageable",eartagRegisterPage.getPageable());
-        outDataJo.put("last",eartagRegisterPage.isLast());
-        outDataJo.put("totalElements",eartagRegisterPage.getTotalElements());
-        outDataJo.put("totalPages",eartagRegisterPage.getTotalPages());
-        outDataJo.put("number",eartagRegisterPage.getNumber());
-        outDataJo.put("size",eartagRegisterPage.getSize());
-        outDataJo.put("sort",eartagRegisterPage.getSort());
-        outDataJo.put("numberOfElements",eartagRegisterPage.getNumberOfElements());
-        outDataJo.put("first",eartagRegisterPage.isFirst());
-        outDataJo.put("empty",eartagRegisterPage.isEmpty());
+        outDataJo.put("pageable", eartagRegisterPage.getPageable());
+        outDataJo.put("last", eartagRegisterPage.isLast());
+        outDataJo.put("totalElements", eartagRegisterPage.getTotalElements());
+        outDataJo.put("totalPages", eartagRegisterPage.getTotalPages());
+        outDataJo.put("number", eartagRegisterPage.getNumber());
+        outDataJo.put("size", eartagRegisterPage.getSize());
+        outDataJo.put("sort", eartagRegisterPage.getSort());
+        outDataJo.put("numberOfElements", eartagRegisterPage.getNumberOfElements());
+        outDataJo.put("first", eartagRegisterPage.isFirst());
+        outDataJo.put("empty", eartagRegisterPage.isEmpty());
 //        System.out.println("## eartagRegisterPage>>"+eartagRegisterPage);
 //        List<EartagEartagRegisterEntity> eartagRegisterEntityList = eartagRegisterPage.getContent();
 //        System.out.println("## eartagRegisterEntityList.size()>>"+eartagRegisterEntityList.size());
@@ -269,22 +268,21 @@ public class EartagServiceImpl implements IEartagService {
     }
 
     /**
-     * @Method      : getEartagDeviceByEarmarkAndAddDate
-     * @Description : 
-     * @Params      : [earmark, addDate]
-     * @Return      : com.huimv.eartag2.common.utils.Result
-     * 
-     * @Author      : ZhuoNing
-     * @Date        : 2022/3/10       
-     * @Time        : 22:39
+     * @Method : getEartagDeviceByEarmarkAndAddDate
+     * @Description :
+     * @Params : [earmark, addDate]
+     * @Return : com.huimv.eartag2.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/3/10
+     * @Time : 22:39
      */
     @Override
-    public Result listEartagDeviceByEarmarkAndAddDate(String earmark, String addDate){
+    public Result listEartagDeviceByEarmarkAndAddDate(String earmark, String addDate) {
         //
-        List<EartagDeviceEartagCountEntity> deviceEartagCountEntityList = deviceEartagCountRepo.getOnlineEartagDeviceByEarmarkAndAddDate(earmark,addDate);
-        if(deviceEartagCountEntityList != null){
+        List<EartagDeviceEartagCountEntity> deviceEartagCountEntityList = deviceEartagCountRepo.getOnlineEartagDeviceByEarmarkAndAddDate(earmark, addDate);
+        if (deviceEartagCountEntityList != null) {
             return new Result(ResultCode.SUCCESS, JSON.toJSON(deviceEartagCountEntityList));
-        }else{
+        } else {
             return new Result(BizConst.CODE_DEVICE_EARTAG_COUNT_NO_EXIST, BizConst.MSG_DEVICE_EARTAG_COUNT_NO_EXIST, false);
         }
     }
@@ -312,29 +310,28 @@ public class EartagServiceImpl implements IEartagService {
     }
 
     /**
-     * @Method      : getEartagOnlineInChart
-     * @Description : 
-     * @Params      : [farmId, addDate]
-     * @Return      : com.huimv.eartag2.common.utils.Result
-     * 
-     * @Author      : ZhuoNing
-     * @Date        : 2022/3/10       
-     * @Time        : 22:03
+     * @Method : getEartagOnlineInChart
+     * @Description :
+     * @Params : [farmId, addDate]
+     * @Return : com.huimv.eartag2.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/3/10
+     * @Time : 22:03
      */
     private Result getEartagOnlineInChart(String farmId, String addDate) throws ParseException {
         //
         List<EartagEartagOnlineEntity> eartagOnlineEntityList = eartagOnlineRepo.getEartagOnlineByFarmIdAndDate(farmId, addDate);
         if (eartagOnlineEntityList.size() > 0) {
             JSONArray dataJa = new JSONArray();
-            for(EartagEartagOnlineEntity eartagOnlineEntity:eartagOnlineEntityList){
+            for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
                 JSONObject newJo = new JSONObject();
-                newJo.put("time",eartagOnlineEntity.getEarmark());
-                newJo.put("value",eartagOnlineEntity.getTotal());
+                newJo.put("time", eartagOnlineEntity.getEarmark());
+                newJo.put("value", eartagOnlineEntity.getTotal());
                 dataJa.add(newJo);
             }
-            return new Result(ResultCode.SUCCESS,dataJa);
+            return new Result(ResultCode.SUCCESS, dataJa);
         } else {
-            return new Result(BizConst.CODE_EARTAG_ONLINE_NO_EXIST,BizConst.MSG_EARTAG_ONLINE_NO_EXIST,false);
+            return new Result(BizConst.CODE_EARTAG_ONLINE_NO_EXIST, BizConst.MSG_EARTAG_ONLINE_NO_EXIST, false);
         }
     }
 
@@ -348,10 +345,10 @@ public class EartagServiceImpl implements IEartagService {
      * @Time : 21:54
      */
     private Result listEartagOnlineInRecords(String farmId, String addDate, Integer pageNo, Integer pageSize) throws ParseException {
-        System.out.println("# addDate>>"+addDate);
-        System.out.println("# farmId>>"+farmId);
-        System.out.println("# pageNo>>"+pageNo);
-        System.out.println("# pageSize>>"+pageSize);
+        System.out.println("# addDate>>" + addDate);
+        System.out.println("# farmId>>" + farmId);
+        System.out.println("# pageNo>>" + pageNo);
+        System.out.println("# pageSize>>" + pageSize);
         //
         Specification<EartagEartagOnlineEntity> sf = (Specification<EartagEartagOnlineEntity>) (root, criteriaQuery, criteriaBuilder) -> {
             //
@@ -378,33 +375,33 @@ public class EartagServiceImpl implements IEartagService {
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
         Page<EartagEartagOnlineEntity> pageEartagOnline = eartagOnlineRepo.findAll(sf, pageable);
         JSONObject outDataJo = new JSONObject();
-        outDataJo.put("pageable",pageEartagOnline.getPageable());
-        outDataJo.put("last",pageEartagOnline.isLast());
-        outDataJo.put("totalElements",pageEartagOnline.getTotalElements());
-        outDataJo.put("totalPages",pageEartagOnline.getTotalPages());
-        outDataJo.put("number",pageEartagOnline.getNumber());
-        outDataJo.put("size",pageEartagOnline.getSize());
-        outDataJo.put("sort",pageEartagOnline.getSort());
-        outDataJo.put("numberOfElements",pageEartagOnline.getNumberOfElements());
-        outDataJo.put("first",pageEartagOnline.isFirst());
-        outDataJo.put("empty",pageEartagOnline.isEmpty());
+        outDataJo.put("pageable", pageEartagOnline.getPageable());
+        outDataJo.put("last", pageEartagOnline.isLast());
+        outDataJo.put("totalElements", pageEartagOnline.getTotalElements());
+        outDataJo.put("totalPages", pageEartagOnline.getTotalPages());
+        outDataJo.put("number", pageEartagOnline.getNumber());
+        outDataJo.put("size", pageEartagOnline.getSize());
+        outDataJo.put("sort", pageEartagOnline.getSort());
+        outDataJo.put("numberOfElements", pageEartagOnline.getNumberOfElements());
+        outDataJo.put("first", pageEartagOnline.isFirst());
+        outDataJo.put("empty", pageEartagOnline.isEmpty());
 
         List<EartagEartagOnlineEntity> eartagOnlineEntityList = pageEartagOnline.getContent();
         JSONArray outJa = new JSONArray();
-        outDataJo.put("content",outJa);
+        outDataJo.put("content", outJa);
         DateUtil dateUtil = new DateUtil();
-        for(EartagEartagOnlineEntity eartagOnlineEntity:eartagOnlineEntityList){
+        for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
             JSONObject outJo = new JSONObject();
             outJa.add(outJo);
-            outJo.put("id",eartagOnlineEntity.getId());
-            outJo.put("earmark",eartagOnlineEntity.getEarmark());
-            outJo.put("total",eartagOnlineEntity.getTotal());
-            outJo.put("firstTime",dateUtil.formatDatetimeText(eartagOnlineEntity.getFirstTime()));
-            outJo.put("lastTime",dateUtil.formatDatetimeText(eartagOnlineEntity.getLastTime()));
-            outJo.put("envTemp",eartagOnlineEntity.getEnvTemp());
-            outJo.put("eartagTemp",eartagOnlineEntity.getEartagTemp());
-            outJo.put("addDate",eartagOnlineEntity.getAddDate());
-            outJo.put("farmId",eartagOnlineEntity.getFarmId());
+            outJo.put("id", eartagOnlineEntity.getId());
+            outJo.put("earmark", eartagOnlineEntity.getEarmark());
+            outJo.put("total", eartagOnlineEntity.getTotal());
+            outJo.put("firstTime", dateUtil.formatDatetimeText(eartagOnlineEntity.getFirstTime()));
+            outJo.put("lastTime", dateUtil.formatDatetimeText(eartagOnlineEntity.getLastTime()));
+            outJo.put("envTemp", eartagOnlineEntity.getEnvTemp());
+            outJo.put("eartagTemp", eartagOnlineEntity.getEartagTemp());
+            outJo.put("addDate", eartagOnlineEntity.getAddDate());
+            outJo.put("farmId", eartagOnlineEntity.getFarmId());
         }
 
         return new Result(ResultCode.SUCCESS, outDataJo);
@@ -498,21 +495,21 @@ public class EartagServiceImpl implements IEartagService {
      */
     @Override
     public Result listEartagFlowByEarmarkAndTodayInPager(String earmark, Integer pageNo, Integer pageSize, String createDate, String deviceCode) throws ParseException {
-        System.out.println("earmark>>"+earmark);
-        System.out.println("pageNo>>"+pageNo);
-        System.out.println("pageSize>>"+pageSize);
-        System.out.println("createDate>>"+createDate);
-        System.out.println("deviceCode>>"+deviceCode);
+        System.out.println("earmark>>" + earmark);
+        System.out.println("pageNo>>" + pageNo);
+        System.out.println("pageSize>>" + pageSize);
+        System.out.println("createDate>>" + createDate);
+        System.out.println("deviceCode>>" + deviceCode);
         //
         Specification<EartagDataEntity> sf = (Specification<EartagDataEntity>) (root, criteriaQuery, criteriaBuilder) -> {
             //
             List<Predicate> predList = new ArrayList<>();
             //earmark
-            if (null != earmark && earmark.trim().length()>0) {
+            if (null != earmark && earmark.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("earmark").as(String.class), earmark));
             }
             //createDate
-            if (null != createDate && createDate.trim().length()>0) {
+            if (null != createDate && createDate.trim().length() > 0) {
                 try {
                     predList.add(criteriaBuilder.equal(root.get("createDate").as(Date.class), new Date(new DateUtil().parseDateTextToLong(createDate))));
                 } catch (ParseException e) {
@@ -520,7 +517,7 @@ public class EartagServiceImpl implements IEartagService {
                 }
             }
             //deviceCode
-            if (null != deviceCode && deviceCode.trim().length()>0) {
+            if (null != deviceCode && deviceCode.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("device").as(String.class), deviceCode));
             }
             Predicate[] pred = new Predicate[predList.size()];
@@ -533,22 +530,22 @@ public class EartagServiceImpl implements IEartagService {
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
         Page<EartagDataEntity> pageEartagData = eartagDataRepo.findAll(sf, pageable);
         JSONObject outDataJo = new JSONObject();
-        outDataJo.put("pageable",pageEartagData.getPageable());
-        outDataJo.put("last",pageEartagData.isLast());
-        outDataJo.put("totalElements",pageEartagData.getTotalElements());
-        outDataJo.put("totalPages",pageEartagData.getTotalPages());
-        outDataJo.put("number",pageEartagData.getNumber());
-        outDataJo.put("size",pageEartagData.getSize());
-        outDataJo.put("sort",pageEartagData.getSort());
-        outDataJo.put("numberOfElements",pageEartagData.getNumberOfElements());
-        outDataJo.put("first",pageEartagData.isFirst());
-        outDataJo.put("empty",pageEartagData.isEmpty());
+        outDataJo.put("pageable", pageEartagData.getPageable());
+        outDataJo.put("last", pageEartagData.isLast());
+        outDataJo.put("totalElements", pageEartagData.getTotalElements());
+        outDataJo.put("totalPages", pageEartagData.getTotalPages());
+        outDataJo.put("number", pageEartagData.getNumber());
+        outDataJo.put("size", pageEartagData.getSize());
+        outDataJo.put("sort", pageEartagData.getSort());
+        outDataJo.put("numberOfElements", pageEartagData.getNumberOfElements());
+        outDataJo.put("first", pageEartagData.isFirst());
+        outDataJo.put("empty", pageEartagData.isEmpty());
         List<EartagDataEntity> dataEntityList = pageEartagData.getContent();
-        System.out.println("## dataEntityList.size>>"+dataEntityList.size());
+        System.out.println("## dataEntityList.size>>" + dataEntityList.size());
         JSONArray outJa = new JSONArray();
-        outDataJo.put("content",outJa);
+        outDataJo.put("content", outJa);
         DateUtil dateUtil = new DateUtil();
-        for(EartagDataEntity eartagDataEntity:dataEntityList) {
+        for (EartagDataEntity eartagDataEntity : dataEntityList) {
 //            System.out.println(">>"+deviceRegisterEntity.toString());
 //            Map map = JSON.parseObject(JSONObject.toJSONString(deviceRegisterEntity),Map.class);
 //            System.out.println("map>>"+map.toString());
@@ -593,11 +590,11 @@ public class EartagServiceImpl implements IEartagService {
             //
             List<Predicate> predList = new ArrayList<>();
             //earmark
-            if (null != earmark && earmark.trim().length()>0) {
+            if (null != earmark && earmark.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("earmark").as(String.class), earmark));
             }
             //deviceCode
-            if (null != deviceCode  && deviceCode.trim().length()>0) {
+            if (null != deviceCode && deviceCode.trim().length() > 0) {
                 predList.add(criteriaBuilder.equal(root.get("device").as(String.class), deviceCode));
             }
             //createDate
@@ -619,22 +616,22 @@ public class EartagServiceImpl implements IEartagService {
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
         Page<EartagDataEntity> pageEartagData = eartagDataRepo.findAll(sf, pageable);
         JSONObject outDataJo = new JSONObject();
-        outDataJo.put("pageable",pageEartagData.getPageable());
-        outDataJo.put("last",pageEartagData.isLast());
-        outDataJo.put("totalElements",pageEartagData.getTotalElements());
-        outDataJo.put("totalPages",pageEartagData.getTotalPages());
-        outDataJo.put("number",pageEartagData.getNumber());
-        outDataJo.put("size",pageEartagData.getSize());
-        outDataJo.put("sort",pageEartagData.getSort());
-        outDataJo.put("numberOfElements",pageEartagData.getNumberOfElements());
-        outDataJo.put("first",pageEartagData.isFirst());
-        outDataJo.put("empty",pageEartagData.isEmpty());
+        outDataJo.put("pageable", pageEartagData.getPageable());
+        outDataJo.put("last", pageEartagData.isLast());
+        outDataJo.put("totalElements", pageEartagData.getTotalElements());
+        outDataJo.put("totalPages", pageEartagData.getTotalPages());
+        outDataJo.put("number", pageEartagData.getNumber());
+        outDataJo.put("size", pageEartagData.getSize());
+        outDataJo.put("sort", pageEartagData.getSort());
+        outDataJo.put("numberOfElements", pageEartagData.getNumberOfElements());
+        outDataJo.put("first", pageEartagData.isFirst());
+        outDataJo.put("empty", pageEartagData.isEmpty());
 
         List<EartagDataEntity> dataEntityList = pageEartagData.getContent();
         JSONArray outJa = new JSONArray();
-        outDataJo.put("content",outJa);
+        outDataJo.put("content", outJa);
         DateUtil dateUtil = new DateUtil();
-        for(EartagDataEntity eartagDataEntity:dataEntityList) {
+        for (EartagDataEntity eartagDataEntity : dataEntityList) {
             JSONObject outJo = new JSONObject();
             outJa.add(outJo);
             outJo.put("id", eartagDataEntity.getId());
@@ -703,9 +700,9 @@ public class EartagServiceImpl implements IEartagService {
         DateUtil dateUtil = new DateUtil();
         JSONObject pageJo = JSONObject.parseObject(JSONObject.toJSONString(pageEnvEntity));
         JSONArray contentJa = pageJo.getJSONArray("content");
-        for(int a=0;a<contentJa.size();a++){
+        for (int a = 0; a < contentJa.size(); a++) {
             JSONObject contentJo = contentJa.getJSONObject(a);
-            contentJo.put("addTime",dateUtil.formatDatetimeText(contentJo.getDate("addTime")));
+            contentJo.put("addTime", dateUtil.formatDatetimeText(contentJo.getDate("addTime")));
         }
         return new Result(ResultCode.SUCCESS, pageJo);
     }
@@ -727,9 +724,52 @@ public class EartagServiceImpl implements IEartagService {
         log.info("<listEartagOnlineCountByEarmarkAndDate> startDateText>>" + startDateText);
         log.info("<listEartagOnlineCountByEarmarkAndDate> todayDateText>>" + todayDateText);
         //读取耳标在线统计记录
+        if (showMode == 1) {
+            List<EartagEartagOnlineEntity> eartagOnlineEntityList = eartagOnlineRepo.getEartagOnlineRecordsByEarmarkAndDate(earmark, startDateText, todayDateText);
+            if (eartagOnlineEntityList.size() > 0) {
+                //返回在线记录
+                JSONArray dataJa = new JSONArray();
+                for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
+                    JSONObject eartagOnlineJo = JSONUtil.convertEntityToJSONObject(eartagOnlineEntity);
+                    eartagOnlineJo.put("firstTime", du.formatDatetimeText(eartagOnlineJo.getDate("firstTime")));
+                    eartagOnlineJo.put("lastTime", du.formatDatetimeText(eartagOnlineJo.getDate("lastTime")));
+                    eartagOnlineJo.put("addDate", du.formatDateText(eartagOnlineJo.getDate("addDate")));
+                    dataJa.add(eartagOnlineJo);
+                }
+                return new Result(ResultCode.SUCCESS, dataJa);
+            } else {
+                return new Result(BizConst.CODE_EARTAG_ONLINE_NO_EXIST, BizConst.MSG_EARTAG_ONLINE_NO_EXIST, false);
+            }
+        } else {
+            List<EartagEartagOnlineEntity> eartagOnlineEntityList = eartagOnlineRepo.getEartagOnlineByEarmarkAndDate(earmark, startDateText, todayDateText);
+            if (eartagOnlineEntityList.size() > 0) {
+                //返回在线图表
+                JSONArray dataJa = new JSONArray();
+                for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
+//                    JSONObject eartagOnlineJo = JSONUtil.convertEntityToJSONObject(eartagOnlineEntity);
+                    JSONObject newJo = new JSONObject();
+                    newJo.put("time", du.formatDateText(eartagOnlineEntity.getAddDate()));
+                    newJo.put("value", eartagOnlineEntity.getTotal());
+                    dataJa.add(newJo);
+                }
+                return new Result(ResultCode.SUCCESS, dataJa);
+            } else {
+                return new Result(BizConst.CODE_EARTAG_ONLINE_NO_EXIST, BizConst.MSG_EARTAG_ONLINE_NO_EXIST, false);
+            }
+        }
+    }
+
+    public Result listEartagOnlineCountByEarmarkAndDate_old1(String earmark, Integer pastDays, Integer showMode) throws
+            ParseException {
+        DateUtil du = new DateUtil();
+        String todayDateText = du.getTodayDateText();
+        String startDateText = du.getPastDate(pastDays);
+        log.info("<listEartagOnlineCountByEarmarkAndDate> startDateText>>" + startDateText);
+        log.info("<listEartagOnlineCountByEarmarkAndDate> todayDateText>>" + todayDateText);
+        //读取耳标在线统计记录
         List<EartagEartagOnlineEntity> eartagOnlineEntityList = eartagOnlineRepo.getEartagOnlineByEarmarkAndDate(earmark, startDateText, todayDateText);
         if (eartagOnlineEntityList.size() > 0) {
-            if(showMode == 1){
+            if (showMode == 1) {
                 //返回在线记录
                 JSONArray dataJa = new JSONArray();
                 for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
@@ -740,7 +780,7 @@ public class EartagServiceImpl implements IEartagService {
                     dataJa.add(eartagOnlineJo);
                 }
                 return new Result(ResultCode.SUCCESS, dataJa);
-            }else{
+            } else {
                 //返回在线图表
                 JSONArray dataJa = new JSONArray();
                 for (EartagEartagOnlineEntity eartagOnlineEntity : eartagOnlineEntityList) {
@@ -767,7 +807,8 @@ public class EartagServiceImpl implements IEartagService {
      * @Time : 18:46
      */
     @Override
-    public Result listEartagFlowByDeviceCodeAndEarmarkAndToday(String earmark, String deviceCode) throws ParseException {
+    public Result listEartagFlowByDeviceCodeAndEarmarkAndToday(String earmark, String deviceCode) throws
+            ParseException {
         DateUtil du = new DateUtil();
         String todayDateText = du.getTodayDateText();
         //
@@ -818,10 +859,10 @@ public class EartagServiceImpl implements IEartagService {
         if (eartagRegisterEntity != null) {
             Map map = JSON.parseObject(JSONObject.toJSONString(eartagRegisterEntity), Map.class);
 //            map.put("lastTime",dateUtil.formatDatetimeText(new Date(dateUtil.parseDateTime(map.get("lastTime").toString()).getTime())));
-            map.put("firstTime",dateUtil.formatLongToDate(Long.parseLong(map.get("firstTime").toString())));
-            map.put("lastTime",dateUtil.formatLongToDate(Long.parseLong(map.get("lastTime").toString())));
-            map.put("activeTime",dateUtil.formatLongToDate(Long.parseLong(map.get("activeTime").toString())));
-            map.put("registerTime",dateUtil.formatLongToDate(Long.parseLong(map.get("registerTime").toString())));
+            map.put("firstTime", dateUtil.formatLongToDate(Long.parseLong(map.get("firstTime").toString())));
+            map.put("lastTime", dateUtil.formatLongToDate(Long.parseLong(map.get("lastTime").toString())));
+            map.put("activeTime", dateUtil.formatLongToDate(Long.parseLong(map.get("activeTime").toString())));
+            map.put("registerTime", dateUtil.formatLongToDate(Long.parseLong(map.get("registerTime").toString())));
             return new Result(ResultCode.SUCCESS, map);
         } else {
             return new Result(BizConst.CODE_EARTAG_REGISTER_NO_EXIST, BizConst.MSG_EARTAG_REGISTER_NO_EXIST, false);

+ 14 - 1
huimv-eartag2-platform/huimv-eartag2-manage/src/test/java/com/huimv/eartag2/manage/utils/CacheTest.java

@@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.test.context.TestPropertySource;
 
 import java.util.Set;
 
@@ -74,10 +75,22 @@ public class CacheTest {
     @Test
     public void testGetDeviceOnlineSum(){
         String farmId = "101";
-        String todayDateText = "2022-03-31";
+        String todayDateText = "2022-04-01";
         String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
         Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
         System.out.println("resultSet="+resultSet.toString());
         System.out.println("验证 resultSet.size="+resultSet.size());
     }
+
+    @Test
+    public void testGetDeviceTotal(){
+        String farmId = "101";
+        String valueKey = BizConst.FARM_DEVICE_TOTAL_PREFIX+farmId;
+        Object obj = redisTemplate.opsForValue().get(valueKey);
+        if(obj == null){
+            System.out.println(""+obj);
+        }else{
+            System.out.println(Integer.parseInt(String.valueOf(obj)));
+        }
+    }
 }