Kaynağa Gözat

完成烘干温度未超过烘干温度阈值报警。

zhuoning 2 yıl önce
ebeveyn
işleme
4502ebf37d
18 değiştirilmiş dosya ile 499 ekleme ve 95 silme
  1. 21 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/EcoDryListController.java
  2. 1 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDeviceFlow.java
  3. 37 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDryList.java
  4. 12 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/EcoDeviceMapper.java
  5. 16 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/EcoDryListMapper.java
  6. 10 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/EcoDeviceMapper.xml
  7. 19 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/EcoDryListMapper.xml
  8. 103 61
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/schedule/ScheduleTask.java
  9. 2 1
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceFlowService.java
  10. 1 1
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceService.java
  11. 24 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDryListService.java
  12. 5 2
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceFlowServiceImpl.java
  13. 2 3
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceServiceImpl.java
  14. 174 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDryListServiceImpl.java
  15. 10 0
      huimv-farm-environ/src/main/java/com/huimv/environ/env/utils/DateUtil.java
  16. 8 0
      huimv-farm-environ/src/main/resources/application.properties
  17. 0 27
      huimv-farm-environ/src/test/java/com/huimv/environ/eco/DeviceTest.java
  18. 54 0
      huimv-farm-environ/src/test/java/com/huimv/environ/eco/TaskTest.java

+ 21 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/EcoDryListController.java

@@ -0,0 +1,21 @@
+package com.huimv.environ.eco.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-11
+ */
+@RestController
+@RequestMapping("/eco-dry-list")
+public class EcoDryListController {
+
+}
+

+ 1 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDeviceFlow.java

@@ -54,4 +54,5 @@ public class EcoDeviceFlow implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date addTime;
 
+    private Integer dryId;
 }

+ 37 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDryList.java

@@ -0,0 +1,37 @@
+package com.huimv.environ.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class EcoDryList implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String deviceCode;
+
+    private Date addTime;
+
+    private String location;
+
+    private Integer standardStatus;
+
+    private Integer farmId;
+}

+ 12 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/EcoDeviceMapper.java

@@ -1,7 +1,14 @@
 package com.huimv.environ.eco.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.environ.eco.entity.EcoDevice;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -13,4 +20,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface EcoDeviceMapper extends BaseMapper<EcoDevice> {
 
+//    List<Map> selectList2(@Param("ew") QueryWrapper<EcoDevice> queryWrapper);
+//    List<Map> selectList2();
+
+    @Select("SELECT ed.*,bp.pigpen_name FROM `eco_device` ed LEFT JOIN  `base_pigpen` bp ON ed.unit_id=bp.id")
+    List<Map> selectList4();
 }

+ 16 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/EcoDryListMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.environ.eco.mapper;
+
+import com.huimv.environ.eco.entity.EcoDryList;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-11
+ */
+public interface EcoDryListMapper extends BaseMapper<EcoDryList> {
+
+}

+ 10 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/EcoDeviceMapper.xml

@@ -14,5 +14,15 @@
     <sql id="Base_Column_List">
         id, device_code, device_type, unit_id
     </sql>
+<!--    <select id="selectList2" resultType="java.util.Map">-->
+<!--        SELECT ed.*,bp.pigpen_name FROM `eco_device` ed LEFT JOIN  `base_pigpen` bp ON ed.unit_id=bp.id-->
+<!--    </select>-->
+<!--    <select id="selectList3" resultType="java.util.Map">-->
+<!--        SELECT ed.*,bp.pigpen_name FROM `eco_device` ed LEFT JOIN  `base_pigpen` bp ON ed.unit_id=bp.id-->
+<!--&lt;!&ndash;        <if test="ew.customSqlSegment != '' and ew.customSqlSegment != null">&ndash;&gt;-->
+<!--&lt;!&ndash;            ${ew.customSqlSegment}&ndash;&gt;-->
+<!--&lt;!&ndash;        </if>&ndash;&gt;-->
+<!--        ${ew.customSqlSegment}-->
+<!--    </select>-->
 
 </mapper>

