Quellcode durchsuchen

完成定时从环控云服务API取数功能(温度、湿度)

zhuoning vor 2 Jahren
Ursprung
Commit
6c734ffcb6
17 geänderte Dateien mit 409 neuen und 4 gelöschten Zeilen
  1. 31 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/config/RestTemplateConfig.java
  2. 1 1
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/EcoDeviceFlowController.java
  3. 21 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/SysConfigController.java
  4. 8 3
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDeviceFlow.java
  5. 36 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/SysConfig.java
  6. 16 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/SysConfigMapper.java
  7. 19 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/SysConfigMapper.xml
  8. 138 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/schedule/ScheduleTask.java
  9. 4 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceFlowService.java
  10. 3 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceService.java
  11. 17 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/SysConfigService.java
  12. 39 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceFlowServiceImpl.java
  13. 6 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceServiceImpl.java
  14. 36 0
      huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/SysConfigServiceImpl.java
  15. 6 0
      huimv-farm-environ/src/main/java/com/huimv/environ/env/utils/DateUtil.java
  16. 1 0
      huimv-farm-environ/src/main/resources/application.properties
  17. 27 0
      huimv-farm-environ/src/test/java/com/huimv/environ/eco/DeviceTest.java

+ 31 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/config/RestTemplateConfig.java

@@ -0,0 +1,31 @@
+package com.huimv.environ.eco.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Project : huimv-env-platform
+ * @Package : ${}
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/11/2
+ **/
+@Configuration//加上这个注解作用,可以被Spring扫描
+public class RestTemplateConfig implements WebMvcConfigurer {
+    /**
+     * 创建RestTemplate对象,将RestTemplate对象的生命周期的管理交给Spring
+     */
+    @Bean
+    public RestTemplate restTemplate(){
+        // RestTemplate restTemplate = new RestTemplate();
+        //设置中文乱码问题方式一
+        // restTemplate.getMessageConverters().add(1,new StringHttpMessageConverter(Charset.forName("UTF-8")));
+        // 设置中文乱码问题方式二
+        // restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文编码
+        return new RestTemplate();
+    }
+
+}

+ 1 - 1
huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/EcoDeviceFlowController.java

@@ -22,7 +22,7 @@ import java.util.Map;
  * @since 2022-11-09
  */
 @RestController
