feat:simulator2

This commit is contained in:
alwayssuper 2025-01-22 22:08:10 +08:00
parent 13ced8a114
commit 2b27085ec2
3 changed files with 39 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.device;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO;
@ -54,10 +55,11 @@ public class IotDeviceDataController {
// TODO:数据权限
@PostMapping("/simulator")
@Operation(summary = "模拟设备")
public CommonResult<Boolean> simulatorDevice(@Valid @RequestBody IotDeviceDataSimulatorSaveReqVO simulatorReqVO) {
public CommonResult<Boolean> simulatorDevice(@Valid @RequestBody IotDeviceDataSimulatorSaveReqVO simulcatorReqVO) {
//TODO:先生成一下设备日志 后续完善模拟设备代码逻辑
// TODO @super应该 deviceDataService 里面有个 simulatorDevice然后里面去 insert 日志
iotDeviceLogDataService.createDeviceLog(simulatorReqVO);
IotDevicePropertyReportReqDTO simulatorReqVO = new IotDevicePropertyReportReqDTO();
deviceDataService.simulateSend(simulatorReqVO);
return success(true);
}

View File

@ -3,6 +3,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.IotDevicePropertyReportReqDTO;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataSimulatorSaveReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThingModelMessage;
import jakarta.validation.Valid;
@ -39,6 +40,14 @@ public interface IotDevicePropertyDataService {
*/
void saveDeviceDataTest(ThingModelMessage thingModelMessage);
/**
* 模拟设备
*
* @param simulatorReqVO 设备数据
*/
void simulateSend(IotDevicePropertyReportReqDTO simulatorReqVO);
/**
* 获得设备属性最新数据
*

View File

@ -8,6 +8,7 @@ import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.device.vo.deviceData.IotDeviceDataSimulatorSaveReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
@ -22,6 +23,7 @@ import cn.iocoder.yudao.module.iot.enums.IotConstants;
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotDataSpecsDataTypeEnum;
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum;
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
import cn.iocoder.yudao.module.iot.mq.producer.simulatesend.SimulateSendProducer;
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
import cn.iocoder.yudao.module.iot.service.tdengine.IotThingModelMessageService;
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
@ -76,6 +78,9 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe
@Resource
private IotProductService productService;
@Resource
private SimulateSendProducer simulateSendProducer;
@Resource
private TdEngineDMLMapper tdEngineDMLMapper;
@ -159,6 +164,27 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe
thingModelMessageService.saveThingModelMessage(device, thingModelMessage);
}
//TODO: copy了saveDeviceData的逻辑后续看看这块怎么优化
@Override
public void simulateSend(IotDevicePropertyReportReqDTO simulatorReqVO) {
// 1. 根据产品 key 和设备名称获得设备信息
IotDeviceDO device = deviceService.getDeviceByProductKeyAndDeviceName(simulatorReqVO.getProductKey(), simulatorReqVO.getDeviceName());
// 2. 解析消息保存数据
JSONObject jsonObject = new JSONObject(simulatorReqVO.getParams());
log.info("[saveDeviceData][productKey({}) deviceName({}) data({})]", simulatorReqVO.getProductKey(), simulatorReqVO.getDeviceName(), jsonObject);
ThingModelMessage thingModelMessage = ThingModelMessage.builder()
.id(jsonObject.getStr("id"))
.sys(jsonObject.get("sys"))
.method(jsonObject.getStr("method"))
.params(jsonObject.get("params"))
.time(jsonObject.getLong("time") == null ? System.currentTimeMillis() : jsonObject.getLong("time"))
.productKey(simulatorReqVO.getProductKey())
.deviceName(simulatorReqVO.getDeviceName())
.deviceKey(device.getDeviceKey())
.build();
simulateSendProducer.sendSimulateMessage(thingModelMessage);
}
@Override
public List<IotDeviceDataDO> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO deviceDataReqVO) {
List<IotDeviceDataDO> list = new ArrayList<>();