+ 19 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/EcoDryListMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.environ.eco.mapper.EcoDryListMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.environ.eco.entity.EcoDryList">
+        <id column="id" property="id" />
+        <result column="device_code" property="deviceCode" />
+        <result column="add_time" property="addTime" />
+        <result column="location" property="location" />
+        <result column="standard_status" property="standardStatus" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, device_code, add_time, location, standard_status
+    </sql>
+
+</mapper>

+ 103 - 61
huimv-farm-environ/src/main/java/com/huimv/environ/eco/schedule/ScheduleTask.java

@@ -2,19 +2,20 @@ package com.huimv.environ.eco.schedule;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.huimv.common.utils.Result;
 import com.huimv.environ.eco.entity.EcoDevice;
 import com.huimv.environ.eco.entity.EcoDeviceFlow;
 import com.huimv.environ.eco.mapper.EcoDeviceFlowMapper;
 import com.huimv.environ.eco.service.EcoDeviceFlowService;
 import com.huimv.environ.eco.service.EcoDeviceService;
+import com.huimv.environ.eco.service.EcoDryListService;
 import com.huimv.environ.eco.service.SysConfigService;
+import com.huimv.environ.env.utils.DateUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
@@ -23,10 +24,7 @@ import org.springframework.web.client.RestTemplate;
 
 import java.lang.reflect.Array;
 import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Project : huimv-farm-datacenter
@@ -37,54 +35,115 @@ import java.util.Map;
  * @Create : 2022/11/9
  **/
 @Component
