From eaee4642d628ecfb146ac5a1e1826a3c9cbaad6a Mon Sep 17 00:00:00 2001 From: alwayssuper <191763414@qq.com> Date: Tue, 31 Dec 2024 17:00:25 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0]=EF=BC=9A?= =?UTF-8?q?=E7=89=A9=E6=A8=A1=E5=9E=8B=E6=97=A5=E5=BF=97=E8=A1=A8=E5=88=9B?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tdengine/ThingModelMessageDO.java | 24 ++++--- .../tdengine/TdThingModelMessageMapper.java | 6 +- .../IotDevicePropertyDataServiceImpl.java | 7 ++ .../product/IotProductServiceImpl.java | 6 +- .../tdengine/IotThingModelMessageService.java | 7 +- .../IotThingModelMessageServiceImpl.java | 64 +++++++++---------- .../mapper/tdengine/TdEngineDMLMapper.xml | 2 +- .../tdengine/TdThinkModelMessageMapper.xml | 12 ++-- 8 files changed, 62 insertions(+), 66 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java index 7dca6edb06..b647c68730 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; // TODO @芋艿:纠结下字段 +@Deprecated /** * TD 物模型消息日志的数据库 */ @@ -17,26 +18,17 @@ public class ThingModelMessageDO { - // TODO @haohao:superTableName 和 tableName 是不是合并。因为每个 mapper 操作的时候,有且只会使用到其中一个。 - /** - * 超级表名称 - */ - private String superTableName; - - /** - * 表名称 - */ - private String tableName; - /** * 消息 ID */ private String id; /** - * 扩展功能的参数 + * 系统扩展参数 + * + * 例如:设备状态、系统时间、固件版本等系统级信息 */ - private Object sys; + private Object system; /** * 请求方法 @@ -55,6 +47,12 @@ public class ThingModelMessageDO { */ private Long time; + /** + * 设备信息 + */ + private String productKey; + + /** * 设备 key */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdThingModelMessageMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdThingModelMessageMapper.java index fc66119315..798d084ac9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdThingModelMessageMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdThingModelMessageMapper.java @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.iot.dal.tdengine; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThingModelMessage; import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThingModelMessageDO; import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 处理 TD 中物模型消息日志的操作 @@ -20,13 +22,13 @@ public interface TdThingModelMessageMapper { * */ - void createSuperTable(ThingModelMessageDO superTable); + void createSuperTable(@Param("productKey") String productKey); /** * 创建子表 * */ - void createTableWithTag(ThingModelMessageDO table); + void createTableWithTag(@Param("productKey") String productKey,@Param("deviceKey") String deviceKey); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java index eb7fcd430c..cb74747745 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java @@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO; import cn.iocoder.yudao.module.iot.dal.tdengine.IotDevicePropertyDataMapper; import cn.iocoder.yudao.module.iot.dal.redis.deviceData.DeviceDataRedisDAO; import cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDMLMapper; +import cn.iocoder.yudao.module.iot.dal.tdengine.TdThingModelMessageMapper; 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; @@ -84,6 +85,9 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe @Resource private IotDevicePropertyDataMapper devicePropertyDataMapper; + @Resource + private TdThingModelMessageMapper tdThingModelMessageMapper; + @Override public void defineDevicePropertyData(Long productId) { // 1.1 查询产品和物模型 @@ -108,7 +112,10 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe return; } newFields.add(0, new TDengineTableField(TDengineTableField.FIELD_TS, TDengineTableField.TYPE_TIMESTAMP)); + // 2.1.1 创建产品超级表 devicePropertyDataMapper.createProductPropertySTable(product.getProductKey(), newFields); + // 2.1.2 创建物模型日志超级表 + tdThingModelMessageMapper.createSuperTable(product.getProductKey()); return; } // 2.2 情况二:如果是修改的时候,需要更新表 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/product/IotProductServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/product/IotProductServiceImpl.java index d384e44c04..41537664b0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/product/IotProductServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/product/IotProductServiceImpl.java @@ -34,9 +34,6 @@ public class IotProductServiceImpl implements IotProductService { @Resource private IotProductMapper productMapper; - @Resource - @Lazy // 延迟加载,解决循环依赖 - private IotThingModelMessageService thingModelMessageService; @Resource @Lazy // 延迟加载,解决循环依赖 private IotDevicePropertyDataService devicePropertyDataService; @@ -125,8 +122,7 @@ public class IotProductServiceImpl implements IotProductService { if (Objects.equals(status, IotProductStatusEnum.PUBLISHED.getStatus())) { // 3.1 创建产品超级表数据模型 devicePropertyDataService.defineDevicePropertyData(id); - // 3.2 创建物模型日志超级表数据模型 TODO 待定:message 要不要分; - thingModelMessageService.createSuperTable(id); + } productMapper.updateById(updateObj); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageService.java index ab77eb91ac..7f52411d89 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageService.java @@ -16,11 +16,6 @@ public interface IotThingModelMessageService { */ void saveThingModelMessage(IotDeviceDO device, ThingModelMessage thingModelMessage); - /** - * 创建物模型消息日志超级表 - * - * @param productId 产品编号 - */ - void createSuperTable(Long productId); + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageServiceImpl.java index 1654c56f5e..395d1e91f1 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageServiceImpl.java @@ -79,7 +79,7 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ iotDeviceService.updateDeviceStatus(new IotDeviceStatusUpdateReqVO() .setId(device.getId()).setStatus(IotDeviceStatusEnum.ONLINE.getStatus())); // 1.2 创建物模型日志设备表 - createThingModelMessageDeviceTable(device.getProductKey(), device.getDeviceKey()); + tdThingModelMessageMapper.createTableWithTag(device.getProductKey(), device.getDeviceKey()); } // 2. 获取设备属性并进行物模型校验,过滤非物模型属性 @@ -108,32 +108,34 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ thingModel -> IotThingModelTypeEnum.PROPERTY.getType().equals(thingModel.getType())); } - @Override - @TenantIgnore - public void createSuperTable(Long productId) { - // 1. 查询产品 - IotProductDO product = productService.getProduct(productId); - - // 2. 获取超级表的名称和数据库名称 - // TODO @alwayssuper:最好 databaseName、superTableName 的处理,放到 tdThinkModelMessageMapper 里。可以考虑,弄个 default 方法 - String databaseName = IotTdDatabaseUtils.getDatabaseName(url); - String superTableName = IotTdDatabaseUtils.getThingModelMessageSuperTableName(product.getProductKey()); - - // 解析物模型,获取字段列表 - List schemaFields = List.of( - TdFieldDO.builder().fieldName("time").dataType("TIMESTAMP").build(), - TdFieldDO.builder().fieldName("id").dataType("NCHAR").dataLength(64).build(), - TdFieldDO.builder().fieldName("sys").dataType("NCHAR").dataLength(2048).build(), - TdFieldDO.builder().fieldName("method").dataType("NCHAR").dataLength(256).build(), - TdFieldDO.builder().fieldName("params").dataType("NCHAR").dataLength(2048).build() - ); - // 设置超级表的标签 - List tagsFields = List.of( - TdFieldDO.builder().fieldName("device_key").dataType("NCHAR").dataLength(64).build() - ); - // 3. 创建超级表 - tdEngineDDLMapper.createSuperTable(new TdTableDO(databaseName, superTableName, schemaFields, tagsFields)); - } +// @Override +// @TenantIgnore +// public void createSuperTable(Long productId) { +// // 1. 查询产品 +// IotProductDO product = productService.getProduct(productId); +// // 2. 创建日志超级表 +// tdThingModelMessageMapper.createSuperTable(product.getProductKey()); +// +// // 2. 获取超级表的名称和数据库名称 +// // TODO @alwayssuper:最好 databaseName、superTableName 的处理,放到 tdThinkModelMessageMapper 里。可以考虑,弄个 default 方法 +//// String databaseName = IotTdDatabaseUtils.getDatabaseName(url); +//// String superTableName = IotTdDatabaseUtils.getThingModelMessageSuperTableName(product.getProductKey()); +//// +//// // 解析物模型,获取字段列表 +//// List schemaFields = List.of( +//// TdFieldDO.builder().fieldName("time").dataType("TIMESTAMP").build(), +//// TdFieldDO.builder().fieldName("id").dataType("NCHAR").dataLength(64).build(), +//// TdFieldDO.builder().fieldName("sys").dataType("NCHAR").dataLength(2048).build(), +//// TdFieldDO.builder().fieldName("method").dataType("NCHAR").dataLength(256).build(), +//// TdFieldDO.builder().fieldName("params").dataType("NCHAR").dataLength(2048).build() +//// ); +//// // 设置超级表的标签 +//// List tagsFields = List.of( +//// TdFieldDO.builder().fieldName("device_key").dataType("NCHAR").dataLength(64).build() +//// ); +//// // 3. 创建超级表 +//// tdEngineDDLMapper.createSuperTable(new TdTableDO(databaseName, superTableName, schemaFields, tagsFields)); +// } private List getValidFunctionList(String productKey) { return filterList(iotThingModelService.getProductThingModelListByProductKey(productKey), @@ -237,13 +239,7 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ * */ private void createThingModelMessageDeviceTable(String productKey, String deviceKey){ - - - // 2. 创建物模型日志设备数据表 -// tdThingModelMessageMapper.createTableWithTag(ThingModelMessageDO.builder().build() -// .setSuperTableName(productKey) -// .setTableName(deviceKey) -// .setDeviceKey(deviceKey)); + tdThingModelMessageMapper.createTableWithTag(productKey, deviceKey); } /** diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDMLMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDMLMapper.xml index 0443a826b2..b4084374cf 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDMLMapper.xml +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDMLMapper.xml @@ -42,7 +42,7 @@