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

@@ -1,16 +1,21 @@
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.service.device.IotDevicePropertyDataService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* 设备数据 API 实现类
*/
@Service
@RestController
@Validated
public class DeviceDataApiImpl implements DeviceDataApi {
@@ -18,8 +23,19 @@ public class DeviceDataApiImpl implements DeviceDataApi {
private IotDevicePropertyDataService deviceDataService;
@Override
public void saveDeviceData(DeviceDataCreateReqDTO createDTO) {
deviceDataService.saveDeviceData(createDTO);
public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) {
return success(true);
}
@Override
public CommonResult<Boolean> reportDeviceEventData(IotDeviceEventReportReqDTO reportReqDTO) {
return success(true);
}
@Override
public CommonResult<Boolean> reportDevicePropertyData(IotDevicePropertyReportReqDTO reportReqDTO) {
deviceDataService.saveDeviceData(reportReqDTO);
return success(true);
}
}

View File

@@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.iot.emq.service;
import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.service.device.IotDevicePropertyDataService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -34,10 +34,10 @@ public class EmqxServiceImpl implements EmqxService {
String productKey = topic.split("/")[2];
String deviceName = topic.split("/")[3];
String message = new String(mqttMessage.getPayload());
DeviceDataCreateReqDTO createDTO = DeviceDataCreateReqDTO.builder()
IotDevicePropertyReportReqDTO createDTO = IotDevicePropertyReportReqDTO.builder()
.productKey(productKey)
.deviceName(deviceName)
.message(message)
// .properties(message) // TODO 芋艿:临时去掉,看看
.build();
iotDeviceDataService.saveDeviceData(createDTO);
}

View File

@@ -7,8 +7,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.file.Paths;
// TODO @芋艿:需要 review 下
@Slf4j
@Configuration
@@ -21,8 +19,8 @@ public class UnifiedConfiguration {
// @DependsOn("deviceDataApiImpl")
public SpringPluginManager pluginManager() {
log.info("[init][实例化 SpringPluginManager]");
SpringPluginManager springPluginManager = new SpringPluginManager(Paths.get(pluginsDir)) {
// SpringPluginManager springPluginManager = new SpringPluginManager() {
// SpringPluginManager springPluginManager = new SpringPluginManager(Paths.get(pluginsDir)) {
SpringPluginManager springPluginManager = new SpringPluginManager() {
@Override
public void startPlugins() {

View File

@@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.iot.service.device;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
import jakarta.validation.Valid;
@@ -28,7 +28,7 @@ public interface IotDevicePropertyDataService {
*
* @param createDTO 设备数据
*/
void saveDeviceData(DeviceDataCreateReqDTO createDTO);
void saveDeviceData(IotDevicePropertyReportReqDTO createDTO);
/**
* 获得设备属性最新数据

View File

@@ -6,7 +6,7 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
@@ -130,11 +130,12 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe
}
@Override
public void saveDeviceData(DeviceDataCreateReqDTO createDTO) {
public void saveDeviceData(IotDevicePropertyReportReqDTO createDTO) {
// TODO 芋艿:这块需要实现
// 1. 根据产品 key 和设备名称,获得设备信息
IotDeviceDO device = deviceService.getDeviceByProductKeyAndDeviceName(createDTO.getProductKey(), createDTO.getDeviceName());
// 2. 解析消息,保存数据
JSONObject jsonObject = new JSONObject(createDTO.getMessage());
JSONObject jsonObject = new JSONObject(createDTO.getParams());
log.info("[saveDeviceData][productKey({}) deviceName({}) data({})]", createDTO.getProductKey(), createDTO.getDeviceName(), jsonObject);
ThingModelMessage thingModelMessage = ThingModelMessage.builder()
.id(jsonObject.getStr("id"))