设备实时数据对接初步完成

This commit is contained in:
mi9688 2024-11-15 15:11:23 +08:00
parent fd4f007b49
commit 6d1f7acaec
19 changed files with 448 additions and 58 deletions

View File

@ -0,0 +1,208 @@
package com.fastbee.deviceData.api.dashboard.service;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.HashMap;
public class ApiDemo {
public static void main(String[] args) {
// 发送http请求的url
String url = "http://apis.juhe.cn/simpleWeather/query";
Map<String, String> params = new HashMap<String, String>();
params.put("key", "8fd5a2d4b0f26e5ba9c168b75c6281d5"); // 在个人中心->我的数据,接口名称上方查看
params.put("city", "苏州"); // 要查询的城市名称或城市ID
String paramsStr = urlencode(params);
System.out.println(paramsStr);
String response = doGet(url,paramsStr);
// // post请求
// String response = doPost(url,paramsStr);
// 输出请求结果
System.out.println(response);
try {
// 解析请求结果json
JSONObject jsonObject = JSONUtil.parseObj(response);
System.out.println(jsonObject);
// 具体返回示例值参考返回参数说明json返回示例
} catch (Exception e) {
e.printStackTrace();
}
}
// 将map型转为请求参数型
public static String urlencode(Map<String, String> data) {
StringBuilder sb = new StringBuilder();
for (Map.Entry i : data.entrySet()) {
try {
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* get方式的http请求
*
* @param httpUrl 请求地址
* @param paramStr 请求参数
* @return 返回结果
*/
public static String doGet(String httpUrl,String paramStr) {
HttpURLConnection connection = null;
InputStream inputStream = null;
BufferedReader bufferedReader = null;
String result = null;// 返回结果字符串
try {
httpUrl += "?"+paramStr;
// 创建远程url连接对象
URL url = new URL(httpUrl);
// 通过远程url连接对象打开一个连接强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间15000毫秒
connection.setConnectTimeout(15000);
// 设置读取远程返回的数据时间60000毫秒
connection.setReadTimeout(60000);
// 设置请求头
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 发送请求
connection.connect();
// 通过connection连接获取输入流
if (connection.getResponseCode() == 200) {
inputStream = connection.getInputStream();
// 封装输入流并指定字符集
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "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 (MalformedURLException e) {
e.printStackTrace();
} 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;
}
/**
* post方式的http请求
*
* @param httpUrl 请求地址
* @param paramStr 请求参数
* @return 返回结果
*/
public static String doPost(String httpUrl, String paramStr) {
HttpURLConnection connection = null;
InputStream inputStream = null;
OutputStream outputStream = null;
BufferedReader bufferedReader = null;
String result = null;
try {
URL url = new URL(httpUrl);
// 通过远程url连接对象打开连接
connection = (HttpURLConnection) url.openConnection();
// 设置连接请求方式
connection.setRequestMethod("POST");
// 设置连接主机服务器超时时间15000毫秒
connection.setConnectTimeout(15000);
// 设置读取主机服务器返回数据超时时间60000毫秒
connection.setReadTimeout(60000);
// 默认值为false当向远程服务器传送数据/写数据时需要设置为true
connection.setDoOutput(true);
// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 通过连接对象获取一个输出流
outputStream = connection.getOutputStream();
// 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
outputStream.write(paramStr.getBytes());
// 通过连接对象获取一个输入流向远程读取
if (connection.getResponseCode() == 200) {
inputStream = connection.getInputStream();
// 对输入流对象进行包装:charset根据工作项目组的要求来设置
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "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 (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != bufferedReader) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != outputStream) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
return result;
}
}

View File

@ -1,9 +1,15 @@
package com.fastbee.deviceData.api.devlink.service;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils;
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
import com.fastbee.deviceData.mapper.DeviceRealtimedataMeteorologyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
@ -40,7 +46,14 @@ public class DevLinkMetDataService extends DevLinkRealTimeDataService {
.soilHumi(toBigDecimalValue(propertiesMap.get("soilHumi")))
.build();
build.setSaveTime(DateUtils.getNowDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(propertiesMap.get("realTime"));
build.setRealTime(date);
} catch (ParseException e) {
throw new ServiceException("时间格式转换失败!");
}
System.err.println(build);
return build;
}

View File

@ -1,5 +1,7 @@
package com.fastbee.deviceData.api.devlink.service;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils;
import com.fastbee.deviceData.domain.DeviceRealtimedataMiaoqing;
import com.fastbee.deviceData.domain.DeviceRealtimedataPhotovoltaic;
import com.fastbee.deviceData.mapper.DeviceRealtimedataMiaoqingMapper;
@ -7,6 +9,9 @@ import com.fastbee.deviceData.mapper.DeviceRealtimedataPhotovoltaicMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
@ -20,6 +25,7 @@ public class DevLinkMiaoQingDataService extends DevLinkRealTimeDataService {
private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper;
public DeviceRealtimedataMiaoqing setData(Map<String, String> propertiesMap){
DeviceRealtimedataMiaoqing miaoqing = DeviceRealtimedataMiaoqing.builder()
.deviceId(propertiesMap.get("deviceId"))
.airTemp(toBigDecimalValue(propertiesMap.get("airTemp")))
.mppTemp(toBigDecimalValue(propertiesMap.get("mppTemp")))
.batteryCap(Long.parseLong(propertiesMap.get("batteryCap")))
@ -43,6 +49,15 @@ public class DevLinkMiaoQingDataService extends DevLinkRealTimeDataService {
.shoudong(toBigDecimalValue(propertiesMap.get("shoudong")))
.control(toBigDecimalValue(propertiesMap.get("control")))
.build();
miaoqing.setSaveTime(DateUtils.getNowDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(propertiesMap.get("realTime"));
miaoqing.setRealTime(date);
} catch (ParseException e) {
throw new ServiceException("时间格式转换失败!");
}
System.err.println(miaoqing);
return miaoqing;
}

View File

@ -1,5 +1,6 @@
package com.fastbee.deviceData.api.devlink.service;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils;
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture;
@ -9,6 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
@ -61,6 +65,13 @@ public class DevLinkMoistureDataService extends DevLinkRealTimeDataService{
//TODO set实时时间
.saveTime(DateUtils.getNowDate())
.build();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(propertiesMap.get("realTime"));
build.setRealTime(date);
} catch (ParseException e) {
throw new ServiceException("时间格式转换失败!");
}
System.err.println(build);
return build;

View File

@ -1,9 +1,15 @@
package com.fastbee.deviceData.api.devlink.service;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils;
import com.fastbee.deviceData.domain.DeviceRealtimedataPhotovoltaic;
import com.fastbee.deviceData.mapper.DeviceRealtimedataPhotovoltaicMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
@ -18,6 +24,7 @@ public class DevLinkPhotovoltaicDataService extends DevLinkRealTimeDataService{
//封装数据
public DeviceRealtimedataPhotovoltaic setData(Map<String, String> propertiesMap){
DeviceRealtimedataPhotovoltaic photovoltaic = DeviceRealtimedataPhotovoltaic.builder()
.deviceId(propertiesMap.get("deviceId"))
.airTemp(toBigDecimalValue(propertiesMap.get("airTemp")))
.mppTemp(toBigDecimalValue(propertiesMap.get("mppTemp")))
.batteryCap(toBigDecimalValue(propertiesMap.get("batteryCap")))
@ -64,6 +71,15 @@ public class DevLinkPhotovoltaicDataService extends DevLinkRealTimeDataService{
.cumEleMon2(toBigDecimalValue(propertiesMap.get("cum_ele_mon_2")))
.build();
photovoltaic.setSaveTime(DateUtils.getNowDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(propertiesMap.get("realTime"));
photovoltaic.setRealTime(date);
} catch (ParseException e) {
throw new ServiceException("时间格式转换失败!");
}
System.err.println(photovoltaic);
return photovoltaic;
}

View File

@ -35,6 +35,8 @@ public class DevLinkRealTimeDataService {
// System.err.println("status:"+status);
//获取设备属性以及实时数据值
Object properties = jsonObjectData.get("properties");
//获取数据上报时间
String time = jsonObjectData.get("lastOnlineTime").toString();
JSONArray propertiesArray = JSONUtil.parseArray(properties);
DeviceRealtimedataMeteorology realData = new DeviceRealtimedataMeteorology();
//获取设备各项属性实时数据
@ -66,6 +68,7 @@ public class DevLinkRealTimeDataService {
});
propertiesMap.put("status",status.toString());
propertiesMap.put("deviceId",deviceId);
propertiesMap.put("realTime",time);
return propertiesMap;
}

View File

@ -27,11 +27,11 @@ public class RenKeAuthorizationService {
public String getToken(){
//判断token是否过期
// String cacheToken = stringRedisTemplate.opsForValue().get("renke:user:token");
// if (!Objects.isNull(cacheToken)){
// System.err.println("缓存中获取token:"+cacheToken);
// return cacheToken;
// }
String cacheToken = stringRedisTemplate.opsForValue().get("renke:user:token");
if (!Objects.isNull(cacheToken)){
System.err.println("缓存中获取token:"+cacheToken);
return cacheToken;
}
//获取token
//构建请求体
Map<String,Object> reqBody =new HashMap<>();
@ -50,9 +50,9 @@ public class RenKeAuthorizationService {
int expDate = Integer.parseInt(tokenObject.get("expDate").toString());
Integer periodValidity= expDate - currDate;
//将token存入redis
return tokenObject.get("token").toString();
// stringRedisTemplate.opsForValue().set("renke:user:token", tokenObject.get("token").toString(),2, TimeUnit.HOURS);
// System.err.println("请求获取到token:"+tokenObject.get("token").toString());
// return stringRedisTemplate.opsForValue().get("renke:user:token");
// return tokenObject.get("token").toString();
stringRedisTemplate.opsForValue().set("renke:user:token", tokenObject.get("token").toString(),2, TimeUnit.HOURS);
System.err.println("请求获取到token:"+tokenObject.get("token").toString());
return stringRedisTemplate.opsForValue().get("renke:user:token");
}
}

View File

@ -5,10 +5,18 @@ import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils;
import com.fastbee.deviceData.domain.DeviceRealtimedataWorms;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service
public class RenkeDeviceDataService {
@ -19,10 +27,10 @@ public class RenkeDeviceDataService {
* 获取设备实时数据
* @param deviceAddrs 设备地址支持多个用英文逗号分隔
*/
public void getDeviceRealtimeData(String deviceAddrs) {
public DeviceRealtimedataWorms setData(String deviceAddrs) {
//处理鉴权
// String token = authenticationService.getToken();
String token = new RenKeAuthorizationService().getToken();
String token = authenticationService.getToken();
// String token = new RenKeAuthorizationService().getToken();
//获取设备实时数据
HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/entrance/device/getRealTimeData")
.header("token", token)
@ -34,12 +42,27 @@ public class RenkeDeviceDataService {
}
JSONObject respBody = JSONUtil.parseObj(respBodyStr);
JSONArray realtimeDataList = JSONUtil.parseArray(respBody.get("data"));
System.err.println("设备实时数据:"+realtimeDataList);
JSONObject jsonObject = JSONUtil.parseObj(realtimeDataList.get(0));
JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get("data"));
//获取实时时间
String realTime = jsonObject1.get("DTime").toString();
DeviceRealtimedataWorms deviceRealtimedataWorms = JSONUtil.toBean(jsonObject1, DeviceRealtimedataWorms.class);
deviceRealtimedataWorms.setSaveTime(DateUtils.getNowDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(realTime);
deviceRealtimedataWorms.setRealTime(date);
} catch (ParseException e) {
throw new ServiceException("时间格式转换失败!");
}
System.err.println("设备实时数据:"+deviceRealtimedataWorms);
return deviceRealtimedataWorms;
}
public static void main(String[] args) {
RenkeDeviceDataService renkeDeviceDataService = new RenkeDeviceDataService();
renkeDeviceDataService.getDeviceRealtimeData("1017240042");
renkeDeviceDataService.setData("1017240042");
}
}

View File

@ -2,6 +2,8 @@ package com.fastbee.deviceData.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -23,6 +25,7 @@ import com.fastbee.common.core.domain.BaseEntity;
@AllArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("iot_device_realtimedata_miaoQing")
public class DeviceRealtimedataMiaoqing extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
@ -22,6 +24,7 @@ import com.fastbee.common.core.domain.BaseEntity;
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("iot_device_realtimedata_moisture")
public class DeviceRealtimedataMoisture extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -2,6 +2,8 @@ package com.fastbee.deviceData.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -23,6 +25,7 @@ import com.fastbee.common.core.domain.BaseEntity;
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("iot_device_realtimedata_photovoltaic")
public class DeviceRealtimedataPhotovoltaic extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -1,14 +1,19 @@
package com.fastbee.deviceData.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fastbee.common.annotation.Excel;
import com.fastbee.common.core.domain.BaseEntity;
import java.util.Date;
/**
* 虫情设备实时数据对象 iot_device_realtimedata_worms
*
@ -18,6 +23,7 @@ import com.fastbee.common.core.domain.BaseEntity;
@ApiModel(value = "DeviceRealtimedataWorms",description = "虫情设备实时数据 iot_device_realtimedata_worms")
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("iot_device_realtimedata_worms")
public class DeviceRealtimedataWorms extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -115,4 +121,16 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("设备状态")
private String status;
/** 保存时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "保存时间", width = 30, dateFormat = "yyyy-MM-dd")
@ApiModelProperty("保存时间")
private Date saveTime;
/** 实时时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "实时时间", width = 30, dateFormat = "yyyy-MM-dd")
@ApiModelProperty("实时时间")
private Date realTime;
}

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
import org.apache.ibatis.annotations.Mapper;
@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @date 2024-11-14
*/
@Mapper
public interface DeviceRealtimedataMeteorologyMapper
public interface DeviceRealtimedataMeteorologyMapper extends BaseMapper<DeviceRealtimedataMeteorology>
{
/**
* 查询气象设备实时数据

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.DeviceRealtimedataMiaoqing;
import org.apache.ibatis.annotations.Mapper;
@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @date 2024-11-14
*/
@Mapper
public interface DeviceRealtimedataMiaoqingMapper
public interface DeviceRealtimedataMiaoqingMapper extends BaseMapper<DeviceRealtimedataMiaoqing>
{
/**
* 查询苗青设备实时数据

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture;
import org.apache.ibatis.annotations.Mapper;
@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @date 2024-11-14
*/
@Mapper
public interface DeviceRealtimedataMoistureMapper
public interface DeviceRealtimedataMoistureMapper extends BaseMapper<DeviceRealtimedataMoisture>
{
/**
* 查询墒情实时数据

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.DeviceRealtimedataPhotovoltaic;
import org.apache.ibatis.annotations.Mapper;
@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @date 2024-11-14
*/
@Mapper
public interface DeviceRealtimedataPhotovoltaicMapper
public interface DeviceRealtimedataPhotovoltaicMapper extends BaseMapper<DeviceRealtimedataPhotovoltaic>
{
/**
* 查询光伏设备实时数据

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.DeviceRealtimedataWorms;
import org.apache.ibatis.annotations.Mapper;
@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @date 2024-11-14
*/
@Mapper
public interface DeviceRealtimedataWormsMapper
public interface DeviceRealtimedataWormsMapper extends BaseMapper<DeviceRealtimedataWorms>
{
/**
* 查询虫情设备实时数据

View File

@ -24,10 +24,12 @@
<result property="lat" column="lat" />
<result property="fillLight" column="fill_light" />
<result property="status" column="status" />
<result property="saveTime" column="save_time" />
<result property="realTime" column="real_time" />
</resultMap>
<sql id="selectDeviceRealtimedataWormsVo">
select id, device_addr, rain, worm_flap, insecticide_tem, shake, lng, drying_flap, insecticide, move_worm, mode, drying, rain_flap, attract_worm, illum, drying_tem, lat, fill_light, status from iot_device_realtimedata_worms
select id, device_addr, rain, worm_flap, insecticide_tem, shake, lng, drying_flap, insecticide, move_worm, mode, drying, rain_flap, attract_worm, illum, drying_tem, lat, fill_light, status, save_time, real_time from iot_device_realtimedata_worms
</sql>
<select id="selectDeviceRealtimedataWormsList" parameterType="DeviceRealtimedataWorms" resultMap="DeviceRealtimedataWormsResult">
@ -51,6 +53,8 @@
<if test="lat != null and lat != ''"> and lat = #{lat}</if>
<if test="fillLight != null and fillLight != ''"> and fill_light = #{fillLight}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
<if test="saveTime != null "> and save_time = #{saveTime}</if>
<if test="realTime != null "> and real_time = #{realTime}</if>
</where>
</select>
@ -80,6 +84,8 @@
<if test="lat != null">lat,</if>
<if test="fillLight != null">fill_light,</if>
<if test="status != null">status,</if>
<if test="saveTime != null">save_time,</if>
<if test="realTime != null">real_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="deviceAddr != null">#{deviceAddr},</if>
@ -100,6 +106,8 @@
<if test="lat != null">#{lat},</if>
<if test="fillLight != null">#{fillLight},</if>
<if test="status != null">#{status},</if>
<if test="saveTime != null">#{saveTime},</if>
<if test="realTime != null">#{realTime},</if>
</trim>
</insert>
@ -124,6 +132,8 @@
<if test="lat != null">lat = #{lat},</if>
<if test="fillLight != null">fill_light = #{fillLight},</if>
<if test="status != null">status = #{status},</if>
<if test="saveTime != null">save_time = #{saveTime},</if>
<if test="realTime != null">real_time = #{realTime},</if>
</trim>
where id = #{id}
</update>

View File

@ -7,10 +7,17 @@ import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fastbee.deviceData.api.devlink.service.DevLinkMetDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkMiaoQingDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkMoistureDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkPhotovoltaicDataService;
import com.fastbee.deviceData.api.renke.constant.RenKeDeviceTypeConstant;
import com.fastbee.deviceData.api.renke.service.RenKeAuthorizationService;
import com.fastbee.deviceData.domain.DeviceRealtimedataWorms;
import com.fastbee.deviceData.api.renke.service.RenkeDeviceDataService;
import com.fastbee.deviceData.domain.*;
import com.fastbee.deviceData.mapper.*;
import com.fastbee.deviceData.service.IDeviceRealtimedataWormsService;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataWormsServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -21,56 +28,103 @@ import org.springframework.stereotype.Component;
/**
* @author mijiupro
*/
@Component("renkeDeviceDateTask")
@Component("agricultureDeviceDateTask")
public class DeviceDateTask {
//
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private DeviceRealtimedataWormsServiceImpl deviceRealtimedataWormsServiceImpl;
// @Autowired
// private ThreadPoolTaskExecutor taskExecutor;
@Autowired
private RenKeAuthorizationService renKeAuthorizationService;
private DeviceRealtimedataWormsMapper deviceRealtimedataWormsMapper;
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper;
@Autowired
private DeviceRealtimedataMoistureMapper deviceRealtimedataMoistureMapper;
@Autowired
private DeviceRealtimedataPhotovoltaicMapper deviceRealtimedataPhotovoltaicMapper;
@Autowired
private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper;
@Autowired
private RenkeDeviceDataService wormsService; //虫情设备数据获取
@Autowired
private DevLinkMetDataService metDataService; //气象设备数据获取
@Autowired
private DevLinkMoistureDataService moistureDataService; //墒情设备数据获取
@Autowired
private DevLinkPhotovoltaicDataService photovoltaicDataService; //光伏设备数据获取
@Autowired
private DevLinkMiaoQingDataService miaoQingDataService; //苗情设备数据获取
/**
* 在执行定时任务中出现了异常会终止调度所以需要捕获异常以便于下一轮
* 执行不会影响下一次执行
* 获取虫情设备实时数据并保存
*/
public void getRenkeDeviceRealtimeData() throws Exception{
//获取设备实时数据
//请求参数
HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/entrance/device/getRealTimeData")
.header("token", renKeAuthorizationService.getToken())
.execute();
String respBodyStr = response.body();
if(StringUtils.isBlank(respBodyStr)) {
throw new RuntimeException("获取设备实时数据失败!");
}
JSONObject respBody = JSONUtil.parseObj(respBodyStr);
JSONArray realtimeList = JSONUtil.parseArray(respBody.get("data"));
// threadPoolTaskExecutor.execute( () -> {System.err.println("设备实时数据:"+realtimeList);});
//TODO 解析实时数据保存到数据库
for (Object realtimeData : realtimeList){
JSONObject jsonConversion = JSONUtil.parseObj(realtimeData);
if (RenKeDeviceTypeConstant.WORM.equals(jsonConversion.get("deviceType"))){
JSONObject jsonObject1 = JSONUtil.parseObj(jsonConversion.get("data"));
DeviceRealtimedataWorms deviceRealtimedataWorms = JSONUtil.toBean(jsonObject1, DeviceRealtimedataWorms.class);
deviceRealtimedataWorms.setCreateTime(DateTime.now());
// System.err.println("序列化为蠕虫设备数据类:"+deviceRealtimedataWorms);
if(deviceRealtimedataWormsServiceImpl.insertDeviceRealtimedataWorms(deviceRealtimedataWorms)!=1){
System.out.println("插入失败!");
};
}
public void getWormsDeviceRealtimeData() throws Exception{
DeviceRealtimedataWorms deviceRealtimedataWorms = wormsService.setData("1017240042");
int i = deviceRealtimedataWormsMapper.insert(deviceRealtimedataWorms);
if (i<1){
System.out.println("插入数据失败!");
}
}
/**
* 获取气象设备实时数据并保存
*/
public void getDevLinkMetDeviceRealtimeData() throws Exception{
DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = metDataService.setData(metDataService.getMetDeviceRealData("3269"));
int i = deviceRealtimedataMeteorologyMapper.insert(deviceRealtimedataMeteorology);
if (i<1){
System.out.println("插入数据失败!");
}
}
/**
* 获取墒情设备实时数据并保存
*/
public void getDevLinkMoistureDeviceRealtimeData() throws Exception{
DeviceRealtimedataMoisture deviceRealtimedataMoisture = moistureDataService.setData(moistureDataService.getMetDeviceRealData("3270"));
int i = deviceRealtimedataMoistureMapper.insert(deviceRealtimedataMoisture);
if (i<1)
System.out.println("插入数据失败!");
}
/**
* 获取光伏设备实时数据并保存
*/
public void getDevLinkPhotovoltaicDeviceRealtimeData() throws Exception{
DeviceRealtimedataPhotovoltaic deviceRealtimedataPhotovoltaic = photovoltaicDataService.setData(photovoltaicDataService.getMetDeviceRealData("3276"));
int i = deviceRealtimedataPhotovoltaicMapper.insert(deviceRealtimedataPhotovoltaic);
if (i<1)
System.out.println("插入数据失败!");
}
/**
* 获取苗情设备实时数据并保存
*/
public void getDevLinkMiaoqingDeviceRealtimeData() throws Exception{
DeviceRealtimedataMiaoqing deviceRealtimedataMiaoqing = miaoQingDataService.setData(miaoQingDataService.getMetDeviceRealData("3275"));
int i = deviceRealtimedataMiaoqingMapper.insert(deviceRealtimedataMiaoqing);
if (i<1)
System.out.println("插入数据失败!");
}
}