+@Slf4j
 public class ScheduleTask {
     @Autowired
     private RestTemplate restTemplate;
     @Autowired
-    private EcoDeviceFlowMapper ecoDeviceFlowMapper;
-    @Autowired
     private com.huimv.environ.eco.service.EcoDeviceFlowService ecoDeviceFlowService;
     @Autowired
     private EcoDeviceService ecoDeviceService;
     @Autowired
     private SysConfigService sysConfigService;
-    private static String URL = "http://www.0531yun.com/app/GetDeviceData";
+    @Autowired
+    private EcoDryListService ecoDryListService;
+    @Value("${url.threshold.service}")
+    private String URL_THRESHOLD_SERVICE;
+    @Value("${url.environ.device.service}")
+    private String URL_ENVIRON_DEVICE_SERVICE;
+//    private static String URL = "http://www.0531yun.com/app/GetDeviceData";
 
     @Scheduled(cron = "0 0/5 * * * ?")  //每5分钟执行一次
+//    @Scheduled(cron = "*/10 * * * * ?")  //每10秒钟执行一次
     public void getDeviceFlow() throws ParseException {
-        System.out.println("getDeviceFlow " + new Date().getTime());
+        DateUtil dateUtil = new DateUtil();
+        System.out.println("开始取数:" + dateUtil.fromLongToDate(new Date().getTime(), "yyyy-MM-dd HH:mm:ss.SSS"));
         //查询所有设备
-        List<EcoDevice> ecoDeviceList = ecoDeviceService.getDeviceList();
+        List<Map> ecoDeviceList = ecoDeviceService.getDeviceList2();
+        System.out.println("ecoDeviceList.size=" + ecoDeviceList.size());
         if (ecoDeviceList.size() == 0) {
             System.out.println("设备记录为空.");
         } else {
-            for (EcoDevice ecoDevice : ecoDeviceList) {
-                Integer farmId = ecoDevice.getFarmId();
-                String deviceGroupCode = ecoDevice.getDeviceCode();
-//                System.out.println("farmId=" + farmId);
-//                System.out.println("deviceCode=" + deviceCode);
+            for (int a = 0; a < ecoDeviceList.size(); a++) {
+                System.out.println("a========================================================================================================" + a);
+                Map deviceMap = ecoDeviceList.get(a);
+                Integer farmId = Integer.parseInt(deviceMap.get("farm_id") + "");
+                String deviceGroupCode = deviceMap.get("device_code") + "";
+                System.out.println("id=" + deviceMap.get("id"));
+                //读取高温阈值数据
+                JSONObject thresholdJo = getThresholdURL(farmId);
+                System.out.println("调取牧场[" + farmId + "]服务获取阈值接口:" + thresholdJo);
+                if (thresholdJo == null) {
+                    log.error("thresholdJo======" + thresholdJo);
+                    log.error("牧场[" + farmId + "]暂时没有洗消烘干温度设置.");
+                    continue;
+                }
                 String cfgName = "userId";
                 // 查询用户userId
                 String userId = sysConfigService.getUserId(farmId, cfgName);
                 if (userId == null) {
-                    System.out.println("userId不存在.");
+                    System.out.println("牧场[" + farmId + "]的userId不存在.");
+                    continue;
+                }
+                //调用远程设备上传流水接口,查询远程数据
+                JSONObject resultJo = JSONObject.parseObject(getDeviceFlowFromRemoteURL(userId, deviceGroupCode));
+                if (resultJo.getInteger("code") != 1000) {
+                    System.out.println("牧场[" + farmId + "]设备组编号(" + deviceGroupCode + ")调用远程接口返回结果出错.");
                 } else {
-                    //调用远程接口,查询远程数据
-                    String remoteData = getBodyFromRemoteURL(userId, deviceGroupCode);
-                    JSONObject resultJo = JSONObject.parseObject(remoteData);
-                    if (resultJo.getInteger("code") != 1000) {
-                        System.out.println("设备组编号(" + deviceGroupCode + ")调用出错.");
-                    } else {
-                        JSONArray dataJa = resultJo.getJSONArray("data");
-                        for (int a = 0; a < dataJa.size(); a++) {
-                            JSONObject dataJo = dataJa.getJSONObject(a);
-                            ecoDeviceFlowService.save(dataJo);
-                        }
-                    }
+                    JSONArray dataJa = resultJo.getJSONArray("data");
+                    System.out.println("dataJa.size=" + dataJa.size());
+//                    for (int b = 0; b < dataJa.size(); b++) {
+//                        JSONObject dataJo = dataJa.getJSONObject(b);
+                    JSONObject dataJo = dataJa.getJSONObject(0);
+                    Date todayTime = dateUtil.getTodayDateTime();
+                    //保存温度流水记录
+                    ecoDeviceFlowService.save(dataJo, todayTime);
+                    System.out.println("22 dataJo=" + dataJo);
+                    System.out.println("33 thresholdJo=" + thresholdJo);
+                    //新建烘干记录
+                    ecoDryListService.saveDryList(deviceMap, dataJo, thresholdJo, todayTime);
+                    //新建洗消烘干温度时长不足报警记录
+//                    newShortDryingtime();
+//                    }
                 }
             }
         }
+        System.out.println("完成取数:" + dateUtil.fromLongToDate(new Date().getTime(), "yyyy-MM-dd HH:mm:ss.SSS"));
+    }
+
+    //获取阈值
+    private JSONObject getThresholdURL(Integer farmId) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8");
+        httpHeaders.setContentType(type);
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("farmId", farmId);
+        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map, httpHeaders);
+        //读取真实数据
+//        String remoteUrl = "http://192.168.1.67:8010/produce/threshold/getThresholdByFarmId";
+        System.out.println("URL_THRESHOLD_SERVICE=" + URL_THRESHOLD_SERVICE);
+        ResponseEntity<String> entity = restTemplate.postForEntity(URL_THRESHOLD_SERVICE, objectHttpEntity, String.class);
+        JSONObject thresholdJo = JSONObject.parseObject(entity.getBody());
+        if (thresholdJo.getInteger("code") != 10000) {
+            return null;
+        }
+        return thresholdJo.getJSONObject("data");
+    }
+
+    //获取远程数据
+    private String getDeviceFlowFromRemoteURL(String userId, String groupId) {
+        //请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("userId", userId);
+        //Body参数
+        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<String, Object>();
+        HttpEntity<MultiValueMap> objectHttpEntity = new HttpEntity<MultiValueMap>(paramsMap, headers);
+        System.out.println("URL_ENVIRON_DEVICE_SERVICE=" + URL_ENVIRON_DEVICE_SERVICE);
+        ResponseEntity<String> result = restTemplate.exchange(URL_ENVIRON_DEVICE_SERVICE + "?groupId=" + groupId, HttpMethod.GET, objectHttpEntity, String.class);
+        return result.getBody();
+    }
 
+    // ################################# 以下部分是可以优化提炼的代码 #################################
 
 //        List headerList = new ArrayList();
 //        List getParamsList = new ArrayList();
