Explorar el Código

第一阶段开发完成。

zhuoning hace 3 años
padre
commit
5425e043cb

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

@@ -38,10 +38,10 @@ public class EartagDeviceOnlineEntity implements Serializable {
     private Timestamp lastTime;
 
     @Column(name = "last_envtemp")
-    private Float lastEnvtemp;
+    private String lastEnvtemp;
 
     @Column(name = "last_eartag")
-    private Float lastEartag;
+    private String lastEartag;
 
     @Column(name = "add_date")
     private Date addDate;
@@ -131,19 +131,19 @@ public class EartagDeviceOnlineEntity implements Serializable {
         return lastTime;
     }
 
-    public void setLastEnvtemp(Float lastEnvtemp) {
+    public void setLastEnvtemp(String lastEnvtemp) {
         this.lastEnvtemp = lastEnvtemp;
     }
 
-    public Float getLastEnvtemp() {
+    public String getLastEnvtemp() {
         return lastEnvtemp;
     }
 
-    public void setLastEartag(Float lastEartag) {
+    public void setLastEartag(String lastEartag) {
         this.lastEartag = lastEartag;
     }
 
-    public Float getLastEartag() {
+    public String getLastEartag() {
         return lastEartag;
     }
 

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

@@ -38,7 +38,7 @@ public class EartarFarmAllStatusEntity implements Serializable {
     private Integer eartagOnline;
 
     @Column(name = "farm_id")
-    private Integer farmId;
+    private String farmId;
 
     @Column(name = "update_time")
     private Timestamp updateTime;
@@ -110,11 +110,11 @@ public class EartarFarmAllStatusEntity implements Serializable {
         return eartagOnline;
     }
 
-    public void setFarmId(Integer farmId) {
+    public void setFarmId(String farmId) {
         this.farmId = farmId;
     }
 
-    public Integer getFarmId() {
+    public String getFarmId() {
         return farmId;
     }
 

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

@@ -19,13 +19,19 @@ public class BizConst {
     public final static String SET_FARM_DEVICE_ALL_PREFIX = "farm_device_all_";
 
     //牧场在线采集器设备编号集合+牧场id(Set)
-    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "farm_device_online_";
+    public final static String SET_FARM_DEVICE_ONLINE_PREFIX = "set_farm_device_online_";
 
     //牧场所有耳标编号集合+牧场id(Set)
-    public final static String SET_FARM_EARMARK_ALL_PREFIX = "farm_earmark_all_";
+//    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_ONLINE_PREFIX = "eartag_online_";
 
     //牧场在线耳标编号集合+牧场id(Set)
-    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "farm_earmark_online_";
+    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set_farm_eartag_online_";
 
     //牧场总状态表+牧场id
     public final static String FARM_ALL_STATUS_PREFIX = "farm_all_status_";

+ 6 - 8
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/listener/DeviceListener.java

@@ -3,7 +3,6 @@ package com.huimv.eartag2.process2.listener;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.huimv.eartag2.common.mq.Const;
-import com.huimv.eartag2.common.utils.BizConst;
 import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.process2.service.ICacheService;
 import com.huimv.eartag2.process2.service.IDeviceService;
@@ -12,14 +11,12 @@ import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.SetOperations;
 import org.springframework.stereotype.Component;
 
 import java.sql.Date;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * @Project : huimv.shiwan
@@ -68,13 +65,14 @@ public class DeviceListener {
         if (cacheService.isExistDeviceOnlineSet(farmId, deviceCode, todayDateText)) {
             //Step1:更新设备注册表[设置活动状态为1,设置活动状态更新时间]
             //Step2:更新在线统计[心跳数+1,心跳第一次上传时间,心跳最后一次时间],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
-
+            System.out.println("## 心跳 1");
             //# 更新设备注册表 #
             deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
 
             //# 更新在线统计 #
-            deviceService.updateDeviceOnline(farmId, deviceCode);
+            deviceService.updateDeviceOnlineCount(farmId, deviceCode,todayDateText,nowTimestamp,todayDate);
         } else {
+            System.out.println("## 心跳 2");
             //Step1:更新总状态表[device_online+1,device_offline-1,device_rate],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
             //Step2:更新设备注册表[active_status=1,active_time=当前时间]
             //Step3:更新在线统计[],预先判断该数据是否存在,如果不存在要先添加记录,如果存在就修改数据
@@ -83,11 +81,11 @@ public class DeviceListener {
             //# 更新设备注册表 #
             deviceService.updateDeviceRegister(farmId, deviceCode,nowTimestamp);
 
-            //# 更新在线统计 #【重写】
-            deviceService.updateDeviceOnline(farmId, deviceCode);
+            //# 更新在线统计 #【重写完成
+            deviceService.updateDeviceOnlineCount(farmId, deviceCode, todayDateText, nowTimestamp, todayDate);
 
             //# 更新总状态表 # 【重写】
-            deviceService.updateDeviceAllStatus(farmId, deviceCode);
+            deviceService.updateDeviceAllStatus(farmId, deviceCode,todayDateText,nowTimestamp,todayDate);
 
             //# 将新设备编号加入在线缓存 #
             cacheService.putDeviceToOnline(farmId, deviceCode,todayDateText);

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

@@ -1,8 +1,6 @@
 package com.huimv.eartag2.process2.service;
 
-import com.huimv.eartag2.common.dao.entity.EartagDeviceOnlineEntity;
-import com.huimv.eartag2.common.dao.entity.EartagDeviceRegisterEntity;
-import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
+import com.huimv.eartag2.common.dao.entity.*;
 
 import java.text.ParseException;
 
@@ -43,4 +41,12 @@ public interface ICacheService {
 
     void putEartagToOnlineInSet(String farmId, String earmark, String todayDateText) throws ParseException;
 
+    //从缓存读取在线耳标数量
+    void getEartagOnlineTotalFromCache(String farmId, String todayDateText);
+
+    //更新耳标注册消息缓存
+    void putEartagRegister(String earmark, EartagEartagRegisterEntity eartagRegisterEntity);
+
+    //更新耳标在线统计
+    void putEartagOnlineCount(String earmark, EartagEartagOnlineEntity eartagOnlineEntity);
 }

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

@@ -1,5 +1,6 @@
 package com.huimv.eartag2.process2.service;
 
+import java.sql.Date;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Map;
@@ -27,10 +28,10 @@ public interface IDeviceService {
     void updateDeviceRegister(String farmId, String deviceCode, Timestamp nowTimestamp);
 
     //更新设备在线信息
-    void updateDeviceOnline(String farmId, String deviceCode) throws ParseException;
+    void updateDeviceOnlineCount(String farmId, String deviceCode, String todayDateText, Timestamp nowTimestamp, Date todayDate) throws ParseException;
 
     //更新设备总状态信息
-    void updateDeviceAllStatus(String farmId, String deviceCode) throws ParseException;
+    void updateDeviceAllStatus(String farmId, String deviceCode, String todayDateText, Timestamp nowTimestamp, Date todayDate) throws ParseException;
 
     //更新设备在线表中的环境温度参数
     void updateDeviceOnlineWithEnvtemp(String farmId, String deviceCode) throws ParseException;

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

@@ -16,4 +16,7 @@ public interface IEartagService {
 
     //读取耳标注册数据
     Integer getEartagRegTotalByFarmId(String farmId);
+
+    //计算耳标在线数量
+    int getEartagOnelineTotal(String farmId, String todayDateText);
 }

+ 86 - 11
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/CacheServiceImpl.java

@@ -1,8 +1,6 @@
 package com.huimv.eartag2.process2.service.impl;
 
-import com.huimv.eartag2.common.dao.entity.EartagDeviceOnlineEntity;
-import com.huimv.eartag2.common.dao.entity.EartagDeviceRegisterEntity;
-import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
+import com.huimv.eartag2.common.dao.entity.*;
 import com.huimv.eartag2.common.dao.repo.EartagDeviceRegisterRepo;
 import com.huimv.eartag2.common.utils.BizConst;
 import com.huimv.eartag2.common.utils.DateUtil;
@@ -16,7 +14,6 @@ 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;
 
 /**
@@ -127,7 +124,7 @@ public class CacheServiceImpl implements ICacheService {
     @Override
     public void flashAllStatusCache(String farmId, EartarFarmAllStatusEntity farmAllStatusEntity) {
         Map allStatusMap = new HashMap();
-        allStatusMap.put("id",farmAllStatusEntity.getId());
+//        allStatusMap.put("id",farmAllStatusEntity.getId());
         allStatusMap.put("deviceTotal",farmAllStatusEntity.getDeviceTotal());
         allStatusMap.put("deviceOnline",farmAllStatusEntity.getDeviceOnline());
         allStatusMap.put("deviceOffline",farmAllStatusEntity.getDeviceOffline());
@@ -162,7 +159,7 @@ public class CacheServiceImpl implements ICacheService {
      */
     @Override
     public void putDeviceToOnline(String farmId, String deviceCode, String todayDateText) {
-//        System.out.println("## (D)");
+        System.out.println("## 心跳 2.4");
         String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+"_"+todayDateText;
         redisTemplate.opsForSet().add(setKey, deviceCode);
         redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
@@ -188,9 +185,9 @@ public class CacheServiceImpl implements ICacheService {
      * @Time        : 16:07
      */
     @Override
-    public void putDeviceInOnline(String deviceOnlineHashKey, EartagDeviceOnlineEntity eartagDeviceOnlineEntity) {
+    public void putDeviceInOnline(String deviceCode, EartagDeviceOnlineEntity eartagDeviceOnlineEntity) {
         Map map = new HashMap();
-        map.put("id", eartagDeviceOnlineEntity.getId());
+//        map.put("id", eartagDeviceOnlineEntity.getId());
         map.put("deviceCode", eartagDeviceOnlineEntity.getDeviceCode());
         map.put("alias", eartagDeviceOnlineEntity.getAlias());
         map.put("heartbeatTotal", eartagDeviceOnlineEntity.getHeartbeatTotal());
@@ -203,7 +200,10 @@ public class CacheServiceImpl implements ICacheService {
         map.put("addDate", eartagDeviceOnlineEntity.getAddDate());
         map.put("farmId", eartagDeviceOnlineEntity.getFarmId());
         //更新缓存
-        redisTemplate.opsForHash().putAll(deviceOnlineHashKey, map);
+        String deviceOnlineKey = BizConst.DEVICE_ONLINE_PREFIX + deviceCode;
+        redisTemplate.opsForHash().putAll(deviceOnlineKey, map);
+//        Map onlineMap = fromOnlineEntityToMap(newDeviceOnlineEntity);
+//        redisTemplate.opsForHash().putAll(deviceOnlineHashKey, onlineMap);
     }
 
     /**
@@ -230,8 +230,83 @@ public class CacheServiceImpl implements ICacheService {
         System.out.println("## eartag.setKey .putEartagToOnlineInSet>>"+setKey+",earmark>>"+earmark);
         redisTemplate.opsForSet().add(setKey, earmark);
         redisTemplate.expire(setKey,eartagOnlineSetExpire , TimeUnit.HOURS);
-        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
-        System.out.println("## "+setKey+">>"+resultSet.size()+" >>"+resultSet);
+//        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+//        System.out.println("## "+setKey+">>"+resultSet.size()+" >>"+resultSet);
+    }
+
+    /**
+     * @Method      : getEartagOnlineTotalFromCache
+     * @Description : 返回集合缓存的数量;
+     * @Params      : [farmId, todayDateText]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/3       
+     * @Time        : 10:55
+     */
+    @Override
+    public void getEartagOnlineTotalFromCache(String farmId, String todayDateText) {
+        String setKey = BizConst.SET_FARM_EARMARK_ONLINE_PREFIX + farmId+"_"+todayDateText;
+        redisTemplate.opsForSet().members(setKey).size();
+    }
+
+    /**
+     * @Method      : putEartagRegister
+     * @Description : 
+     * @Params      : [earmark, eartagRegisterEntity]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/3       
+     * @Time        : 15:29
+     */
+    @Override
+    public void putEartagRegister(String earmark, EartagEartagRegisterEntity eartagRegisterEntity) {
+        Map map = new HashMap();
+//        map.put("id", eartagRegisterEntity.getId());
+        map.put("earmark",eartagRegisterEntity.getEarmark());
+        map.put("firstTime",eartagRegisterEntity.getFirstTime());
+        map.put("lastTime",eartagRegisterEntity.getLastTime());
+        map.put("firstDevice",eartagRegisterEntity.getFirstDevice());
+        map.put("belongDevice",eartagRegisterEntity.getBelongDevice());
+        map.put("lastDevice",eartagRegisterEntity.getLastDevice());
+        map.put("registerTime",eartagRegisterEntity.getRegisterTime());
+        map.put("registerType",eartagRegisterEntity.getRegisterType());
+        map.put("remark",eartagRegisterEntity.getRemark());
+        map.put("farmId",eartagRegisterEntity.getFarmId());
+        map.put("activeStatus",eartagRegisterEntity.getActiveStatus());
+        map.put("activeTime",eartagRegisterEntity.getActiveTime());
+        map.put("liveStatus",eartagRegisterEntity.getLiveStatus());
+        //更新缓存
+        String earmarkOnlineKey = BizConst.EARTAG_REGISTER_PREFIX + earmark;
+        redisTemplate.opsForHash().putAll(earmarkOnlineKey, map);
+    }
+
+    /**
+     * @Method      : putEartagOnlineCount
+     * @Description : 
+     * @Params      : [earmark, eartagOnlineEntity]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/3       
+     * @Time        : 15:29
+     */
+    @Override
+    public void putEartagOnlineCount(String earmark, EartagEartagOnlineEntity eartagOnlineEntity) {
+        Map map = new HashMap();
+//        map.put("id", eartagRegisterEntity.getId());
+        map.put("earmark",eartagOnlineEntity.getEarmark());
+        map.put("total",eartagOnlineEntity.getTotal());
+        map.put("firstTime",eartagOnlineEntity.getFirstTime());
+        map.put("lastTime",eartagOnlineEntity.getLastTime());
+        map.put("envTemp",eartagOnlineEntity.getEnvTemp());
+        map.put("eartagTemp",eartagOnlineEntity.getEartagTemp());
+        map.put("addDate",eartagOnlineEntity.getAddDate());
+        map.put("farmId",eartagOnlineEntity.getFarmId());
+        //更新缓存
+        String earmarkOnlineKey = BizConst.EARTAG_ONLINE_PREFIX + earmark;
+        redisTemplate.opsForHash().putAll(earmarkOnlineKey, map);
     }
 
     /**

+ 111 - 8
huimv-eartag2-platform/huimv-eartag2-process2/src/main/java/com/huimv/eartag2/process2/service/impl/DeviceServiceImpl.java

@@ -11,6 +11,7 @@ import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.process2.service.IDeviceService;
 //import com.huimv.eartag2.process2.utils.DateUtil;
 import com.huimv.eartag2.process2.service.ICacheService;
+import com.huimv.eartag2.process2.service.IEartagService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -55,6 +56,12 @@ public class DeviceServiceImpl implements IDeviceService {
     private EartagEartagRegisterRepo eartagRegisterRepo;
 //    @Autowired
 //    private EartagDeviceRegisterRepo deviceRegisterRepo;
+    @Autowired
+    private EartagDeviceOnlineRepo deviceOnlineRepo;
+    @Autowired
+    private EartarFarmAllStatusRepo farmAllStatusRepo;
+    @Autowired
+    private IEartagService eartagService;
 
 
     // 保存在线数据
@@ -288,15 +295,19 @@ public class DeviceServiceImpl implements IDeviceService {
      */
     @Override
     public void updateDeviceRegister(String farmId, String deviceCode,Timestamp nowTimestamp) {
-//        System.out.println("## (2)/(B)");
+        System.out.println("## 心跳 1.1/2.1");
         //--更新mysql
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
         if (deviceRegisterEntity != null) {
+            System.out.println("## 心跳 1.1.1/2.1.1");
             //设备注册数据存在
             deviceRegisterEntity.setActiveStatus(1);
             deviceRegisterEntity.setActiveTime(new Timestamp(new Date().getTime()));
             deviceRegisterRepo.saveAndFlush(deviceRegisterEntity);
+            //更新缓存中设备注册信息
+            cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
         }else{
+            System.out.println("## 心跳 1.1.2/12.1.2");
             //设备注册数据不存在
             //新建设备注册记录
             EartagDeviceRegisterEntity newDeviceRegisterEntity = new EartagDeviceRegisterEntity();
@@ -307,18 +318,44 @@ public class DeviceServiceImpl implements IDeviceService {
             newDeviceRegisterEntity.setActiveTime(nowTimestamp);
             newDeviceRegisterEntity.setDeviceStatus(1);
             deviceRegisterRepo.saveAndFlush(newDeviceRegisterEntity);
+            //更新缓存中设备注册信息
+            cacheService.putDeviceRegister(deviceCode,newDeviceRegisterEntity);
         }
-        //更新缓存中设备注册信息
-        cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
     }
 
     @Override
-    public void updateDeviceOnline(String farmId, String deviceCode) throws ParseException {
+    public void updateDeviceOnlineCount(String farmId, String deviceCode, String todayDateText, Timestamp nowTimestamp, java.sql.Date todayDate) throws ParseException {
         //# 先判断今天在线记录是否存在 #
         //# 更新数据表 #
         //# 更新缓存 #
-
-        //+++++++++++++++++++++++++++++++++++++++++++++++++++++ 3.3
+        System.out.println("## 心跳 1.2/2.2");
+        //
+        EartagDeviceOnlineEntity deviceOnlineEntity = deviceOnlineRepo.getDeviceOnline(deviceCode,todayDateText);
+        if(deviceOnlineEntity == null){
+            System.out.println("## 心跳 1.2.1/2.2.1");
+            //不存在;
+            EartagDeviceOnlineEntity newDeviceOnlineEntity = new EartagDeviceOnlineEntity();
+            newDeviceOnlineEntity.setDeviceCode(deviceCode);
+            newDeviceOnlineEntity.setHeartbeatTotal(1);
+            newDeviceOnlineEntity.setEnvtempTotal(0);
+            newDeviceOnlineEntity.setEartagTotal(0);
+            newDeviceOnlineEntity.setAddDate(todayDate);
+            newDeviceOnlineEntity.setHeartbeatFirstTime(nowTimestamp);
+            newDeviceOnlineEntity.setHeartbeatLastTime(nowTimestamp);
+            newDeviceOnlineEntity.setFarmId(farmId);
+            deviceOnlineRepo.saveAndFlush(newDeviceOnlineEntity);
+            //更新每天在线统计缓存
+            cacheService.putDeviceInOnline(deviceCode,newDeviceOnlineEntity);
+        }else{
+            System.out.println("## 心跳 1.2.2/2.2.2");
+            //存在;
+            int total = deviceOnlineEntity.getHeartbeatTotal();
+            deviceOnlineEntity.setHeartbeatTotal(++total);
+            deviceOnlineEntity.setHeartbeatLastTime(nowTimestamp);
+            deviceOnlineRepo.saveAndFlush(deviceOnlineEntity);
+            //更新每天在线统计缓存
+            cacheService.putDeviceInOnline(deviceCode,deviceOnlineEntity);
+        }
 
         //--(优化思路) --//
 //        updateDeviceOnlineCount(deviceCode);
@@ -336,9 +373,75 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Time        : 20:51
      */
     @Override
-    public void updateDeviceAllStatus(String farmId, String deviceCode) throws ParseException {
+    public void updateDeviceAllStatus(String farmId, String deviceCode, String todayDateText, Timestamp nowTimestamp, java.sql.Date todayDate) throws ParseException {
+        System.out.println("## 心跳 2.3");
+        //读取一条总状态记录;
+        EartarFarmAllStatusEntity farmAllStatusEntity = farmAllStatusRepo.getOneByFarmIdAndCreateDate(farmId,todayDateText);
+        if(farmAllStatusEntity == null){
+            System.out.println("## 心跳 2.3.1");
+            //总状态记录不存在;
+            //#创建一条新总状态记录;
+            //*计算设备在线数量、离线数量、在线率*
+            int deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
+            int onlineNum = 1;
+            int offlineNum = deviceTotal-1;
+            BigDecimal reateBd= new BigDecimal(onlineNum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
+            //*计算设备注销数量*
+            int cancelNum = getDeviceCancelTotalFromDeviceRegister(farmId);
+            //#计算耳标总数
+            int eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
+            //计算耳标在线数量
+            int eartagOnlineTotal = eartagService.getEartagOnelineTotal(farmId,todayDateText);
+            //
+            EartarFarmAllStatusEntity newFarmAllStatusEntity = new EartarFarmAllStatusEntity();
+            newFarmAllStatusEntity.setDeviceTotal(deviceTotal);
+            newFarmAllStatusEntity.setDeviceOnline(onlineNum);
+            newFarmAllStatusEntity.setDeviceOffline(offlineNum);
+            newFarmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+            newFarmAllStatusEntity.setDeviceCancel(cancelNum);
+            newFarmAllStatusEntity.setEartagTotal(eartagTotal);
+            newFarmAllStatusEntity.setEartagOnline(eartagOnlineTotal);
+            newFarmAllStatusEntity.setFarmId(farmId);
+            newFarmAllStatusEntity.setUpdateTime(nowTimestamp);
+            newFarmAllStatusEntity.setCreateDate(todayDate);
+            farmAllStatusRepo.saveAndFlush(newFarmAllStatusEntity);
+            //更新总状态表缓存
+            cacheService.putAllFarmAllStatusCache(farmId,newFarmAllStatusEntity);
+        }else{
+            System.out.println("## 心跳 2.3.2");
+            //总状态记录存在;
+            //#计算设备的在线、离线、在线率,更新时间
+            int onlineNum = farmAllStatusEntity.getDeviceOnline();
+            int offlineNum = farmAllStatusEntity.getDeviceOffline();
+            int total = farmAllStatusEntity.getDeviceTotal();
+            onlineNum++;
+            offlineNum--;
+            BigDecimal reateBd= new BigDecimal(onlineNum).divide(new BigDecimal(total),1,BigDecimal.ROUND_HALF_UP);
+            farmAllStatusEntity.setDeviceOnline(onlineNum);
+            farmAllStatusEntity.setDeviceOffline(offlineNum);
+            farmAllStatusEntity.setDeviceRate(Float.parseFloat(reateBd.toString()));
+            farmAllStatusEntity.setUpdateTime(nowTimestamp);
+            System.out.println("## farmAllStatusEntity>>"+farmAllStatusEntity);
+            eartagFarmAllStatusRepo.saveAndFlush(farmAllStatusEntity);
+            //更新总状态表缓存
+            cacheService.putAllFarmAllStatusCache(farmId,farmAllStatusEntity);
+        }
+    }
 
-        //+++++++++++++++++++++++++++++++++++++++++++++++++++++ 3.3
+    //计算注销设备数量
+    private int getDeviceCancelTotalFromDeviceRegister(String farmId) {
+        List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmId(farmId);
+        Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
+        //设备总数
+        return Integer.parseInt(deviceRegObj[0].toString());
+    }
+
+    //计算设备总数
+    public int getDeviceTotalByFarmIdFromDeviceRegister(String farmId){
+        List<Object[]> deviceRegList = deviceRegisterRepo.getDeviceCountByFarmId(farmId);
+        Object[] deviceRegObj = (Object[]) deviceRegList.get(0);
+        //设备总数
+        return Integer.parseInt(deviceRegObj[0].toString());
     }
 
 //    @Override

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

@@ -7,6 +7,7 @@ import com.huimv.eartag2.common.dao.entity.EartarFarmAllStatusEntity;
 import com.huimv.eartag2.common.dao.repo.EartagEartagOnlineRepo;
 import com.huimv.eartag2.common.dao.repo.EartagEartagRegisterRepo;
 import com.huimv.eartag2.common.dao.repo.EartarFarmAllStatusRepo;
+import com.huimv.eartag2.process2.service.ICacheService;
 import com.huimv.eartag2.process2.service.IEartagService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -31,6 +32,8 @@ public class EartagServiceImpl implements IEartagService {
     private EartagEartagOnlineRepo eartagOnlineRepo;
     @Autowired
     private EartarFarmAllStatusRepo farmAllStatusRepo;
+    @Autowired
+    private ICacheService cacheService;
 
     @Override
     public void updateEartagRegister(String earmark, String deviceCode, Timestamp nowTimestamp, String farmId) {
@@ -55,10 +58,14 @@ public class EartagServiceImpl implements IEartagService {
             newEartagRegisterEntity.setActiveTime(nowTimestamp);
             newEartagRegisterEntity.setLiveStatus(1);
             eartagRegisterRepo.saveAndFlush(newEartagRegisterEntity);
+            //更新耳标注册消息缓存
+            cacheService.putEartagRegister(earmark,newEartagRegisterEntity);
         }else{
             eartagRegisterEntity.setActiveStatus(1);
             eartagRegisterEntity.setActiveTime(nowTimestamp);
             eartagRegisterRepo.saveAndFlush(eartagRegisterEntity);
+            //更新耳标注册消息缓存
+            cacheService.putEartagRegister(earmark,eartagRegisterEntity);
         }
     }
 
@@ -84,6 +91,8 @@ public class EartagServiceImpl implements IEartagService {
             newEartagOnlineEntity.setAddDate(todayDate);
             newEartagOnlineEntity.setFarmId(farmId);
             eartagOnlineRepo.saveAndFlush(newEartagOnlineEntity);
+            //更新耳标在线统计
+            cacheService.putEartagOnlineCount(earmark,newEartagOnlineEntity);
         }else{
             //# 存在
             int total = eartagOnlineEntity.getTotal();
@@ -92,6 +101,8 @@ public class EartagServiceImpl implements IEartagService {
             eartagOnlineEntity.setEnvTemp(envTemp);
             eartagOnlineEntity.setEartagTemp(earTemp);
             eartagOnlineRepo.saveAndFlush(eartagOnlineEntity);
+            //更新耳标在线统计
+            cacheService.putEartagOnlineCount(earmark,eartagOnlineEntity);
         }
     }
 
@@ -126,4 +137,10 @@ public class EartagServiceImpl implements IEartagService {
         //处于工作状态的耳标总数
         return Integer.parseInt(eartagRegObj[0].toString());
     }
+
+    @Override
+    public int getEartagOnelineTotal(String farmId, String todayDateText) {
+        cacheService.getEartagOnlineTotalFromCache(farmId,todayDateText);
+        return 0;
+    }
 }