diff --git a/cloud-common/cloud-common-cache/pom.xml b/cloud-common/cloud-common-cache/pom.xml
new file mode 100644
index 0000000..488b785
--- /dev/null
+++ b/cloud-common/cloud-common-cache/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-common
+ 3.6.3
+
+
+
+ cloud-common-cache 缓存基准
+
+
+ cloud-common-cache
+
+
+ 23
+ 23
+ UTF-8
+
+
+
+
+
+ com.muyu
+ cloud-common-redis
+
+
+
+
diff --git a/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheAbsBasic.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheAbsBasic.java
new file mode 100644
index 0000000..7d54ada
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheAbsBasic.java
@@ -0,0 +1,63 @@
+package com.muyu.common.cache;
+
+import com.muyu.common.core.web.domain.BaseEntity;
+import com.muyu.common.redis.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 抽象缓存层
+ * * @className: CacheAbsBasic ️✈️
+ * * @author: Yang 鹏 🦅
+ * * @date: 2024/9/29 16:08 ⏰
+ * * @Version: 1.0
+ * * @description:
+ */
+public abstract class CacheAbsBasic implements CacheBasic{
+
+ @Autowired
+ private RedisService redisService;
+
+ @Override
+ public void put(K key, V value) {
+
+ try {
+ redisService.setCacheObject(encode(key), value,30L,TimeUnit.MINUTES);
+ } catch (Exception e) {
+ throw new RuntimeException("运行时异常,异常信息为:{}"+e.getMessage());
+ }
+ }
+
+ @Override
+ public V get(K key) {
+
+ try {
+ return redisService.getCacheObject(encode(key));
+ } catch (Exception e) {
+ throw new RuntimeException("运行时异常,异常信息为:{}"+e.getMessage());
+ }
+ }
+
+ @Override
+ public void remove(K key) {
+
+ try {
+ redisService.deleteObject(encode(key));
+ } catch (Exception e) {
+ throw new RuntimeException("运行时异常,异常信息为:{}"+e.getMessage());
+ }
+ }
+
+ @Override
+ public boolean hashKey(K key){
+ Boolean b = false;
+
+ try {
+ b = redisService.hasKey(encode(key));
+ } catch (Exception e) {
+ throw new RuntimeException("运行时异常,异常信息为:{}"+e.getMessage());
+ }
+ return b;
+ }
+}
diff --git a/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheBasic.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheBasic.java
new file mode 100644
index 0000000..8b2ffb3
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheBasic.java
@@ -0,0 +1,24 @@
+package com.muyu.common.cache;
+
+import org.springframework.data.redis.core.TimeoutUtils;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 缓存基础
+ * * @className: CacheBasic ️✈️
+ * * @author: Yang 鹏 🦅
+ * * @date: 2024/9/29 16:08 ⏰
+ * * @Version: 1.0
+ * * @description:
+ */
+public interface CacheBasic extends PrimaryKeyBasic {
+ void put(K key, V value);
+
+ V get(K key);
+
+ void remove(K key);
+
+ boolean hashKey(K key);
+}
diff --git a/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/PrimaryKeyBasic.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/PrimaryKeyBasic.java
new file mode 100644
index 0000000..50f2341
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/PrimaryKeyBasic.java
@@ -0,0 +1,36 @@
+package com.muyu.common.cache;
+
+/**
+ * 主键基础
+ * * @className: PrimaryKeyBasic ️✈️
+ * * @author: Yang 鹏 🦅
+ * * @date: 2024/9/29 16:08 ⏰
+ * * @Version: 1.0
+ * * @description:
+ */
+public interface PrimaryKeyBasic {
+
+ /**
+ * 主键前缀
+ * @return
+ */
+ public String keyPre();
+
+ /**
+ * 主键编码
+ * @param key 缓存建
+ * @return 装修建
+ */
+ public default String encode(K key){
+ return keyPre() + key.toString();
+ }
+
+ /**
+ * 主键解码
+ * @param key 缓存建
+ * @return 装修建
+ */
+ public default K decode(String key) {
+ return (K) key.substring(keyPre().length());
+ }
+}
diff --git a/cloud-common/cloud-common-core/pom.xml b/cloud-common/cloud-common-core/pom.xml
index 57cf128..77190a1 100644
--- a/cloud-common/cloud-common-core/pom.xml
+++ b/cloud-common/cloud-common-core/pom.xml
@@ -132,10 +132,10 @@
-
-
-
-
+
+
+
+
javax.annotation
@@ -165,5 +165,4 @@
hutool-all
-
diff --git a/cloud-common/cloud-common-iotdb/pom.xml b/cloud-common/cloud-common-iotdb/pom.xml
new file mode 100644
index 0000000..4604b63
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-common
+ 3.6.3
+
+
+ cloud-common-iotdb
+
+
+ cloud-common-iotdb 时序性数据存储服务
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ org.apache.iotdb
+ iotdb-session
+ 1.3.1
+
+
+ com.alibaba.fastjson2
+ fastjson2
+
+
+ org.projectlombok
+ lombok
+
+
+
+
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/config/IotDBSessionConfig.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/config/IotDBSessionConfig.java
new file mode 100644
index 0000000..042acf0
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/config/IotDBSessionConfig.java
@@ -0,0 +1,149 @@
+
+package com.muyu.common.iotdb.config;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.log4j.Log4j2;
+import org.apache.iotdb.isession.SessionDataSet;
+import org.apache.iotdb.isession.pool.SessionDataSetWrapper;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.session.pool.SessionPool;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.read.common.Field;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author WangXin
+ * @Data 2024/9/30
+ * @Description IotDBSessionConfig配置类
+ * @Version 1.0.0
+ */
+@Log4j2
+@Component
+@Configuration
+public class IotDBSessionConfig {
+
+ @Value("${spring.iotdb.username:root}")
+ private String username;
+
+ @Value("${spring.iotdb.password:root}")
+ private String password;
+
+ @Value("${spring.iotdb.ip:127.0.0.1}")
+ private String ip;
+
+ @Value("${spring.iotdb.port:6667}")
+ private int port;
+
+ @Value("${spring.iotdb.maxSize:10}")
+ private int maxSize;
+
+ private static SessionPool sessionPool;
+
+ /**
+ * 获取IotDBSession对象
+ * @return iotDBSession对象
+ */
+ public SessionPool getSessionPool() {
+ if (sessionPool == null) {
+ sessionPool = new SessionPool(ip, port, username, password, maxSize);
+ }
+ return sessionPool;
+ }
+
+ /**
+ * 添加数据
+ * @param deviceId
+ * @param time
+ * @param measurements
+ * @param values
+ */
+ public void insertRecord(SessionPool sessionPool,String deviceId, long time, List measurements, List values) {
+ try {
+ log.info("iotdb数据入库:device_id:[{}], measurements:[{}], values:[{}]", deviceId, measurements, values);
+ sessionPool.insertRecord(deviceId, time, measurements, values);
+ } catch (Exception e) {
+ log.error("IotDBSession insertRecord失败: deviceId={}, time={}, measurements={}, values={}, error={}",
+ deviceId, time, measurements, values, e.getMessage());
+ }
+ }
+
+ public SessionDataSet selectRecord(SessionPool sessionPool,String sql) {
+ log.info("iotdb数据查询:sql:[{}]",sql);
+ SessionDataSetWrapper sessionDataSetWrapper = null;
+ try {
+ log.info("iotdb SQL查询:sql:[{}]", sql);
+ sessionDataSetWrapper = sessionPool.executeQueryStatement(sql);
+ return sessionDataSetWrapper.getSessionDataSet();
+ } catch (Exception e) {
+ log.error("IotDBSession executeQueryStatement失败:sql:[{}],error={}", sql, e.getMessage());
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
+ public static void main(String[] args) {
+ SessionPool sessionPool = new SessionPool("127.0.0.1", 6667, "root", "root", 10);
+ String ROOT_DATA_DATAJSON = "root.car.data.datajson";
+ String SELECT_ROOT_DATA_DATAJSON_DATASOURCE = "select * from root.car.data.datajson";
+
+ String jsonValue = """
+ {
+ "name": "张三",
+ "age": 28,
+ "email": "zhangsan@example.com",
+ "isStudent": false,
+ "hobbies": ["阅读", "旅行", "编程"],
+ "address": {
+ "street": "长安街100号",
+ "city": "北京",
+ "postalCode": "100000"
+ }
+ }
+ """;
+
+ IotDBSessionConfig iotDBSessionConfig = new IotDBSessionConfig();
+
+ List values = new ArrayList<>();
+ values.add(jsonValue);
+ ArrayList objects = new ArrayList<>();
+ objects.add("datasource");
+ iotDBSessionConfig.insertRecord(sessionPool,ROOT_DATA_DATAJSON,System.currentTimeMillis(),objects,values);
+
+ SessionDataSet sessionDataSet = iotDBSessionConfig.selectRecord(sessionPool,SELECT_ROOT_DATA_DATAJSON_DATASOURCE);
+
+ HashMap> longMapHashMap = new HashMap<>();
+
+ try {
+ while (sessionDataSet.hasNext()){
+ RowRecord next = sessionDataSet.next();
+ long timestamp = next.getTimestamp();
+ Map fieldMap = new HashMap<>();
+ for (Field field : next.getFields()) {
+ TSDataType dataType = field.getDataType();
+ String stringValue = field.getStringValue();
+ fieldMap.put(dataType.name(), stringValue);
+ }
+ longMapHashMap.put(timestamp, fieldMap);
+ }
+ } catch (StatementExecutionException e) {
+ throw new RuntimeException(e);
+ } catch (IoTDBConnectionException e) {
+ throw new RuntimeException(e);
+ }
+
+ log.info("数据为:{}", JSONObject.toJSONString(longMapHashMap));
+ }
+
+}
+
+
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/EventActuate.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/EventActuate.java
new file mode 100644
index 0000000..f0fad39
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/EventActuate.java
@@ -0,0 +1,29 @@
+package com.muyu.common.iotdb.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+/**
+ * @Author WangXin
+ * @Data 2024/9/29
+ * @Description 事件驱动对象
+ * @Version 1.0.0
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class EventActuate {
+ /**
+ * json数据
+ */
+ private String jsonData;
+ /**
+ * 事件驱动key集合
+ */
+ private List eventKeys;
+}
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/InsertDataDTO.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/InsertDataDTO.java
new file mode 100644
index 0000000..47ceee9
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/InsertDataDTO.java
@@ -0,0 +1,40 @@
+package com.muyu.common.iotdb.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class InsertDataDTO {
+ private Float temperature;
+ private String hardware;
+ private Boolean status;
+
+ public InsertDataDTO buildOne() {
+ InsertDataDTO insertDataDTO = new InsertDataDTO();
+ insertDataDTO.setHardware("ss");
+ insertDataDTO.setStatus(true);
+ insertDataDTO.setTemperature(12.0F);
+ return insertDataDTO;
+ }
+
+ public List buildList() {
+ List insertDataDTOS = new ArrayList<>();
+ int buildNum = 10;
+ for (int i = 0; i < buildNum; i++) {
+ InsertDataDTO insertDataDTO = new InsertDataDTO();
+ insertDataDTO.setHardware(i % 2 == 0 ? "pp" + i : null);
+ insertDataDTO.setStatus(i % 2 == 0);
+ insertDataDTO.setTemperature(12.0F + i);
+ insertDataDTOS.add(insertDataDTO);
+ }
+ return insertDataDTOS;
+ }
+}
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/ResultEntity.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/ResultEntity.java
new file mode 100644
index 0000000..f9ac7ba
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/ResultEntity.java
@@ -0,0 +1,20 @@
+package com.muyu.common.iotdb.domain;
+
+
+import com.muyu.common.iotdb.domain.dto.IotDbRecordAble;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ResultEntity extends IotDbRecordAble {
+
+ private Float temperature;
+
+ private String hardware;
+
+ private Boolean status;
+
+ private String time;
+
+}
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/TestDataType.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/TestDataType.java
new file mode 100644
index 0000000..1b68224
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/TestDataType.java
@@ -0,0 +1,18 @@
+package com.muyu.common.iotdb.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TestDataType {
+ private Float temperature;
+ private String hardware;
+ private Boolean status;
+ private Double testDouble;
+ private Long testLong;
+}
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/IotDbRecordAble.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/IotDbRecordAble.java
new file mode 100644
index 0000000..621ae7c
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/IotDbRecordAble.java
@@ -0,0 +1,14 @@
+package com.muyu.common.iotdb.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @Author WangXin
+ * @Data 2024/9/30
+ * @Description IotDBServiceImpl业务实现层
+ * @Version 1.0.0
+ */
+
+@Data
+public class IotDbRecordAble {
+}
diff --git a/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/MeasurementSchemaValuesDTO.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/MeasurementSchemaValuesDTO.java
new file mode 100644
index 0000000..5b4b5e5
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/domain/dto/MeasurementSchemaValuesDTO.java
@@ -0,0 +1,23 @@
+package com.muyu.common.iotdb.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+
+import java.util.List;
+
+
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class MeasurementSchemaValuesDTO {
+
+ private List schemaList;
+
+ private List