-@RequestMapping("/eco-device-flow")
+@RequestMapping("/ecoDeviceFlow")
 public class EcoDeviceFlowController {
 
     @Resource

+ 21 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/controller/SysConfigController.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-10
+ */
+@RestController
+@RequestMapping("/sys-config")
+public class SysConfigController {
+
+}
+

+ 8 - 3
huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/EcoDeviceFlow.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -30,13 +33,13 @@ public class EcoDeviceFlow implements Serializable {
 
     private Integer deviceStatus;
 
-    private Integer deviceOpen;
+    private Boolean deviceOpen;
 
     private String id1Name;
 
     private String id1Value;
 
-    private Integer id1AlarmStatus;
+    private Boolean id1AlarmStatus;
 
     private String id1AlarmMsg;
 
@@ -44,9 +47,11 @@ public class EcoDeviceFlow implements Serializable {
 
     private String id2Value;
 
-    private Integer id2AlarmStatus;
+    private Boolean id2AlarmStatus;
 
     private String id2AlarmMsg;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date addTime;
 
 }

+ 36 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/entity/SysConfig.java

@@ -0,0 +1,36 @@
+package com.huimv.environ.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+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-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysConfig implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String cfgName;
+
+    private String cfgValue;
+
+    private String remark;
+
+    private String farmId;
+
+
+}

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

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

+ 19 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/mapper/xml/SysConfigMapper.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.SysConfigMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.environ.eco.entity.SysConfig">
+        <id column="id" property="id" />
+        <result column="cfg_name" property="cfgName" />
+        <result column="cfg_value" property="cfgValue" />
+        <result column="remark" property="remark" />
+        <result column="farm_id" property="farmId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, cfg_name, cfg_value, remark, farm_id
+    </sql>
+
+</mapper>

+ 138 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/schedule/ScheduleTask.java

@@ -0,0 +1,138 @@
+package com.huimv.environ.eco.schedule;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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.SysConfigService;
+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.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+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;
+
+/**
+ * @Project : huimv-farm-datacenter
+ * @Package : ${}
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/11/9
+ **/
+@Component
+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";
+
+    @Scheduled(cron = "0 0/5 * * * ?")  //每5分钟执行一次
+    public void getDeviceFlow() throws ParseException {
+        System.out.println("getDeviceFlow " + new Date().getTime());
+        //查询所有设备
+        List<EcoDevice> ecoDeviceList = ecoDeviceService.getDeviceList();
+        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);
+                String cfgName = "userId";
+                // 查询用户userId
+                String userId = sysConfigService.getUserId(farmId, cfgName);
+                if (userId == null) {
+                    System.out.println("userId不存在.");
+                } 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);
+                        }
+                    }
+                }
+            }
+        }
+
+
+//        List headerList = new ArrayList();
+//        List getParamsList = new ArrayList();
+//        List postParamsList = new ArrayList();
+//        //获取远程数据
+//        String remoteData = getBodyFromRemoteURL(headerList, getParamsList);
+////        System.out.println("result = " + result.getBody(remoteData));
+//        JSONObject resultJo = JSONObject.parseObject(remoteData);
+//        if (resultJo.getInteger("code") != 1000) {
+//            System.out.println("返回出错.");
+//        } else {
+//            JSONArray dataJa = resultJo.getJSONArray("data");
+//            for (int a = 0; a < dataJa.size(); a++) {
+//                JSONObject dataJo = dataJa.getJSONObject(a);
+//                ecoDeviceFlowService.save(dataJo);
+//            }
+//        }
+
+//        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();
+    }
+}

+ 4 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/EcoDeviceFlowService.java

@@ -1,10 +1,12 @@
 package com.huimv.environ.eco.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.huimv.common.utils.Result;
 import com.huimv.environ.eco.entity.EcoDeviceFlow;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
 import java.util.Map;
 
 /**
@@ -18,4 +20,6 @@ import java.util.Map;
 public interface EcoDeviceFlowService extends IService<EcoDeviceFlow> {
 
     Result getLastFlow(HttpServletRequest request);
+
+    void save(JSONObject dataJo) throws ParseException;
 }

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

@@ -4,6 +4,7 @@ import com.huimv.common.utils.Result;
 import com.huimv.environ.eco.entity.EcoDevice;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -22,4 +23,6 @@ public interface EcoDeviceService extends IService<EcoDevice> {
     Result remove(Map<String,String> paramsMap);
 
     Result list(Map<String,String> paramsMap);
+
+    List<EcoDevice> getDeviceList();
 }

+ 17 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/SysConfigService.java

@@ -0,0 +1,17 @@
+package com.huimv.environ.eco.service;
+
+import com.huimv.environ.eco.entity.SysConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-10
+ */
+public interface SysConfigService extends IService<SysConfig> {
+
+    String getUserId(Integer farmId, String cfgName);
+}

+ 39 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceFlowServiceImpl.java

@@ -1,5 +1,7 @@
 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.common.utils.Result;
 import com.huimv.common.utils.ResultCode;
