# 腾讯广告投放平台自动化项目

## 项目简介
这是一个基于 Spring Boot 的腾讯广告投放平台自动化管理系统，采用经典的三层架构设计，集成了现代化的 Java 生态技术栈。

## 技术栈

### 核心框架
- **JDK**: 21
- **Spring Boot**: 3.2.2
- **Maven**: 项目管理和构建工具

### 数据层
- **MySQL**: 关系型数据库
- **MyBatis-Plus**: 3.5.5 - ORM框架，简化数据库操作
- **Dynamic DataSource**: 4.3.0 - 动态数据源切换
- **P6Spy**: 3.9.1 - SQL监控和分析

### 缓存层
- **Redis**: 分布式缓存和Session管理

### 工具库
- **Lombok**: 简化Java代码
- **FastJson2**: 2.0.47 - 高性能JSON处理
- **Plumelog**: 3.5.2 - 分布式日志收集
- **Logback**: 日志框架

### 定时任务
- **Spring Scheduling**: Spring定时任务
- **ShedLock**: 5.10.2 - 分布式定时任务锁，防止重复执行

### 业务SDK
- **Marketing API Java SDK**: 腾讯广告营销API SDK

## 项目结构

```
gdt-auto/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/moka/gdtauto/
│   │   │       ├── GdtAutoApplication.java    # 主启动类
│   │   │       ├── controller/                # 控制层
│   │   │       ├── service/                   # 服务接口层
│   │   │       │   └── impl/                  # 服务实现层
│   │   │       ├── mapper/                    # 数据访问层
│   │   │       ├── entity/                    # 实体类
│   │   │       ├── task/                      # 定时任务
│   │   │       └── config/                    # 配置类
│   │   └── resources/
│   │       ├── application.yml                # 应用配置
│   │       ├── logback-spring.xml            # 日志配置
│   │       ├── spy.properties                # P6Spy配置
│   │       └── mapper/                       # MyBatis XML映射文件
│   └── test/                                 # 测试代码
├── pom.xml                                   # Maven依赖配置
└── README.md                                 # 项目说明文档
```

## 环境要求

- JDK 21+
- Maven 3.6+
- MySQL 5.7+ 或 8.0+
- Redis 5.0+

## 安装步骤

### 1. 克隆项目
```bash
git clone <repository-url>
cd gdt-auto
```

### 2. 配置数据库
创建数据库：
```sql
CREATE DATABASE gdt_auto DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

修改 `src/main/resources/application.yml` 中的数据库配置：
```yaml
spring:
  datasource:
    dynamic:
      datasource:
        master:
          url: jdbc:p6spy:mysql://localhost:3306/gdt_auto?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: your_username
          password: your_password
```

### 3. 配置Redis
修改 `src/main/resources/application.yml` 中的Redis配置：
```yaml
spring:
  data:
    redis:
      host: localhost
      port: 6379
      password: your_password  # 如果有密码
      database: 0
```

### 4. 配置腾讯广告API
修改 `src/main/resources/application.yml` 中的腾讯广告API配置：
```yaml
tencent:
  ads:
    access-token: your_access_token
    refresh-token: your_refresh_token
    app-id: your_app_id
    secret: your_secret
```

### 5. 安装依赖
```bash
mvn clean install
```

## 运行项目

### 开发环境运行
```bash
mvn spring-boot:run
```

或者在IDE中直接运行 `GdtAutoApplication.java` 主类。

### 打包部署
```bash
# 打包
mvn clean package -DskipTests

# 运行jar包
java -jar target/gdt-auto-1.0.0.jar

# 指定环境
java -jar target/gdt-auto-1.0.0.jar --spring.profiles.active=prod
```

## 验证运行

项目启动后，访问健康检查接口：
```bash
curl http://localhost:8080/health
```

返回 `OK` 表示项目运行正常。

## 核心功能模块

### 1. MyBatis-Plus集成
- 自动分页
- 逻辑删除
- 自动填充
- 代码生成器支持

### 2. 动态数据源
支持多数据源动态切换，可以通过注解 `@DS("数据源名称")` 指定使用的数据源。

### 3. SQL监控
集成P6Spy，自动记录SQL执行日志，支持慢SQL检测（默认2秒）。

### 4. 分布式定时任务
使用ShedLock确保定时任务在分布式环境下不会重复执行。

### 5. 日志管理
- 控制台输出
- 文件滚动记录
- 错误日志独立存储
- 支持Plumelog分布式日志收集

## 开发规范

### 代码结构
- **Controller层**: 处理HTTP请求，参数校验
- **Service层**: 业务逻辑处理
- **Mapper层**: 数据库访问
- **Entity层**: 数据实体
- **Task层**: 定时任务

### 命名规范
- 类名：大驼峰（PascalCase）
- 方法名：小驼峰（camelCase）
- 常量：全大写下划线分隔
- 包名：全小写

## Git版本控制

```bash
# 初始化仓库
git init

# 添加远程仓库
git remote add origin <repository-url>

# 提交代码
git add .
git commit -m "Initial commit"
git push -u origin main
```

## 常见问题

### 1. MySQL连接失败
- 检查MySQL服务是否启动
- 确认数据库名称、用户名、密码是否正确
- 检查MySQL是否允许远程连接

### 2. Redis连接失败
- 检查Redis服务是否启动
- 确认Redis配置（host、port、password）

### 3. 端口冲突
如果8080端口被占用，可以在 `application.yml` 中修改：
```yaml
server:
  port: 8081
```

## 许可证

本项目采用 MIT 许可证。

## 联系方式

如有问题，请提交 Issue 或联系项目维护者。


