Initial commit for tuoheng-airport-ddd

This commit is contained in:
孙小云 2025-12-20 14:24:10 +08:00
commit 5c2fcf5e34
6 changed files with 636 additions and 0 deletions

45
.gitignore vendored Normal file
View File

@ -0,0 +1,45 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
### Logs ###
logs/
*.log
### Temp Files ###
*.tmp
*.bak
*.swp
*~.nib

311
pom.xml Normal file
View File

@ -0,0 +1,311 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.tuoheng.hxf</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>tuoheng-airport-ddd</artifactId>
<packaging>jar</packaging>
<name>Tuoheng Airport DDD</name>
<description>拓恒无人机场系统 - DDD四层架构单体应用</description>
<properties>
<!-- MyBatis Plus - 升级到支持 Spring Boot 2.7 的版本 -->
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<!-- Database -->
<mysql.version>8.0.33</mysql.version>
<druid.version>1.2.20</druid.version>
<!-- XXL-Job - 升级到最新版本 -->
<xxl-job.version>2.4.0</xxl-job.version>
<!-- FastJSON - 升级到 fastjson2 以获得更好的性能和安全性 -->
<fastjson2.version>2.0.43</fastjson2.version>
<!-- Guava -->
<guava.version>32.1.3-jre</guava.version>
<!-- Swagger - 使用 springdoc-openapi 替代 springfox -->
<springdoc-openapi.version>1.7.0</springdoc-openapi.version>
<!-- EasyExcel -->
<easyexcel.version>3.3.2</easyexcel.version>
<!-- iText PDF -->
<itext.version>5.5.13.3</itext.version>
<!-- JTS -->
<jts.version>1.19.0</jts.version>
<!-- JGraphT -->
<jgrapht.version>1.5.2</jgrapht.version>
<!-- JavaCV - 升级到较新版本 -->
<javacv.version>1.5.9</javacv.version>
<!-- Aliyun SDK -->
<aliyun-oss.version>3.17.1</aliyun-oss.version>
<aliyun-sms.version>2.0.24</aliyun-sms.version>
<aliyun-sts.version>3.1.2</aliyun-sts.version>
<!-- MinIO -->
<minio.version>8.5.7</minio.version>
<!-- JPush -->
<jpush.version>3.6.8</jpush.version>
<!-- JWT - 升级到支持 Java 11+ 的版本 -->
<jjwt.version>0.12.3</jjwt.version>
<!-- Shiro - 升级到支持 Spring Boot 2.7 的版本 -->
<shiro.version>1.13.0</shiro.version>
<shiro-redis.version>3.3.1</shiro-redis.version>
</properties>
<dependencies>
<!-- Tuoheng Common - 通用模块 -->
<dependency>
<groupId>com.tuoheng.hxf</groupId>
<artifactId>tuoheng-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- Spring Boot AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- Spring Boot WebSocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Kafka -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!-- MQTT -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
<!-- Consul Discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- XXL-Job -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>
<!-- SkyWalking - 使用父 pom 中定义的版本 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- FastJSON2 - 替换旧的 FastJSON -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson2.version}</version>
</dependency>
<!-- Guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- Swagger - 使用 springdoc-openapi 替代 springfox (更好地支持 Spring Boot 2.7) -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<!-- iText PDF -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- JTS (地理信息处理) -->
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>${jts.version}</version>
</dependency>
<!-- JGraphT (图论算法) -->
<dependency>
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
<version>${jgrapht.version}</version>
</dependency>
<!-- JavaCV (视频处理) -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>${javacv.version}</version>
</dependency>
<!-- Aliyun OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss.version}</version>
</dependency>
<!-- Aliyun SMS -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>${aliyun-sms.version}</version>
</dependency>
<!-- Aliyun STS -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sts</artifactId>
<version>${aliyun-sts.version}</version>
</dependency>
<!-- MinIO -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<!-- JPush -->
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>${jpush.version}</version>
</dependency>
<!-- JWT - 升级到 0.12.x 以支持 Java 11+ -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Shiro - 升级到支持 Spring Boot 2.7 的版本 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- Shiro Redis -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>${shiro-redis.version}</version>
</dependency>
<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,29 @@
package com.tuoheng.airport;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 拓恒无人机场系统启动类
*
* @author Tuoheng Team
* @date 2024-01-01
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableAsync
@EnableScheduling
@MapperScan("com.tuoheng.airport.*.infrastructure.persistence.mapper")
public class AirportApplication {
public static void main(String[] args) {
SpringApplication.run(AirportApplication.class, args);
System.out.println("========================================");
System.out.println("拓恒无人机场系统启动成功!");
System.out.println("========================================");
}
}

