diff --git a/intc-admin/pom.xml b/intc-admin/pom.xml
index 99e51cd..54c3ee2 100644
--- a/intc-admin/pom.xml
+++ b/intc-admin/pom.xml
@@ -22,6 +22,11 @@
com.mysql
mysql-connector-j
+
+ com.taosdata.jdbc
+ taos-jdbcdriver
+ 2.0.38
+
diff --git a/intc-admin/src/main/resources/application-dev.yml b/intc-admin/src/main/resources/application-dev.yml
index 15c5052..8f93b73 100644
--- a/intc-admin/src/main/resources/application-dev.yml
+++ b/intc-admin/src/main/resources/application-dev.yml
@@ -54,14 +54,20 @@ spring:
url: jdbc:postgresql://154.8.147.51:15432/fishery_dev?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
username: postgres
password: intc@123987
-# # 从库数据源
-# slave:
-# lazy: true
-# type: ${spring.datasource.type}
-# driverClassName: com.taosdata.jdbc.rs.RestfulDriver
-# url: jdbc:TAOS-RS://117.72.197.29:6041/log?timezone=Shanghai&charset=UTF-8&locale=en_US.UTF-8
-# username: root
-# password: taosdata
+ # 从库数据源 - TDengine
+ taos:
+ lazy: false
+ type: ${spring.datasource.type}
+ driverClassName: com.taosdata.jdbc.rs.RestfulDriver
+ # 不指定数据库名,在 SQL 中使用完整路径 fishery.table_name
+ url: jdbc:TAOS-RS://154.8.147.51:6041?timezone=Shanghai&charset=UTF-8&locale=en_US.UTF-8
+ username: root
+ password: intc@123456
+ hikari:
+ connection-timeout: 60000
+ validation-timeout: 10000
+ max-pool-size: 5
+ min-idle: 2
# oracle:
# type: ${spring.datasource.type}
# driverClassName: oracle.jdbc.OracleDriver
diff --git a/intc-modules/intc-iot/pom.xml b/intc-modules/intc-iot/pom.xml
new file mode 100644
index 0000000..5f33d62
--- /dev/null
+++ b/intc-modules/intc-iot/pom.xml
@@ -0,0 +1,91 @@
+
+
+
+ com.intc
+ intc-modules
+ ${revision}
+
+ 4.0.0
+
+ intc-iot
+
+
+ 阿里云生活物联网平台(飞燕平台)对接模块
+
+
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.6.4
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-iot
+ 7.46.0
+
+
+
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.5
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.12.0
+
+
+
+
+ com.intc
+ intc-common-core
+
+
+
+ com.intc
+ intc-common-doc
+
+
+
+ com.intc
+ intc-common-redis
+
+
+
+ com.intc
+ intc-common-mybatis
+
+
+
+ com.intc
+ intc-common-log
+
+
+
+ com.intc
+ intc-common-security
+
+
+
+ com.intc
+ intc-common-web
+
+
+
+ com.intc
+ intc-common-tenant
+
+
+
+
+
diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotConfiguration.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotConfiguration.java
new file mode 100644
index 0000000..a8af4d3
--- /dev/null
+++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotConfiguration.java
@@ -0,0 +1,41 @@
+package com.intc.iot.config;
+
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.profile.DefaultProfile;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 阿里云生活物联网平台(飞燕平台)配置
+ *
+ * @author intc
+ */
+@Slf4j
+@Configuration
+@RequiredArgsConstructor
+@ConditionalOnProperty(prefix = "aliyun.living-iot", name = "access-key-id")
+public class AliyunIotConfiguration {
+
+ private final AliyunIotProperties iotProperties;
+
+ /**
+ * 创建阿里云飞燕平台客户端
+ */
+ @Bean
+ public IAcsClient livingIotClient() {
+ DefaultProfile profile = DefaultProfile.getProfile(
+ iotProperties.getRegionId(),
+ iotProperties.getAccessKeyId(),
+ iotProperties.getAccessKeySecret()
+ );
+
+ IAcsClient client = new DefaultAcsClient(profile);
+ log.info("阿里云生活物联网平台客户端初始化成功,RegionId: {}", iotProperties.getRegionId());
+ return client;
+ }
+
+}
diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotProperties.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotProperties.java
new file mode 100644
index 0000000..475a573
--- /dev/null
+++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/AliyunIotProperties.java
@@ -0,0 +1,100 @@
+package com.intc.iot.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 阿里云生活物联网平台(飞燕平台)配置属性
+ *
+ * @author intc
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "aliyun.living-iot")
+public class AliyunIotProperties {
+
+ /**
+ * 阿里云AccessKey ID
+ */
+ private String accessKeyId;
+
+ /**
+ * 阿里云AccessKey Secret
+ */
+ private String accessKeySecret;
+
+ /**
+ * 地域节点(如:cn-shanghai)
+ */
+ private String regionId;
+
+ /**
+ * 飞燕平台项目ID(Project ID)
+ */
+ private String projectId;
+
+ /**
+ * App Key
+ */
+ private String appKey;
+
+ /**
+ * App Secret
+ */
+ private String appSecret;
+
+ /**
+ * 品类Key
+ */
+ private String categoryKey;
+
+ /**
+ * MQTT 配置
+ */
+ private MqttConfig mqtt = new MqttConfig();
+
+ @Data
+ public static class MqttConfig {
+ /**
+ * MQTT Broker 地址
+ */
+ private String brokerUrl;
+
+ /**
+ * 客户端ID
+ */
+ private String clientId;
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 连接超时时间(秒)
+ */
+ private Integer connectionTimeout = 30;
+
+ /**
+ * 保活时间(秒)
+ */
+ private Integer keepAliveInterval = 60;
+
+ /**
+ * 自动重连
+ */
+ private Boolean autoReconnect = true;
+
+ /**
+ * 清除会话
+ */
+ private Boolean cleanSession = true;
+ }
+
+}
diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/config/MqttConfiguration.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/MqttConfiguration.java
new file mode 100644
index 0000000..e768c07
--- /dev/null
+++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/config/MqttConfiguration.java
@@ -0,0 +1,49 @@
+package com.intc.iot.config;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * MQTT 客户端配置
+ *
+ * @author intc
+ */
+@Slf4j
+@Configuration
+@RequiredArgsConstructor
+@ConditionalOnProperty(prefix = "aliyun.living-iot.mqtt", name = "broker-url")
+public class MqttConfiguration {
+
+ private final AliyunIotProperties iotProperties;
+
+ /**
+ * 创建 MQTT 客户端
+ */
+ @Bean
+ public MqttClient mqttClient() throws Exception {
+ AliyunIotProperties.MqttConfig mqtt = iotProperties.getMqtt();
+
+ MemoryPersistence persistence = new MemoryPersistence();
+ MqttClient client = new MqttClient(mqtt.getBrokerUrl(), mqtt.getClientId(), persistence);
+
+ MqttConnectOptions options = new MqttConnectOptions();
+ options.setUserName(mqtt.getUsername());
+ options.setPassword(mqtt.getPassword().toCharArray());
+ options.setConnectionTimeout(mqtt.getConnectionTimeout());
+ options.setKeepAliveInterval(mqtt.getKeepAliveInterval());
+ options.setAutomaticReconnect(mqtt.getAutoReconnect());
+ options.setCleanSession(mqtt.getCleanSession());
+
+ client.connect(options);
+ log.info("MQTT 客户端连接成功,Broker: {}", mqtt.getBrokerUrl());
+
+ return client;
+ }
+
+}
diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java
new file mode 100644
index 0000000..ef79aac
--- /dev/null
+++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java
@@ -0,0 +1,212 @@
+package com.intc.iot.controller;
+
+import com.intc.common.core.domain.R;
+import com.intc.common.web.core.BaseController;
+import com.intc.iot.service.DeviceDataService;
+import com.intc.iot.service.IotDeviceService;
+import com.intc.iot.service.MqttService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * 阿里云生活物联网平台(飞燕平台)控制器
+ *
+ * @author intc
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/iot")
+@Tag(name = "生活物联网平台管理", description = "阿里云飞燕平台对接接口")
+public class IotController extends BaseController {
+
+ @Autowired(required = false)
+ private IotDeviceService iotDeviceService;
+
+ @Autowired(required = false)
+ private MqttService mqttService;
+
+ @Autowired(required = false)
+ private DeviceDataService deviceDataService;
+
+ @Operation(summary = "测试接口")
+ @GetMapping("/test")
+ public R test() {
+ return R.ok("飞燕平台模块测试成功!");
+ }
+
+ @Operation(summary = "查询设备列表")
+ @GetMapping("/device/list")
+ public R