Browse Source

修改设备和耳标已发现的bug.

zhuoning 3 years ago
parent
commit
1c43a78668
15 changed files with 202 additions and 48 deletions
  1. 12 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagDataEntity.java
  2. 12 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagEnvEntity.java
  3. 2 2
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/BizConst.java
  4. 1 1
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/IDeviceService.java
  5. 44 15
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java
  6. 12 0
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/utils/DateUtil.java
  7. 12 0
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/utils/MathUtil.java
  8. 1 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java
  9. 1 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/ICacheService.java
  10. 1 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/CacheServiceImpl.java
  11. 20 9
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java
  12. 11 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java
  13. 2 2
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/controller/DeviceController.java
  14. 2 2
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/IDeviceService.java
  15. 69 14
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceServiceImpl.java

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

@@ -64,6 +64,9 @@ public class EartagDataEntity implements Serializable {
     @Column(name = "farm_id")
     private String farmId;
 
+    @Column(name = "ask_date")
+    private Date askDate;
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -200,6 +203,14 @@ public class EartagDataEntity implements Serializable {
         return farmId;
     }
 
+    public void setAskDate(Date askDate) {
+        this.askDate = askDate;
+    }
+
+    public Date getAskDate() {
+        return askDate;
+    }
+
     @Override
     public String toString() {
         return "EartagDataEntity{" +
@@ -220,6 +231,7 @@ public class EartagDataEntity implements Serializable {
                 "addTime=" + addTime + '\'' +
                 "createDate=" + createDate + '\'' +
                 "farmId=" + farmId + '\'' +
+                "askDate=" + askDate + '\'' +
                 '}';
     }
 }

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

@@ -34,6 +34,9 @@ public class EartagEnvEntity implements Serializable {
     @Column(name = "create_date")
     private Date createDate;
 
+    @Column(name = "ask_date")
+    private Date askDate;
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -90,6 +93,14 @@ public class EartagEnvEntity implements Serializable {
         return createDate;
     }
 
+    public void setAskDate(Date askDate) {
+        this.askDate = askDate;
+    }
+
+    public Date getAskDate() {
+        return askDate;
+    }
+
     @Override
     public String toString() {
         return "EartagEnvEntity{" +
@@ -100,6 +111,7 @@ public class EartagEnvEntity implements Serializable {
                 "askTime=" + askTime + '\'' +
                 "addTime=" + addTime + '\'' +
                 "createDate=" + createDate + '\'' +
+                "askDate=" + askDate + '\'' +
                 '}';
     }
 }

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

@@ -42,8 +42,8 @@ public class BizConst {
 //    public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set_farm_eartag_online_";
     public final static String SET_FARM_EARMARK_ONLINE_PREFIX = "set:onlineEartag:farm:";
 
-    //保存所有设备集合
-    public final static String SET_ALL_DEVICE_PREFIX = "set:all:deviceCode:";
+    //保存平台上所有设备集合
+    public final static String SET_ALL_DEVICE_PREFIX = "set:all:deviceCode";
 
     //牧场总状态表+牧场id
     public final static String FARM_ALL_STATUS_PREFIX = "allStatus:farm:";

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

@@ -12,7 +12,7 @@ public interface IDeviceService {
     //保存心跳数据
     void saveDeviceHeartbeat(JSONObject dataJo, Date todayDate);
     //保存设备温度数据
-    void saveDeviceTemp(JSONObject dataJo, Date todayDate);
+    void saveDeviceTemp(JSONObject dataJo, Date todayDate, Timestamp nowTimestamp) throws ParseException;
     //保存采集器上传的原始数据
     void saveRawdata(String askText) throws ParseException;
 

+ 44 - 15
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/service/impl/DeviceServiceImpl.java

@@ -115,6 +115,7 @@ public class DeviceServiceImpl implements IDeviceService {
 
         //判断该设备编号是否存在缓存在线集合当中;
         Boolean isExist = cacheService.isExistDeviceOnlineSet(farmId, deviceCode, todayDateText);
+        System.out.println("心跳处理 isExist>>"+isExist);
         if (!isExist) {
             //4、{更新总状态表}
 //            updateDeviceAllStatus(farmId, deviceCode,todayDateText,nowTimestamp,todayDate);
@@ -236,11 +237,13 @@ public class DeviceServiceImpl implements IDeviceService {
             Timestamp heartbeatLastTime = nowTimestamp;
             Timestamp envtempFirstTime = null;
             Timestamp envtempLastTime = null;
+            Timestamp firstTime = nowTimestamp;
+            Timestamp lastTime = nowTimestamp;
             //{计算耳标总数}
 //            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
             Integer eartagTotal = 0;
             //{新建设备在线统计并创建缓存}
-            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime);
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime);
         }else{
             eartagDeviceOnlineEntity.setAlias(alias);
             int heartbeatTotal = eartagDeviceOnlineEntity.getHeartbeatTotal();
@@ -249,6 +252,10 @@ public class DeviceServiceImpl implements IDeviceService {
                 eartagDeviceOnlineEntity.setHeartbeatFirstTime(nowTimestamp);
             }
             eartagDeviceOnlineEntity.setHeartbeatLastTime(nowTimestamp);
+            if(eartagDeviceOnlineEntity.getFirstTime() == null){
+                eartagDeviceOnlineEntity.setFirstTime(nowTimestamp);
+            }
+            eartagDeviceOnlineEntity.setLastTime(nowTimestamp);
             eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
             //更新设备在线缓存数据
             cacheService.putDeviceInOnline(deviceCode,eartagDeviceOnlineEntity);
@@ -346,7 +353,7 @@ public class DeviceServiceImpl implements IDeviceService {
         //{通过设备编码取货牧场id}
         String farmId = getFarmIdByDeviceCode(deviceCode);
         if(farmId == null){
-            log.error("该设备编码["+deviceCode+"]的设备已经不存在。");
+            log.error("出错:该设备编码["+deviceCode+"]的设备已经不存在。");
         }
         String temp = dataJo.getString("temp");
         String envtemp = com.huimv.eartag2.common.utils.MathUtil.countEnvtemp(temp,2).toString();
@@ -355,7 +362,7 @@ public class DeviceServiceImpl implements IDeviceService {
         Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
 
         //1.保存环境温度流水
-        saveDeviceTemp(dataJo,todayDate);
+        saveDeviceTemp(dataJo,todayDate,nowTimestamp);
 
         String updateType = "环境温度";
         //2.{更新设备注册表}
@@ -366,6 +373,7 @@ public class DeviceServiceImpl implements IDeviceService {
 
         //判断该设备编号是否存在牧场缓存在线集合当中;
         Boolean isExist = cacheService.isExistDeviceOnlineSet(farmId, deviceCode,todayDateText);
+        System.out.println("## 环境温度 isExist>>"+isExist);
         if (!isExist) {
             //4.{更新总状态表}
             updateEnvtempOfDeviceAllStatus(farmId, todayDateText,todayDate,nowTimestamp);
@@ -381,6 +389,9 @@ public class DeviceServiceImpl implements IDeviceService {
         //{获取处于工作状态的设备数量}
         Integer deviceTotal = getDeviceTotalByFarmIdFromDeviceRegister(farmId);
         System.out.println("## deviceTotal>>"+deviceTotal);
+        if(deviceTotal == 0){
+            log.error("出错:设备总数(deviceTotal)不能为0.");
+        }
         //设备在线数量
         Integer deviceOnlineSum = cacheService.getDeviceOnlineSum(farmId,todayDateText);
         deviceOnlineSum++;
@@ -390,19 +401,22 @@ public class DeviceServiceImpl implements IDeviceService {
             deviceOfflineSum = deviceTotal - deviceOnlineSum;
         }
         System.out.println("## deviceOnlineSum>>"+deviceOnlineSum);
-
         //设备在线率
         BigDecimal deviceRateBd= new BigDecimal(deviceOnlineSum).divide(new BigDecimal(deviceTotal),1,BigDecimal.ROUND_HALF_UP);
         Float deviceOnlineRate = Float.parseFloat(deviceRateBd.toString());
         //{获取注销设备数量}
         Integer deviceCancelSum = getDeviceCancelTotalFromDeviceRegister(farmId);
+        Integer eartagOnlineSum = 0;
+        Float eartagOnlineRate = 0F;
         //耳标总数量
         Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
-        //耳标在线数量
-        Integer eartagOnlineSum = eartagService.getEartagOnelineTotal(farmId,todayDateText);
-        //耳标在线率
-        BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
-        Float eartagOnlineRate = Float.parseFloat(eartagRateBd.toString());
+        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){
@@ -527,11 +541,13 @@ public class DeviceServiceImpl implements IDeviceService {
             Timestamp heartbeatLastTime = null;
             Timestamp envtempFirstTime = nowTimestamp;
             Timestamp envtempLastTime = nowTimestamp;
+            Timestamp firstTime = nowTimestamp;
+            Timestamp lastTime = nowTimestamp;
             //{计算耳标总数}
 //            Integer eartagTotal = eartagService.getEartagRegTotalByFarmId(farmId);
             Integer eartagTotal = 0;
             //{新建设备在线统计并创建缓存}
-            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,envtemp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime);
+            newDeviceOnline(deviceCode,alias,heartbeatTotal,envtempTotal,eartagTotal,envtemp,todayDate,farmId,heartbeatFirstTime,heartbeatLastTime,envtempFirstTime,envtempLastTime,firstTime,lastTime);
         }else{
             eartagDeviceOnlineEntity.setAlias(alias);
             int envtempTotal = eartagDeviceOnlineEntity.getEnvtempTotal();
@@ -541,6 +557,10 @@ public class DeviceServiceImpl implements IDeviceService {
                 eartagDeviceOnlineEntity.setEnvtempFirstTime(nowTimestamp);
             }
             eartagDeviceOnlineEntity.setEnvtempLastTime(nowTimestamp);
+            if(eartagDeviceOnlineEntity.getFirstTime() == null){
+                eartagDeviceOnlineEntity.setFirstTime(nowTimestamp);
+            }
+            eartagDeviceOnlineEntity.setLastTime(nowTimestamp);
             eartagDeviceOnlineRepo.saveAndFlush(eartagDeviceOnlineEntity);
             //更新设备在线缓存数据
             cacheService.putDeviceInOnline(deviceCode,eartagDeviceOnlineEntity);
@@ -557,7 +577,7 @@ public class DeviceServiceImpl implements IDeviceService {
      * @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) {
+    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) {
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setAlias(alias);
@@ -570,6 +590,8 @@ public class DeviceServiceImpl implements IDeviceService {
         newEartagDeviceOnlineEntity.setHeartbeatLastTime(heartbeatLastTime);
         newEartagDeviceOnlineEntity.setEnvtempFirstTime(envtempFirstTime);
         newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
+        newEartagDeviceOnlineEntity.setFirstTime(firstTime);
+        newEartagDeviceOnlineEntity.setLastTime(lastTime);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
         cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);
@@ -585,7 +607,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) {
+    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) {
         EartagDeviceOnlineEntity newEartagDeviceOnlineEntity = new EartagDeviceOnlineEntity();
         newEartagDeviceOnlineEntity.setDeviceCode(deviceCode);
         newEartagDeviceOnlineEntity.setAlias(alias);
@@ -599,6 +621,8 @@ public class DeviceServiceImpl implements IDeviceService {
         newEartagDeviceOnlineEntity.setHeartbeatLastTime(heartbeatLastTime);
         newEartagDeviceOnlineEntity.setEnvtempFirstTime(envtempFirstTime);
         newEartagDeviceOnlineEntity.setEnvtempLastTime(envtempLastTime);
+        newEartagDeviceOnlineEntity.setFirstTime(firstTime);
+        newEartagDeviceOnlineEntity.setLastTime(lastTime);
         eartagDeviceOnlineRepo.saveAndFlush(newEartagDeviceOnlineEntity);
         //将新建的设备在线数据更新到设备在线缓存
         cacheService.putDeviceInOnline(deviceCode,newEartagDeviceOnlineEntity);
@@ -705,15 +729,20 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Time        : 14:39
      */
     @Override
-    public void saveDeviceTemp(JSONObject dataJo, java.sql.Date todayDate) {
+    public void saveDeviceTemp(JSONObject dataJo, java.sql.Date todayDate, Timestamp nowTimestamp) throws ParseException {
+        DateUtil dateUtil = new DateUtil();
+        MathUtil mathUtil = new MathUtil();
         String device = dataJo.getString("device");
+        String askTime = dateUtil.rebuildDateTime(dataJo.getString("askTime"));
         String temp = dataJo.getString("temp");
         EartagEnvEntity envEntity = new EartagEnvEntity();
         envEntity.setDeviceCode(device);
         envEntity.setTemp1(Integer.parseInt(temp));
-        envEntity.setTemp2(0F);
-        envEntity.setAddTime(new Timestamp(new Date().getTime()));
+        envEntity.setTemp2(Float.parseFloat(mathUtil.countEnvtemp(temp,2)));
+        envEntity.setAddTime(nowTimestamp);
+        envEntity.setAskTime(new Timestamp(dateUtil.parseDateTime(askTime).getTime()));
         envEntity.setCreateDate(todayDate);
+        envEntity.setAskDate(new java.sql.Date(dateUtil.parseDate(dateUtil.getAskDate(dataJo.getString("askTime"))).getTime()));
         envRepo.saveAndFlush(envEntity);
     }
 

+ 12 - 0
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/utils/DateUtil.java

@@ -22,6 +22,14 @@ import java.util.Date;
 @Slf4j
 public class DateUtil {
 
+    public Date parseDate(String dateText) throws ParseException {
+        if(dateText.indexOf("T") != -1){
+            dateText = dateText.replace("T"," ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.parse(dateText);
+    }
+
     //格式化日期(Long --> Date)
     public String formatLongToDate(Long longDate){
         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -165,6 +173,10 @@ public class DateUtil {
         return text.substring(0,4)+"-"+text.substring(4,6)+"-"+text.substring(6,8)+" "+text.substring(8,10)+":"+text.substring(10,12)+":"+text.substring(12,14);
     }
 
+    public String getAskDate(String askTime) {
+        return askTime.substring(0, 4) + "-" + askTime.substring(4, 6) + "-" + askTime.substring(6, 8) ;
+    }
+
     public static void main(String[] args){
         DateUtil du = new DateUtil();
         //

+ 12 - 0
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/utils/MathUtil.java

@@ -1,7 +1,9 @@
 package com.huimv.eartag2.device.utils;
 
+import javafx.scene.transform.Scale;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 
@@ -45,6 +47,15 @@ public class MathUtil {
         return numberFormat.format(num);
     }
 
+    //计算环境温度
+    public String countEnvtemp(String temp,int scale){
+        NumberFormat numberFormat = NumberFormat.getInstance();
+        // 设置精确到小数点后2位
+        numberFormat.setMaximumFractionDigits(scale);
+        float temp2 = Float.parseFloat(new BigDecimal(temp).multiply(new BigDecimal(0.01)).toString());
+        return numberFormat.format(temp2);
+    }
+
     public String formatBit(float num) {
         return String.valueOf(num);
     }
@@ -58,6 +69,7 @@ public class MathUtil {
         return numberFormat.format(num * 100);//所占百分比
     }
 
+
     //计算占比
     public String countRate(float num, float total,int bit) {
         // 创建一个数值格式化对象

+ 1 - 1
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java

@@ -70,7 +70,7 @@ public class EartagListener {
                 eartagService.handleEartag(dataJo);
             }
         }else{
-            System.out.println("非测试耳标>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+            System.out.println("过滤非测试耳标>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
         }
 //        //正式代码
 //        if(type.trim().equalsIgnoreCase("eartag")){

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

@@ -55,7 +55,7 @@ public interface ICacheService {
 
     Integer getEartagTotal(String farmId);
 
-    void putEartagTotal(Integer total, String farmId);
+    void putEartagTotal_(Integer total, String farmId);
 
     //从缓存读取在线耳标数量
     Integer getEartagOnlineTotalFromCache(String farmId, String todayDateText);

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

@@ -365,7 +365,7 @@ public class CacheServiceImpl implements ICacheService {
     }
 
     @Override
-    public void putEartagTotal(Integer total, String farmId) {
+    public void putEartagTotal_(Integer total, String farmId) {
         String valueKey = BizConst.FARM_EARTAG_TOTAL_PREFIX+farmId;
         redisTemplate.opsForValue().set(valueKey,total);
     }

+ 20 - 9
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java

@@ -173,12 +173,17 @@ public class EartagServiceImpl implements IEartagService {
         Integer deviceCancelSum = deviceService.getDeviceCancelTotalFromDeviceRegister(farmId);
         //耳标总数量 eartagService.
         Integer eartagTotal = getEartagRegTotalByFarmId(farmId);
-        //耳标在线数量 eartagService.
-        Integer eartagOnlineSum = getEartagOnelineTotal(farmId,todayDateText);
-        eartagOnlineSum++;
-        //耳标在线率
-        BigDecimal eartagRateBd= new BigDecimal(eartagOnlineSum).divide(new BigDecimal(eartagTotal),1,BigDecimal.ROUND_HALF_UP);
-        Float eartagOnlineRate = Float.parseFloat(eartagRateBd.toString());
+        System.out.println("## eartagTotal>>"+eartagTotal);
+        Integer eartagOnlineSum = 0;
+        Float eartagOnlineRate = 0F;
+        if(eartagTotal != 0){
+            //耳标在线数量 eartagService.
+            eartagOnlineSum = getEartagOnelineTotal(farmId,todayDateText);
+            eartagOnlineSum++;
+            //耳标在线率
+            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){
@@ -235,7 +240,7 @@ public class EartagServiceImpl implements IEartagService {
     public Integer getEartagRegTotalByFarmId(String farmId){
         //从缓存读取耳标总数
         Integer eartagTotal = cacheService.getEartagTotal(farmId);
-        if(eartagTotal != null){
+        if(eartagTotal != null && eartagTotal != 0){
             return eartagTotal;
         }else{
 //            List<Object[]> eartagRegList = eartagRegisterRepo.getEartagCountByFarmId(farmId);
@@ -246,7 +251,7 @@ public class EartagServiceImpl implements IEartagService {
             //{读取处于工作状态的耳标总数}
             Integer total = getEartagSum(farmId,liveStatus);
             //设置耳标总数缓存
-            cacheService.putEartagTotal(total,farmId);
+            cacheService.putEartagTotal_(total,farmId);
             //处于工作状态的耳标总数
             return total;
         }
@@ -492,7 +497,8 @@ public class EartagServiceImpl implements IEartagService {
      * @param todayDate
      * @param farmId
      */
-    public void saveEartagFlow(JSONObject eartagJo, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId) {
+    public void saveEartagFlow(JSONObject eartagJo, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId) throws ParseException {
+        DateUtil dateUtil = new DateUtil();
         EartagDataEntity dataEntity = new EartagDataEntity();
         dataEntity.setCmdHeader(eartagJo.getString("cmdHeader"));
         dataEntity.setDevice(eartagJo.getString("device"));
@@ -510,6 +516,7 @@ public class EartagServiceImpl implements IEartagService {
         dataEntity.setAddTime(nowTimestamp);
         dataEntity.setCreateDate(todayDate);
         dataEntity.setFarmId(farmId);
+        dataEntity.setAskDate(new java.sql.Date(dateUtil.parseDate(getAskDate(eartagJo.getString("askTime"))).getTime()));
         eartagDataRepo.saveAndFlush(dataEntity);
 
         //最新的耳标数据覆盖老数据
@@ -522,6 +529,10 @@ public class EartagServiceImpl implements IEartagService {
         return newAskTime;
     }
 
+    public String getAskDate(String askTime) {
+        return askTime.substring(0, 4) + "-" + askTime.substring(4, 6) + "-" + askTime.substring(6, 8) ;
+    }
+
     /**
      * 初始化redis最新记录
      */

+ 11 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java

@@ -42,9 +42,12 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
     private DateUtil2 dateUtil;
     @Autowired
     private RegexUtil regexUtil;
+    @Autowired
+    private IDeviceService deviceService;
     @Value("${data.input.flow}")
     private Integer dataInputFlow;
 
+
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         ByteBuf data = (ByteBuf) msg;
@@ -63,6 +66,11 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
             JSONArray askJa = getPerData(clientAskText);
             for (int a = 0; a < askJa.size(); a++) {
                 String askText = askJa.getString(a);
+                /////////////////////////////////////////////////////////////
+                //TEST-saveRawData()
+                deviceService.saveRawData(askText);
+                /////////////////////////////////////////////////////////////
+
                 if (dataInputFlow == 1) {
                     //{处理请求内容}
                     handleAskText(askText, ctx);
@@ -98,6 +106,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 System.out.println("==>1");
             } else if (cmd.trim().equalsIgnoreCase("1")) {
                 System.out.println("==>2");
+                System.out.println(" >> askText>>"+askText);
                 //处理获取设备编码命令
                 //{读取设备编码}
                 String deviceCode = dataService.getDeviceCodeByChipId(idCode);
@@ -114,6 +123,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 System.out.println("==>3");
             } else if (cmd.trim().equalsIgnoreCase("2")) {
                 System.out.println("==>3");
+                System.out.println(" >> askText>>"+askText);
                 //处理服务器时间命令
                 String answer = "hm+2+" + dateUtil.getNowText() + "+4+end";
                 log.info("##获取服务器时间-应答数据>>" + answer);
@@ -121,6 +131,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 System.out.println("==>3.1");
             } else if (cmd.trim().equalsIgnoreCase("3")) {
                 System.out.println("==>4");
+                System.out.println(" >> askText>>"+askText);
                 //处理心跳包命令
                 //{设备心跳应答}
                 String answer = "hm+3+6+end";

+ 2 - 2
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/controller/DeviceController.java

@@ -328,7 +328,7 @@ public class DeviceController {
         log.info("<listDeviceEnvtempByDeviceCodeInPager>输入参数 pageNo>>"+pageNo);
         log.info("<listDeviceEnvtempByDeviceCodeInPager>输入参数 pageSize>>"+pageSize);
         //
-        if(addDate == null){
+        if(addDate == null || addDate.trim().length() == 0){
             addDate  =  new DateUtil().getTodayDateText();
         }
         //查询设备环境温度
@@ -355,7 +355,7 @@ public class DeviceController {
         log.info("<listHeartbeatByDeviceCodeAndDateInPager>输入参数 pageNo>>"+pageNo);
         log.info("<listHeartbeatByDeviceCodeAndDateInPager>输入参数 pageSize>>"+pageSize);
         //
-        if(addDate == null){
+        if(addDate == null || addDate.trim().length() == 0){
             addDate  =  new DateUtil().getTodayDateText();
         }
         //显示设备心跳

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

@@ -41,10 +41,10 @@ public interface IDeviceService {
     Result listDeviceEartagOnlineCountByDeviceCodeInPager(String deviceCode, String earmark, String addDate, Integer pageNo, Integer pageSize) throws ParseException;
 
     //显示设备心跳
-    Result listHeartbeatByDeviceCodeAndDateInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize);
+    Result listHeartbeatByDeviceCodeAndDateInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) throws ParseException;
 
     //分页查询设备温度
-    Result listDeviceEnvtempByDeviceCodeInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize);
+    Result listDeviceEnvtempByDeviceCodeInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) throws ParseException;
 
     //分页查询列表
     Result listDeviceRegisterInPager(String farmId, String deviceCode, String alias, String startDate, String endDate, Integer activeStatus, Integer liveStatus, Integer pageNo, Integer pageSize) throws ParseException;

+ 69 - 14
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceServiceImpl.java

@@ -141,7 +141,7 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     @Override
-    public Result listHeartbeatByDeviceCodeAndDateInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) {
+    public Result listHeartbeatByDeviceCodeAndDateInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) throws ParseException {
         System.out.println("## addDate>>" + addDate);
         //
         Specification<EartagHeartbeatEntity> sf = (Specification<EartagHeartbeatEntity>) (root, criteriaQuery, criteriaBuilder) -> {
@@ -168,7 +168,15 @@ public class DeviceServiceImpl implements IDeviceService {
             return criteriaQuery.orderBy(orders).getRestriction();
         };
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
-        return new Result(ResultCode.SUCCESS, heartbeatRepo.findAll(sf, pageable));
+        Page<EartagHeartbeatEntity> pageHeartbeatEntity = heartbeatRepo.findAll(sf, pageable);
+        DateUtil dateUtil = new DateUtil();
+        JSONObject pageJo = JSONObject.parseObject(JSONObject.toJSONString(pageHeartbeatEntity));
+        JSONArray contentJa = pageJo.getJSONArray("content");
+        for(int a=0;a<contentJa.size();a++){
+            JSONObject contentJo = contentJa.getJSONObject(a);
+            contentJo.put("addTime",dateUtil.formatDatetimeText(contentJo.getDate("addTime")));
+        }
+        return new Result(ResultCode.SUCCESS, pageJo);
     }
 
     /**
@@ -181,7 +189,7 @@ public class DeviceServiceImpl implements IDeviceService {
      * @Time : 21:27
      */
     @Override
-    public Result listDeviceEnvtempByDeviceCodeInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) {
+    public Result listDeviceEnvtempByDeviceCodeInPager(String deviceCode, String addDate, Integer pageNo, Integer pageSize) throws ParseException {
         //
         Specification<EartagEnvEntity> sf = (Specification<EartagEnvEntity>) (root, criteriaQuery, criteriaBuilder) -> {
             //
@@ -207,7 +215,16 @@ public class DeviceServiceImpl implements IDeviceService {
             return criteriaQuery.orderBy(orders).getRestriction();
         };
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
-        return new Result(ResultCode.SUCCESS, eartagEnvRepo.findAll(sf, pageable));
+        Page<EartagEnvEntity> pageEnvEntity = eartagEnvRepo.findAll(sf, pageable);
+        DateUtil dateUtil = new DateUtil();
+        String pageStr = JSONObject.toJSONString(pageEnvEntity);
+        JSONObject pageJo = JSONObject.parseObject(pageStr);
+        JSONArray contentJa = pageJo.getJSONArray("content");
+        for(int a=0;a<contentJa.size();a++){
+            JSONObject contentJo = contentJa.getJSONObject(a);
+            contentJo.put("addTime",dateUtil.formatDatetimeText(contentJo.getDate("addTime")));
+        }
+        return new Result(ResultCode.SUCCESS, pageJo);
     }
 
     /**
@@ -311,8 +328,8 @@ public class DeviceServiceImpl implements IDeviceService {
             outJo.put("stage", deviceRegisterEntity.getStage());
             outJo.put("pigpenId", deviceRegisterEntity.getPigpenId());
             outJo.put("unitId", deviceRegisterEntity.getUnitId());
-            outJo.put("registerTime", deviceRegisterEntity.getRegisterTime());
-            outJo.put("lastTime", deviceRegisterEntity.getLastTime());
+            outJo.put("registerTime", dateUtil.formatDatetimeText(deviceRegisterEntity.getRegisterTime()));
+            outJo.put("lastTime", dateUtil.formatDatetimeText(deviceRegisterEntity.getLastTime()));
             outJo.put("activeStatus", deviceRegisterEntity.getActiveStatus());
             outJo.put("activeTime", dateUtil.formatDatetimeText(deviceRegisterEntity.getActiveTime()));
             outJo.put("deviceStatus", deviceRegisterEntity.getDeviceStatus());
@@ -488,7 +505,7 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     //分页查询
-    private Result listDeviceOnlineFromMySQL(String farmId, String addDate, String deviceCode, String alias, Integer pageNo, Integer pageSize) {
+    private Result listDeviceOnlineFromMySQL(String farmId, String addDate, String deviceCode, String alias, Integer pageNo, Integer pageSize) throws ParseException {
 //        //
 //        List<EartagDeviceOnlineEntity> deviceOnlineEntityList = deviceOnlineRepo.getDeviceOnlineByFarmIdAndCreateDate(farmId,addDate);
 //        if(deviceOnlineEntityList.size()==0){
@@ -526,18 +543,50 @@ public class DeviceServiceImpl implements IDeviceService {
             criteriaQuery.where(and);
             //
             List<Order> orders = new ArrayList<>();
-            orders.add(criteriaBuilder.desc(root.get("id")));
+//            orders.add(criteriaBuilder.desc(root.get("id")));
+            orders.add(criteriaBuilder.desc(root.get("lastTime")));
             return criteriaQuery.orderBy(orders).getRestriction();
         };
         Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
         Page<EartagDeviceOnlineEntity> pageDeviceOnlineEntity = deviceOnlineRepo.findAll(sf, pageable);
+        JSONObject outDataJo = new JSONObject();
+        outDataJo.put("pageable",pageDeviceOnlineEntity.getPageable());
+        outDataJo.put("last",pageDeviceOnlineEntity.isLast());
+        outDataJo.put("totalElements",pageDeviceOnlineEntity.getTotalElements());
+        outDataJo.put("totalPages",pageDeviceOnlineEntity.getTotalPages());
+        outDataJo.put("number",pageDeviceOnlineEntity.getNumber());
+        outDataJo.put("size",pageDeviceOnlineEntity.getSize());
+        outDataJo.put("sort",pageDeviceOnlineEntity.getSort());
+        outDataJo.put("numberOfElements",pageDeviceOnlineEntity.getNumberOfElements());
+        outDataJo.put("first",pageDeviceOnlineEntity.isFirst());
+        outDataJo.put("empty",pageDeviceOnlineEntity.isEmpty());
 
         List<EartagDeviceOnlineEntity> deviceOnlineEntityList = pageDeviceOnlineEntity.getContent();
-        for (EartagDeviceOnlineEntity deviceOnlineEntity : deviceOnlineEntityList) {
-
+        JSONArray outJa = new JSONArray();
+        outDataJo.put("content",outJa);
+        for(EartagDeviceOnlineEntity deviceOnlineEntity:deviceOnlineEntityList){
+            JSONObject outJo = new JSONObject();
+            outJa.add(outJo);
+            outJo.put("id",deviceOnlineEntity.getId());
+            outJo.put("deviceCode",deviceOnlineEntity.getDeviceCode());
+            outJo.put("alias",deviceOnlineEntity.getAlias());
+            outJo.put("heartbeatTotal",deviceOnlineEntity.getHeartbeatTotal());
+            outJo.put("envtempTotal",deviceOnlineEntity.getEnvtempTotal());
+            outJo.put("eartagTotal",deviceOnlineEntity.getEartagTotal());
+            outJo.put("firstTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getFirstTime()));
+            outJo.put("lastTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getLastTime()));
+            outJo.put("lastEnvtemp",deviceOnlineEntity.getLastEnvtemp());
+            outJo.put("lastEartag",deviceOnlineEntity.getLastEartag());
+            outJo.put("addDate",deviceOnlineEntity.getAddDate());
+            outJo.put("farmId",deviceOnlineEntity.getFarmId());
+            outJo.put("heartbeatFirstTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getHeartbeatFirstTime()));
+            outJo.put("heartbeatLastTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getHeartbeatLastTime()));
+            outJo.put("envtempFirstTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getEnvtempFirstTime()));
+            outJo.put("envtempLastTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getEnvtempLastTime()));
+            outJo.put("eartagFirstTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getEartagFirstTime()));
+            outJo.put("eartagLastTime",dateUtil.formatDatetimeText(deviceOnlineEntity.getEartagLastTime()));
         }
-
-        return new Result(ResultCode.SUCCESS, deviceOnlineRepo.findAll(sf, pageable));
+        return new Result(ResultCode.SUCCESS, outDataJo);
     }
 
     /**
@@ -619,14 +668,20 @@ public class DeviceServiceImpl implements IDeviceService {
         DateUtil dateUtil = new DateUtil();
         String pastDate = dateUtil.getPastDate(pastDays);
         String todayDate = dateUtil.getTodayDateText();
+        System.out.println("# deviceCode>>"+deviceCode);
+        System.out.println("# pastDate>>"+pastDate);
+        System.out.println("# todayDate>>"+todayDate);
             List<EartagDeviceOnlineEntity> deviceOnlineEntityList = deviceOnlineRepo.getDeviceOnlineByDeviceCode(deviceCode, pastDate, todayDate);
+        System.out.println("deviceOnlineEntityList.size>>"+deviceOnlineEntityList.size());
             if (deviceOnlineEntityList.size() > 0) {
                 JSONArray dataJa = new JSONArray();
                 for (EartagDeviceOnlineEntity deviceOnlineEntity : deviceOnlineEntityList) {
                     JSONObject newJo = new JSONObject();
                     dataJa.add(newJo);
                     newJo.put("time", dateUtil.formatDateText(deviceOnlineEntity.getAddDate()));
-                    newJo.put("value", deviceOnlineEntity.getEartagTotal());
+                    newJo.put("value1", deviceOnlineEntity.getHeartbeatTotal());
+                    newJo.put("value2", deviceOnlineEntity.getEnvtempTotal());
+                    newJo.put("value3", deviceOnlineEntity.getEartagTotal());
                 }
                 return new Result(ResultCode.SUCCESS, dataJa);
             } else {
@@ -654,7 +709,7 @@ public class DeviceServiceImpl implements IDeviceService {
         } else {
             JSONObject resultJo = (JSONObject) JSON.toJSON(deviceRegisterEntity);
             resultJo.put("activeTime", dateUtil.formatDatetimeText(resultJo.getDate("activeTime")));
-
+            resultJo.put("registerTime", dateUtil.formatDatetimeText(resultJo.getDate("registerTime")));
             return new Result(ResultCode.SUCCESS, resultJo);
         }
     }