Explorar o código

修改了运动量上传存储的逻辑

yang %!s(int64=3) %!d(string=hai) anos
pai
achega
b67033c027

+ 11 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/constant/CofigConstant.java

@@ -0,0 +1,11 @@
+package com.huimv.eartag.monitor.constant;
+
+public class CofigConstant {
+
+
+
+    //数据上传时间间隔
+    public static final int UPDATA_TIME_GAP = 5000;
+
+
+}

+ 1 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/controller/EartagDataController.java

@@ -115,6 +115,7 @@ public class EartagDataController {
         return new Result<EartagData>(true,StatusCode.OK,"查询成功",eartagData);
     }
 
+
     /***
      * 查询EartagData全部数据
      * @return

+ 12 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/dao/EartagDataMapper.java

@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import tk.mybatis.mapper.common.Mapper;
 
+import java.util.List;
+
 /****
  * @Author:shenkunlin
  * @Description:EartagData的Dao
@@ -19,6 +21,16 @@ public interface EartagDataMapper extends Mapper<EartagData> {
     @Select("select  YDL  from eartag_data where eartag_id =#{eartagId} order by id DESC limit 1")
     Integer getDeviceIdByJQcode(@Param("eartagId") String eartagId);
 
+    @Select("select   *  from eartag_data where id >190000    ")
+    List<EartagData> getallData();
+
+
+    @Select("select   *  from eartag_data where eartag_id =#{eartagId} order by id DESC limit 1")
+    EartagData getDeviceData(@Param("eartagId") String eartagId);
+
+
+    @Select("select   *  from eartag_data where eartag_id =#{eartagId} order by id DESC limit 5")
+    List<EartagData> getDeviceDataLimitFive(@Param("eartagId") String eartagId);
 
 
 }

+ 14 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/service/EartagDataService.java

@@ -5,6 +5,7 @@ package com.huimv.eartag.monitor.service;
 
 import com.github.pagehelper.PageInfo;
 import com.huimv.eartag.monitor.pojo.EartagData;
+import org.springframework.aop.target.dynamic.BeanFactoryRefreshableTargetSource;
 
 import java.util.List;
 
@@ -75,4 +76,17 @@ public interface EartagDataService {
      * @return
      */
     Integer findYDL(String eartagId);
+
+
+    //因为要对时间进行处理,所以在这里加上了返回对象
+   EartagData findLastEarTagData(String eartagId);
+
+
+    //因为要对时间进行处理,所以在这里加上了返回对象
+
+
+   List<EartagData>    listLastFiveData(   String eartagId   );
+
+
+
 }

+ 19 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/service/impl/EartagDataServiceImpl.java

@@ -203,4 +203,23 @@ public class EartagDataServiceImpl implements EartagDataService {
     public Integer findYDL(String eartagId) {
         return eartagDataMapper.getDeviceIdByJQcode(eartagId);
     }
+
+
+    @Override
+    public  EartagData findLastEarTagData(String eartagId) {
+        return eartagDataMapper.getDeviceData(eartagId);
+    }
+
+
+    @Override
+    public  List<EartagData> listLastFiveData (String eartagId) {
+        return eartagDataMapper.getDeviceDataLimitFive(eartagId);
+    }
+
+
+
+
+
+
+
 }

+ 110 - 35
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/service/impl/ReceivePackageSerivce.java

@@ -1,6 +1,7 @@
 package com.huimv.eartag.monitor.service.impl;
 
 import com.huimv.common.date.DateUtil;
+import com.huimv.eartag.monitor.constant.CofigConstant;
 import com.huimv.eartag.monitor.dao.EartagDampnessMapper;
 import com.huimv.eartag.monitor.dao.EartagTemperatureMapper;
 import com.huimv.eartag.monitor.pojo.EartagDampness;
@@ -10,13 +11,15 @@ import com.huimv.eartag.monitor.service.EartagDampnessService;
 import com.huimv.eartag.monitor.service.EartagDataService;
 import com.huimv.eartag.monitor.service.EartagTemperatureService;
 import com.huimv.eartag.monitor.utils.Const;
+import com.huimv.eartag.monitor.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.ParseException;
+import java.text.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
 
 /**
  * @Project : huimv.shiwan
@@ -50,48 +53,116 @@ public class ReceivePackageSerivce {
      * @Date : 2021/1/16
      * @Time : 12:08
      */