@@ -9,10 +11,13 @@ import com.huimv.environ.eco.mapper.EcoDeviceFlowMapper;
 import com.huimv.environ.eco.mapper.EcoDeviceMapper;
 import com.huimv.environ.eco.service.EcoDeviceFlowService;
 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.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
 
 
 /**
@@ -34,4 +39,38 @@ public class EcoDeviceFlowServiceImpl extends ServiceImpl<EcoDeviceFlowMapper, E
         String farmId = request.getHeader("farmId");
         return new Result(ResultCode.SUCCESS,ecoDeviceFlowMapper.getLastFlow(farmId));
     }
+
+    @Override
+    public void save(JSONObject dataJo) throws ParseException {
+        DateUtil dateUtil = new DateUtil();
+        EcoDeviceFlow ecoDeviceFlow = new EcoDeviceFlow();
+        ecoDeviceFlow.setDeviceCode(dataJo.getString("deviceKey"));
+        ecoDeviceFlow.setDeviceName(dataJo.getString("deviceName"));
+        ecoDeviceFlow.setDeviceStatus(Integer.parseInt(dataJo.getString("deviceStatus")));
+        ecoDeviceFlow.setDeviceOpen(dataJo.getBoolean("deviceDisabled"));
+        //温/湿度数据
+        JSONArray realTimeDataJa = dataJo.getJSONArray("realTimeData");
+        JSONObject id1Jo = realTimeDataJa.getJSONObject(0);
+        ecoDeviceFlow.setId1Name(id1Jo.getString("dataName"));
+        //
+        String id1Value = id1Jo.getString("dataValue");
+        if(StringUtils.isBlank(id1Value)){
+            id1Value = "0";
+        }
+        ecoDeviceFlow.setId1Value(id1Value);
+        ecoDeviceFlow.setId1AlarmStatus(id1Jo.getBoolean("isAlarm"));
+        ecoDeviceFlow.setId1AlarmMsg(id1Jo.getString("alarmMsg"));
+        JSONObject id2Jo = realTimeDataJa.getJSONObject(1);
+        ecoDeviceFlow.setId2Name(id2Jo.getString("dataName"));
+        String id2Value = id2Jo.getString("dataValue");
+        //
+        if(StringUtils.isBlank(id2Value)){
+            id2Value = "0";
+        }
+        ecoDeviceFlow.setId2Value(id2Value);
+        ecoDeviceFlow.setId2AlarmStatus(id2Jo.getBoolean("isAlarm"));
+        ecoDeviceFlow.setId2AlarmMsg(id2Jo.getString("alarmMsg"));
+        ecoDeviceFlow.setAddTime(dateUtil.getTodayDateTime());
+        ecoDeviceFlowMapper.insert(ecoDeviceFlow);
+    }
 }

+ 6 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/EcoDeviceServiceImpl.java

@@ -125,6 +125,12 @@ public class EcoDeviceServiceImpl extends ServiceImpl<EcoDeviceMapper, EcoDevice
         return new Result(ResultCode.SUCCESS,ecoDeviceMapper.selectPage(page,queryWrapper));
     }
 
+    @Override
+    public List<EcoDevice> getDeviceList() {
+        QueryWrapper<EcoDevice> queryWrapper = new QueryWrapper<>();
+        return ecoDeviceMapper.selectList(queryWrapper);
+    }
+
 
     //内部关键字枚举
     public enum DeviceType{

+ 36 - 0
huimv-farm-environ/src/main/java/com/huimv/environ/eco/service/impl/SysConfigServiceImpl.java

@@ -0,0 +1,36 @@
+package com.huimv.environ.eco.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.environ.eco.entity.SysConfig;
+import com.huimv.environ.eco.mapper.SysConfigMapper;
+import com.huimv.environ.eco.service.SysConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-11-10
+ */
+@Service
+public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+
+    @Override
+    public String getUserId(Integer farmId, String cfgName) {
+        QueryWrapper<SysConfig> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("farm_id",farmId);
+        queryWrapper.eq("cfg_name",cfgName);
+        SysConfig sysConfig = sysConfigMapper.selectOne(queryWrapper);
+        if(sysConfig == null){
+            return null;
+        }else{
+            return sysConfig.getCfgValue();
+        }
+    }
+}

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

@@ -108,6 +108,12 @@ public class DateUtil {
         return sdf.parse(sdf.format(new Date()));
     }
 
+    //
+    public Date getTodayDateTime() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.parse(sdf.format(new Date()));
+    }
+
     public String getTodayDateText() throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         return sdf.format(new Date());

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

@@ -4,3 +4,4 @@
 #spring.profiles.active=prod
 #spring.profiles.active=prod2
 spring.profiles.active=lishui
+

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

@@ -0,0 +1,27 @@
+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();
+    }
+}