diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml
index 06ac746..83a37f2 100644
--- a/cloud-auth/src/main/resources/bootstrap.yml
+++ b/cloud-auth/src/main/resources/bootstrap.yml
@@ -4,10 +4,10 @@ server:
# nacos线上地址
nacos:
- addr: 123.57.152.124:8848
+ addr: 127.0.0.1:8848
user-name: nacos
password: nacos
- namespace: yan1
+ namespace: wx
# Spring
spring:
application:
diff --git a/cloud-common/cloud-common-cache/pom.xml b/cloud-common/cloud-common-cache/pom.xml
new file mode 100644
index 0000000..09d679b
--- /dev/null
+++ b/cloud-common/cloud-common-cache/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 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
+
+
+ com.muyu
+ enterpise-common
+ ${muyu.version}
+
+
+
+
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..a0513c9
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/CacheAbsBasic.java
@@ -0,0 +1,62 @@
+package com.muyu.common.cache;
+
+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);
+ } 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..0cc8f95
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/cache/PrimaryKeyBasic.java
@@ -0,0 +1,37 @@
+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-cache/src/main/java/com/muyu/common/domain/InformationData.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/domain/InformationData.java
new file mode 100644
index 0000000..208749b
--- /dev/null
+++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/common/domain/InformationData.java
@@ -0,0 +1,46 @@
+package com.muyu.common.domain;
+
+import com.muyu.common.system.domain.SysDept;
+import com.muyu.domain.SysCar;
+import com.muyu.domain.WarnLogs;
+import com.muyu.domain.resp.FaultConditionTotalListResp;
+import com.muyu.domain.resp.FenceGroupResp;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+/**
+ * @Author WangXin
+ * @Data 2024/9/30
+ * @Description 消息数据对象
+ * @Version 1.0.0
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class InformationData {
+ /**
+ * 车辆基本信息
+ */
+ private SysCar sysCar;
+ /**
+ * 公司信息
+ */
+ private SysDept sysDept;
+ /**
+ * 车辆电子绑定电子围栏信息
+ */
+ private FenceGroupResp fenceGroupResp;
+ /**
+ * 故障规则数据总数列表
+ */
+ private FaultConditionTotalListResp faultConditionTotalListResp;
+ /**
+ * 预警日志对象
+ */
+ private List warnLogsList;
+}
diff --git a/cloud-common/cloud-common-caffeine/pom.xml b/cloud-common/cloud-common-caffeine/pom.xml
new file mode 100644
index 0000000..88f2273
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-common
+ 3.6.3
+
+
+ cloud-common-caffeine
+
+
+ cloud-common-caffeine 本地缓存服务
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+
+
+
+ com.muyu
+ cloud-common-redis
+
+
+
+
diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java
new file mode 100644
index 0000000..aa9af65
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java
@@ -0,0 +1,44 @@
+package com.muyu.common.caffeine.bean;
+
+import com.github.benmanes.caffeine.cache.Caffeine;
+import com.muyu.common.caffeine.enums.CacheNameEnums;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.caffeine.CaffeineCache;
+import org.springframework.cache.support.SimpleCacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Caffeine管理器
+ * @Author: WangXin
+ * @Name: CaffeineCacheConfig
+ * @Description: Caffeine管理器
+ */
+
+@Slf4j
+@Component
+public class CaffeineManager {
+
+ /**
+ * 创建缓存管理器
+ * @return 缓存管理器实例
+ */
+ @Bean
+ public CacheManager cacheManager() {
+ SimpleCacheManager cacheManager = new SimpleCacheManager();
+ List cacheNames = CacheNameEnums.getCodes();
+ cacheManager.setCaches(cacheNames.stream()
+ .map(name -> new CaffeineCache(
+ name,
+ Caffeine.newBuilder()
+ .recordStats()
+ .build()))
+ .toList());
+ log.info("缓存管理器初始化完成,缓存分区:{}", cacheNames);
+ return cacheManager;
+ }
+
+}
diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java
new file mode 100644
index 0000000..f2600df
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java
@@ -0,0 +1,15 @@
+package com.muyu.common.caffeine.constents;
+
+/**
+ * Caffeine常量
+ * @Author: WangXin
+ * @Name: CaffeineContent
+ * @Description: Caffeine常量
+ */
+
+public class CaffeineContent {
+
+ public static final String CAR_VIN_KEY = "car:vin";
+
+ public static final String VIN = "vin";
+}
diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java
new file mode 100644
index 0000000..175e167
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java
@@ -0,0 +1,66 @@
+package com.muyu.common.caffeine.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 缓存分区枚举
+ *
+ * @Author: WangXin
+ * @Name: CacheNameEnums
+ * @Description: 缓存分区枚举
+ */
+
+@Getter
+public enum CacheNameEnums {
+ STORAGE("storage", "持久化"),
+ FAULT("fault", "故障"),
+ FENCE("fence", "围栏"),
+ WARMING("warming", "预警"),
+ REALTIME("realTime", "实时信息");
+
+ private final String code;
+ private final String info;
+
+ CacheNameEnums(String code, String info) {
+ this.code = code;
+ this.info = info;
+ }
+
+ /**
+ * 鉴别参数是否是枚举的值
+ *
+ * @param code 需鉴别参数
+ * @return 如果存在返回结果turn, 否则返回false
+ */
+ public static boolean isCode(String code) {
+ return Arrays.stream(values())
+ .map(CacheNameEnums::getCode)
+ .anyMatch(c -> c.equals(code));
+ }
+
+ /**
+ * 获取枚举Value
+ * @param code 编码
+ * @return Value
+ */
+ public static String getInfo(String code) {
+ return Arrays.stream(values())
+ .filter(c -> c.getCode().equals(code))
+ .map(CacheNameEnums::getInfo)
+ .findFirst()
+ .orElse("");
+ }
+
+ /**
+ * 获取所有code
+ * @return code集合
+ */
+ public static List getCodes() {
+ return Arrays.stream(values())
+ .map(CacheNameEnums::getCode)
+ .toList();
+ }
+}
diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java
new file mode 100644
index 0000000..fd02366
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java
@@ -0,0 +1,89 @@
+package com.muyu.common.caffeine.utils;
+
+
+import com.muyu.common.caffeine.enums.CacheNameEnums;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cache.CacheManager;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * Caffeine缓存工具
+ * @Author: WangXin
+ * @Name: CaffeineUtils
+ * @Description: 缓存工具类
+ * @CreatedDate: 2024/9/26 下午2:53
+ * @FilePath: com.muyu.common.caffeine
+ */
+@Slf4j
+@Component
+public class CaffeineCacheUtils {
+ @Resource
+ private CacheManager cacheManager;
+ @Resource
+ private RedisTemplate redisTemplate;
+
+
+ /**
+ * 车辆上线 - 新增缓存
+ */
+ public void addCarCache(String vin) {
+ // 从Redis中获取缓存信息
+ for (String name : CacheNameEnums.getCodes()) {
+ String value = redisTemplate.opsForValue().get(name+":"+vin);
+ cacheManager.getCache(name).put(vin, value);
+ log.info("存储缓存, 缓存分区:[{}], 车辆编码:[{}], 存储值:[{}]", name, vin, value);
+ }
+ log.info("车辆编码:{},本地缓存完成...",vin);
+ }
+
+ /**
+ * 车辆下线 - 删除缓存
+ */
+ public void deleteCarCache(String cacheName) {
+ if (!hasCarVinCache(cacheName,null)) {
+ log.warn("车辆编码:{},本地缓存不存在该车辆信息...", cacheName);
+ return;
+ }
+ cacheManager.getCache(cacheName).invalidate();
+ log.info("车辆编码:{},本地缓存删除完成...", cacheName);
+ }
+
+ /**
+ * 获取车辆信息缓存
+ */
+ public Object getCarCache(String cacheName, String key) {
+ if (!hasCarVinCache(cacheName, key)){
+ log.warn("车辆编码:{},本地缓存不存在该车辆信息...",cacheName);
+ return null;
+ }
+ return cacheManager.getCache(cacheName).get(key).get();
+ }
+
+ /**
+ * 获取车辆信息缓存
+ */
+ public T getCarCache(String cacheName, String key, Class type) {
+ if (!hasCarVinCache(cacheName,key)){
+ log.warn("车辆编码:{},本地缓存不存在该车辆信息...",cacheName);
+ return null;
+ }
+ return cacheManager.getCache(cacheName).get(key, type);
+ }
+
+ /**
+ * 判断缓存存在与否
+ */
+ public Boolean hasCarVinCache(String cacheName,String key) {
+ boolean notEmpty = ObjectUtils.isNotEmpty(cacheManager.getCache(cacheName));
+ if (notEmpty && StringUtils.isNotEmpty(key)){
+ return ObjectUtils.isNotEmpty(cacheManager.getCache(cacheName).get(key).get());
+ }
+ return notEmpty;
+
+ }
+
+}
diff --git a/cloud-common/cloud-common-caffeine/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-caffeine/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..0b7acd4
--- /dev/null
+++ b/cloud-common/cloud-common-caffeine/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1,2 @@
+com.muyu.common.caffeine.utils.CaffeineCacheUtils
+com.muyu.common.caffeine.bean.CaffeineManager
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java
index bb59b70..c2a492f 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java
@@ -20,4 +20,10 @@ public class ServiceNameConstants {
* 文件服务的serviceid
*/
public static final String FILE_SERVICE = "cloud-file";
+
+ /**
+ * 车辆服务的serviceid
+ */
+ public static final String ENTERPRISE_SERVICE = "cloud-saas";
+
}
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/domain/Result.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/domain/Result.java
index 70faa40..78453ac 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/domain/Result.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/domain/Result.java
@@ -3,9 +3,9 @@ package com.muyu.common.core.domain;
import com.muyu.common.core.constant.Constants;
import com.muyu.common.core.constant.HttpStatus;
import lombok.AllArgsConstructor;
-import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
import java.io.Serializable;
@@ -15,7 +15,7 @@ import java.io.Serializable;
* @author muyu
*/
@Data
-@Builder
+@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
@@ -33,6 +33,7 @@ public class Result implements Serializable {
public static final int WARN = HttpStatus.WARN;
private static final long serialVersionUID = 1L;
+
private int code;
private String msg;
@@ -96,8 +97,8 @@ public class Result implements Serializable {
private static Result restResult (T data, int code, String msg) {
return Result.builder()
.code(code)
- .data(data)
.msg(msg)
+ .data(data)
.build();
}
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java
index 5039bc0..11bb283 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java
@@ -5,7 +5,7 @@ package com.muyu.common.core.exception;
*
* @author muyu
*/
-public final class ServiceException extends RuntimeException {
+public class ServiceException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/web/controller/BaseController.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/web/controller/BaseController.java
index 3789a82..3d83a00 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/web/controller/BaseController.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/web/controller/BaseController.java
@@ -1,9 +1,11 @@
package com.muyu.common.core.web.controller;
import com.github.pagehelper.PageInfo;
+
import com.muyu.common.core.utils.DateUtils;
import com.muyu.common.core.utils.PageUtils;
import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.web.domain.BaseEntity;
import com.muyu.common.core.web.page.TableDataInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -19,7 +21,7 @@ import java.util.List;
*
* @author muyu
*/
-public class BaseController {
+public class BaseController {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
diff --git a/cloud-common/cloud-common-iotdb/pom.xml b/cloud-common/cloud-common-iotdb/pom.xml
new file mode 100644
index 0000000..32ef405
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 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
+
+
+ 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..2c298f4
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/config/IotDBSessionConfig.java
@@ -0,0 +1,180 @@
+
+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.Bean;
+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;
+
+import static com.muyu.common.iotdb.constant.IotdbConstant.ROOT_DATA_DATAJSON;
+import static com.muyu.common.iotdb.constant.IotdbConstant.SELECT_ROOT_DATA_DATAJSON_DATASOURCE;
+
+/**
+ * @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 value
+ */
+ public void insertRecord(SessionPool sessionPool,String deviceId,
+ long time, List measurements,List dataTypeList, JSONObject value) {
+ try {
+ log.info("iotdb数据入库:device_id:[{}], measurements:[{}], values:[{}]", deviceId, measurements, value);
+ sessionPool.insertRecord(deviceId, time, measurements,dataTypeList,new Object[]{value.toJSONString()});
+ } catch (Exception e) {
+ log.error("IotDBSession insertRecord失败: deviceId={}, time={}, measurements={}, values={}, error={}",
+ deviceId, time, measurements, value, e.getMessage());
+ }
+ }
+
+ public void JSONObject(JSONObject value){
+
+ }
+
+ /**
+ * sql查数据
+ * @param sessionPool
+ * @param sql
+ * @return
+ */
+ 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 JSONObject getJsonFindByTime(SessionPool sessionPool,String fieldName,String deviceId,Long timestamp) {
+ String sql = String.format("SELECT %s FROM %s WHERE time = %d", fieldName, deviceId, timestamp);
+ SessionDataSet sessionDataSet = selectRecord(sessionPool, sql);
+ try {
+ while (sessionDataSet.hasNext()){
+ RowRecord next = sessionDataSet.next();
+ for (Field field : next.getFields()) {
+ String stringValue = field.getStringValue();
+ }
+ }
+ } catch (StatementExecutionException e) {
+ throw new RuntimeException(e);
+ } catch (IoTDBConnectionException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+
+
+ public static void main(String[] args) {
+ SessionPool sessionPool = new SessionPool("127.0.0.1", 6667, "root", "root", 10);
+
+
+ String jsonValue = """
+ {
+ "name": "张三",
+ "age": 28,
+ "email": "zhangsan@example.com",
+ "isStudent": false,
+ "hobbies": ["阅读", "旅行", "编程"],
+ "address": {
+ "street": "长安街100号",
+ "city": "北京",
+ "postalCode": "100000"
+ }
+ }
+ """;
+ JSONObject value = JSONObject.parseObject(jsonValue);
+
+ IotDBSessionConfig iotDBSessionConfig = new IotDBSessionConfig();
+
+ List measurements = List.of("datasource");
+ List datatypeList = List.of(TSDataType.TEXT);
+ iotDBSessionConfig.insertRecord(sessionPool,ROOT_DATA_DATAJSON,System.currentTimeMillis(),measurements,datatypeList,value);
+
+ 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/constant/IotdbConstant.java b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/constant/IotdbConstant.java
new file mode 100644
index 0000000..1a81766
--- /dev/null
+++ b/cloud-common/cloud-common-iotdb/src/main/java/com/muyu/common/iotdb/constant/IotdbConstant.java
@@ -0,0 +1,14 @@
+package com.muyu.common.iotdb.constant;
+
+/**
+ * @Author WangXin
+ * @Data 2024/9/30
+ * @Description iotdb数据库常量
+ * @Version 1.0.0
+ */
+public interface IotdbConstant {
+
+ String ROOT_DATA_DATAJSON = "root.car.data.datajson";
+
+ String SELECT_ROOT_DATA_DATAJSON_DATASOURCE = "select * from root.car.data.datajson";
+}
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/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