+
     public String handleEartagData(String[] clientMessageArray) throws ParseException {
+
         log.info("开始添加耳标数据......");
-        String commandHeader = clientMessageArray[0];
-        String deviceId = clientMessageArray[1];
-        String cmd = clientMessageArray[2];
-        String version = clientMessageArray[3];
-        String eartagId = clientMessageArray[4];
-        String serial = clientMessageArray[5];
-        String dl = clientMessageArray[6];
-        String nbwd = clientMessageArray[7];
-        String ntc = clientMessageArray[8];
-        String ebwd = "";
-        String ydl = clientMessageArray[9];/**********/
-        //计算区间运动量
-
-        Integer ydl1 = eartagDataService.findYDL(eartagId);
-        //新添加的耳标没有历史数据,设置为0
-        if (ydl1 == null) {
-            ydl1 = 0;
+        String commandHeader = clientMessageArray[0];  // header =hm
+        String deviceId = clientMessageArray[1];  // SBID = 1234
+        String cmd = clientMessageArray[2];      //CMD=6
+
+        String version = clientMessageArray[3];  //version =1.0
+        String eartagId = clientMessageArray[4];  //eartagId  = 77eb1e9e
+        String serial = clientMessageArray[5];   //serial =2321
+        String dl = clientMessageArray[6];  //DL =90
+        String nbwd = clientMessageArray[7];   //内部温度  2700
+        //新添加的环境温度  现在的8
+        String   environment_temp = clientMessageArray[8];
+        Double a = (double)Integer.parseInt(environment_temp)/100;
+        System.out.println("环境温度初值"+environment_temp);
+
+        //19944 用来计算耳标温度
+        String ntc = clientMessageArray[9];
+        //当前运动量
+        String ydl = clientMessageArray[10];/**********/
+        //数据库CMD字段没什么用,用来放环境温度了
+        //计算区间运动量 --查找区间运动量
+
+        log.info("开始清洗脏数据");  //由于时间检验问题,可能会出现倒时间
+        List<EartagData> eartagData1 = eartagDataService.listLastFiveData(eartagId);
+        for (EartagData eartagData : eartagData1) {
+             if (eartagData.getYDL()<0  || eartagData.getQjydl()>15||eartagData.getQjydl()<0){
+                 eartagDataService.delete(eartagData.getId());
+                 log.info("删除了一条数据");
+             }
+        }
+
+
+        EartagData lastEarTagData = eartagDataService.findLastEarTagData(eartagId);
+        //第二:防止数据有太大的波动,需要对时间进行处理
+        //获取两条数据时间差
+        String date="";
+        if (lastEarTagData==null){
+            Date date1= DateUtils.getPassedsecond();
+            date = date1.toString();
+            System.out.println("自动获取时间为"+date);
+        }else {
+              date = lastEarTagData.getTimestamp().toString();
         }
-        Integer qjydl = Integer.parseInt(ydl) - ydl1;
 
-        String cqs = clientMessageArray[10];
-        String rssi = clientMessageArray[11];
-        String timestamp = clientMessageArray[12];
-        String checkNumber = clientMessageArray[13];
-        String commandTail = clientMessageArray[14];
+
+        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
+        Date d = sdf.parse(date);
+        String formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);
+        Date date1 = new Date();
+        Date d1 = sdf.parse(String.valueOf(date1));
+        String formatDate001 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d1);
+
+        System.out.println("现在的时间就是"+formatDate001);
+        System.out.println("上一条数据的时间是"+formatDate);
+
+        //算出间隔时间
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Date startTime = dateFormat.parse(formatDate);
+        //end是大一点的时间
+        Date endTime = dateFormat.parse(formatDate001);
+
+        long diff = endTime.getTime() - startTime.getTime();
+        //间隔时间为多少毫秒,除以上传时时间间隔五秒
+        System.out.println("时间间隔为"+diff+"毫秒");
+        double second = diff / CofigConstant.UPDATA_TIME_GAP;
+        //需要除以五秒钟作为时间间隔
+        System.out.println("有多少个五秒"+second);
+        String cqs = clientMessageArray[11];
+        String rssi = clientMessageArray[12];
+        String timestamp = clientMessageArray[13];
+        String checkNumber = clientMessageArray[14];
+        String commandTail = clientMessageArray[15];
         //耳标数据填充
         EartagData eartagData = new EartagData();
+
+
+
+
+        if(lastEarTagData==null) {
+            System.out.println("运动量为空,新运动量"+ydl+"---老运动量为空");
+            int save_date = (int) ((int)  10/second);
+            System.out.println("存储平均运动量"+save_date);
+            eartagData.setQjydl(save_date);
+        }else if(Integer.parseInt(ydl)-lastEarTagData.getYDL() >=0 ){
+            System.out.println("运动量还未翻转,新运动量"+ydl+"---老运动量"+lastEarTagData.getYDL());
+            int save_date = (int) Math.ceil((Integer.parseInt(ydl) - lastEarTagData.getYDL()) / second);
+            System.out.println("存储平均运动量"+save_date);
+            eartagData.setQjydl(save_date);
+        }else {
+            System.out.println("/*/*/*/*/*/*运动量翻转,新运动量"+ydl+"---老运动量"+lastEarTagData.getYDL());
+            int save_date = (int) Math.ceil(Integer.parseInt(ydl) / second);
+            System.out.println("存储平均运动量"+save_date);
+            eartagData.setQjydl(save_date);
+        }
+
         eartagData.setHeader(commandHeader);
         eartagData.setCMD(Integer.parseInt(cmd));
