【功能新增】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

@@ -12,6 +12,7 @@
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<!-- TODO 芋艿:需要在整理下,特别是 PF4J -->
<description>
物联网 模块 API暴露给其它模块调用
</description>
@@ -42,6 +43,13 @@
</exclusions>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope> <!-- 设置为 provided只有工具类需要使用到 -->
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@@ -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<Boolean> updateDeviceStatus(@Valid @RequestBody IotDeviceStatusUpdateReqDTO updateReqDTO);
@PostMapping(PREFIX + "/update-state")
CommonResult<Boolean> updateDeviceState(@Valid @RequestBody IotDeviceStateUpdateReqDTO updateReqDTO);
/**
* 上报设备属性数据

View File

@@ -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 {
/**

View File

@@ -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 {
/**

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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");
/**
* 标志符