【功能新增】IoT:验证通过独立、内嵌模式的调用

This commit is contained in:
YunaiV
2025-01-21 19:38:41 +08:00
parent a152f6d98f
commit 916024b891
18 changed files with 294 additions and 63 deletions

View File

@@ -21,6 +21,14 @@
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>provided</scope> <!-- 设置为 provided只有工具类需要使用到 -->
</dependency>
<!-- PF4J -->
<!-- TODO 芋艿:这个依赖,要不要放在 api 包 -->
<dependency>

View File

@@ -1,8 +1,17 @@
package cn.iocoder.yudao.module.iot.api.device;
import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO;
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.enums.ApiConstants;
import jakarta.annotation.security.PermitAll;
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;
// TODO 芋艿:名字可能看情况改下
/**
* 设备数据 API
*
@@ -10,11 +19,35 @@ import jakarta.validation.Valid;
*/
public interface DeviceDataApi {
// TODO @芋艿:可能会调整
String PREFIX = ApiConstants.PREFIX + "/device-data";
/**
* 保存设备数据
* 更新设备状态
*
* @param createDTO 设备数据
* @param updateReqDTO 更新请求
*/
void saveDeviceData(@Valid DeviceDataCreateReqDTO createDTO);
@PutMapping(PREFIX + "/update-status")
@PermitAll // TODO 芋艿:后续看看怎么优化下
CommonResult<Boolean> updateDeviceStatus(@Valid @RequestBody IotDeviceStatusUpdateReqDTO updateReqDTO);
/**
* 上报设备事件数据
*
* @param reportReqDTO 设备事件
*/
@PostMapping(PREFIX + "/report-event")
@PermitAll // TODO 芋艿:后续看看怎么优化下
CommonResult<Boolean> reportDeviceEventData(@Valid @RequestBody IotDeviceEventReportReqDTO reportReqDTO);
/**
* 上报设备属性数据
*
* @param reportReqDTO 设备数据
*/
@PostMapping(PREFIX + "/report-property")
@PermitAll // TODO 芋艿:后续看看怎么优化下
CommonResult<Boolean> reportDevicePropertyData(@Valid @RequestBody IotDevicePropertyReportReqDTO reportReqDTO);
}

View File

@@ -1,31 +0,0 @@
package cn.iocoder.yudao.module.iot.api.device.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.validation.constraints.NotNull;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeviceDataCreateReqDTO {
/**
* 产品标识
*/
@NotNull(message = "产品标识不能为空")
private String productKey;
/**
* 设备名称
*/
@NotNull(message = "设备名称不能为空")
private String deviceName;
/**
* 消息
*/
@NotNull(message = "消息不能为空")
private String message;
}

View File

@@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.iot.api.device.dto;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
/**
* IoT 设备【事件】数据上报 Request DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IotDeviceEventReportReqDTO {
// TODO 芋艿:要不要 id
// TODO 芋艿:要不要 time
/**
* 产品标识
*/
@NotEmpty(message = "产品标识不能为空")
private String productKey;
/**
* 设备名称
*/
@NotEmpty(message = "设备名称不能为空")
private String deviceName;
/**
* 事件标识
*/
@NotEmpty(message = "事件标识不能为空")
private String identifier;
/**
* 事件参数
*/
@NotEmpty(message = "事件参数不能为空")
private Map<String, Object> params;
}

View File

@@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.iot.api.device.dto;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
/**
* IoT 设备【属性】数据上报 Request DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IotDevicePropertyReportReqDTO {
// TODO 芋艿:要不要 id
// TODO 芋艿:要不要 time
/**
* 产品标识
*/
@NotEmpty(message = "产品标识不能为空")
private String productKey;
/**
* 设备名称
*/
@NotEmpty(message = "设备名称不能为空")
private String deviceName;
/**
* 属性参数
*/
@NotEmpty(message = "属性参数不能为空")
private Map<String, Object> params;
}

View File

@@ -0,0 +1,40 @@
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.IotDeviceStatusEnum;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* IoT 设备状态更新 Request DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IotDeviceStatusUpdateReqDTO {
// TODO 芋艿:要不要 id
// TODO 芋艿:要不要 time
/**
* 产品标识
*/
@NotEmpty(message = "产品标识不能为空")
private String productKey;
/**
* 设备名称
*/
@NotEmpty(message = "设备名称不能为空")
private String deviceName;
/**
* 设备状态
*/
@NotEmpty(message = "设备状态不能为空")
@InEnum(IotDeviceStatusEnum.class) // 只使用:在线、离线
private Integer status;
}

View File

@@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.iot.enums;
import cn.iocoder.yudao.framework.common.enums.RpcConstants;
/**
* API 相关的枚举
*
* @author 芋道源码
*/
public class ApiConstants {
public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/iot";
public static final String VERSION = "1.0.0";
}