|
@@ -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 : 处理网关湿度
|