Commit b319485ca60539fd2f343920c3f97d09cd13d8ee

Authored by YunaiV
1 parent 8089f3a3

【功能优化】IoT:清理通用 TDengine 封装,使用 SQL 查询

Showing 15 changed files with 5 additions and 951 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/FieldParser.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelProperty;  
4 -import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelRespVO;  
5 -  
6 -import java.util.HashMap;  
7 -import java.util.List;  
8 -  
9 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;  
10 -  
11 -/**  
12 - * FieldParser 类用于解析和转换物模型字段到 TDengine 字段  
13 - */  
14 -public class FieldParser {  
15 -  
16 - /**  
17 - * 物模型到td数据类型映射  
18 - */  
19 - @Deprecated  
20 - private static final HashMap<String, String> TYPE_MAPPING = new HashMap<>() {  
21 - {  
22 - put("INT", "INT");  
23 - put("FLOAT", "FLOAT");  
24 - put("DOUBLE", "DOUBLE");  
25 - put("BOOL", "BOOL");  
26 - put("ENUM", "NCHAR");  
27 - put("TEXT", "NCHAR");  
28 - put("DATE", "NCHAR");  
29 - }  
30 - };  
31 -  
32 - /**  
33 - * 将物模型字段转换为td字段  
34 - *  
35 - * @param property 物模型属性  
36 - * @return TdField对象  
37 - */  
38 - public static TdFieldDO parse(ThingModelProperty property) {  
39 - // 将物模型字段类型映射为 td 字段类型  
40 - String fieldName = property.getIdentifier().toLowerCase();  
41 - String fType = TYPE_MAPPING.get(property.getDataType().toUpperCase());  
42 - // 如果字段类型为NCHAR,默认长度为64  
43 - int dataLength = 0;  
44 - if ("NCHAR".equals(fType)) {  
45 - dataLength = 64;  
46 - }  
47 - return new TdFieldDO(fieldName, fType, dataLength);  
48 - }  
49 -  
50 - /**  
51 - * 从物模型中获取字段列表  
52 - *  
53 - * @param thingModel 物模型响应对象  
54 - * @return 字段列表  
55 - */  
56 - public static List<TdFieldDO> parse(ThingModelRespVO thingModel) {  
57 - return convertList(thingModel.getModel().getProperties(), FieldParser::parse);  
58 - }  
59 -  
60 - /**  
61 - * 将从库中查出来的字段信息转换为 TDengine 字段对象  
62 - *  
63 - * @param rows 从库中查出的字段信息列表  
64 - * @return 转换后的 TDengine 字段对象列表  
65 - */  
66 - public static List<TdFieldDO> parse(List<List<Object>> rows) {  
67 - return convertList(rows, row -> {  
68 - String type = row.get(1).toString().toUpperCase();  
69 - // TODO @puhui999:"NCHAR" 最好枚举下  
70 - int dataLength = "NCHAR".equals(type) ? Integer.parseInt(row.get(2).toString()) : -1;  
71 - return new TdFieldDO(row.get(0).toString(), type, dataLength);  
72 - });  
73 - }  
74 -  
75 - /**  
76 - * 获取字段字义  
77 - */  
78 - @Deprecated  
79 - public static String getFieldDefine(TdFieldDO field) {  
80 - return "`" + field.getFieldName() + "`" + " "  
81 - + (field.getDataLength() > 0 ? String.format("%s(%d)", field.getDataType(), field.getDataLength())  
82 - : field.getDataType());  
83 - }  
84 -  
85 -}  
86 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/SelectDO.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.Data;  
4 -  
5 -// TODO @haohao:类似这个,其实可以参考 mybatis plus,querywrapper,搞个 TdEngineQueryWrapper。这样看起来会更好懂。  
6 -/**  
7 - * 查询DO  
8 - */  
9 -@Data  
10 -@Deprecated  
11 -public class SelectDO {  
12 -  
13 - // TODO @haoha:database 是个单词  
14 - /**  
15 - * 数据库名称  
16 - */  
17 - private String dataBaseName;  
18 -  
19 - /**  
20 - * 超级表名称  
21 - */  
22 - private String tableName;  
23 -  
24 - /**  
25 - * 查询字段  
26 - */  
27 - private String fieldName;  
28 -  
29 - /**  
30 - * 开始时间  
31 - */  
32 - private Long startTime;  
33 -  
34 - /**  
35 - * 结束时间  
36 - */  
37 - private Long endTime;  
38 -  
39 - /**  
40 - * 查询类型  
41 - */  
42 - private String type;  
43 -  
44 - /**  
45 - * 设备ID  
46 - */  
47 - private String deviceId;  
48 -}  
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/TagsSelectDO.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.Data;  
4 -  
5 -/**  
6 - * tags查询DO  
7 - */  
8 -@Data  
9 -@Deprecated  
10 -public class TagsSelectDO {  
11 -  
12 - /**  
13 - * 数据库名称  
14 - */  
15 - private String dataBaseName;  
16 -  
17 - /**  
18 - * 超级表名称  
19 - */  
20 - private String stableName;  
21 -  
22 - /**  
23 - * tags名称  
24 - */  
25 - private String tagsName;  
26 -  
27 - /**  
28 - * tags值  
29 - */  
30 - private Long startTime;  
31 -  
32 - /**  
33 - * tags值  
34 - */  
35 - private Long endTime;  
36 -  
37 -}  
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/TdFieldDO.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Builder;  
5 -import lombok.Data;  
6 -import lombok.NoArgsConstructor;  
7 -  
8 -// TODO 芋艿:看看是不是后续简化掉。  
9 -/**  
10 - * TD 引擎的字段  
11 - */  
12 -@Data  
13 -@NoArgsConstructor  
14 -@AllArgsConstructor  
15 -@Builder  
16 -@Deprecated  
17 -public class TdFieldDO {  
18 -  
19 - /**  
20 - * 字段名称  
21 - */  
22 - private String fieldName;  
23 -  
24 - /**  
25 - * 字段类型  
26 - */  
27 - private String dataType;  
28 -  
29 - /**  
30 - * 字段长度  
31 - */  
32 - private Integer dataLength = 0;  
33 -  
34 - /**  
35 - * 字段值  
36 - */  
37 - private Object fieldValue;  
38 -  
39 - public TdFieldDO(String fieldName, String dataType, Integer dataLength) {  
40 - this.fieldName = fieldName;  
41 - this.dataType = dataType;  
42 - this.dataLength = dataLength;  
43 - }  
44 -  
45 - public TdFieldDO(String fieldName, Object fieldValue) {  
46 - this.fieldName = fieldName;  
47 - this.fieldValue = fieldValue;  
48 - }  
49 -}  
50 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/TdResponse.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Data;  
5 -import lombok.NoArgsConstructor;  
6 -  
7 -import java.util.List;  
8 -  
9 -/**  
10 - * TdResponse 类用于处理 TDengine 的响应  
11 - */  
12 -@Data  
13 -@NoArgsConstructor  
14 -@AllArgsConstructor  
15 -@Deprecated  
16 -public class TdResponse {  
17 -  
18 - public static final int CODE_SUCCESS = 0;  
19 - public static final int CODE_TB_NOT_EXIST = 866;  
20 -  
21 - /**  
22 - * 状态  
23 - */  
24 - private String status;  
25 -  
26 - /**  
27 - * 错误码  
28 - */  
29 - private int code;  
30 -  
31 - /**  
32 - * 错误信息  
33 - */  
34 - private String desc;  
35 -  
36 - /**  
37 - * 列信息  
38 - * [["time","TIMESTAMP",8,""],["powerstate","TINYINT",1,""],["brightness","INT",4,""],["deviceid","NCHAR",32,"TAG"]]  
39 - */  
40 - private List data;  
41 -  
42 -}  
43 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/TdRestApi.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import cn.hutool.http.HttpRequest;  
4 -import cn.hutool.http.HttpResponse;  
5 -import cn.hutool.json.JSONUtil;  
6 -import lombok.extern.slf4j.Slf4j;  
7 -import org.springframework.beans.factory.annotation.Value;  
8 -import org.springframework.stereotype.Service;  
9 -  
10 -// TODO @haohao:有部分非实体的部分,是不是可以搞到 iot 的 framework 包下,搞个 tdengine 包,作为框架级的封装,放在 dataobject,感觉不是很合理哈。【可以微信讨论下】  
11 -/**  
12 - * TdRestApi 类用于处理 TDengine 的 REST API 请求  
13 - */  
14 -@Slf4j  
15 -@Service  
16 -@Deprecated // TODO 芋艿:貌似没用到  
17 -public class TdRestApi {  
18 -  
19 - @Value("${spring.datasource.dynamic.datasource.tdengine.url}")  
20 - private String url;  
21 -  
22 - @Value("${spring.datasource.dynamic.datasource.tdengine.username}")  
23 - private String username;  
24 -  
25 - @Value("${spring.datasource.dynamic.datasource.tdengine.password}")  
26 - private String password;  
27 -  
28 - /**  
29 - * 获取 REST API URL  
30 - */  
31 - private String getRestApiUrl() {  
32 - String restUrl = url.replace("jdbc:TAOS-RS://", "")  
33 - .replaceAll("\\?.*", "");  
34 - int idx = restUrl.lastIndexOf("/");  
35 - return String.format("%s/rest/sql/%s", restUrl.substring(0, idx), restUrl.substring(idx + 1));  
36 - }  
37 -  
38 -  
39 - /**  
40 - * 新建td api请求对象  
41 - */  
42 - public HttpRequest newApiRequest(String sql) {  
43 - return HttpRequest  
44 - .post(getRestApiUrl())  
45 - .body(sql)  
46 - .basicAuth(username, password);  
47 - }  
48 -  
49 - /**  
50 - * 执行sql  
51 - */  
52 - public TdResponse execSql(String sql) {  
53 - log.info("exec td sql:{}", sql);  
54 - HttpRequest request = newApiRequest(sql);  
55 - HttpResponse response = request.execute();  
56 - return JSONUtil.toBean(response.body(), TdResponse.class);  
57 - }  
58 -  
59 -}  
60 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/TdTableDO.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Builder;  
5 -import lombok.Data;  
6 -import lombok.NoArgsConstructor;  
7 -  
8 -import java.util.List;  
9 -  
10 -@Deprecated  
11 -/**  
12 - * TD 引擎的数据库  
13 - */  
14 -@Data  
15 -@Builder  
16 -@NoArgsConstructor  
17 -@AllArgsConstructor  
18 -public class TdTableDO {  
19 -  
20 - /**  
21 - * 数据库名称  
22 - */  
23 - private String dataBaseName;  
24 -  
25 - // TODO @haohao:superTableName 和 tableName 是不是合并。因为每个 mapper 操作的时候,有且只会使用到其中一个。  
26 - /**  
27 - * 超级表名称  
28 - */  
29 - private String superTableName;  
30 -  
31 - /**  
32 - * 表名称  
33 - */  
34 - private String tableName;  
35 -  
36 - private String productKey;  
37 -  
38 - private String deviceKey;  
39 -  
40 - /**  
41 - * COLUMN 字段  
42 - */  
43 - private TdFieldDO column;  
44 -  
45 - /**  
46 - * TAG 字段  
47 - */  
48 - private TdFieldDO tag;  
49 -  
50 - /**  
51 - * COLUMN 字段 - 列表  
52 - */  
53 - private List<TdFieldDO> columns;  
54 -  
55 - /**  
56 - * TAG 字段 - 列表  
57 - */  
58 - private List<TdFieldDO> tags;  
59 -  
60 - public TdTableDO(String dataBaseName, String superTableName, List<TdFieldDO> columns, List<TdFieldDO> tags) {  
61 - this.dataBaseName = dataBaseName;  
62 - this.superTableName = superTableName;  
63 - this.columns = columns;  
64 - this.tags = tags;  
65 - }  
66 -  
67 - public TdTableDO(String dataBaseName, String superTableName) {  
68 - this.dataBaseName = dataBaseName;  
69 - this.superTableName = superTableName;  
70 - }  
71 -}  
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.dataobject.tdengine;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Builder;  
5 -import lombok.Data;  
6 -import lombok.NoArgsConstructor;  
7 -  
8 -// TODO @芋艿:纠结下字段  
9 -@Deprecated // TODO @super:看看啥时候删除下哈。  
10 -/**  
11 - * TD 物模型消息日志的数据库  
12 - */  
13 -@Data  
14 -@Builder  
15 -@NoArgsConstructor  
16 -@AllArgsConstructor  
17 -public class ThingModelMessageDO {  
18 -  
19 -  
20 -  
21 - /**  
22 - * 消息 ID  
23 - */  
24 - private String id;  
25 -  
26 - /**  
27 - * 系统扩展参数  
28 - *  
29 - * 例如:设备状态、系统时间、固件版本等系统级信息  
30 - */  
31 - private Object system;  
32 -  
33 - /**  
34 - * 请求方法  
35 - *  
36 - * 例如:thing.event.property.post  
37 - */  
38 - private String method;  
39 -  
40 - /**  
41 - * 请求参数  
42 - */  
43 - private Object params;  
44 -  
45 - /**  
46 - * 属性上报时间戳  
47 - */  
48 - private Long time;  
49 -  
50 - /**  
51 - * 设备信息  
52 - */  
53 - private String productKey;  
54 -  
55 -  
56 - /**  
57 - * 设备 key  
58 - */  
59 - private String deviceKey;  
60 -  
61 -}  
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; 5 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
6 import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO; 6 import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO;
7 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TdTableDO;  
8 import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField; 7 import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
9 import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS; 8 import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS;
10 import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 9 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
@@ -78,27 +77,6 @@ public interface IotDevicePropertyDataMapper { @@ -78,27 +77,6 @@ public interface IotDevicePropertyDataMapper {
78 void alterProductPropertySTableDropField(@Param("productKey") String productKey, 77 void alterProductPropertySTableDropField(@Param("productKey") String productKey,
79 @Param("field") TDengineTableField field); 78 @Param("field") TDengineTableField field);
80 79
81 - //TODO:先参考一下老逻辑,后续改进  
82 - /**  
83 - * 插入数据 - 指定列插入数据  
84 - *  
85 - * @param table 数据  
86 - * productKey 产品 key  
87 - * deviceKey 设备 key  
88 - * columns 列  
89 - */  
90 - void insertDevicePropertyData(TdTableDO table);  
91 -  
92 - //TODO:先参考一下老逻辑,后续改进  
93 - /**  
94 - * 查看超级表 - 获取超级表的结构信息  
95 - * SQL:DESCRIBE [db_name.]stb_name;  
96 - *  
97 - * @param superTable 超级表信息  
98 - * productKey 产品 key  
99 - */  
100 - List<Map<String, Object>> describeSuperTable(TdTableDO superTable);  
101 -  
102 /** 80 /**
103 * 获取历史数据列表 81 * 获取历史数据列表
104 * 82 *
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdEngineDDLMapper.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.tdengine;  
2 -  
3 -import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;  
4 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TdTableDO;  
5 -import com.baomidou.dynamic.datasource.annotation.DS;  
6 -import org.apache.ibatis.annotations.Mapper;  
7 -import org.apache.ibatis.annotations.Param;  
8 -  
9 -import java.util.List;  
10 -import java.util.Map;  
11 -  
12 -/**  
13 - * 专门处理 DDL(数据定义语言)操作,包含所有的数据库和表的定义操作,例如创建数据库、创建超级表、创建子表等  
14 - */  
15 -@Mapper  
16 -@DS("tdengine")  
17 -public interface TdEngineDDLMapper {  
18 -  
19 - /**  
20 - * 创建数据库  
21 - * SQL:CREATE DATABASE [IF NOT EXISTS] db_name [database_options];  
22 - *  
23 - * @param dataBaseName 数据库名称  
24 - */  
25 - @TenantIgnore  
26 - void createDatabase(@Param("dataBaseName") String dataBaseName);  
27 -  
28 - /**  
29 - * 创建超级表  
30 - * SQL:CREATE STABLE [IF NOT EXISTS] stb_name (create_definition [, create_definition] ...) TAGS (create_definition [, create_definition] ...) [table_options];  
31 - *  
32 - * @param superTable 超级表信息  
33 - * dataBaseName 数据库名称  
34 - * superTableName 超级表名称  
35 - * columns 列信息  
36 - * tags 标签信息  
37 - */  
38 - @TenantIgnore  
39 - void createSuperTable(TdTableDO superTable);  
40 -  
41 - /**  
42 - * 查看超级表 - 显示当前数据库下的所有超级表信息  
43 - * SQL:SHOW STABLES [LIKE tb_name_wildcard];  
44 - *  
45 - * @param superTable 超级表信息  
46 - * dataBaseName 数据库名称  
47 - * superTableName 超级表名称  
48 - */  
49 - @TenantIgnore  
50 - List<Map<String, Object>> showSuperTables(TdTableDO superTable);  
51 -  
52 - /**  
53 - * 查看超级表 - 获取超级表的结构信息  
54 - * SQL:DESCRIBE [db_name.]stb_name;  
55 - *  
56 - * @param superTable 超级表信息  
57 - * dataBaseName 数据库名称  
58 - * superTableName 超级表名称  
59 - */  
60 - @TenantIgnore  
61 - List<Map<String, Object>> describeSuperTable(TdTableDO superTable);  
62 -  
63 - /**  
64 - * 修改超级表 - 增加列  
65 - * SQL:ALTER STABLE stb_name ADD COLUMN col_name column_type;  
66 - *  
67 - * @param superTable 超级表信息  
68 - * dataBaseName 数据库名称  
69 - * superTableName 超级表名称  
70 - * column 列信息  
71 - */  
72 - @TenantIgnore  
73 - void addColumnForSuperTable(TdTableDO superTable);  
74 -  
75 - /**  
76 - * 修改超级表 - 删除列  
77 - * SQL:ALTER STABLE stb_name DROP COLUMN col_name;  
78 - *  
79 - * @param superTable 超级表信息  
80 - * dataBaseName 数据库名称  
81 - * superTableName 超级表名称  
82 - * column 列信息  
83 - */  
84 - @TenantIgnore  
85 - void dropColumnForSuperTable(TdTableDO superTable);  
86 -  
87 - /**  
88 - * 修改超级表 - 修改列宽  
89 - * SQL:ALTER STABLE stb_name MODIFY COLUMN col_name data_type(length);  
90 - *  
91 - * @param superTable 超级表信息  
92 - * dataBaseName 数据库名称  
93 - * superTableName 超级表名称  
94 - * column 列信息  
95 - */  
96 - @TenantIgnore  
97 - void modifyColumnWidthForSuperTable(TdTableDO superTable);  
98 -  
99 - /**  
100 - * 修改超级表 - 为超级表添加标签  
101 - *  
102 - * @param superTable 超级表信息  
103 - * dataBaseName 数据库名称  
104 - * superTableName 超级表名称  
105 - * tag 标签信息  
106 - */  
107 - @TenantIgnore  
108 - void addTagForSuperTable(TdTableDO superTable);  
109 -  
110 - /**  
111 - * 修改超级表 - 为超级表删除标签  
112 - *  
113 - * @param superTable 超级表信息  
114 - * dataBaseName 数据库名称  
115 - * superTableName 超级表名称  
116 - * tag 标签信息  
117 - */  
118 - @TenantIgnore  
119 - void dropTagForSuperTable(TdTableDO superTable);  
120 -  
121 - /**  
122 - * 创建子表 - 创建子表  
123 - * SQL:CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name TAGS (tag_value1, ...);  
124 - *  
125 - * @param table 表信息  
126 - * dataBaseName 数据库名称  
127 - * superTableName 超级表名称  
128 - * tableName 子表名称  
129 - * tags TAG 字段  
130 - */  
131 - @TenantIgnore  
132 - void createTable(TdTableDO table);  
133 -  
134 - /**  
135 - * 创建子表 - 创建子表并指定标签的值  
136 - * SQL:CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name (tag_name1, ...) TAGS (tag_value1, ...);  
137 - *  
138 - * @param table 表信息  
139 - * dataBaseName 数据库名称  
140 - * superTableName 超级表名称  
141 - * tableName 子表名称  
142 - * tags TAG 字段  
143 - */  
144 - @TenantIgnore  
145 - void createTableWithTags(TdTableDO table);  
146 -  
147 -}  
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdEngineDMLMapper.java deleted
1 -package cn.iocoder.yudao.module.iot.dal.tdengine;  
2 -  
3 -import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;  
4 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectDO;  
5 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO;  
6 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TagsSelectDO;  
7 -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TdTableDO;  
8 -import com.baomidou.dynamic.datasource.annotation.DS;  
9 -import org.apache.ibatis.annotations.Mapper;  
10 -  
11 -import java.util.List;  
12 -import java.util.Map;  
13 -  
14 -/**  
15 - * 专门处理 TD Engine 的 DML(数据操作语言)操作,处理所有的数据查询和写入操作,如插入数据、查询数据等  
16 - */  
17 -@Mapper  
18 -@DS("tdengine")  
19 -public interface TdEngineDMLMapper {  
20 -  
21 - /**  
22 - * 插入数据 - 指定列插入数据  
23 - *  
24 - * @param table 数据  
25 - * dataBaseName 数据库名  
26 - * tableName 表名  
27 - * columns 列  
28 - */  
29 - @TenantIgnore  
30 - void insertData(TdTableDO table);  
31 -  
32 - /**  
33 - * 根据时间戳查询数据  
34 - *  
35 - * @param selectDO 查询条件  
36 - * @return 查询结果列表  
37 - */  
38 - @TenantIgnore  
39 - List<Map<String, Object>> selectByTimestamp(SelectDO selectDO);  
40 -  
41 - /**  
42 - * 根据时间戳获取数据条数  
43 - *  
44 - * @param selectDO 查询条件  
45 - * @return 数据条数  
46 - */  
47 - @TenantIgnore  
48 - Map<String, Long> selectCountByTimestamp(SelectDO selectDO);  
49 -  
50 - /**  
51 - * 获取最新数据  
52 - *  
53 - * @param selectDO 查询条件  
54 - * @return 最新数据  
55 - */  
56 - @TenantIgnore  
57 - Map<String, Object> selectOneLastData(SelectDO selectDO);  
58 -  
59 - /**  
60 - * 获取历史数据列表  
61 - *  
62 - * @param selectVisualDO 查询条件  
63 - * @return 历史数据列表  
64 - */  
65 - @TenantIgnore  
66 - List<Map<String, Object>> selectHistoryDataList(SelectVisualDO selectVisualDO);  
67 -  
68 - /**  
69 - * 获取实时数据列表  
70 - *  
71 - * @param selectVisualDO 查询条件  
72 - * @return 实时数据列表  
73 - */  
74 - @TenantIgnore  
75 - List<Map<String, Object>> selectRealtimeDataList(SelectVisualDO selectVisualDO);  
76 -  
77 - /**  
78 - * 获取聚合数据列表  
79 - *  
80 - * @param selectVisualDO 查询条件  
81 - * @return 聚合数据列表  
82 - */  
83 - @TenantIgnore  
84 - List<Map<String, Object>> selectAggregateDataList(SelectVisualDO selectVisualDO);  
85 -  
86 - /**  
87 - * 根据标签获取最新数据列表  
88 - *  
89 - * @param tagsSelectDO 查询条件  
90 - * @return 最新数据列表  
91 - */  
92 - @TenantIgnore  
93 - List<Map<String, Object>> selectLastDataListByTags(TagsSelectDO tagsSelectDO);  
94 -  
95 - /**  
96 - * 获取历史数据条数  
97 - *  
98 - * @param selectVisualDO 查询条件  
99 - * @return 数据条数  
100 - */  
101 - @TenantIgnore  
102 - Long selectHistoryCount(SelectVisualDO selectVisualDO);  
103 -}  
104 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/config/TDengineTableInitConfiguration.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/tdengine/config/TDengineTableInitRunner.java
@@ -5,17 +5,17 @@ import lombok.RequiredArgsConstructor; @@ -5,17 +5,17 @@ import lombok.RequiredArgsConstructor;
5 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
6 import org.springframework.boot.ApplicationArguments; 6 import org.springframework.boot.ApplicationArguments;
7 import org.springframework.boot.ApplicationRunner; 7 import org.springframework.boot.ApplicationRunner;
8 -import org.springframework.context.annotation.Configuration; 8 +import org.springframework.stereotype.Component;
9 9
10 /** 10 /**
11 * TDengine 表初始化的 Configuration 11 * TDengine 表初始化的 Configuration
12 * 12 *
13 * @author alwayssuper 13 * @author alwayssuper
14 */ 14 */
15 -@Configuration  
16 -@Slf4j 15 +@Component
17 @RequiredArgsConstructor 16 @RequiredArgsConstructor
18 -public class TDengineTableInitConfiguration implements ApplicationRunner { 17 +@Slf4j
  18 +public class TDengineTableInitRunner implements ApplicationRunner {
19 19
20 private final IotDeviceLogService deviceLogService; 20 private final IotDeviceLogService deviceLogService;
21 21
@@ -26,7 +26,7 @@ public class TDengineTableInitConfiguration implements ApplicationRunner { @@ -26,7 +26,7 @@ public class TDengineTableInitConfiguration implements ApplicationRunner {
26 deviceLogService.defineDeviceLog(); 26 deviceLogService.defineDeviceLog();
27 } catch (Exception ex) { 27 } catch (Exception ex) {
28 // 初始化失败时打印错误日志并退出系统 28 // 初始化失败时打印错误日志并退出系统
29 - log.error("[TDengine] 初始化设备日志表结构失败,系统无法正常运行,即将退出", ex); 29 + log.error("[run][TDengine初始化设备日志表结构失败,系统无法正常运行,即将退出]", ex);
30 System.exit(1); 30 System.exit(1);
31 } 31 }
32 } 32 }
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDDLMapper.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE mapper  
3 - PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
4 - "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
5 -<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDDLMapper">  
6 -  
7 - <!-- 创建数据库 -->  
8 - <update id="createDatabase" parameterType="String">  
9 - CREATE DATABASE IF NOT EXISTS ${dataBaseName}  
10 - </update>  
11 -  
12 - <!-- 创建超级表 -->  
13 - <update id="createSuperTable">  
14 - CREATE STABLE IF NOT EXISTS ${dataBaseName}.${superTableName}  
15 - <foreach item="item" collection="columns" separator=","  
16 - open="(" close=")">  
17 - ${item.fieldName} ${item.dataType}  
18 - <if test="item.dataLength > 0">  
19 - (${item.dataLength})  
20 - </if>  
21 - </foreach>  
22 - TAGS  
23 - <foreach item="item" collection="tags" separator=","  
24 - open="(" close=")">  
25 - ${item.fieldName} ${item.dataType}  
26 - <if test="item.dataLength > 0">  
27 - (${item.dataLength})  
28 - </if>  
29 - </foreach>  
30 - </update>  
31 -  
32 - <!-- 查看超级表 -->  
33 - <select id="showSuperTables" resultType="java.util.Map">  
34 - SHOW ${dataBaseName}.STABLES LIKE '${superTableName}'  
35 - </select>  
36 -  
37 - <!-- 描述超级表结构 -->  
38 - <select id="describeSuperTable" resultType="java.util.Map">  
39 - DESCRIBE ${dataBaseName}.${superTableName}  
40 - </select>  
41 -  
42 - <!-- 为超级表添加列 -->  
43 - <update id="addColumnForSuperTable">  
44 - ALTER STABLE ${dataBaseName}.${superTableName} ADD COLUMN ${column.fieldName} ${column.dataType}  
45 - <if test="column.dataLength > 0">  
46 - (${column.dataLength})  
47 - </if>  
48 - </update>  
49 -  
50 - <!-- 为超级表删除列 -->  
51 - <update id="dropColumnForSuperTable">  
52 - ALTER STABLE ${dataBaseName}.${superTableName} DROP COLUMN ${column.fieldName}  
53 - </update>  
54 -  
55 - <!-- 修改列宽 -->  
56 - <update id="modifyColumnWidthForSuperTable">  
57 - ALTER STABLE ${dataBaseName}.${superTableName} MODIFY COLUMN ${column.fieldName} ${column.dataType}  
58 - <if test="column.dataLength > 0">  
59 - (${column.dataLength})  
60 - </if>  
61 - </update>  
62 -  
63 - <!-- 为超级表添加标签 -->  
64 - <update id="addTagForSuperTable">  
65 - ALTER STABLE ${dataBaseName}.${superTableName} ADD TAG ${tag.fieldName} ${tag.dataType}  
66 - <if test="tag.dataLength > 0">  
67 - (${tag.dataLength})  
68 - </if>  
69 - </update>  
70 -  
71 - <!-- 为超级表删除标签 -->  
72 - <update id="dropTagForSuperTable">  
73 - ALTER STABLE ${dataBaseName}.${superTableName} DROP TAG ${tag.fieldName}  
74 - </update>  
75 -  
76 - <!-- 创建子表 -->  
77 - <update id="createTable">  
78 - CREATE TABLE IF NOT EXISTS ${dataBaseName}.${tableName}  
79 - USING ${dataBaseName}.${superTableName}  
80 - TAGS  
81 - <foreach item="item" collection="tags" separator=","  
82 - open="(" close=")">  
83 - #{item.fieldValue}  
84 - </foreach>  
85 - </update>  
86 -  
87 - <!-- 创建子表,带有 TAGS -->  
88 - <update id="createTableWithTags">  
89 - CREATE TABLE IF NOT EXISTS ${dataBaseName}.${tableName}  
90 - USING ${dataBaseName}.${superTableName}  
91 - <foreach item="item" collection="tags" separator="," open="(" close=")">  
92 - #{item.fieldName}  
93 - </foreach>  
94 - TAGS  
95 - <foreach item="item" collection="tags" separator=","  
96 - open="(" close=")">  
97 - #{item.fieldValue}  
98 - </foreach>  
99 - </update>  
100 -  
101 -</mapper>  
102 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdEngineDMLMapper.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE mapper  
3 - PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
4 - "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
5 -<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.TdEngineDMLMapper">  
6 -  
7 - <!-- 插入数据 -->  
8 - <insert id="insertData">  
9 - INSERT INTO ${dataBaseName}.${tableName}  
10 - <foreach item="item" collection="columns" separator=","  
11 - open="(" close=")">  
12 - ${item.fieldName}  
13 - </foreach>  
14 - VALUES  
15 - <foreach item="item" collection="columns" separator=","  
16 - open="(" close=")">  
17 - #{item.fieldValue}  
18 - </foreach>  
19 - </insert>  
20 -  
21 - <!-- 根据时间戳查询数据 -->  
22 - <select id="selectByTimestamp" parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectDO"  
23 - resultType="Map">  
24 - SELECT * FROM ${dataBaseName}.${tableName}  
25 - WHERE ${fieldName} BETWEEN #{startTime} AND #{endTime}  
26 - </select>  
27 -  
28 - <!-- 获取时间范围内的数据条数 -->  
29 - <select id="selectCountByTimestamp" parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectDO"  
30 - resultType="java.util.Map">  
31 - SELECT COUNT(0) AS count  
32 - FROM ${dataBaseName}.${tableName}  
33 - WHERE ${fieldName} BETWEEN #{startTime} AND #{endTime}  
34 - </select>  
35 -  
36 - <!-- 获取最新数据 -->  
37 - <select id="selectOneLastData" resultType="java.util.Map">  
38 - SELECT LAST(time), *  
39 - FROM ${tableName}  
40 - WHERE device_id = #{deviceId}  
41 - </select>  
42 -  
43 - <!-- 根据标签获取最新数据 -->  
44 - <select id="selectLastDataListByTags" parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.TagsSelectDO"  
45 - resultType="java.util.Map">  
46 - SELECT LAST(*)  
47 - FROM ${dataBaseName}.${stableName}  
48 - GROUP BY ${tagsName}  
49 - </select>  
50 -  
51 - <!-- 获取历史数据 -->  
52 - <select id="selectHistoryDataList" resultType="java.util.Map"  
53 - parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO">  
54 - SELECT ${fieldName} AS data, time  
55 - FROM ${dataBaseName}.${tableName}  
56 - WHERE time BETWEEN #{startTime} AND #{endTime}  
57 - AND ${fieldName} IS NOT NULL  
58 - ORDER BY time DESC  
59 - LIMIT #{params.rows} OFFSET #{params.page}  
60 - </select>  
61 -  
62 - <!-- 获取实时数据 -->  
63 - <select id="selectRealtimeDataList" resultType="java.util.Map"  
64 - parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO">  
65 - SELECT ${fieldName}, time  
66 - FROM ${dataBaseName}.${tableName}  
67 - </select>  
68 -  
69 - <!-- 获取聚合数据 -->  
70 - <select id="selectAggregateDataList" resultType="java.util.Map"  
71 - parameterType="cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.SelectVisualDO">  
72 - SELECT ${aggregate}(${fieldName})  
73 - FROM ${dataBaseName}.${tableName}  
74 - WHERE ts BETWEEN #{startTime} AND #{endTime} INTERVAL (${interval})  
75 - LIMIT #{num}  
76 - </select>  
77 -  
78 - <!-- 获取历史数据条数 -->  
79 - <select id="selectHistoryCount" resultType="java.lang.Long">  
80 - SELECT COUNT(time)  
81 - FROM ${dataBaseName}.${tableName}  
82 - WHERE time BETWEEN #{startTime} AND #{endTime}  
83 - AND ${fieldName} IS NOT NULL  
84 - </select>  
85 -  
86 -</mapper>  
87 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdThinkModelMessageMapper.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE mapper  
3 - PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
4 - "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
5 -<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.TdThingModelMessageMapper">  
6 -  
7 - <!-- 创建物模型消息日志超级表 -->  
8 - <update id="createSuperTable">  
9 - CREATE STABLE thing_model_message_${productKey}(  
10 - ts TIMESTAMP,  
11 - id NCHAR(64),  
12 - sys NCHAR(2048),  
13 - method NCHAR(255),  
14 - params NCHAR(2048),  
15 - device_name NCHAR(64)  
16 - )TAGS (  
17 - device_key NCHAR(50)  
18 - )  
19 - </update>  
20 -  
21 - <!-- 创建物模型消息日志子表,带有deviceKey的TAG -->  
22 - <update id="createTableWithTag">  
23 - CREATE STABLE ${deviceKey}  
24 - USING thing_model_message_${productKey}(  
25 - ts,  
26 - id ,  
27 - sys ,  
28 - method ,  
29 - params ,  
30 - device_name  
31 - )TAGS(  
32 - #{device_key}  
33 - )  
34 - </update>  
35 -</mapper>  
36 \ No newline at end of file 0 \ No newline at end of file