yang пре 4 година
родитељ
комит
981b0e6113
28 измењених фајлова са 1737 додато и 20 уклоњено
  1. 14 0
      huimv-smart-common/pom.xml
  2. 0 0
      huimv-smart-datacollection/src/main/java/com/huimv/datacollection/controller/WeatherDataCollection.java
  3. 0 0
      huimv-smart-datacollection/src/main/java/com/huimv/datacollection/timertask/WeatherTimerTask.java
  4. 102 0
      huimv-smart-eartagdata-recive/pom.xml
  5. 16 0
      huimv-smart-eartagdata-recive/src/main/java/com/huimv/service/IClientDataPacketService.java
  6. 67 0
      huimv-smart-eartagdata-recive/src/main/java/com/huimv/service/impl/ClientDataPacketServiceImpl.java
  7. 46 0
      huimv-smart-eartagdata-recive/src/main/java/com/huimv/socket/Server.java
  8. 81 0
      huimv-smart-eartagdata-recive/src/main/java/com/huimv/socket/ServerThread.java
  9. 10 0
      huimv-smart-management/pom.xml
  10. 7 1
      huimv-smart-management/src/main/java/com/huimv/management/HuimvSmartManagementApplication.java
  11. 2 0
      huimv-smart-management/src/main/java/com/huimv/management/dao/ThresholdManagementDao.java
  12. 1 0
      huimv-smart-management/src/main/java/com/huimv/management/service/ThresholdManagementService.java
  13. 46 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/Server.java
  14. 83 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/ServerThread.java
  15. 11 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/constant/CofigConstant.java
  16. 19 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/constant/EarTagThresholdConstant.java
  17. 17 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/IClientDataPacketService.java
  18. 66 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/ClientDataPacketServiceImpl.java
  19. 450 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/ReceivePackageSerivce.java
  20. 72 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/SendPackageService.java
  21. 25 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/SleepTimeCalculate.java
  22. 68 0
      huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/util/DateUtil.java
  23. 157 0
      huimv-smart-management/src/main/java/com/huimv/management/timertask/AirQualityIndexUtil.java
  24. 19 0
      huimv-smart-management/src/main/java/com/huimv/management/timertask/WarmDataDefaultConstant.java
  25. 252 0
      huimv-smart-management/src/main/java/com/huimv/management/timertask/WeatherTimerTask.java
  26. 68 0
      huimv-smart-management/src/main/java/com/huimv/management/util/DateUtils.java
  27. 0 0
      huimv-smart-management/src/test/java/com/huimv/management/test.java
  28. 38 19
      huimv-smart-management/src/test/java/com/huimv/management/test01.java

+ 14 - 0
huimv-smart-common/pom.xml

@@ -11,6 +11,18 @@
 
     <artifactId>huimv-smart-common</artifactId>
     <description>每一个微服务公共的依赖,bean,工具类等</description>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
     <dependencies>
 
@@ -39,6 +51,7 @@
             <artifactId>commons-lang</artifactId>
             <version>2.6</version>
         </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
@@ -119,6 +132,7 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>

+ 0 - 0
huimv-smart-datacollection/src/main/java/com/huimv/datacollection/controller/WeatherDataCollection.java


+ 0 - 0
huimv-smart-datacollection/src/main/java/com/huimv/datacollection/timertask/WeatherTimerTask.java


+ 102 - 0
huimv-smart-eartagdata-recive/pom.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>smart-farming</artifactId>
+        <groupId>com.huimv</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>huimv-smart-eartagdata-recive</artifactId>
+
+
+
+
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.62</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <version>1.0</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <!--通用mapper起步依赖-->
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+            <version>2.1.5</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <!--自定义依赖-->
+        <dependency>
+            <groupId>com.huimv</groupId>
+            <artifactId>huimv-common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+
+
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+
+
+</project>

+ 16 - 0
huimv-smart-eartagdata-recive/src/main/java/com/huimv/service/IClientDataPacketService.java

@@ -0,0 +1,16 @@
+package com.huimv.service;
+
+import java.text.ParseException;
+
+public interface IClientDataPacketService {
+
+    // 解析客户端数据包
+    public String handleClientSendPacket(String clientMessage) throws ParseException;
+
+
+
+
+
+
+
+}

+ 67 - 0
huimv-smart-eartagdata-recive/src/main/java/com/huimv/service/impl/ClientDataPacketServiceImpl.java