@@ -103,36 +162,19 @@ public class ScheduleTask {
 //            }
 //        }
 
-//        if(result)
-    }
-
-    private String getBodyFromRemoteURL(String userId, String groupId) {
-        //请求头
-        HttpHeaders headers = new HttpHeaders();
-        headers.add("userId", userId);
-        //Body参数
-        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<String, Object>();
-        //封装请求头
-//        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<Map<String,Object>>(paramsMap, headers);
-        HttpEntity<MultiValueMap> objectHttpEntity = new HttpEntity<MultiValueMap>(paramsMap, headers);
-        ResponseEntity<String> result = restTemplate.exchange(URL + "?groupId=" + groupId, HttpMethod.GET, objectHttpEntity, String.class);
-        return result.getBody();
-    }
-
     // String remoteData = getBodyFromRemoteURL(headerList, getParamsList);
-
     //做成通用远程接口
-    private String getBodyFromRemoteURL(List headerList, List getParamsList) {
-        //请求头
-        HttpHeaders headers = new HttpHeaders();
-        headers.add("userId", "-1618620464");
-        //Body参数
-        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<String, Object>();
-//        paramsMap.add("groupId", "24234390");
-        //封装请求头
-//        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<Map<String,Object>>(paramsMap, headers);
-        HttpEntity<MultiValueMap> objectHttpEntity = new HttpEntity<MultiValueMap>(paramsMap, headers);
-        ResponseEntity<String> result = restTemplate.exchange(URL + "?groupId=24234390", HttpMethod.GET, objectHttpEntity, String.class);
-        return result.getBody();
-    }
+//    private String getBodyFromRemoteURL(List headerList, List getParamsList) {
+//        //请求头
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.add("userId", "-1618620464");
+//        //Body参数
+//        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<String, Object>();
+////        paramsMap.add("groupId", "24234390");
+//        //封装请求头
+////        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<Map<String,Object>>(paramsMap, headers);
+//        HttpEntity<MultiValueMap> objectHttpEntity = new HttpEntity<MultiValueMap>(paramsMap, headers);
+//        ResponseEntity<String> result = restTemplate.exchange(URL + "?groupId=24234390", HttpMethod.GET, objectHttpEntity, String.class);
+//        return result.getBody();
+//    }
 }

+ 2 - 1
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceFlowService.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
+import java.util.Date;
 import java.util.Map;
 
 /**
@@ -21,5 +22,5 @@ public interface EcoDeviceFlowService extends IService<EcoDeviceFlow> {
 
     Result getLastFlow(HttpServletRequest request);
 
-    void save(JSONObject dataJo) throws ParseException;
+    void save(JSONObject dataJo, Date todayTime) throws ParseException;
 }

+ 1 - 1
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceService.java

@@ -24,5 +24,5 @@ public interface EcoDeviceService extends IService<EcoDevice> {
 
     Result list(Map<String,String> paramsMap);
 
-    List<EcoDevice> getDeviceList();
+    List<Map> getDeviceList2();
 }

+ 24 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDryListService.java

@@ -0,0 +1,24 @@
+package com.huimv.environ.eco.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.environ.eco.entity.EcoDryList;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-11
+ */
+public interface EcoDryListService extends IService<EcoDryList> {
+
+    void saveDryList(Map deviceMap, JSONObject dataJo, JSONObject thresholdJo, Date todayTime) throws ParseException;
+
+    void sendLowDryTempAlarm(String alarmInfo, String farmId, String warningTime, String uploadTime);
+}

