|
@@ -7,15 +7,13 @@ import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO;
|
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO;
|
|
-import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.FieldParser;
|
|
|
|
-import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TdFieldDO;
|
|
|
|
-import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TdTableDO;
|
|
|
|
-import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThingModelMessage;
|
|
|
|
|
|
+import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.*;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
|
|
import cn.iocoder.yudao.module.iot.dal.redis.deviceData.DeviceDataRedisDAO;
|
|
import cn.iocoder.yudao.module.iot.dal.redis.deviceData.DeviceDataRedisDAO;
|
|
import cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDDLMapper;
|
|
import cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDDLMapper;
|
|
import cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDMLMapper;
|
|
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.IotConstants;
|
|
import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStatusEnum;
|
|
import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStatusEnum;
|
|
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum;
|
|
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum;
|
|
@@ -63,6 +61,9 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ
|
|
@Resource
|
|
@Resource
|
|
private TdEngineDMLMapper tdEngineDMLMapper;
|
|
private TdEngineDMLMapper tdEngineDMLMapper;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private TdThingModelMessageMapper tdThingModelMessageMapper;
|
|
|
|
+
|
|
@Resource
|
|
@Resource
|
|
private DeviceDataRedisDAO deviceDataRedisDAO;
|
|
private DeviceDataRedisDAO deviceDataRedisDAO;
|
|
|
|
|
|
@@ -77,8 +78,6 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ
|
|
createDeviceTable(device.getDeviceType(), device.getProductKey(), device.getDeviceName(), device.getDeviceKey());
|
|
createDeviceTable(device.getDeviceType(), device.getProductKey(), device.getDeviceName(), device.getDeviceKey());
|
|
iotDeviceService.updateDeviceStatus(new IotDeviceStatusUpdateReqVO()
|
|
iotDeviceService.updateDeviceStatus(new IotDeviceStatusUpdateReqVO()
|
|
.setId(device.getId()).setStatus(IotDeviceStatusEnum.ONLINE.getStatus()));
|
|
.setId(device.getId()).setStatus(IotDeviceStatusEnum.ONLINE.getStatus()));
|
|
- // 1.2 创建物模型日志设备表
|
|
|
|
- createThingModelMessageDeviceTable(device.getProductKey(), device.getDeviceName(), device.getDeviceKey());
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// 2. 获取设备属性并进行物模型校验,过滤非物模型属性
|
|
// 2. 获取设备属性并进行物模型校验,过滤非物模型属性
|
|
@@ -107,32 +106,34 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ
|
|
thingModel -> IotThingModelTypeEnum.PROPERTY.getType().equals(thingModel.getType()));
|
|
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<TdFieldDO> 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<TdFieldDO> 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<TdFieldDO> 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<TdFieldDO> tagsFields = List.of(
|
|
|
|
+//// TdFieldDO.builder().fieldName("device_key").dataType("NCHAR").dataLength(64).build()
|
|
|
|
+//// );
|
|
|
|
+//// // 3. 创建超级表
|
|
|
|
+//// tdEngineDDLMapper.createSuperTable(new TdTableDO(databaseName, superTableName, schemaFields, tagsFields));
|
|
|
|
+// }
|
|
|
|
|
|
private List<IotThingModelDO> getValidFunctionList(String productKey) {
|
|
private List<IotThingModelDO> getValidFunctionList(String productKey) {
|
|
return filterList(iotThingModelService.getProductThingModelListByProductKey(productKey),
|
|
return filterList(iotThingModelService.getProductThingModelListByProductKey(productKey),
|
|
@@ -228,29 +229,7 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ
|
|
.setTags(tagsFieldValues));
|
|
.setTags(tagsFieldValues));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 创建物模型日志设备数据表
|
|
|
|
- *
|
|
|
|
- * @param productKey 产品 Key
|
|
|
|
- * @param deviceName 设备名称
|
|
|
|
- * @param deviceKey 设备 Key
|
|
|
|
- *
|
|
|
|
- */
|
|
|
|
- private void createThingModelMessageDeviceTable(String productKey, String deviceName, String deviceKey){
|
|
|
|
-
|
|
|
|
- // 1. 获取超级表的名称、数据库名称、设备日志表名称
|
|
|
|
- String databaseName = IotTdDatabaseUtils.getDatabaseName(url);
|
|
|
|
- String superTableName = IotTdDatabaseUtils.getThingModelMessageSuperTableName(productKey);
|
|
|
|
- // TODO @alwayssuper:最好 databaseName、superTableName、thinkModelMessageDeviceTableName 的处理,放到 tdThinkModelMessageMapper 里。可以考虑,弄个 default 方法
|
|
|
|
- String thinkModelMessageDeviceTableName = IotTdDatabaseUtils.getThingModelMessageDeviceTableName(productKey, deviceName);
|
|
|
|
-
|
|
|
|
- // 2. 创建物模型日志设备数据表
|
|
|
|
-// tdThingModelMessageMapper.createTableWithTag(ThingModelMessageDO.builder().build()
|
|
|
|
-// .setDataBaseName(databaseName)
|
|
|
|
-// .setSuperTableName(superTableName)
|
|
|
|
-// .setTableName(thinkModelMessageDeviceTableName)
|
|
|
|
-// .setDeviceKey(deviceKey));
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
* 获取数据库名称
|
|
* 获取数据库名称
|