瀏覽代碼

feat:simulator2

alwayssuper 7 月之前
父節點
當前提交
2b27085ec2

+ 4 - 2
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceDataController.java

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

+ 9 - 0
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataService.java

@@ -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);
+
     /**
      * 获得设备属性最新数据
      *

+ 26 - 0
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java

@@ -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<>();