+ 5 - 2
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceFlowServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
+import java.util.Date;
 
 
 /**
@@ -41,7 +42,7 @@ public class EcoDeviceFlowServiceImpl extends ServiceImpl<EcoDeviceFlowMapper, E
     }
 
     @Override
-    public void save(JSONObject dataJo) throws ParseException {
+    public void save(JSONObject dataJo, Date todayTime) throws ParseException {
         DateUtil dateUtil = new DateUtil();
         EcoDeviceFlow ecoDeviceFlow = new EcoDeviceFlow();
         ecoDeviceFlow.setDeviceCode(dataJo.getString("deviceKey"));
@@ -70,7 +71,9 @@ public class EcoDeviceFlowServiceImpl extends ServiceImpl<EcoDeviceFlowMapper, E
         ecoDeviceFlow.setId2Value(id2Value);
         ecoDeviceFlow.setId2AlarmStatus(id2Jo.getBoolean("isAlarm"));
         ecoDeviceFlow.setId2AlarmMsg(id2Jo.getString("alarmMsg"));
-        ecoDeviceFlow.setAddTime(dateUtil.getTodayDateTime());
+        ecoDeviceFlow.setAddTime(todayTime);
+        System.out.println("ecoDeviceFlow 流水数据="+ecoDeviceFlow.toString());
         ecoDeviceFlowMapper.insert(ecoDeviceFlow);
+        dataJo.put("id",ecoDeviceFlow.getId());
     }
 }

+ 2 - 3
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceServiceImpl.java

@@ -126,9 +126,8 @@ public class EcoDeviceServiceImpl extends ServiceImpl<EcoDeviceMapper, EcoDevice
     }
 
     @Override
-    public List<EcoDevice> getDeviceList() {
-        QueryWrapper<EcoDevice> queryWrapper = new QueryWrapper<>();
-        return ecoDeviceMapper.selectList(queryWrapper);
+    public List<Map> getDeviceList2() {
+        return ecoDeviceMapper.selectList4();
     }
 
 

+ 174 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDryListServiceImpl.java

@@ -0,0 +1,174 @@
+package com.huimv.environ.eco.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.environ.eco.entity.EcoDryList;
+import com.huimv.environ.eco.mapper.EcoDryListMapper;
+import com.huimv.environ.eco.service.EcoDryListService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.environ.env.utils.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-11
+ */
+@Service
+public class EcoDryListServiceImpl extends ServiceImpl<EcoDryListMapper, EcoDryList> implements EcoDryListService {
+    @Autowired
+    private EcoDryListMapper ecoDryListMapper;
+    @Autowired
+    private RestTemplate restTemplate;
+    @Value("${url.warning.service}")
+    private String URL_WARNING_SERVICE;
+
+    @Override
+    public void saveDryList(Map deviceMap, JSONObject deviceFlowDataJo, JSONObject thresholdJo, Date todayTime) throws ParseException {
+        System.out.println("开始保存saveDryList()");
+        JSONArray realTimeDataJa = deviceFlowDataJo.getJSONArray("realTimeData");
+        String flowId = deviceFlowDataJo.getString("id");
+        System.out.println("flowId >>>>>>>>>>>>>>>>>>" + flowId);
+        JSONObject tempDataJo = realTimeDataJa.getJSONObject(0);
+        String temp = tempDataJo.getString("dataValue");
+        if (StringUtils.isBlank(temp)) {
+            temp = "0";
+        }
+        //Debug var
+        temp = "40";
+        System.out.println(">> temp=" + temp);
+        //烘干温度(分钟)
+        String dryTem = thresholdJo.getString("dryTem");
+        System.out.println(">> dryTem=" + dryTem);
+        //烘干时间过短报警时长(分钟)
+        String dryMin = thresholdJo.getString("dryMin");
+        //一次烘干持续时间(分钟)
+        String dryDuration = thresholdJo.getString("dryDuration");
+        //常温阈值
+        String dryNormalTemp = thresholdJo.getString("dryNormalTemp");
+        String farmId = thresholdJo.getString("farmId");
+        DateUtil dateUtil = new DateUtil();
+        int deviceType = (int) deviceMap.get("device_type");
+        String deviceCode = deviceMap.get("device_code") + "";
+        System.out.println("deviceType=" + deviceType);
+        String location = deviceMap.get("pigpen_name") + "";
+        //保存烘干设备记录列表
+        if (deviceType == 2) {
+            //判断上次间隔时间(读取该设备上次添加时间),超过一次洗消烘干的标准周期时间
+            if (isOverdue(deviceCode, farmId, todayTime, dryDuration)) {
+                //判断是否高温(高温且超过一次烘干持续时间需要进行烘干高温记录)
+                if (new BigDecimal(temp).compareTo(new BigDecimal(dryTem)) != -1) {
+                    EcoDryList ecoDryList = new EcoDryList();
+                    ecoDryList.setDeviceCode(deviceCode);
+                    ecoDryList.setLocation(location);
+                    ecoDryList.setStandardStatus(1);
+                    ecoDryList.setAddTime(todayTime);
+                    ecoDryList.setFarmId(Integer.parseInt(farmId));
+                    ecoDryListMapper.insert(ecoDryList);
+                    System.out.println("保存");
+                } else {
+                    EcoDryList ecoDryList = new EcoDryList();
+                    ecoDryList.setDeviceCode(deviceCode);
+                    ecoDryList.setLocation(location);
+                    ecoDryList.setStandardStatus(0);
+                    ecoDryList.setAddTime(todayTime);
+                    ecoDryList.setFarmId(Integer.parseInt(farmId));
+                    ecoDryListMapper.insert(ecoDryList);
+                    newLowDryTempWarningInfo(temp, dryNormalTemp, dryTem, dateUtil.formatDateTime(todayTime),farmId,location);
+                }
+            } else {
+                //判断当前温度是否介于烘干温度阈值和常温阈值之间,即可报警
+                newLowDryTempWarningInfo(temp, dryNormalTemp, dryTem, dateUtil.formatDateTime(todayTime),farmId,location);
+            }
+        }
+    }
+
+    //新建洗消烘干温度不足报警记录
+    private void newLowDryTempWarningInfo(String temp, String dryNormalTemp, String dryTem, String todayTime, String farmId, String location) {
+        System.out.println("44 temp="+temp);
+        System.out.println("44 dryNormalTemp="+dryNormalTemp);
+        System.out.println("44 dryTem="+dryTem);
+
+        if (Float.parseFloat(temp) > Float.parseFloat(dryNormalTemp) && Float.parseFloat(temp) < Float.parseFloat(dryTem)) {
+            System.out.println("烘干温度未达到烘干温度阈值");
+            //烘干温度未达标,发送烘干警报
+            String alarmInfo = todayTime + " "+location+"当前温度" + temp + "°,未达到烘干阈值温度" + dryTem + "°";
+            System.out.println("alarmInfo="+alarmInfo);
+            System.out.println("farmId="+farmId);
+            System.out.println("todayTime="+todayTime);
+            System.out.println("todayTime="+todayTime);
+            //发送低烘干温度报警
+            sendLowDryTempAlarm(alarmInfo,farmId,todayTime,todayTime);
+        } else if (Float.parseFloat(temp) >= Float.parseFloat(dryTem)) {
+//            System.out.println("烘干温度已达到烘干温度阈值");
+        } else {
+//            System.out.println("当前温度小于常温阈值");
+        }
+    }
+
+    @Override
+    public void sendLowDryTempAlarm(String alarmInfo, String farmId, String warningTime, String uploadTime) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8");
+        httpHeaders.setContentType(type);
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("farmId", farmId);
+        map.put("level", 1);
+        map.put("msg", alarmInfo);
+        map.put("levelName", "一级警报");
+        map.put("warningName", "洗消监测");
+        map.put("warningTime", warningTime);
+        map.put("uploadTime", uploadTime);
+        map.put("alarmType", "0");
+        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map, httpHeaders);
+        System.out.println("URL_WARNING_SERVICE=" + URL_WARNING_SERVICE);
+        System.out.println("map>>>>>>>>>>>>>>>>>"+map);
+        ResponseEntity<String> entity = restTemplate.postForEntity(URL_WARNING_SERVICE, objectHttpEntity, String.class);
+        JSONObject thresholdJo = JSONObject.parseObject(entity.getBody());
+//        if (thresholdJo.getInteger("code") != 10000) {
+//            return null;
+//        }
+//        return thresholdJo.getJSONObject("data");
+
+    }
+
+    //判断是否过期
+    private boolean isOverdue(String deviceCode, String farmId, Date todayTime, String dryDuration) {
+        QueryWrapper<EcoDryList> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", farmId);
+        queryWrapper.eq("device_code", deviceCode);
+        queryWrapper.orderByDesc("add_time");
+        queryWrapper.last("LIMIT 1");
+        EcoDryList lastEcoDryList = ecoDryListMapper.selectOne(queryWrapper);
+        if (lastEcoDryList == null) {
+            return true;
+        }
+        System.out.println("1==" + (todayTime.getTime() - lastEcoDryList.getAddTime().getTime()));
+        System.out.println("2==" + (todayTime.getTime() - lastEcoDryList.getAddTime().getTime()) / (1000 * 60));
+        System.out.println("3==" + dryDuration);
+        //当前时间比较最后一次上次时间(分钟)
+        if ((todayTime.getTime() - lastEcoDryList.getAddTime().getTime()) / (1000 * 60) >= Integer.parseInt(dryDuration)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}

+ 10 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/env/utils/DateUtil.java

@@ -102,6 +102,16 @@ public class DateUtil {
         return dateText;
     }
 
+    public String formatDateTime(Date date) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String dateText = sdf.format(date);
+        if(dateText.indexOf("T") != -1){
+            String[] dateTextArray = dateText.split("T");
+            dateText = dateTextArray[0];
+        }
+        return dateText;
+    }
+
     //
     public Date getTodayDate() throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