+        //内部温度放的是环境温度了
+        eartagData.setNBWD(25);
         eartagData.setSBID(Integer.parseInt(deviceId));
         eartagData.setVersion(version);
         eartagData.setSerial(Integer.parseInt(serial));
-        eartagData.setQjydl(qjydl);
-
         eartagData.setEartagId(eartagId);
-        //电量不需要处理   89就是89%
+        //电量不需要处理    89就是89%
         eartagData.setDl(Integer.parseInt(dl));
-
-        eartagData.setNBWD(Integer.parseInt(nbwd) / 100);
-        // eartagData.setEBWD(0.0);
+         //上传数据/100  就是内部温度
         eartagData.setEBWD(ln(Integer.parseInt(ntc)));
         //热敏电阻值,计算耳标温度
         eartagData.setNtc(Integer.parseInt(ntc));
@@ -100,9 +171,7 @@ public class ReceivePackageSerivce {
         eartagData.setRSSYI(Integer.parseInt(rssi));
         eartagData.setTimestamp(DateUtil.parseDateTime(DateUtil.buildDateTimeString(timestamp)));
         eartagData.setCheckNumber(Integer.parseInt(checkNumber));
-        eartagData.setMLW(commandTail);
-
-
+        eartagData.setMLW(a.toString());
         eartagDataService.add(eartagData);
         log.info(Const.SAVE_EARTAG_SUCCESS);
         StringBuilder returnSb = new StringBuilder();
@@ -110,6 +179,12 @@ public class ReceivePackageSerivce {
         return "hm+6+0+6+end";
     }
 
+
+
+
+
+
+
     /**
      * @Method : _handleEartagDampness
      * @Description : 处理网关湿度

+ 1 - 1
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/socket/Server.java

@@ -20,7 +20,7 @@ public class Server implements CommandLineRunner {
     public void run(String... args) throws Exception {
         try {
 
-            // 初始化服务端socket连接,并监听8888端口的socket请求
+            // 初始化服务端socket连接, 并监听8888端口的socket请求
             ServerSocket serverSocket = new ServerSocket(10088);
 
             System.out.println("****** I am Server, now begin to wait the client ******");

+ 3 - 0
ear_tag/huimv-eartag-monitor/src/main/java/com/huimv/eartag/monitor/utils/Const.java

@@ -5,4 +5,7 @@ public class Const {
     public static final String SAVE_EARTAG_SUCCESS = "保存耳标数据成功";
     public static final String SAVE_TEMPERATURE_SUCCESS = "保存温度数据成功";
     public static final String SAVE_DAMPNESS_SUCCESS = "保存湿度数据成功";
+
+
+
 }

+ 1 - 1
ear_tag/huimv-eartag-monitor/src/main/resources/application-dev.yml

@@ -6,7 +6,7 @@ spring:
     name: eartag
 
   datasource:
-    url: jdbc:mysql://192.168.1.7:3306/eartag_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://122.112.250.26:3306/eartag_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
     username: root
     password: hm123456
     driver-class-name: com.mysql.cj.jdbc.Driver

+ 82 - 0
ear_tag/huimv-eartag-monitor/src/test/java/com/huimv/eartag/monitor/service/test.java

@@ -0,0 +1,82 @@
+package com.huimv.eartag.monitor.service;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.*;
+import java.net.Socket;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class test {
+
+
+    @Test
+    public void test3() throws ParseException {
+
+
+
+
+
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Date startTime = dateFormat.parse("2019-11-6 09:31:00");
+        Date endTime = dateFormat.parse("2019-11-6 09:32:00");
+
+        //单位是毫秒
+        long diff = endTime.getTime() - startTime.getTime();
+        long second = diff/1000;
+        System.out.println(second);
+
+        //
+         int a  = -1;
+         if (a< 0){
+             System.out.println("测试结束");
+         }
+
+    }
+
+
+
+//计算两个时间间隔的秒数
+
+    @Test
+    public void test23() throws ParseException {
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date startTime = dateFormat.parse("2019-11-6 09:31:00");
+        Date endTime = dateFormat.parse("2019-11-6 09:32:00");
+
+        //单位是毫秒
+        long diff =  startTime.getTime()-endTime.getTime() ;
+        long second = diff/1000;
+        System.out.println(second);
+    }
+
+
+
+
+
+//测试向服务器发送命令
+    public static void main(String[] args) throws IOException {
+
+        //建立socket向服务器发送连接请求
+        Socket socket = new Socket("127.0.0.1",10088 );
+        InputStream inputStream;
+        inputStream = socket.getInputStream();
+        OutputStream outputStream = socket.getOutputStream();
+        //客户端向socket发送数据
+        PrintWriter printWriter = new PrintWriter(outputStream);
+        printWriter.println("hm+1234+6+1.0+f87cea8a+20296+89+4000+2582+6443+23917+4+78+20210609170807+17+end");
+        printWriter.flush();
+        //读取数据
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+        String readLine = bufferedReader.readLine();
+        System.out.println(readLine);
+        inputStream.close();
+        outputStream.close();
+        socket.close();
+
+    }
+
+}