View File

@ -0,0 +1,28 @@
server:
port: 8080
spring:
# 数据源配置 - 开发环境
datasource:
url: jdbc:mysql://localhost:3306/tuoheng_airport_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
# Redis配置 - 开发环境
redis:
host: localhost
port: 6379
password:
database: 0
# Kafka配置 - 开发环境
kafka:
bootstrap-servers: localhost:9092
# 日志配置 - 开发环境
logging:
level:
root: INFO
com.tuoheng.airport: DEBUG
org.springframework.web: DEBUG
org.mybatis: DEBUG

View File

@ -0,0 +1,28 @@
server:
port: 8080
spring:
# 数据源配置 - 生产环境
datasource:
url: jdbc:mysql://prod-mysql-server:3306/tuoheng_airport?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=true
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
# Redis配置 - 生产环境
redis:
host: prod-redis-server
port: 6379
password: ${REDIS_PASSWORD}
database: 0
# Kafka配置 - 生产环境
kafka:
bootstrap-servers: prod-kafka-server:9092
# 日志配置 - 生产环境
logging:
level:
root: WARN
com.tuoheng.airport: INFO
org.springframework.web: WARN
org.mybatis: WARN

View File

@ -0,0 +1,195 @@
server:
port: 8080
servlet:
context-path: /api
spring:
application:
name: tuoheng-airport-ddd
profiles:
active: dev
# 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/tuoheng_airport?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: password
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# Redis配置
redis:
host: localhost
port: 6379
password:
database: 0
timeout: 3000
lettuce:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
# Kafka配置
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
acks: all
retries: 3
consumer:
group-id: ${spring.application.name}
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
auto-offset-reset: latest
enable-auto-commit: true
# Consul配置
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
health-check-path: /actuator/health
health-check-interval: 10s
instance-id: ${spring.application.name}:${server.port}
# MyBatis Plus配置
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
type-aliases-package: com.tuoheng.airport.*.infrastructure.persistence.entity
global-config:
db-config:
id-type: auto
logic-delete-field: mark
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# MQTT配置
mqtt:
dji:
broker-url: tcp://localhost:1883
client-id: tuoheng-dji-client
username: admin
password: admin
default-qos: 1
timeout: 30
keepalive: 60
lx:
broker-url: tcp://localhost:1883
client-id: tuoheng-lx-client
username: admin
password: admin
default-qos: 1
timeout: 30
keepalive: 60
# XXL-Job配置
xxl:
job:
admin:
addresses: http://localhost:8888/xxl-job-admin
executor:
appname: ${spring.application.name}
ip:
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
accessToken:
# 阿里云OSS配置
aliyun:
oss:
endpoint: https://oss-cn-hangzhou.aliyuncs.com
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
bucket-name: tuoheng-airport
sms:
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
sign-name: 拓恒科技
template-code: SMS_123456789
sts:
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
role-arn: acs:ram::your-account-id:role/your-role-name
role-session-name: tuoheng-session
# MinIO配置
minio:
endpoint: http://localhost:9000
access-key: minioadmin
secret-key: minioadmin
bucket-name: tuoheng-airport
# JPush配置
jpush:
app-key: your-app-key
master-secret: your-master-secret
# JWT配置
jwt:
secret: tuoheng-airport-secret-key-2024
expiration: 86400000
header: Authorization
token-prefix: Bearer
# Swagger配置
swagger:
enabled: true
title: 拓恒无人机场系统API文档
description: 基于DDD四层架构的无人机场管理系统
version: 1.0.0
base-package: com.tuoheng.airport
contact:
name: Tuoheng Team
email: support@tuoheng.com
url: https://www.tuoheng.com
# 日志配置
logging:
level:
root: INFO
com.tuoheng.airport: DEBUG
org.springframework.web: INFO
org.mybatis: DEBUG
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n'
file:
name: logs/tuoheng-airport.log
max-size: 100MB
max-history: 30
# Actuator配置
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always