+ 8 - 0
huimv-farm-environ/src/main/resources/application.properties

@@ -5,3 +5,11 @@
 #spring.profiles.active=prod2
 spring.profiles.active=lishui
 
+#
+url.environ.device.service=http://www.0531yun.com/app/GetDeviceData
+#
+#url.threshold.service=http://192.168.1.67:8010/produce/threshold/getThresholdByFarmId
+url.threshold.service=http://localhost:8010/produce/threshold/getThresholdByFarmId
+#
+#url.warning.service=http://192.168.1.67:8010/produce/warningInfo/newAlarm
+url.warning.service=http://localhost:8010/produce/warningInfo/newAlarm

+ 0 - 27
huimv-farm-environ/src/test/java/com/huimv/environ/eco/DeviceTest.java

@@ -1,27 +0,0 @@
-package com.huimv.environ.eco;
-
-import com.huimv.environ.eco.schedule.ScheduleTask;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.text.ParseException;
-
-/**
- * @Project : huimv-farm-datacenter
- * @Package : ${}
- * @Description : TODO
- * @Version : 1.0
- * @Author : ZhuoNing
- * @Create : 2022/11/9
- **/
-@SpringBootTest
-public class DeviceTest {
-    @Autowired
-    private ScheduleTask test;
-
-    @Test
-    public void testDevice() throws ParseException {
-        test.getDeviceFlow();
-    }
-}

