【功能新增】IoT:设备状态上传的部分实现

This commit is contained in:
YunaiV
2025-01-29 11:38:51 +08:00
parent f6366d9b55
commit f5f8c418dc
14 changed files with 96 additions and 52 deletions

View File

@@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.iot.api.device.IotDeviceUpstreamApi;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStateUpdateReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.client.RestTemplate;
@@ -29,9 +29,9 @@ public class DeviceDataApiClient implements IotDeviceUpstreamApi {
// TODO @haohao返回结果不用 CommonResult 哈。
@Override
public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) {
String url = deviceDataUrl + URL_PREFIX + "/update-status";
return doPost(url, updateReqDTO, "updateDeviceStatus");
public CommonResult<Boolean> updateDeviceState(IotDeviceStateUpdateReqDTO updateReqDTO) {
String url = deviceDataUrl + URL_PREFIX + "/update-state";
return doPost(url, updateReqDTO, "updateDeviceState");
}
@Override

View File

@@ -1,14 +1,18 @@
package cn.iocoder.yudao.module.iot.plugin.http.service;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.iot.api.device.IotDeviceUpstreamApi;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStateUpdateReqDTO;
import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStateEnum;
import io.vertx.core.Handler;
import io.vertx.ext.web.RequestBody;
import io.vertx.ext.web.RoutingContext;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.Map;
@Slf4j
@@ -43,20 +47,27 @@ public class HttpVertxHandler implements Handler<RoutingContext> {
String id = jsonData.getStr("id");
try {
IotDevicePropertyReportReqDTO reportReqDTO = IotDevicePropertyReportReqDTO.builder()
.productKey(productKey)
.deviceName(deviceName)
.properties((Map<String, Object>) requestBody.asJsonObject().getMap().get("properties"))
.build();
// TODO @haohaopluginKey 需要设置
// 设备上线
deviceDataApi.updateDeviceState(((IotDeviceStateUpdateReqDTO)
new IotDeviceStateUpdateReqDTO().setRequestId(IdUtil.fastSimpleUUID())
.setPluginKey("http")
.setReportTime(LocalDateTime.now())
.setProductKey(productKey).setDeviceName(deviceName))
.setState(IotDeviceStateEnum.ONLINE.getState()));
deviceDataApi.reportDeviceProperty(reportReqDTO);
// 属性上报
deviceDataApi.reportDeviceProperty(((IotDevicePropertyReportReqDTO)
new IotDevicePropertyReportReqDTO().setRequestId(IdUtil.fastSimpleUUID())
.setPluginKey("http").setReportTime(LocalDateTime.now())
.setProductKey(productKey).setDeviceName(deviceName))
.setProperties((Map<String, Object>) requestBody.asJsonObject().getMap().get("properties")));
ctx.response()
.setStatusCode(200)
.putHeader("Content-Type", "application/json; charset=UTF-8")
.end(createResponseJson(200, new JSONObject(), id, "success",
"thing.event.property.post", "1.0").toString());
} catch (Exception e) {
log.error("[HttpVertxHandler] 上报属性数据失败", e);
ctx.response()