diff --git a/yudao-module-iot/yudao-module-iot-api/pom.xml b/yudao-module-iot/yudao-module-iot-api/pom.xml index e76911637e..9b47273814 100644 --- a/yudao-module-iot/yudao-module-iot-api/pom.xml +++ b/yudao-module-iot/yudao-module-iot-api/pom.xml @@ -12,6 +12,7 @@ jar ${project.artifactId} + 物联网 模块 API,暴露给其它模块调用 @@ -42,6 +43,13 @@ + + + com.fasterxml.jackson.core + jackson-databind + provided + + org.springframework.boot diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/IotDeviceUpstreamApi.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/IotDeviceUpstreamApi.java index a7c28b8cbe..2af479e430 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/IotDeviceUpstreamApi.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/IotDeviceUpstreamApi.java @@ -3,11 +3,10 @@ package cn.iocoder.yudao.module.iot.api.device; import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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 cn.iocoder.yudao.module.iot.enums.ApiConstants; import jakarta.validation.Valid; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; /** @@ -26,8 +25,8 @@ public interface IotDeviceUpstreamApi { * * @param updateReqDTO 更新设备状态 DTO */ - @PutMapping(PREFIX + "/update-status") - CommonResult updateDeviceStatus(@Valid @RequestBody IotDeviceStatusUpdateReqDTO updateReqDTO); + @PostMapping(PREFIX + "/update-state") + CommonResult updateDeviceState(@Valid @RequestBody IotDeviceStateUpdateReqDTO updateReqDTO); /** * 上报设备属性数据 diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceEventReportReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceEventReportReqDTO.java index 6376eb8a41..6eacde2eec 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceEventReportReqDTO.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceEventReportReqDTO.java @@ -2,8 +2,6 @@ package cn.iocoder.yudao.module.iot.api.device.dto; import jakarta.validation.constraints.NotEmpty; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; import java.util.Map; @@ -11,8 +9,6 @@ import java.util.Map; * IoT 设备【事件】数据上报 Request DTO */ @Data -@SuperBuilder -@NoArgsConstructor public class IotDeviceEventReportReqDTO extends IotDeviceUpstreamAbstractReqDTO { /** diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDevicePropertyReportReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDevicePropertyReportReqDTO.java index 9173a39ca9..b848dfbcc9 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDevicePropertyReportReqDTO.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDevicePropertyReportReqDTO.java @@ -2,8 +2,6 @@ package cn.iocoder.yudao.module.iot.api.device.dto; import jakarta.validation.constraints.NotEmpty; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; import java.util.Map; @@ -11,8 +9,6 @@ import java.util.Map; * IoT 设备【属性】数据上报 Request DTO */ @Data -@SuperBuilder -@NoArgsConstructor public class IotDevicePropertyReportReqDTO extends IotDeviceUpstreamAbstractReqDTO { /** diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStatusUpdateReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStateUpdateReqDTO.java similarity index 53% rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStatusUpdateReqDTO.java rename to yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStateUpdateReqDTO.java index e6fea60c37..94d5b498cc 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStatusUpdateReqDTO.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStateUpdateReqDTO.java @@ -2,24 +2,20 @@ package cn.iocoder.yudao.module.iot.api.device.dto; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStateEnum; -import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; /** * IoT 设备状态更新 Request DTO */ @Data -@SuperBuilder -@NoArgsConstructor -public class IotDeviceStatusUpdateReqDTO extends IotDeviceUpstreamAbstractReqDTO { +public class IotDeviceStateUpdateReqDTO extends IotDeviceUpstreamAbstractReqDTO { /** * 设备状态 */ - @NotEmpty(message = "设备状态不能为空") + @NotNull(message = "设备状态不能为空") @InEnum(IotDeviceStateEnum.class) // 只使用:在线、离线 - private Integer status; + private Integer state; } diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceUpstreamAbstractReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceUpstreamAbstractReqDTO.java index b2a843effc..1caf422de7 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceUpstreamAbstractReqDTO.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceUpstreamAbstractReqDTO.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.iot.api.device.dto; +import cn.iocoder.yudao.framework.common.util.json.databind.TimestampLocalDateTimeSerializer; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import jakarta.validation.constraints.NotEmpty; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; import java.time.LocalDateTime; @@ -13,8 +13,6 @@ import java.time.LocalDateTime; * @author 芋道源码 */ @Data -@SuperBuilder -@NoArgsConstructor public abstract class IotDeviceUpstreamAbstractReqDTO { /** @@ -41,6 +39,7 @@ public abstract class IotDeviceUpstreamAbstractReqDTO { /** * 上报时间 */ + @JsonSerialize(using = TimestampLocalDateTimeSerializer.class) // 解决 iot plugins 序列化 LocalDateTime 是数组,导致无法解析的问题 private LocalDateTime reportTime; } diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java index bb639f49a2..5289575b02 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java @@ -12,7 +12,11 @@ public enum IotDeviceMessageIdentifierEnum { PROPERTY_GET("get"), PROPERTY_SET("set"), - PROPERTY_REPORT("report"); + PROPERTY_REPORT("report"), + + STATE_ONLINE("online"), + STATE_OFFLINE("offline"); + /** * 标志符 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/api/device/IoTDeviceUpstreamApiImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/api/device/IoTDeviceUpstreamApiImpl.java index 3ee3ec6a4f..c4c34caa29 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/api/device/IoTDeviceUpstreamApiImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/api/device/IoTDeviceUpstreamApiImpl.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.api.device; import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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 cn.iocoder.yudao.module.iot.service.device.upstream.IotDeviceUpstreamService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; @@ -23,8 +23,8 @@ public class IoTDeviceUpstreamApiImpl implements IotDeviceUpstreamApi { private IotDeviceUpstreamService deviceUpstreamService; @Override - public CommonResult updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { - deviceUpstreamService.updateDeviceStatus(updateReqDTO); + public CommonResult updateDeviceState(IotDeviceStateUpdateReqDTO updateReqDTO) { + deviceUpstreamService.updateDeviceState(updateReqDTO); return success(true); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/emq/service/EmqxServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/emq/service/EmqxServiceImpl.java index 6d45b9be9a..1260209eba 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/emq/service/EmqxServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/emq/service/EmqxServiceImpl.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.iot.emq.service; -import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; import cn.iocoder.yudao.module.iot.service.device.data.IotDevicePropertyService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -34,11 +33,11 @@ public class EmqxServiceImpl implements EmqxService { String productKey = topic.split("/")[2]; String deviceName = topic.split("/")[3]; String message = new String(mqttMessage.getPayload()); - IotDevicePropertyReportReqDTO createDTO = IotDevicePropertyReportReqDTO.builder() +// IotDevicePropertyReportReqDTO createDTO = IotDevicePropertyReportReqDTO.builder() // .productKey(productKey) // .deviceName(deviceName) // .properties(message) // TODO 芋艿:临时去掉,看看 - .build(); +// .build(); // iotDeviceDataService.saveDeviceProperty(createDTO); } } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java index 640ebb7207..eee422dd3f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java @@ -395,10 +395,10 @@ public class IotDeviceServiceImpl implements IotDeviceService { // 2.1 情况一:属性上报 String requestId = IdUtil.fastSimpleUUID(); if (Objects.equals(reportReqVO.getType(), IotDeviceMessageTypeEnum.PROPERTY.getType())) { - deviceUpstreamService.reportDeviceProperty(IotDevicePropertyReportReqDTO.builder() - .requestId(requestId).reportTime(LocalDateTime.now()) - .productKey(device.getProductKey()).deviceName(device.getDeviceName()) - .properties((Map) reportReqVO.getData()).build()); + deviceUpstreamService.reportDeviceProperty(((IotDevicePropertyReportReqDTO) + new IotDevicePropertyReportReqDTO().setRequestId(requestId).setReportTime(LocalDateTime.now()) + .setProductKey(device.getProductKey()).setDeviceName(device.getDeviceName())) + .setProperties((Map) reportReqVO.getData())); return; } // 2.2 情况二:事件上报 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamService.java index 12fd8a9491..1cab0abfc0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.device.upstream; 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; /** * 设备上行 Service 接口 @@ -18,7 +18,7 @@ public interface IotDeviceUpstreamService { * * @param updateReqDTO 更新设备状态 DTO */ - void updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO); + void updateDeviceState(IotDeviceStateUpdateReqDTO updateReqDTO); /** * 上报设备属性数据 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamServiceImpl.java index adfb1f83fd..e27e3eb2c1 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/upstream/IotDeviceUpstreamServiceImpl.java @@ -1,15 +1,20 @@ package cn.iocoder.yudao.module.iot.service.device.upstream; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; 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 cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceUpstreamAbstractReqDTO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; import cn.iocoder.yudao.module.iot.enums.device.IotDeviceMessageIdentifierEnum; import cn.iocoder.yudao.module.iot.enums.device.IotDeviceMessageTypeEnum; +import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStateEnum; import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage; import cn.iocoder.yudao.module.iot.mq.producer.device.IotDeviceProducer; import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; @@ -19,6 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; +import java.util.Objects; /** * 设备上行 Service 实现类 @@ -37,9 +43,39 @@ public class IotDeviceUpstreamServiceImpl implements IotDeviceUpstreamService { private IotDeviceProducer deviceProducer; @Override - public void updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { - log.info("[updateDeviceStatus][更新设备状态: {}]", updateReqDTO); - // TODO 芋艿:插件状态 + public void updateDeviceState(IotDeviceStateUpdateReqDTO updateReqDTO) { + Assert.isTrue(ObjectUtils.equalsAny(updateReqDTO.getState(), + IotDeviceStateEnum.ONLINE.getState(), IotDeviceStateEnum.OFFLINE.getState()), + "状态不合法"); + // 1.1 获得设备 + log.info("[updateDeviceState][更新设备状态: {}]", updateReqDTO); + IotDeviceDO device = deviceService.getDeviceByProductKeyAndDeviceNameFromCache( + updateReqDTO.getProductKey(), updateReqDTO.getDeviceName()); + if (device == null) { + log.error("[updateDeviceState][设备({}/{}) 不存在]", + updateReqDTO.getProductKey(), updateReqDTO.getDeviceName()); + return; + } + // 1.2 记录设备的最后时间 + updateDeviceLastTime(device, updateReqDTO); + // 1.3 当前状态一致,不处理 + if (Objects.equals(device.getState(), updateReqDTO.getState())) { + return; + } + + // 2. 更新设备状态 + TenantUtils.executeIgnore(() -> + deviceService.updateDeviceState(device.getId(), updateReqDTO.getState())); + + // 3. TODO 芋艿:子设备的关联 + + // 4. 发送设备消息 + IotDeviceMessage message = BeanUtils.toBean(updateReqDTO, IotDeviceMessage.class) + .setType(IotDeviceMessageTypeEnum.STATE.getType()) + .setIdentifier(ObjUtil.equals(updateReqDTO.getState(), IotDeviceStateEnum.ONLINE.getState()) + ? IotDeviceMessageIdentifierEnum.STATE_ONLINE.getIdentifier() + : IotDeviceMessageIdentifierEnum.STATE_OFFLINE.getIdentifier()); + sendDeviceMessage(message, device); } @Override diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java index ee68bf0342..a6bdad91ba 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java @@ -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 updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { - String url = deviceDataUrl + URL_PREFIX + "/update-status"; - return doPost(url, updateReqDTO, "updateDeviceStatus"); + public CommonResult updateDeviceState(IotDeviceStateUpdateReqDTO updateReqDTO) { + String url = deviceDataUrl + URL_PREFIX + "/update-state"; + return doPost(url, updateReqDTO, "updateDeviceState"); } @Override diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java index 4ac85c2208..1f04e78098 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java @@ -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 { String id = jsonData.getStr("id"); try { - IotDevicePropertyReportReqDTO reportReqDTO = IotDevicePropertyReportReqDTO.builder() - .productKey(productKey) - .deviceName(deviceName) - .properties((Map) requestBody.asJsonObject().getMap().get("properties")) - .build(); + // TODO @haohao:pluginKey 需要设置 + // 设备上线 + 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) 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()