+ 54 - 0
huimv-farm-environ/src/test/java/com/huimv/environ/eco/TaskTest.java

@@ -0,0 +1,54 @@
+package com.huimv.environ.eco;
+
+import com.huimv.environ.eco.schedule.ScheduleTask;
+import com.huimv.environ.eco.service.EcoDryListService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.text.ParseException;
+
+/**
+ * @Project : huimv-farm-datacenter
+ * @Package : ${}
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/11/9
+ **/
+@SpringBootTest
+public class TaskTest {
+    @Autowired
+    private ScheduleTask test;
+
+    @Test
+    public void testDevice() throws ParseException {
+        test.getDeviceFlow();
+    }
+
+    @Test
+    public void testCompareTemp(){
+        String temp = "38.1";
+        temp = "25.7";
+        String temp1 = "25.6";
+        String temp2 = "45.5";
+        System.out.println("temp="+temp);
+        if(Float.parseFloat(temp) > Float.parseFloat(temp1) && Float.parseFloat(temp)<Float.parseFloat(temp2)){
+            System.out.println("烘干温度未达到烘干温度阈值");
+        }else if(Float.parseFloat(temp)>=Float.parseFloat(temp2)){
+            System.out.println("烘干温度已达到烘干温度阈值");
+        }else{
+            System.out.println("当前温度小于常温阈值");
+        }
+    }
+
+    @Autowired
+    private EcoDryListService ecoDryListService;
+    @Test
+    public void testSendDryTempAlarm(){
+        String alarmInfo = "2022-11-12,当前温度[40]未达到烘干阈值温度[50]";
+        String farmId ="331023001";
+        String todayTime = "2022-11-12 19:35:52";
+        ecoDryListService.sendLowDryTempAlarm(alarmInfo,farmId,todayTime,todayTime);
+    }
+}