From 7745035fa4d43bced70a8ea96b35711ac624ea01 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 27 Jan 2025 21:32:33 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=91IoT=EF=BC=9A=E8=AE=BE=E5=A4=87=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=A1=A8=EF=BC=8C=E5=A2=9E=E5=8A=A0=20report?= =?UTF-8?q?=5Ftime=20=E4=B8=8A=E6=8A=A5=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tdengine/IotDevicePropertyDataMapper.java | 8 +++-- .../tdengine/core/TDengineTableField.java | 5 --- .../data/IotDevicePropertyServiceImpl.java | 5 +-- .../device/IotDevicePropertyDataMapper.xml | 32 +++++++++++-------- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java index 11a3207d10..ac212cac47 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.iot.dal.tdengine; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO; @@ -30,8 +31,8 @@ public interface IotDevicePropertyDataMapper { default void alterProductPropertySTable(String productKey, List oldFields, List newFields) { - oldFields.removeIf(field -> TDengineTableField.FIELD_TS.equals(field.getField()) - || TDengineTableField.FIELD_DEVICE_KEY.equals(field.getField())); + oldFields.removeIf(field -> StrUtil.equalsAny(field.getField(), + TDengineTableField.FIELD_TS, "device_key", "report_time")); List addFields = newFields.stream().filter( // 新增的字段 newField -> oldFields.stream().noneMatch(oldField -> oldField.getField().equals(newField.getField()))) .collect(Collectors.toList()); @@ -79,7 +80,8 @@ public interface IotDevicePropertyDataMapper { @Param("field") TDengineTableField field); void insert(@Param("device") IotDeviceDO device, - @Param("properties") Map properties); + @Param("properties") Map properties, + @Param("reportTime") Long reportTime); // TODO @芋艿:待实现 /** diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/core/TDengineTableField.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/core/TDengineTableField.java index 427c681892..e3bbdd204f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/core/TDengineTableField.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/core/TDengineTableField.java @@ -17,11 +17,6 @@ public class TDengineTableField { */ public static final String FIELD_TS = "ts"; - /** - * 字段名 - 我们系统定义的 device_key 字段,非 TDengine 默认字段 - */ - public static final String FIELD_DEVICE_KEY = "device_key"; - public static final String TYPE_TINYINT = "TINYINT"; public static final String TYPE_INT = "INT"; public static final String TYPE_FLOAT = "FLOAT"; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java index acf42d7aff..fba2fd6f30 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.iot.service.device.data; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; @@ -97,7 +98,6 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { log.info("[defineDevicePropertyData][productId({}) 没有需要定义的属性]", productId); return; } - newFields.add(0, new TDengineTableField(TDengineTableField.FIELD_TS, TDengineTableField.TYPE_TIMESTAMP)); devicePropertyDataMapper.createProductPropertySTable(product.getProductKey(), newFields); return; } @@ -147,7 +147,8 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { } // 3.1 保存设备属性【数据】 - devicePropertyDataMapper.insert(device, properties); + devicePropertyDataMapper.insert(device, properties, + LocalDateTimeUtil.toEpochMilli(message.getReportTime())); // TODO @芋艿:后续要看看,查询的时候,能不能用 LocalDateTime // 3.2 保存设备属性【日志】 deviceDataRedisDAO.set(message.getDeviceKey(), convertMap(properties.entrySet(), Map.Entry::getKey, diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyDataMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyDataMapper.xml index 3ac238d751..21d1ed16e9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyDataMapper.xml +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyDataMapper.xml @@ -9,13 +9,16 @@ - CREATE STABLE product_property_${productKey} - + CREATE STABLE product_property_${productKey} ( + ts TIMESTAMP, + report_time TIMESTAMP, + ${field.field} ${field.type} (${field.length}) + ) TAGS ( device_key NCHAR(50) ) @@ -42,19 +45,20 @@ DROP COLUMN ${field.field} - - INSERT INTO device_property_${deviceKey} - USING product_property_${productKey} - TAGS ('${deviceKey}') - (ts - - ,${item.fieldName} + + + INSERT INTO device_property_${device.deviceKey} + USING product_property_${device.productKey} + TAGS ('${device.deviceKey}') + (ts, report_time, + + ${key} - ) - VALUES - (NOW - - ,#{item.fieldValue} + ) + VALUES + (NOW, #{reportTime}, + + #{value} )