From 91d2929cb17e7b93678c8075f35d9535945740fe Mon Sep 17 00:00:00 2001 From: mi9688 Date: Wed, 13 Nov 2024 17:41:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=B0=94=E8=B1=A1=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=AE=9E=E6=97=B6=E6=95=B0=E6=8D=AE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DevLinkAuthorizationService.java | 53 ++++++ .../service/DevLinkMoistureService.java | 76 ++++++++ .../domain/DeviceRealtimedataMeteorology.java | 118 ++++++------ .../DeviceRealtimedataMeteorologyMapper.xml | 172 ++++++++---------- .../com/fastbee/iot/timer/DeviceDateTask.java | 47 +++-- 5 files changed, 284 insertions(+), 182 deletions(-) create mode 100644 fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkAuthorizationService.java create mode 100644 fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkMoistureService.java diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkAuthorizationService.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkAuthorizationService.java new file mode 100644 index 0000000..d4d0e23 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkAuthorizationService.java @@ -0,0 +1,53 @@ +package com.fastbee.deviceData.api.devlink.service; + +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.bind.DatatypeConverter; +import java.nio.charset.StandardCharsets; + + +@Component +public class DevLinkAuthorizationService { + + private final static String ak = "suibin"; + + private final static String sk = "MZALH5WB"; + + private final static String authId = "23"; + + private final static String BASE_URL = "https://plat.developlink.cloud/prod-api/iot/data/forward"; + + + public String getBaseUrl(){ + return BASE_URL; + } + + public String getAuth(){ + String sign; +// long time = 1731480451430L; + long time = System.currentTimeMillis(); + String message = "ak=" + ak + "&authId=" + authId + "&time=" + time; + try { + SecretKeySpec keySpec = new SecretKeySpec( + sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(keySpec); + byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8)); + sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase(); +// System.out.println("d6dbca6837dcfec70954b7261eb6dfadc06fcdfdb771d86ee901ab4823bbb33c"); + System.err.println("result:"+sign); + } catch (Exception e) { + throw new RuntimeException("Unable to generate HMAC : " + e.getMessage(), e); + } + return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId; + } + + public static void main(String[] args) { + DevLinkAuthorizationService de = new DevLinkAuthorizationService(); + de.getAuth(); + System.out.println(de.getBaseUrl()+de.getAuth()); + + } +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkMoistureService.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkMoistureService.java new file mode 100644 index 0000000..71df015 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/devlink/service/DevLinkMoistureService.java @@ -0,0 +1,76 @@ +package com.fastbee.deviceData.api.devlink.service; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.fastbee.deviceData.api.renke.service.RenkeMetDeviceService; +import com.fastbee.deviceData.mapper.DeviceRealtimedataMeteorologyMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class DevLinkMoistureService { + + @Autowired + private DevLinkAuthorizationService authorizationService; + + @Autowired + private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper; + + /** + * 获取设备列表 + */ + public List getMoistureDevice(){ + DevLinkAuthorizationService authorization = new DevLinkAuthorizationService(); + //构建请求体 + HashMap body = new HashMap<>(); + body.put("method","get"); + body.put("path","api/v1/product/device/run_status"); + Map params=new HashMap<>(); + params.put("id","3269"); + body.put("params",params); + String jsonStr = JSONUtil.toJsonStr(body); + System.err.println(authorization.getBaseUrl() + authorization.getAuth()); + String result = HttpUtil.post(authorization.getBaseUrl() + authorization.getAuth(), jsonStr); + System.err.println(result); + JSONObject jsonObject = JSONUtil.parseObj(result); + Object data = jsonObject.get("data"); + //获取设备状态 + JSONObject jsonObjectData = JSONUtil.parseObj(data); + Object status = jsonObjectData.get("status"); + //获取设备属性以及实时数据值 + Object properties = jsonObject.get("properties"); + JSONArray propertiesArray = JSONUtil.parseArray(properties); + //获取设备各项属性实时数据 + propertiesArray.forEach(p -> { + + Object property = JSONUtil.parseObj(p).get("property"); + JSONObject propertyMap = JSONUtil.parseObj(property); + //属性名称 + propertyMap.get("name"); + //属性key + propertyMap.get("key"); + //属性值 + Object value = JSONUtil.parseObj(p).get("value"); + //TODO 属性值历史数据,是否需要 + Object list = JSONUtil.parseObj(p).get("list"); + //TODO 封装所需数据 + deviceRealtimedataMeteorologyMapper.insertDeviceRealtimedataMeteorology(null); + + }); + + return null; + } + + public static void main(String[] args) { + DevLinkMoistureService service = new DevLinkMoistureService(); + service.getMoistureDevice(); + } +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/domain/DeviceRealtimedataMeteorology.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/domain/DeviceRealtimedataMeteorology.java index 50230f7..2824249 100644 --- a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/domain/DeviceRealtimedataMeteorology.java +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/domain/DeviceRealtimedataMeteorology.java @@ -1,6 +1,6 @@ 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.Data; @@ -14,89 +14,77 @@ import com.fastbee.common.core.domain.BaseEntity; * 气象设备实时数据对象 iot_device_realtimedata_meteorology * * @author kerwincui - * @date 2024-11-13 + * @date 2024-11-08 */ @ApiModel(value = "DeviceRealtimedataMeteorology",description = "气象设备实时数据 iot_device_realtimedata_meteorology") @Data @EqualsAndHashCode(callSuper = true) +@TableName("iot_device_realtimedata_meteorology") public class DeviceRealtimedataMeteorology extends BaseEntity { private static final long serialVersionUID = 1L; - /** 主键 */ - private Long id; + /** 节点编号 */ + private Long nodeId; - /** 设备id */ - @Excel(name = "设备id") - @ApiModelProperty("设备id") - private Long deviceId; + /** 节点名称 */ + @Excel(name = "节点名称") + @ApiModelProperty("节点名称") + private String nodeName; - /** 空气温度 */ - @Excel(name = "空气温度") - @ApiModelProperty("空气温度") - private BigDecimal airTemp; + /** 节点类型 -- 节点类型 --1:模拟量1使能模拟量2使能 --2:模拟量1使能模拟量2禁用 --3:模拟量1禁用模拟量2使能 --4:浮点型设备--5:开关量型设备 --6:32位有符号整形 --7:32位无符号整形--8:遥调设备 */ + @Excel(name = "节点类型 -- 节点类型 --1:模拟量1使能模拟量2使能 --2:模拟量1使能模拟量2禁用 --3:模拟量1禁用模拟量2使能 --4:浮点型设备--5:开关量型设备 --6:32位有符号整形 --7:32位无符号整形--8:遥调设备") + @ApiModelProperty("节点类型 -- 节点类型 --1:模拟量1使能模拟量2使能 --2:模拟量1使能模拟量2禁用 --3:模拟量1禁用模拟量2使能 --4:浮点型设备--5:开关量型设备 --6:32位有符号整形 --7:32位无符号整形--8:遥调设备") + private Long nodeType; - /** 空气湿度 */ - @Excel(name = "空气湿度") - @ApiModelProperty("空气湿度") - private BigDecimal airHumi; + /** 模拟量1名称 */ + @Excel(name = "模拟量1名称") + @ApiModelProperty("模拟量1名称") + private String temName; - /** 风速 */ - @Excel(name = "风速") - @ApiModelProperty("风速") - private BigDecimal windSpeed; + /** 模拟量1单位 */ + @Excel(name = "模拟量1单位") + @ApiModelProperty("模拟量1单位") + private String temUnit; - /** 风向 */ - @Excel(name = "风向") - @ApiModelProperty("风向") - private Long windDir; + /** 模拟量1原值 */ + @Excel(name = "模拟量1原值") + @ApiModelProperty("模拟量1原值") + private Long temValue; - /** 大气压力 */ - @Excel(name = "大气压力") - @ApiModelProperty("大气压力") - private BigDecimal airPre; + /** 模拟量1显示值 */ + @Excel(name = "模拟量1显示值") + @ApiModelProperty("模拟量1显示值") + private String temValueStr; - /** 光照度 */ - @Excel(name = "光照度") - @ApiModelProperty("光照度") - private Long guangzhao; + /** 报警等级, -- 报警等级 --0:正常--1:超上限报警 --2:超下限报警 --3:开关闭合报警 --4:开关断开报警 --5:遥调报警 */ + @Excel(name = "报警等级, -- 报警等级 --0:正常--1:超上限报警 --2:超下限报警 --3:开关闭合报警 --4:开关断开报警 --5:遥调报警") + @ApiModelProperty("报警等级, -- 报警等级 --0:正常--1:超上限报警 --2:超下限报警 --3:开关闭合报警 --4:开关断开报警 --5:遥调报警") + private Long temAlarmStatus; - /** 光合有效辐射 */ - @Excel(name = "光合有效辐射") - @ApiModelProperty("光合有效辐射") - private BigDecimal fushe; + /** 模拟量2名称 */ + @Excel(name = "模拟量2名称") + @ApiModelProperty("模拟量2名称") + private String humName; - /** 累积雨量 */ - @Excel(name = "累积雨量") - @ApiModelProperty("累积雨量") - private BigDecimal sumRain; + /** 模拟量2单位 */ + @Excel(name = "模拟量2单位") + @ApiModelProperty("模拟量2单位") + private String humUnit; - /** 瞬时雨量 */ - @Excel(name = "瞬时雨量") - @ApiModelProperty("瞬时雨量") - private BigDecimal insRain; + /** 模拟量2原值 */ + @Excel(name = "模拟量2原值") + @ApiModelProperty("模拟量2原值") + private Long humValue; - /** 日雨量 */ - @Excel(name = "日雨量") - @ApiModelProperty("日雨量") - private BigDecimal dayRain; + /** 模拟量2显示值 */ + @Excel(name = "模拟量2显示值") + @ApiModelProperty("模拟量2显示值") + private String humValueStr; - /** 蒸发量 */ - @Excel(name = "蒸发量") - @ApiModelProperty("蒸发量") - private BigDecimal zhengfa; - - /** 土壤温度 */ - @Excel(name = "土壤温度") - @ApiModelProperty("土壤温度") - private BigDecimal soilTemp; - - /** 土壤湿度 */ - @Excel(name = "土壤湿度") - @ApiModelProperty("土壤湿度") - private BigDecimal soilHumi; - - /** 删除标志(0代表存在,2代表删除) */ - private Integer delFlag; + /** 报警等级 , --0:正常 --1:超上限报警 --2:超下限报警 */ + @Excel(name = "报警等级 , --0:正常 --1:超上限报警 --2:超下限报警") + @ApiModelProperty("报警等级 , --0:正常 --1:超上限报警 --2:超下限报警") + private Long humAlarmStatus; } diff --git a/fastbee-service/fastbee-device-service/src/main/resources/mapper.deviceData/DeviceRealtimedataMeteorologyMapper.xml b/fastbee-service/fastbee-device-service/src/main/resources/mapper.deviceData/DeviceRealtimedataMeteorologyMapper.xml index 250e8bb..d1c087e 100644 --- a/fastbee-service/fastbee-device-service/src/main/resources/mapper.deviceData/DeviceRealtimedataMeteorologyMapper.xml +++ b/fastbee-service/fastbee-device-service/src/main/resources/mapper.deviceData/DeviceRealtimedataMeteorologyMapper.xml @@ -5,137 +5,113 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - select id, device_id, air_temp, air_humi, wind_speed, wind_dir, air_pre, guangzhao, fushe, sum_rain, ins_rain, day_rain, zhengfa, soil_temp, soil_humi, del_flag, create_time, create_by, update_time, update_by from iot_device_realtimedata_meteorology + select node_id, node_name, node_type, tem_name, tem_unit, tem_value, tem_value_str, tem_alarm_status, hum_name, hum_unit, hum_value, hum_value_str, hum_alarm_status, create_time from iot_device_realtimedata_meteorology - - where id = #{id} + where node_id = #{nodeId} - + insert into iot_device_realtimedata_meteorology - device_id, - air_temp, - air_humi, - wind_speed, - wind_dir, - air_pre, - guangzhao, - fushe, - sum_rain, - ins_rain, - day_rain, - zhengfa, - soil_temp, - soil_humi, - del_flag, + node_id, + node_name, + node_type, + tem_name, + tem_unit, + tem_value, + tem_value_str, + tem_alarm_status, + hum_name, + hum_unit, + hum_value, + hum_value_str, + hum_alarm_status, create_time, - create_by, - update_time, - update_by, - #{deviceId}, - #{airTemp}, - #{airHumi}, - #{windSpeed}, - #{windDir}, - #{airPre}, - #{guangzhao}, - #{fushe}, - #{sumRain}, - #{insRain}, - #{dayRain}, - #{zhengfa}, - #{soilTemp}, - #{soilHumi}, - #{delFlag}, + #{nodeId}, + #{nodeName}, + #{nodeType}, + #{temName}, + #{temUnit}, + #{temValue}, + #{temValueStr}, + #{temAlarmStatus}, + #{humName}, + #{humUnit}, + #{humValue}, + #{humValueStr}, + #{humAlarmStatus}, #{createTime}, - #{createBy}, - #{updateTime}, - #{updateBy}, update iot_device_realtimedata_meteorology - device_id = #{deviceId}, - air_temp = #{airTemp}, - air_humi = #{airHumi}, - wind_speed = #{windSpeed}, - wind_dir = #{windDir}, - air_pre = #{airPre}, - guangzhao = #{guangzhao}, - fushe = #{fushe}, - sum_rain = #{sumRain}, - ins_rain = #{insRain}, - day_rain = #{dayRain}, - zhengfa = #{zhengfa}, - soil_temp = #{soilTemp}, - soil_humi = #{soilHumi}, - del_flag = #{delFlag}, + node_name = #{nodeName}, + node_type = #{nodeType}, + tem_name = #{temName}, + tem_unit = #{temUnit}, + tem_value = #{temValue}, + tem_value_str = #{temValueStr}, + tem_alarm_status = #{temAlarmStatus}, + hum_name = #{humName}, + hum_unit = #{humUnit}, + hum_value = #{humValue}, + hum_value_str = #{humValueStr}, + hum_alarm_status = #{humAlarmStatus}, create_time = #{createTime}, - create_by = #{createBy}, - update_time = #{updateTime}, - update_by = #{updateBy}, - where id = #{id} + where node_id = #{nodeId} - - delete from iot_device_realtimedata_meteorology where id = #{id} + + delete from iot_device_realtimedata_meteorology where node_id = #{nodeId} - - delete from iot_device_realtimedata_meteorology where id in - - #{id} + + delete from iot_device_realtimedata_meteorology where node_id in + + #{nodeId} \ No newline at end of file diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java index 7954523..62acaaa 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java @@ -1,12 +1,15 @@ package com.fastbee.iot.timer; +import cn.hutool.core.date.DateTime; import cn.hutool.http.HttpRequest; 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.renke.constant.RenKeDeviceTypeConstant; import com.fastbee.deviceData.api.renke.service.RenKeAuthorizationService; +import com.fastbee.deviceData.domain.DeviceRealtimedataWorms; import com.fastbee.deviceData.service.impl.DeviceRealtimeDataWormsServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -25,8 +28,6 @@ public class DeviceDateTask { private StringRedisTemplate stringRedisTemplate; @Autowired private DeviceRealtimeDataWormsServiceImpl deviceRealtimedataWormsServiceImpl; - @Autowired - private DeviceRealtimeDataMeteorologyServiceImpl deviceRealtimedataMeteorologyServiceImpl; @Autowired private RenKeAuthorizationService renKeAuthorizationService; @@ -51,30 +52,38 @@ public class DeviceDateTask { } JSONObject respBody = JSONUtil.parseObj(respBodyStr); JSONArray realtimeList = JSONUtil.parseArray(respBody.get("data")); - threadPoolTaskExecutor.execute( () -> {System.err.println("设备实时数据:"+realtimeList);}); +// threadPoolTaskExecutor.execute( () -> {System.err.println("设备实时数据:"+realtimeList);}); //TODO 解析实时数据保存到数据库 -// for (Object jsonObject : realtimeList){ -// JSONObject josnConversion = (JSONObject) jsonObject; -// if (RenKeDeviceTypeConstant.WORM.equals(josnConversion.get("deviceType"))){ -// JSONObject josnArray = JSONUtil.parseObj(josnConversion.get("data")); -// DeviceRealtimedataWorms deviceRealtimedataWorms = JSONUtil.toBean(josnArray, DeviceRealtimedataWorms.class); -// deviceRealtimedataWorms.setCreateTime(DateTime.now()); -// if(deviceRealtimedataWormsServiceImpl.insertDeviceRealtimedataWorms(deviceRealtimedataWorms)==1){ -// System.out.println("插入成功"); -// }; -// }else if (RenKeDeviceTypeConstant.MET.equals(josnConversion.get("deviceType"))){ -// JSONArray josnArray = JSONUtil.parseArray(josnConversion.get("data")); -// for (Object json : josnArray){ -// DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = JSONUtil.toBean((JSONObject) json, DeviceRealtimedataMeteorology.class); + 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("插入失败!"); + }; + } +// else if (RenKeDeviceTypeConstant.MET.equals(jsonConversion.get("deviceType"))){ +// //获取设备地址 +// Object deviceAddr = jsonConversion.get("deviceAddr"); +// JSONArray jsonArray = JSONUtil.parseArray(jsonConversion.get("data")); +//// System.err.println("气象设备数据列表:"+jsonArray); +// for (Object json : jsonArray){ +// JSONObject jsonConversion1 = JSONUtil.parseObj(json); +// DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = JSONUtil.toBean(jsonConversion1, DeviceRealtimedataMeteorology.class); // deviceRealtimedataMeteorology.setCreateTime(DateTime.now()); -// if(deviceRealtimedataMeteorologyServiceImpl.insertDeviceRealtimedataMeteorology(deviceRealtimedataMeteorology)==1){ -// System.out.println("插入成功"); +// deviceRealtimedataMeteorology.setDeviceaddr(deviceAddr.toString()); +//// System.err.println("序列化为气象设备数据类:"+deviceRealtimedataMeteorology); +// if(deviceRealtimedataMeteorologyServiceImpl.insertDeviceRealtimedataMeteorology(deviceRealtimedataMeteorology)!=1){ +// System.out.println("插入失败!"); // } // } // // } -// } + } }