@@ -0,0 +1,67 @@
+package com.huimv.service.impl;
+
+import com.huimv.eartag.monitor.service.IClientDataPacketService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+@Slf4j
+public class ClientDataPacketServiceImpl implements IClientDataPacketService {
+
+    @Autowired
+    private ReceivePackageSerivce receivePackageSerivce;
+    @Autowired
+    private SendPackageService sendPackageService;
+
+    @Override
+    public String handleClientSendPacket(String clientMessageTxt) throws ParseException {
+        if (clientMessageTxt == null || clientMessageTxt.isEmpty()) {
+            log.error("本地提交数据包为空.");
+            return null;
+        }
+        String matcher = "[+]";
+//        String matcher = "\\+";
+        String[] clientMessageArray = clientMessageTxt.split(matcher);
+        String cmd = clientMessageArray[2];
+        log.info("本次执行命令>>" + cmd);
+        StringBuilder echoResultSb = new StringBuilder();
+        // 校验后边再做;
+        if (Integer.parseInt(cmd) == 1) {
+            // 绑定序列号返回的设备id
+            return sendPackageService.getDeviceId(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 2) {
+            // 处理获取服务器时间
+            return sendPackageService.getServerDateTime(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 3) {
+            // 处理心跳包
+            return sendPackageService.getHeartbeatBag(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 4) {
+            // 处理温度上传
+            return receivePackageSerivce.handleEartagTemperature(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 5) {
+            // 处理湿度上传
+            return receivePackageSerivce.handleEartagDampness(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 6) {
+            // 处理耳标数据
+            System.out.println("处理耳标数据");
+            System.out.println(clientMessageTxt);
+            return receivePackageSerivce.handleEartagData(clientMessageArray).toString();
+
+        } else {
+            log.error("出错:当前命令cmd>>[" + cmd + "]未做任何处理.");
+            return null;
+        }
+    }
+
+}

+ 46 - 0
huimv-smart-eartagdata-recive/src/main/java/com/huimv/socket/Server.java

@@ -0,0 +1,46 @@
+package com.huimv.socket;
+
+
+
+import com.huimv.service.IClientDataPacketService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+@Component
+public class Server implements CommandLineRunner {
+
+    @Autowired
+    private IClientDataPacketService iClientDataPacketService;
+
+    @Override
+    public void run(String... args) throws Exception {
+        try {
+
+            // 初始化服务端socket连接, 并监听8888端口的socket请求
+            ServerSocket serverSocket = new ServerSocket(8888);
+
+            System.out.println("****** I am Server, now begin to wait the client ******");
+
+            int count = 0;
+
+            // 处理socket请求
+            Socket socket = null;
+            while (true) {
+                socket = serverSocket.accept();
+                ServerThread serverThread = new ServerThread(socket, iClientDataPacketService);
+                System.out.println("client host address is: " + socket.getInetAddress().getHostAddress());
+                serverThread.start();
+                count++;
+                System.out.println("now client count is: " + count);
+
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 81 - 0
huimv-smart-eartagdata-recive/src/main/java/com/huimv/socket/ServerThread.java

@@ -0,0 +1,81 @@
+package com.huimv.socket;
+
+
+import com.huimv.eartag.monitor.service.IClientDataPacketService;
+
+import java.io.*;
+import java.net.Socket;
+import java.text.ParseException;
+
+//@Component
+public class ServerThread extends Thread {
+
+    private Socket socket;
+   // @Autowired
+    private IClientDataPacketService iClientDataPacketService;
+
+    public ServerThread(Socket socket,IClientDataPacketService iClientDataPacketService) {
+        this.socket = socket;
+        this.iClientDataPacketService = iClientDataPacketService;
+    }
+
+    @Override
+    public void run() {
+        InputStream inputStream = null;
+        InputStreamReader inputStreamReader = null;
+        BufferedReader bufferedReader = null;
+        OutputStream outputStream = null;
+        PrintWriter printWriter = null;
+
+        try {
+
+            // server接收消息
+            inputStream = socket.getInputStream();
+
+
+            inputStream = socket.getInputStream();
+            byte[] b = new byte[1024];
+            inputStream.read(b);
+            String packet = new String(b);
+
+            int i = packet.indexOf("+", packet.indexOf("+") + 1);
+            //int ver = Integer.parseInt(packet.substring(i + 1, i + 2));
+            outputStream = socket.getOutputStream();
+            packet = packet.trim();
+            // 处理数据包
+             String ss = iClientDataPacketService.handleClientSendPacket(packet);
+
+            outputStream.write(ss.getBytes());
+
+            socket.shutdownInput();
+
+        } catch (IOException | ParseException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            try {
+                if (printWriter != null) {
+                    printWriter.close();
+                }
+                if (outputStream != null) {
+                    outputStream.close();
+
+                }
+                if (bufferedReader != null) {
+                    bufferedReader.close();
+                }
+                if (inputStreamReader != null) {
+                    inputStreamReader.close();
+                }
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+                if (socket != null) {
+                    socket.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 10 - 0
huimv-smart-management/pom.xml

@@ -47,6 +47,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+
+
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.2.3</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+
+
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>

+ 7 - 1
huimv-smart-management/src/main/java/com/huimv/management/HuimvSmartManagementApplication.java

@@ -4,8 +4,11 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.client.RestTemplate;
 
+
+
 /**
  * @author yinhao
  * @version 1.0
@@ -13,15 +16,18 @@ import org.springframework.web.client.RestTemplate;
  */
 @SpringBootApplication
 @MapperScan(value = "com.huimv.management.dao")
+@EnableScheduling
 public class HuimvSmartManagementApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(HuimvSmartManagementApplication.class, args);
     }
 
-
     @Bean("restTemplate")
     public RestTemplate getRestTemplate(){
         return new RestTemplate();
     }
+
+
+
 }

+ 2 - 0
huimv-smart-management/src/main/java/com/huimv/management/dao/ThresholdManagementDao.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huimv.management.entity.vo.ThresholdManagementVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 /**
  * 
@@ -16,6 +17,7 @@ import org.apache.ibatis.annotations.Param;
  * @date 2021-06-15 13:01:37
  */
 @Mapper
+@Repository
 public interface ThresholdManagementDao extends BaseMapper<ThresholdManagementEntity> {
 
     /**

+ 1 - 0
huimv-smart-management/src/main/java/com/huimv/management/service/ThresholdManagementService.java

@@ -17,6 +17,7 @@ import java.util.Map;
  */
 public interface ThresholdManagementService extends IService<ThresholdManagementEntity> {
 
+
     /**
      * 分页列表查询
      * @param params

+ 46 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/Server.java

@@ -0,0 +1,46 @@
+package com.huimv.management.socket;
+
+
+
+import com.huimv.management.socket.eartagrecive.service.IClientDataPacketService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+@Component
+public class Server implements CommandLineRunner {
+
+    @Autowired
+    private IClientDataPacketService iClientDataPacketService;
+
+    @Override
+    public void run(String... args) throws Exception {
+        try {
+
+            // 初始化服务端socket连接, 并监听8888端口的socket请求
+            ServerSocket serverSocket = new ServerSocket(8888);
+
+            System.out.println("****** I am Server, now begin to wait the client ******");
+
+            int count = 0;
+
+            // 处理socket请求
+            Socket socket = null;
+            while (true) {
+                socket = serverSocket.accept();
+                ServerThread serverThread = new ServerThread(socket, iClientDataPacketService);
+                System.out.println("client host address is: " + socket.getInetAddress().getHostAddress());
+                serverThread.start();
+                count++;
+                System.out.println("now client count is: " + count);
+
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 83 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/ServerThread.java

@@ -0,0 +1,83 @@
+package com.huimv.management.socket;
+
+
+
+
+import com.huimv.management.socket.eartagrecive.service.IClientDataPacketService;
+
+import java.io.*;
+import java.net.Socket;
+import java.text.ParseException;
+
+//@Component
+public class ServerThread extends Thread {
+
+    private Socket socket;
+   // @Autowired
+    private IClientDataPacketService iClientDataPacketService;
+
+    public ServerThread(Socket socket,IClientDataPacketService iClientDataPacketService) {
+        this.socket = socket;
+        this.iClientDataPacketService = iClientDataPacketService;
+    }
+
+    @Override
+    public void run() {
+        InputStream inputStream = null;
+        InputStreamReader inputStreamReader = null;
+        BufferedReader bufferedReader = null;
+        OutputStream outputStream = null;
+        PrintWriter printWriter = null;
+
+        try {
+
+            // server接收消息
+            inputStream = socket.getInputStream();
+
+
+            inputStream = socket.getInputStream();
+            byte[] b = new byte[1024];
+            inputStream.read(b);
+            String packet = new String(b);
+
+            int i = packet.indexOf("+", packet.indexOf("+") + 1);
+            //int ver = Integer.parseInt(packet.substring(i + 1, i + 2));
+            outputStream = socket.getOutputStream();
+            packet = packet.trim();
+            // 处理数据包
+             String ss = iClientDataPacketService.handleClientSendPacket(packet);
+
+            outputStream.write(ss.getBytes());
+
+            socket.shutdownInput();
+
+        } catch (IOException | ParseException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            try {
+                if (printWriter != null) {
+                    printWriter.close();
+                }
+                if (outputStream != null) {
+                    outputStream.close();
+
+                }
+                if (bufferedReader != null) {
+                    bufferedReader.close();
+                }
+                if (inputStreamReader != null) {
+                    inputStreamReader.close();
+                }
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+                if (socket != null) {
+                    socket.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 11 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/constant/CofigConstant.java

@@ -0,0 +1,11 @@
+package com.huimv.management.socket.eartagrecive.constant;
+
+public class CofigConstant {
+
+
+
+    //数据上传时间间隔  目前 5秒
+    public static final int UPDATA_TIME_GAP = 5000;
+
+
+}

+ 19 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/constant/EarTagThresholdConstant.java

@@ -0,0 +1,19 @@
+package com.huimv.management.socket.eartagrecive.constant;
+
+/**
+ * @Author Anchor
+ * @Date 2021/7/16 16:19
+ * @Version 1.0.1
+ */
+public class EarTagThresholdConstant {
+
+    public static  Double   Ear_Tag_Max_TEMP_VALU = 39.0 ;//新建
+    public static  Double   Ear_Tag_Min_TEMP_VALU = 36.0;// 进行中
+    public static  Double   Ear_Tag_Min_Power_VALU = 10.0; // 结束
+
+
+
+
+
+
+}

+ 17 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/IClientDataPacketService.java

@@ -0,0 +1,17 @@
+package com.huimv.management.socket.eartagrecive.service;
+
+import org.springframework.stereotype.Repository;
+
+import java.text.ParseException;
+
+
+@Repository
+public interface IClientDataPacketService {
+
+    // 解析客户端数据包
+    public String handleClientSendPacket(String clientMessage) throws ParseException;
+
+
+
+
+}

+ 66 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/ClientDataPacketServiceImpl.java

@@ -0,0 +1,66 @@
+package com.huimv.management.socket.eartagrecive.service.impl;
+
+import com.huimv.management.socket.eartagrecive.service.IClientDataPacketService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+/**
+ * @Project : huimv.ql
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+
+@Service
+@Slf4j
+public class ClientDataPacketServiceImpl implements IClientDataPacketService {
+
+    @Autowired
+    private ReceivePackageSerivce receivePackageSerivce;
+
+    @Autowired
+    private SendPackageService sendPackageService;
+
+    @Override
+    public String handleClientSendPacket(String clientMessageTxt) throws ParseException {
+        if (clientMessageTxt == null || clientMessageTxt.isEmpty()) {
+            log.error("本地提交数据包为空.");
+            return null;
+        }
+        String matcher = "[+]";
+        String[] clientMessageArray = clientMessageTxt.split(matcher);
+        String cmd = clientMessageArray[2];
+        log.info("本次执行命令>>" + cmd);
+        StringBuilder echoResultSb = new StringBuilder();
+        // 校验后边再做;
+        if (Integer.parseInt(cmd) == 1) {
+            // 绑定序列号返回的设备id
+            return sendPackageService.getDeviceId(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 2) {
+            // 处理获取服务器时间
+            return sendPackageService.getServerDateTime(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 3) {
+            // 处理心跳包
+            return sendPackageService.getHeartbeatBag(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 4) {
+            // 处理温度上传
+            return receivePackageSerivce.handleEartagTemperature(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 5) {
+            // 处理湿度上传
+            return receivePackageSerivce.handleEartagDampness(clientMessageArray);
+        } else if (Integer.parseInt(cmd) == 6) {
+            // 处理耳标数据
+            System.out.println("处理耳标数据");
+            System.out.println(clientMessageTxt);
+            return receivePackageSerivce.handleEartagData(clientMessageArray).toString();
+        } else {
+            log.error("出错:当前命令cmd>>[" + cmd + "]未做任何处理.");
+            return null;
+        }
+    }
+
+}

+ 450 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/ReceivePackageSerivce.java

@@ -0,0 +1,450 @@
+package com.huimv.management.socket.eartagrecive.service.impl;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.management.dao.EartagDataDao;
+import com.huimv.management.dao.ThresholdManagementDao;
+import com.huimv.management.dao.YearPigBaseDao;
+import com.huimv.management.entity.EartagDataEntity;
+import com.huimv.management.entity.ThresholdManagementEntity;
+import com.huimv.management.entity.WarningInfoEntity;
+import com.huimv.management.entity.YearPigBaseEntity;
+import com.huimv.management.service.*;
+import com.huimv.management.socket.eartagrecive.constant.CofigConstant;
+import com.huimv.management.socket.eartagrecive.constant.EarTagThresholdConstant;
+import com.huimv.management.util.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.*;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+
+/**
+ * @Project : huimv.ql
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Slf4j
+@Component
+public class ReceivePackageSerivce {
+
+
+    //耳标数据查询
+    @Autowired
+    private EartagDataService eartagDataService;
+
+    @Autowired
+    private EartagDataDao eartagDataDao ;
+
+
+    @Autowired
+    private YearPigBaseDao  yearPigBaseDao ;
+
+
+    @Autowired
+    private ThresholdManagementDao thresholdManagementDao;
+
+    @Autowired
+    private WarningInfoService warningInfoService;
+
+
+    public String handleEartagData(String[] clientMessageArray) throws ParseException {
+
+        log.info("开始添加耳标数据......");
+
+        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 environment_temp_newAdd= (double) Integer.parseInt(environment_temp) / 100;
+        System.out.println("环境温度初值" + environment_temp);
+        //19944 用来计算耳标温度
+        String ntc = clientMessageArray[9];
+        //当前运动量
+        String ydl = clientMessageArray[10];
+
+
+        //数据库CMD字段没什么用,用来放环境温度了
+        //计算区间运动量 --查找区间运动量
+        //由于机器矫正时间或发生时间翻转问题,造成负运动量,因此直接清洗掉这些数据
+         washDirtyRecord(eartagId);
+
+         //判断年猪表中是否有这一只耳标的数据
+        LambdaQueryWrapper<YearPigBaseEntity> wrapper1 = Wrappers.lambdaQuery();
+        wrapper1.eq(YearPigBaseEntity::getEartag, eartagId );
+        YearPigBaseEntity yearPigBaseEntity = yearPigBaseDao.selectOne(wrapper1);
+         if (yearPigBaseEntity==null){
+             System.out.println("年猪登记表中没有这只猪的信息,请先注册");
+             return "年猪登记表中没有这只猪的信息,请先注册";
+         }
+
+
+        //判断是否进行报警
+       setWarningInfo(eartagId, ln(Integer.parseInt(ntc)), dl);
+        //查最后一条
+        LambdaQueryWrapper<EartagDataEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(EartagDataEntity::getEartagId, eartagId ).orderByDesc( EartagDataEntity::getId ).last( "limit 1");
+        EartagDataEntity   lastEarTagDate = eartagDataDao.selectOne(wrapper);
+
+        //第二:防止数据有太大的波动,需要对时间进行处理,有时候时间会发生跳动
+        //获取两条数据时间差  查过去五秒
+        String date = "";
+        if (lastEarTagDate == null) {
+            Date date1 = DateUtils.getPassedsecond();
+            date = date1.toString();
+            System.out.println("自动获取时间为" + date);
+        } else {
+            date = lastEarTagDate.getCreateTime().toString();
+        }
+
+        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];
+
+        EartagDataEntity eartagDataEntity = new EartagDataEntity();
+        eartagDataEntity.setSleepGap(0);
+        int save_date ;   //计算结束之后的平均运动量的值   平均运动量
+        if (lastEarTagDate == null) {
+            //运动量为空自己造数据
+            System.out.println("运动量为空,新运动量" + ydl + "---老运动量为空");
+             save_date = (int) (10 / second);
+            System.out.println("存储平均运动量" + save_date);
+            eartagDataEntity.setGapSport(save_date);
+            //setSleepGap---这个是睡眠区间结束的标志位,当上一条为睡眠,这一条为运动时,设置一个睡眠周期结束,将上一条睡眠的这个标志位置为1
+
+            eartagDataEntity.setSleepStatus(0);//统一不算睡眠
+        } else if (Integer.parseInt(ydl) - lastEarTagDate.getCountSport()>= 0) {
+             //存在翻转的情况,数据从 6000 突然变成3这种情况
+            System.out.println("运动量还未翻转,新运动量" + ydl + "---老运动量" + lastEarTagDate.getCountSport());
+            save_date = (int) Math.ceil((Integer.parseInt(ydl) -lastEarTagDate.getCountSport()) / second);
+            System.out.println("存储平均运动量" + save_date);
+            eartagDataEntity.setGapSport(save_date);
+            int sleepstatus = save_date  >= 1 ?    0:1;
+            eartagDataEntity.setSleepStatus(sleepstatus);
+            //同时间处理睡眠时间
+        } else {
+            System.out.println("运动量翻转,新运动量" + ydl + "---老运动量" + lastEarTagDate.getCountSport());
+            save_date = (int) Math.ceil(Integer.parseInt(ydl) / second);
+            System.out.println("存储平均运动量" + save_date);
+            eartagDataEntity.setGapSport(save_date);
+            int sleepstatus = save_date  >=1 ?   0:1;
+            eartagDataEntity.setSleepStatus(sleepstatus);
+        }
+        //判断睡眠时间,进行处理   192.168.1.171 8888
+        //所有区间结束时间都为当前时间,因此不用纠结
+        eartagDataEntity.setSleepEnd(DateUtils.parseDateTime(DateUtils.buildDateTimeString(timestamp )));
+        //若之前的数据为空,新数据开始结束都为当前时间,区间睡眠设置为运动
+        if (lastEarTagDate == null) {
+            eartagDataEntity.setSleepGap(0);//设置为0 只有检测到睡眠结束的时候将其设置为1
+            eartagDataEntity.setSleepBegin(DateUtils.parseDateTime(DateUtils.buildDateTimeString(timestamp )));
+            //存在翻转的情况,数据从 6000 突然变成3这种情况
+            //1.没有翻转
+        } else if (Integer.parseInt(ydl) - lastEarTagDate.getCountSport()>= 0) {
+            //1.有历史数据,而且这一条为运动
+           if ( save_date >=1 ){  //这一为运动
+               //当前设已经设置成运动 ,查看上一条状态
+               //1.上一条也为运动
+               if(lastEarTagDate.getSleepStatus()==0){
+                    //将开始时间,结束时间都设置为当前时间
+                    eartagDataEntity.setSleepBegin(DateUtils.parseDateTime(DateUtils.buildDateTimeString(timestamp )));
+                }else {
+                    //上一条为睡眠,这一条为运动.有且只有这种情况,睡眠状态会计算为1
+                    eartagDataEntity.setSleepBegin(DateUtils.parseDateTime(DateUtils.buildDateTimeString(timestamp )));
+                    //同时上一条数据是一个睡眠阶段结束,将上一个周期睡眠结束标志置为1
+                     lastEarTagDate.setSleepGap(1);
+                    //存储睡眠时间..传入上一条的开始时间,结束时间.通过方法计算后存储粗--放到remark 字段
+                     lastEarTagDate.setRemark(calculatetimegap(lastEarTagDate.getSleepBegin(),lastEarTagDate.getSleepEnd()) );
+                     //上一条数据标志位改变,需要重新保存一下
+                    eartagDataService.save(lastEarTagDate);
+                }
+               }else {  //若这一条为睡眠
+               if(lastEarTagDate.getSleepStatus()==0){//上一条为运动
+                   eartagDataEntity.setSleepBegin(lastEarTagDate.getSleepEnd());//开始时间用上一条结束时间
+               }else {//上一条为睡眠--这一条还是睡眠,睡眠结束标志位为0
+                   eartagDataEntity.setSleepBegin(lastEarTagDate.getSleepBegin());//开始时间用上一条结束时间
+               }
+           }
+        }
+            //同时间处理睡眠时间
+               //2.有翻转
+        eartagDataEntity.setMessageHead(commandHeader);
+        eartagDataEntity.setMessageCmd(cmd);
+        eartagDataEntity.setBoxInsideTemp(25.0);
+        eartagDataEntity.setBoxId(deviceId);
+        eartagDataEntity.setBoxVersion(version);
+        eartagDataEntity.setEartagId(eartagId);
+        eartagDataEntity.setEartagPower(Integer.parseInt(dl));
+        eartagDataEntity.setEartagTemp(ln(Integer.parseInt(ntc)));
+        eartagDataEntity.setNtc(Integer.parseInt(ntc));
+        eartagDataEntity.setCountSport(Integer.parseInt(ydl));
+        eartagDataEntity.setRssyi(Integer.parseInt(rssi));
+        eartagDataEntity.setCreateTime(DateUtils.parseDateTime(DateUtils.buildDateTimeString(timestamp)));
+        eartagDataEntity.setCheckNumber(Integer.parseInt(checkNumber));
+        eartagDataEntity.setEnvironmentTemp(environment_temp_newAdd);
+        eartagDataEntity.setFarmName(yearPigBaseEntity.getFarmId());
+        eartagDataEntity.setMessageEnd("end");
+        eartagDataService.save(eartagDataEntity);
+        return "hm+6+0+6+end";
+
+    }
+
+
+    public static String swapHex(String src) {
+        String target = "";
+        for (int i = src.length() - 1; i > 0; i -= 2) {
+            target += src.substring(i - 1, i + 1);
+        }
+        return target;
+    }
+
+    public static String numberFormater(double d) {
+        DecimalFormat nf = new DecimalFormat();
+        nf.setMaximumFractionDigits(2);
+        return nf.format(d);
+    }
+
+    public static double A = 0.00335396319311466;
+    public static double B = 0.000256376549039663;
+    public static double C = 0.00000248933580817244;
+    public static double D = 0.0000000753805242068686;
+    public static double E = -0.0000000204758173596178;
+
+    //保留一位小数
+    public static double changeDouble(Double dou) {
+        NumberFormat nf = new DecimalFormat("0.0 ");
+        dou = Double.parseDouble(nf.format(dou));
+        return dou;
+    }
+
+    //温度转换
+    public static double ln(int rv) {
+        int R_REF = 10000;
+        double ln = Math.log((double) rv / R_REF);
+        //保留一位小数
+        return changeDouble(1 / (A + B * ln + C * Math.pow(ln, 2) + D * Math.pow(ln, 3) + E * Math.pow(ln, 4)) - 273.15);
+    }
+
+
+    //由于机器矫正时间或发生时间翻转问题,造成负运动量,因此直接清洗掉这些数据
+    public  void washDirtyRecord(String  eartagId ){
+        LambdaQueryWrapper<EartagDataEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(EartagDataEntity::getEartagId, eartagId ).orderByDesc( EartagDataEntity::getId ).last( "limit 5");
+        List<EartagDataEntity>  EartagDataEntityList = eartagDataDao.selectList(wrapper);
+        if (EartagDataEntityList != null) {
+            for (EartagDataEntity eartagData : EartagDataEntityList) {
+                if (eartagData.getGapSport() < 0 || eartagData.getGapSport() > 15 || eartagData.getGapSport() < 0) {
+                    eartagDataService.removeById(eartagData.getId());
+                    log.info("删除了脏一条数据");
+                }
+            }
+        }else{
+            System.out.println("没有脏数据");
+        }
+    }
+
+
+    //进行高温低温以及电量报警
+    public void setWarningInfo(String eartagId , double eartagtemp , String eartagPower   ) throws ParseException {
+        LambdaQueryWrapper<YearPigBaseEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(YearPigBaseEntity::getEartag, eartagId );
+        YearPigBaseEntity yearPigBaseEntity = yearPigBaseDao.selectOne(wrapper);
+
+       //新阈值方法//设置为1
+      //  Map<String, Double>  ThreadHold = getThreadHold(yearPigBaseEntity.getFarmId()); //放的1  目前.传入牧场ID获取专属阈值
+        Map<String, Double>  ThreadHold = getThreadHold(1); //放的1  目前.传入牧场ID获取专属阈值
+
+        //三元表达式,防止报警表没有对应的值.没有对应值就用默认值
+        Double highTemp = ThreadHold.get("耳标温度高阈值")==null ?  EarTagThresholdConstant.Ear_Tag_Max_TEMP_VALU :   ThreadHold.get("耳标温度高阈值");
+        Double lowTemp = ThreadHold.get("耳标温度低阈值")==null ? EarTagThresholdConstant.Ear_Tag_Min_TEMP_VALU :   ThreadHold.get("耳标温度低阈值");
+        Double  powerValu= ThreadHold.get("耳标电量低阈值")==null ?  EarTagThresholdConstant.Ear_Tag_Min_Power_VALU :   ThreadHold.get("耳标电量低阈值");
+
+
+
+        if (eartagtemp > highTemp|| eartagtemp < lowTemp||  Double.parseDouble(eartagPower) < powerValu) {
+
+            System.out.println("耳标号为"+eartagId+yearPigBaseEntity.toString());
+            WarningInfoEntity  WarningInfo = new WarningInfoEntity();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
+            String TimeNow = sdf.format(Calendar.getInstance().getTime());
+            Date parse = sdf.parse(TimeNow);
+            WarningInfo.setNowDate(parse);
+            WarningInfo.setFarmId(1);
+            System.out.println("牧场编号====>"+yearPigBaseEntity.getFarmId());
+            WarningInfo.setPigstyId(yearPigBaseEntity.getPigstyId());
+            System.out.println("猪舍编号====>"+yearPigBaseEntity.getPigstyId());
+            WarningInfo.setUnitId(yearPigBaseEntity.getUnitId());
+            WarningInfo.setEarTag(eartagId);
+            WarningInfo.setWarningTime(new Date());
+            WarningInfo.setVerifyStatus(true);
+
+            if (eartagtemp > highTemp) {
+                System.out.println("存储耳标温度过高报警");
+                //存储报警类型
+                WarningInfo.setNowValue(eartagtemp);
+                WarningInfo.setWarningType( "耳标温度高阈值");
+                //所属范围 1.室内 2.室外 3.体温
+                WarningInfo.setBelongTo((short) 3);
+                 warningInfoService.save(WarningInfo);
+            }
+            if (eartagtemp < lowTemp) {
+                WarningInfo.setNowValue(eartagtemp);
+                System.out.println("存猪只耳标温度过低报警");
+                //存储报警类型
+                WarningInfo.setWarningType("耳标温度低阈值");
+                //所属范围 1.室内 2.室外 3.体温
+                WarningInfo.setBelongTo((short) 3);
+                warningInfoService.save(WarningInfo);
+            }
+            if ( Double.parseDouble(eartagPower) < powerValu) {
+                WarningInfo.setNowValue(Double.parseDouble(eartagPower));
+                System.out.println("存储低电量报警");
+                //存储报警类型
+                WarningInfo.setWarningType("耳标电量低阈值");
+                //所属范围 1.室内 2.室外 3.体温
+                WarningInfo.setBelongTo((short) 3);
+                warningInfoService.save(WarningInfo);
+            }
+        }
+    }
+
+
+
+    //存储上传的时间间隔
+public String calculatetimegap(Date beginDate, Date endDate){
+
+    LocalDateTime inDate1= LocalDateTime.ofInstant(beginDate.toInstant(), ZoneId.systemDefault());
+    LocalDateTime nowDate1= LocalDateTime.ofInstant(endDate.toInstant(), ZoneId.systemDefault());
+
+    Duration duration = java.time.Duration.between(inDate1, nowDate1);
+     log.info("时间差:" + duration.getSeconds());
+    long hour = duration.getSeconds() / ChronoUnit.HOURS.getDuration().getSeconds();
+    long minute = (duration.getSeconds() - ChronoUnit.HOURS.getDuration().getSeconds() * hour) / ChronoUnit.MINUTES.getDuration().getSeconds();
+    long second = (duration.getSeconds() - ChronoUnit.HOURS.getDuration().getSeconds() * hour) - minute * ChronoUnit.MINUTES.getDuration().getSeconds();
+    log.info("时间:" + hour + "小时" + minute + "分" + second+"秒");
+    return  hour + "小时" + minute + "分" + second+"秒";
+}
+
+
+    //获取阈值   牧场ID是有用的,需要判断是哪个牧场的阈值数据
+    public Map<String, Double> getThreadHold(int farmId) {
+        //ThresholdManagementEntity
+        LambdaQueryWrapper<ThresholdManagementEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(ThresholdManagementEntity::getDeleted, 0);//未删除的阈值
+        wrapper.eq(ThresholdManagementEntity::getBelongTo, 1);//室 的阈值
+        wrapper.eq(ThresholdManagementEntity::getFarmId, farmId);//室外的阈值
+        List<ThresholdManagementEntity> thresholdManagementEntityList = thresholdManagementDao.selectList(wrapper);
+
+        Map<String, Double> thresholdManagementEntityMap = new HashMap<>();
+        for (ThresholdManagementEntity c : thresholdManagementEntityList) {
+            thresholdManagementEntityMap.put(c.getThresholdType(), c.getThresholdValue());
+        }
+        return thresholdManagementEntityMap;
+    }
+
+
+    /**
+     * @Method : _handleEartagDampness
+     * @Description : 处理网关湿度
+     * @Params : [clientMessageArray]
+     * @Return : java.lang.String
+     * @Author : ZhuoNing
+     * @Date : 2021/1/15
+     * @Time : 17:47
+     */
+    public String handleEartagDampness(String[] clientMessageArray) throws ParseException {
+  /*      String header = clientMessageArray[0];
+        String deviceId = clientMessageArray[1];
+        String cmd = clientMessageArray[2];
+        String serialNo = clientMessageArray[3];
+        String value = clientMessageArray[4];
+        String timestamp = clientMessageArray[5];
+        String checkCode = clientMessageArray[6];
+        String tail = clientMessageArray[7];
+        EartagDampness eartagDampnessPojo = new EartagDampness();
+        eartagDampnessPojo.setHeader(header);
+        eartagDampnessPojo.setDeviceId(Integer.parseInt(deviceId));
+        eartagDampnessPojo.setCmd(Integer.parseInt(cmd));
+        eartagDampnessPojo.setSerialNo(Integer.parseInt(serialNo));
+        eartagDampnessPojo.setValue(Double.parseDouble(value));
+        eartagDampnessPojo.setCreateDate(DateUtil.parseDateTime(DateUtil.buildDateTimeString(timestamp)));
+        eartagDampnessPojo.setCheckNumber(Integer.parseInt(checkCode));
+        eartagDampnessPojo.setTail(tail);
+        dampnessMapper.insert(eartagDampnessPojo);
+//        dampnessService.add(eartagDampnessPojo);
+        log.info(Const.SAVE_DAMPNESS_SUCCESS);*/
+        return "hm+5+0+8+end";
+    }
+
+
+
+    /**
+     * @Method : _handleEartagTemperature
+     * @Description : 处理网关温度
+     * @Params : [clientMessageArray]
+     * @Return : java.lang.String
+     * @Author : ZhuoNing
+     * @Date : 2021/1/15
+     * @Time : 17:46
+     */
+    public String handleEartagTemperature(String[] clientMessageArray) throws ParseException {
+       /* String header = clientMessageArray[0];
+        String deviceId = clientMessageArray[1];
+        String cmd = clientMessageArray[2];
+        String serialNo = clientMessageArray[3];
+        String value = clientMessageArray[4];
+        String timestamp = clientMessageArray[5];
+        String checkCode = clientMessageArray[6];
+        String tail = clientMessageArray[7];
+        EartagTemperature EartagTemperaturePojo = new EartagTemperature();
+        EartagTemperaturePojo.setHeader(header);
+        EartagTemperaturePojo.setDeviceId(Integer.parseInt(deviceId));
+        EartagTemperaturePojo.setCmd(Integer.parseInt(cmd));
+        EartagTemperaturePojo.setSerialNo(Integer.parseInt(serialNo));
+        EartagTemperaturePojo.setValue(Double.parseDouble(value) / 10);
+        EartagTemperaturePojo.setCreateDate(DateUtil.parseDateTime(DateUtil.buildDateTimeString(timestamp)));
+        EartagTemperaturePojo.setCheckNumber(Integer.parseInt(checkCode));
+        EartagTemperaturePojo.setTail(tail);
+        temperatureMapper.insert(EartagTemperaturePojo);
+//        temperatureService.add(EartagTemperaturePojo);
+        log.info(Const.SAVE_TEMPERATURE_SUCCESS);*/
+        return "hm+4+0+7+end";
+    }
+
+}

+ 72 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/SendPackageService.java

@@ -0,0 +1,72 @@
+package com.huimv.management.socket.eartagrecive.service.impl;
+
+
+import com.huimv.management.socket.eartagrecive.util.DateUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Component
+public class SendPackageService {
+
+   /* @Autowired
+    private JqidService jqidService;
+*/
+    /**
+     * @Method      : _handleGetDeviceId
+     * @Description : 获取设备id
+     * @Params      : [clientMessageArray]
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/15
+     * @Time        : 17:41
+     */
+    public String getDeviceId(String[] clientMessageArray) {
+        String serialNo = clientMessageArray[1];
+        System.out.println("serialNo>>"+serialNo);
+        // 查询机器id  没有查询了,取消
+       // String jqid = jqidService.findDeviceIdByJQcode(serialNo);
+
+        return "hm+1+0+158+123+8+end";
+    }
+
+    /**
+     * @Method      : _handleGetServerDateTime
+     * @Description : 获取获取服务器日期时间
+     * @Params      : [clientMessageArray]
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/15
+     * @Time        : 17:38
+     */
+    public String getServerDateTime(String[] clientMessageArray) {
+        //
+        String formatNow = DateUtil.getNowWithDigital();
+       // hm+2+20170203094133+4+end
+        return "hm+2+"+formatNow+"+4+end";
+    }
+
+
+
+    /**
+     * @Method      : _handleGetHeartbeatBag
+     * @Description : 获取心跳包
+     * @Params      : [clientMessageArray]
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/15
+     * @Time        : 17:38
+     */
+    public String getHeartbeatBag(String[] clientMessageArray) {
+        return "hm+3+0+6+end";
+    }
+}

+ 25 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/service/impl/SleepTimeCalculate.java

@@ -0,0 +1,25 @@
+package com.huimv.management.socket.eartagrecive.service.impl;
+
+/**
+ * @Author Anchor
+ * @Date 2021/7/20 14:42
+ * @Version 1.0.1
+ * 计算睡眠时间,通过传入上一上一次的运动量的值,以及睡眠统计时间来计算新的睡眠时间存储标志位
+ */
+public class SleepTimeCalculate {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 68 - 0
huimv-smart-management/src/main/java/com/huimv/management/socket/eartagrecive/util/DateUtil.java

@@ -0,0 +1,68 @@
+package com.huimv.management.socket.eartagrecive.util;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+public class DateUtil {
+    public DateUtil() {
+    }
+
+    public static String getNowWithDigital() {
+        Date now = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(now).replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
+    }
+
+    public static String buildDateTimeString(String formatContent) {
+        String year = formatContent.substring(0, 4);
+        String month = formatContent.substring(4, 6);
+        String day = formatContent.substring(6, 8);
+        String hour = formatContent.substring(8, 10);
+        String minute = formatContent.substring(10, 12);
+        String seconds = formatContent.substring(12, 14);
+        StringBuilder dateTimeSb = new StringBuilder();
+        return dateTimeSb.append(year).append("-").append(month).append("-").append(day).append(" ").append(hour).append(":").append(minute).append(":").append(seconds).toString();
+    }
+
+    public static String buildDateString(String formatContent) {
+        String year = formatContent.substring(0, 4);
+        String month = formatContent.substring(4, 6);
+        String day = formatContent.substring(6, 8);
+        String dateTime = year + "-" + month + "-" + day;
+        return dateTime;
+    }
+
+    public static String formatDateTime(String date) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
+        return sdf.format(date);
+    }
+
+    public static Date parseDateTime(String date) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.parse(date);
+    }
+
+    public String getToday() {
+        DateFormat df3 = DateFormat.getDateInstance(2, Locale.CHINA);
+        return df3.format(new Date());
+    }
+
+    public String formatDate(Date date) {
+        DateFormat df3 = DateFormat.getDateInstance(2, Locale.CHINA);
+        return df3.format(date);
+    }
+
+
+    public String beforeTime(int times) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(11, calendar.get(11) - times);
+        String endTime = sdf.format(calendar.getTime());
+        System.out.println("提前3小时:" + endTime);
+        return endTime;
+    }
+}

+ 157 - 0
huimv-smart-management/src/main/java/com/huimv/management/timertask/AirQualityIndexUtil.java

@@ -0,0 +1,157 @@
+package com.huimv.management.timertask;
+
+
+import net.sf.json.JSONObject;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author Anchor
+ * @Date 2021/7/16 10:30
+ * @Version 1.0.1
+ */
+public class AirQualityIndexUtil {
+
+
+
+    /**
+     * 天气情况查询接口地址
+     */
+    public static String API_URL = "http://apis.juhe.cn/simpleWeather/query";
+    /**
+     * 请求key  ---这个key是杨迪自己注册的.免费版.....希望公司后面买正式版
+     */
+    public static String API_KEY = "b9876f1d1eaec3ae987fcd54646060f7";
+    /*public static void main(String[] args) {
+        String cityName = "嘉兴";
+        queryWeather(cityName);
+    }*/
+    /**
+     * 根据城市名查询天气情况
+     *
+     * @param cityName
+     */
+    public  static   String  queryWeather(String cityName) {
+        //组合参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("city", cityName);
+        params.put("key", API_KEY);
+        String queryParams = urlEncode(params);
+        String response = doGet(API_URL, queryParams);
+        System.out.println(response);
+        try {
+            JSONObject jsonObject = JSONObject.fromObject(response);
+            int errorCode = jsonObject.getInt("error_code");
+            if (errorCode == 0) {
+                System.out.println("调用接口成功");
+                JSONObject result = jsonObject.getJSONObject("result");
+                JSONObject realtime = result.getJSONObject("realtime");
+               /* System.out.printf("城市:%s%n", result.getString("city"));
+                System.out.printf("天气:%s%n", realtime.getString("info"));
+                System.out.printf("温度:%s%n", realtime.getString("temperature"));
+                System.out.printf("湿度:%s%n", realtime.getString("humidity"));
+                System.out.printf("风向:%s%n", realtime.getString("direct"));
+                System.out.printf("风力:%s%n", realtime.getString("power"));
+                System.out.printf("空气质量:%s%n", realtime.getString("aqi"));
+                */
+                return    realtime.getString("aqi");
+            } else {
+                System.out.println("调用接口失败:" + jsonObject.getString("reason"));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return   null;
+    }
+
+    /**
+     * get方式的http请求
+     *
+     * @param httpUrl 请求地址
+     * @return 返回结果
+     */
+    public static String doGet(String httpUrl, String queryParams) {
+        HttpURLConnection connection = null;
+        InputStream inputStream = null;
+        BufferedReader bufferedReader = null;
+        //返回结果字符串
+        String result = null;
+        try {
+            //创建远程url连接对象
+            URL url = new URL(new StringBuffer(httpUrl).append("?").append(queryParams).toString());
+            //通过远程url连接对象打开一个连接,强转成httpURLConnection类
+            connection = (HttpURLConnection) url.openConnection();
+            //设置连接方式:get
+            connection.setRequestMethod("GET");
+            //设置连接主机服务器的超时时间:5000毫秒
+            connection.setConnectTimeout(5000);
+            //设置读取远程返回的数据时间:6000毫秒
+            connection.setReadTimeout(6000);
+            //发送请求
+            connection.connect();
+            //通过connection连接,获取输入流
+            if (connection.getResponseCode() == 200) {
+                inputStream = connection.getInputStream();
+                //封装输入流,并指定字符集
+                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+                //存放数据
+                StringBuilder sbf = new StringBuilder();
+                String temp;
+                while ((temp = bufferedReader.readLine()) != null) {
+                    sbf.append(temp);
+                    sbf.append(System.getProperty("line.separator"));
+                }
+                result = sbf.toString();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            //关闭资源
+            if (null != bufferedReader) {
+                try {
+                    bufferedReader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != inputStream) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (connection != null) {
+                //关闭远程连接
+                connection.disconnect();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 将map型转为请求参数型
+     *
+     * @param data
+     * @return
+     */
+    public static String urlEncode(Map<String, ?> data) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<String, ?> i : data.entrySet()) {
+            try {
+                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        String result = sb.toString();
+        result = result.substring(0, result.lastIndexOf("&"));
+        return result;
+    }
+}

+ 19 - 0
huimv-smart-management/src/main/java/com/huimv/management/timertask/WarmDataDefaultConstant.java

@@ -0,0 +1,19 @@
+package com.huimv.management.timertask;
+
+/**
+ * @Author Anchor
+ * @Date 2021/7/16 10:27
+ * @Version 1.0.1
+ */
+
+//防止阈值表丢失,这里设置默认值
+public class WarmDataDefaultConstant {
+
+    public  static  Double Default_High_Temp_Set =35.0;
+    public  static  Double  Default_Low_Temp_Set  =10.0;
+    public  static  Double  Default_High_humidityValu_set =95.0;
+    public  static  Double  Default_Low_humidityValu_set  =25.0;
+    public  static  Double  Default_airqualityindex  =120.0;
+
+
+}

+ 252 - 0
huimv-smart-management/src/main/java/com/huimv/management/timertask/WeatherTimerTask.java

@@ -0,0 +1,252 @@
+package com.huimv.management.timertask;
+
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.management.dao.FarmDao;
+import com.huimv.management.dao.ThresholdManagementDao;
+import com.huimv.management.entity.*;
+import com.huimv.management.service.OutdoorEnvironmentService;
+import com.huimv.management.service.ThresholdManagementService;
+import com.huimv.management.service.WarningInfoService;
+import com.huimv.management.service.impl.FarmServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import java.nio.charset.Charset;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @Author Anchor
+ * @Date 2021/7/14 15:06
+ * @Version 1.0.1
+ *
+ * 定时刷新获取天气的定时任务
+ */
+
+@Component
+@SuppressWarnings("unused")
+@Slf4j
+public class WeatherTimerTask {
+
+    //临时设置为1
+    private static final int FARM_ID = 1;
+    //注入阈值表
+    @Autowired
+    private ThresholdManagementService thresholdManagementService;
+
+    @Autowired
+    private ThresholdManagementDao thresholdManagementDao;
+
+    @Autowired
+    private WarningInfoService warningInfoService;
+
+    @Autowired
+    private FarmServiceImpl farmService;
+
+    @Autowired
+    private FarmDao farmDao;
+
+    @Autowired
+    private OutdoorEnvironmentService  outdoorEnvironmentService;
+
+
+    //目前定义阈值在 mgt_threshold_management表   其中 belong_to =2  指外部环境
+    //库中  id=3
+    //gaowen:2   湿度2   空气质量
+    //每天零点更新时间    //测试通过
+    //@Scheduled(cron = "0 30 1 1 * ?")
+
+
+    @Scheduled(cron = " 0 30 0 * * ? ")  //每天凌晨执行
+    public  void getAndsetWeatherinfo() throws ParseException {
+
+        List<FarmEntity> farmEntities = getfarmInfo();
+        for (FarmEntity farmEntity : farmEntities) {
+            log.info("当前查询"+farmEntity.getName());
+            String[] location =  farmEntity.getFrontLocation().split(",");
+            String province =  location[0];
+            String city =  location[1];
+            String county = location[2];
+            int farmid =farmEntity.getId();
+            getEnvironmentData(province,city,county,farmid);
+        }
+    }
+
+
+    private void getEnvironmentData( String province ,  String city , String county,int farmid ) throws ParseException {
+
+        log.info("当前城市为=======>" +province+city+county);
+        //直接通过它计算出24小时之内的温蒂同时以一个新的数组存入表中,数据的取出和比较值后面进行
+        String url = "https://wis.qq.com/weather/common";
+        String param = "source=xw&weather_type=observe|forecast_1h|forecast_24h|index|alarm|limit|tips&province=" + province + "&city=" + city + "&county=" + county;
+        String result = HttpUtil.urlWithForm(url, param, Charset.defaultCharset(), true);
+        System.out.println(result);
+        String s = HttpUtil.get(result);
+        //对S进行解析,首先获取当天24小时的温度情况
+        JSONObject jsonObject = JSONObject.fromObject(s);
+        Object data = jsonObject.get("data");
+        JSONObject jsonData = JSONObject.fromObject(data);
+
+         Object forecastobject24hDetail = JSONObject.fromObject(jsonData.get("forecast_24h")).get("1"); //24小时天气预报的  “1”  为当天的天气预报
+
+         Object maxDegree = JSONObject.fromObject(forecastobject24hDetail).get("max_degree");//当天最高温
+         Object minDegree = JSONObject.fromObject(forecastobject24hDetail).get("min_degree");//当天最低温
+         Object humidityValu =  JSONObject.fromObject(jsonData.get("observe")).get("humidity");//湿度
+        log.info("湿度=======>" + humidityValu);
+        log.info("最高温====>" + maxDegree);
+        log.info("最低温====>" + minDegree);
+
+        //空气质量:这个需要调用聚合天气的接口来实现
+        String airQualityIndex = AirQualityIndexUtil.queryWeather( city.substring(0, city.length()-1));
+        log.info("空气质量为====>" + airQualityIndex);
+
+        JSONObject forecastByhour = JSONObject.fromObject(jsonData.get("forecast_1h"));  //获得逐小时数据并遍历
+
+         //存储对应数据  零点执行,对应的前24条数据为当天的数据
+        for (int i = 0; i <24; i++) {
+            System.out.println("逐小时数据为" + forecastByhour.get(String.valueOf(i)));
+            //现在需要将逐小时的气温数据存在表里面  //初步实现,裁剪
+            JSONObject HoureDate = JSONObject.fromObject(forecastByhour.get(String.valueOf(i)));
+             String timeString = (String)HoureDate.get("update_time");
+             //时间为这种格式,进行格式化处理   20210714180000
+             StringBuffer stringDate=new StringBuffer(timeString).insert(4,"-").insert(7,"-").insert(10," ").insert(13,":").insert(16,":");
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String TimeNow = sdf.format(Calendar.getInstance().getTime());
+            Date date = sdf.parse(String.valueOf(stringDate));
+            System.out.println(date);
+            //存储第二天逐小时天气预报以及信息
+            saveEnvironmentData(farmid, Double.parseDouble( (String)HoureDate.get("degree"))
+                           ,Double.parseDouble(String.valueOf(humidityValu)),  Double.parseDouble(String.valueOf(airQualityIndex)),date);
+        }
+        //存储全天信息报警信息
+        judgeWarningInfo(Double.parseDouble( String.valueOf(maxDegree)), Double.parseDouble(String.valueOf(minDegree)),
+                Double.parseDouble(String.valueOf(airQualityIndex)), Double.parseDouble(String.valueOf(humidityValu)), farmid);
+    }
+
+
+    //判断环境的详细信息
+    public void  saveEnvironmentData(  int farm_id ,Double temperature ,Double humidity ,Double air_quality ,Date date) {
+        //true正常   false 异常
+
+          Boolean abnormal_status =false;
+
+        Map<String, Double> environmentThreadHold = getEnvironmentThreadHold(farm_id); //放的1  目前.传入牧场ID获取专属阈值
+
+        //三元表达式,防止报警表没有对应的值
+
+        Double sethighTemp = environmentThreadHold.get("环境温度高温")==null ?  WarmDataDefaultConstant.Default_High_Temp_Set :   environmentThreadHold.get("环境温度高温");
+        Double setlowTemp = environmentThreadHold.get("环境温度低温")==null ? WarmDataDefaultConstant.Default_Low_Temp_Set :   environmentThreadHold.get("环境温度低温");
+        Double setHighHumidityValu = environmentThreadHold.get("环境湿度高阈值")==null ?  WarmDataDefaultConstant.Default_High_humidityValu_set :   environmentThreadHold.get("环境湿度高阈值");
+        Double setLowHumidityValu = environmentThreadHold.get("环境湿度低阈值")==null ?  WarmDataDefaultConstant.Default_Low_humidityValu_set:   environmentThreadHold.get("环境湿度低阈值");
+        Double setHAirqualityindex = environmentThreadHold.get("空气质量不达标阈值")==null ? WarmDataDefaultConstant.Default_airqualityindex :   environmentThreadHold.get("空气质量不达标阈值");
+
+        //1.全部合格设置为true
+        if (sethighTemp > temperature ||setlowTemp  < temperature || setHighHumidityValu  > humidity || setLowHumidityValu < humidity ||  setHAirqualityindex > air_quality) {
+              abnormal_status =true;
+        }
+        OutdoorEnvironmentEntity outdoorEnvironmentEntity = new OutdoorEnvironmentEntity();
+        outdoorEnvironmentEntity.setAbnormalStatus(abnormal_status);
+        outdoorEnvironmentEntity.setAirQuality(String.valueOf(air_quality));
+        outdoorEnvironmentEntity.setFarmId(farm_id);
+        outdoorEnvironmentEntity.setTemperature(temperature);
+        outdoorEnvironmentEntity.setHumidity(humidity);
+        outdoorEnvironmentEntity.setDate(date );
+        outdoorEnvironmentEntity.setCollectTime(new Date());
+        outdoorEnvironmentEntity.setCollectTime(date);
+
+        outdoorEnvironmentService.save(outdoorEnvironmentEntity);
+    }
+
+
+
+
+
+    //对-环境高温--环境低温--环境湿度过高--环境湿度过低--空气质量过差--进行比较,确定是否报警,并存在表里面
+    public void judgeWarningInfo(Double maxtemp, Double mintemp, Double airqualityindex, Double humidityValu, int farmId) throws ParseException {
+
+        Map<String, Double> environmentThreadHold = getEnvironmentThreadHold(farmId); //放的1  目前.传入牧场ID获取专属阈值
+
+          //三元表达式,防止报警表没有对应的值
+          Double sethighTemp = environmentThreadHold.get("环境温度高温")==null ?  WarmDataDefaultConstant.Default_High_Temp_Set :   environmentThreadHold.get("环境温度高温");
+          Double setlowTemp = environmentThreadHold.get("环境温度低温")==null ? WarmDataDefaultConstant.Default_Low_Temp_Set :   environmentThreadHold.get("环境温度低温");
+          Double setHighHumidityValu = environmentThreadHold.get("环境湿度高阈值")==null ?  WarmDataDefaultConstant.Default_High_humidityValu_set :   environmentThreadHold.get("环境湿度高阈值");
+          Double setLowHumidityValu = environmentThreadHold.get("环境湿度低阈值")==null ?  WarmDataDefaultConstant.Default_Low_humidityValu_set:   environmentThreadHold.get("环境湿度低阈值");
+          Double setHAirqualityindex = environmentThreadHold.get("空气质量不达标阈值")==null ? WarmDataDefaultConstant.Default_airqualityindex :   environmentThreadHold.get("空气质量不达标阈值");
+
+        //1.高温
+        if(sethighTemp>maxtemp){
+            addwarningInfo(farmId, "环境高温报警",maxtemp);
+        }
+        //1.低温
+        if(setlowTemp>maxtemp){
+            addwarningInfo(farmId, "环境低温报警",mintemp);
+        }
+        //1.湿度过高
+        if(setHighHumidityValu>humidityValu){
+            addwarningInfo(farmId, "环境湿度过高报警",humidityValu);
+        }
+        //1.湿度过低
+        if(setLowHumidityValu>humidityValu){
+            addwarningInfo(farmId, "环境湿度过低报警",humidityValu);
+        }
+        //1.空气质量不达标
+        if(setHAirqualityindex< airqualityindex){
+            addwarningInfo(farmId, "空气质量不达标报警",airqualityindex);
+        }
+    }
+
+
+
+
+
+    //获取阈值   牧场ID是有用的,需要判断是哪个牧场的数据
+    public Map<String, Double> getEnvironmentThreadHold(int farmId) {
+        //ThresholdManagementEntity thresholdManagementEntity
+        LambdaQueryWrapper<ThresholdManagementEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(ThresholdManagementEntity::getDeleted, 0);//未删除的阈值
+        wrapper.eq(ThresholdManagementEntity::getBelongTo, 2);//室外的阈值
+        wrapper.eq(ThresholdManagementEntity::getFarmId, farmId);//室外的阈值
+        List<ThresholdManagementEntity> thresholdManagementEntityList = thresholdManagementDao.selectList(wrapper);
+
+
+        Map<String, Double> thresholdManagementEntityMap = new HashMap<>();
+        for (ThresholdManagementEntity c : thresholdManagementEntityList) {
+            thresholdManagementEntityMap.put(c.getThresholdType(), c.getThresholdValue());
+        }
+        return thresholdManagementEntityMap;
+    }
+
+
+    //存报警信息
+    public void addwarningInfo(int farmId, String warningType, Double now_value) throws ParseException {
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
+        String TimeNow = sdf.format(Calendar.getInstance().getTime());
+        Date formatTimeNow = sdf.parse(TimeNow);
+
+        WarningInfoEntity warningInfoEntity = new WarningInfoEntity();
+        warningInfoEntity.setBelongTo((short) 2);
+        warningInfoEntity.setFarmId(farmId);
+        warningInfoEntity.setWarningType(warningType); //例如:环境高温报警
+        warningInfoEntity.setNowDate(formatTimeNow);//设置时间 2021-07-08  此格式
+        warningInfoEntity.setNowValue(now_value);
+        warningInfoEntity.setWarningTime(new Date());//设置时间 2021-06-25 14:10:54 此格式
+        warningInfoService.save(warningInfoEntity);
+
+    }
+
+    //获取所有未被删除的牧场列表
+    public List<FarmEntity> getfarmInfo() throws ParseException {
+
+        LambdaQueryWrapper<FarmEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(FarmEntity::getDeleted, 0);//未删除的阈值这个字段为O
+        List<FarmEntity> FarmEntityList = farmDao.selectList(wrapper);
+
+        return FarmEntityList;
+    }
+}

+ 68 - 0
huimv-smart-management/src/main/java/com/huimv/management/util/DateUtils.java

@@ -1,8 +1,11 @@
 package com.huimv.management.util;
 
+import java.text.DateFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Locale;
 
 /**
  * 日期转换工具
@@ -29,6 +32,17 @@ public class DateUtils {
 	}
 
 
+
+
+
+	//过去五秒
+	public static Date getPassedsecond(){
+		Calendar c = Calendar.getInstance();
+		c.setTime(new Date());
+		c.add(Calendar.SECOND, - 5);
+		return c.getTime();
+	}
+
 	public static String stampToTime(String s) throws Exception{
 		String res;
 		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -122,4 +136,58 @@ public class DateUtils {
 		cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
 		return cal.getTime();
 	}
+
+	public static String getNowWithDigital() {
+		Date now = new Date();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		return sdf.format(now).replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
+	}
+
+	public static String buildDateTimeString(String formatContent) {
+		String year = formatContent.substring(0, 4);
+		String month = formatContent.substring(4, 6);
+		String day = formatContent.substring(6, 8);
+		String hour = formatContent.substring(8, 10);
+		String minute = formatContent.substring(10, 12);
+		String seconds = formatContent.substring(12, 14);
+		StringBuilder dateTimeSb = new StringBuilder();
+		return dateTimeSb.append(year).append("-").append(month).append("-").append(day).append(" ").append(hour).append(":").append(minute).append(":").append(seconds).toString();
+	}
+
+	public static String buildDateString(String formatContent) {
+		String year = formatContent.substring(0, 4);
+		String month = formatContent.substring(4, 6);
+		String day = formatContent.substring(6, 8);
+		String dateTime = year + "-" + month + "-" + day;
+		return dateTime;
+	}
+
+	public static String formatDateTime(String date) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
+		return sdf.format(date);
+	}
+
+	public static Date parseDateTime(String date) throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		return sdf.parse(date);
+	}
+
+	public String getToday() {
+		DateFormat df3 = DateFormat.getDateInstance(2, Locale.CHINA);
+		return df3.format(new Date());
+	}
+
+	public String formatDate(Date date) {
+		DateFormat df3 = DateFormat.getDateInstance(2, Locale.CHINA);
+		return df3.format(date);
+	}
+
+	public String beforeTime(int times) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		Calendar calendar = Calendar.getInstance();
+		calendar.set(11, calendar.get(11) - times);
+		String endTime = sdf.format(calendar.getTime());
+		System.out.println("提前3小时:" + endTime);
+		return endTime;
+	}
 }

+ 0 - 0
huimv-smart-management/src/test/java/com/huimv/management/test.java


+ 38 - 19
huimv-smart-management/src/test/java/com/huimv/management/test01.java

@@ -1,40 +1,59 @@
 package com.huimv.management;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huimv.management.dao.EartagDataDao;
+import com.huimv.management.entity.EartagDataEntity;
 import com.huimv.management.entity.YearPigBaseEntity;
 import com.huimv.management.service.YearPigBaseService;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-
+@SpringBootTest
 public class test01 {
 
-
     @Autowired
     YearPigBaseService yearPigBaseService;
 
+    @Autowired
+    EartagDataDao eartagDataDao ;
+    @Test
+public void tedt(){
+        LambdaQueryWrapper<EartagDataEntity> lambdaQuery1 = Wrappers.lambdaQuery();
+        lambdaQuery1.eq( EartagDataEntity::getEartagId,"002d4895");
+        lambdaQuery1.le( EartagDataEntity::getCreateTime,"2021-07-21 15:59:36");
+        lambdaQuery1.ge(EartagDataEntity::getCreateTime,"2021-07-21 00:59:36");
+        lambdaQuery1.ge(EartagDataEntity::getSleepGap,1);
+        List<EartagDataEntity> eartagDateEntities = eartagDataDao.selectList(lambdaQuery1);
+        System.out.println(eartagDateEntities);
 
-    //为什么没办法注入?因为整个项目没启动。spring的自动注入没有起来,拿东西当然会报错
-    public static void main(String[] args) {
-
-         Map<String  ,Object> ma  = new HashMap<>();
-
-         ma.put("eartag","sdasda456");
-         ma.put("starttime","2021-06-21 10:11:40");
-         ma.put("endtime","2021-06-21 10:13:05");
-        System.out.println(ma);
-
-
-
-
-
-
-
     }
+    }
+           /* LambdaQueryWrapper<EartagDataEntity> lambdaQuery = Wrappers.lambdaQuery();
+            lambdaQuery.eq( EartagDataEntity::getEartagId,"002d4895");
+            lambdaQuery.le( EartagDataEntity::getCreateTime,"2021-07-21 15:59:36");
+            lambdaQuery.ge(EartagDataEntity::getCreateTime,"2021-07-21 00:59:36");
+            List<EartagDataEntity> eartagDataEntities = eartagDataDao.selectList(lambdaQuery);
+            List<Map> list = new ArrayList<>();
 
+            for (EartagDataEntity eartagDataEntity : eartagDataEntities) {
+                if(eartagDataEntity.getSleepGap()==1){
+                    Map<String,String> map = new HashMap();
+                    map.put("starttime",eartagDataEntity.getSleepBegin().toString());
+                    map.put("endtime",eartagDataEntity.getSleepEnd().toString());
+                    map.put("status", String.valueOf(eartagDataEntity.getSleepGap()));
+                    list.add(map);
+                }
 
+            }
+        System.out.println(list);*/
 
 
 
 
-}