# 数据库修改总结

## 修改概述
根据需求文档和用户要求，对游戏平台系统进行了以下主要修改：

## 1. LinkBatch表结构调整

### 修改前
- `quantity`: 代表批次大小
- `times`: 代表生成次数
- `batchSize`: 每次的奖励点数
- `deductPoints`: 扣除的点数

### 修改后
- `quantity`: 每次副本的奖励点数（从配置表获取，默认50）
- `times`: 打副本的次数
- 移除了 `batchSize` 和 `deductPoints` 字段

### 字段含义
- `quantity`: 每次副本完成后获得的点数，从配置表 `link.default_quantity` 获取
- `times`: 一个批次中打副本的总次数
- `agent_id`: 代理商ID
- `operator_id`: 操作者ID
- `created_at`: 创建时间

### 参数说明
- **`times`**: 打多少次副本，决定总的目标值
- **`linkCount`**: 生成多少个链接，决定链接任务的数量（默认值：1）
- **总目标值计算**: `times` × 配置表中的默认奖励点数

## 2. 新增系统配置表

### 表名：system_config
用于存储系统各种配置参数，支持动态配置和运行时修改。

#### 主要配置项
**链接生成相关：**
- `link.default_quantity`: 默认奖励点数（50）
- `link.refresh_interval`: 链接刷新间隔（300秒）
- `link.qr_expire_time`: 二维码过期时间（600秒）

**脚本服务器相关：**
- `script.server_url`: 脚本服务器地址
- `script.qr_path_template`: 二维码图片路径模板

## 3. 代码结构更新

### 新增文件
1. **实体类**
   - `SystemConfig.java` - 系统配置实体

2. **Mapper接口**
   - `SystemConfigMapper.java` - 系统配置数据访问接口

3. **XML映射文件**
   - `SystemConfigMapper.xml` - MyBatis映射配置

4. **服务类**
   - `SystemConfigService.java` - 系统配置业务逻辑服务

5. **控制器**
   - `SystemConfigController.java` - 系统配置REST API接口

6. **DTO类**
   - `SystemConfigRequest.java` - 配置创建/更新请求
   - `SystemConfigResponse.java` - 配置查询响应
   - `SystemConfigConverter.java` - 配置对象转换工具

### 修改文件
1. **LinkBatch.java** - 移除不需要的字段
2. **LinkBatchMapper.xml** - 更新SQL映射
3. **LinkGenerationService.java** - 使用配置服务，修复字段设置

## 4. API接口

### 系统配置管理接口
- `GET /api/admin/config/list` - 获取配置列表
- `GET /api/admin/config/key/{configKey}` - 根据键获取配置
- `GET /api/admin/config/type/{configType}` - 根据类型获取配置
- `POST /api/admin/config` - 创建配置
- `PUT /api/admin/config/{id}` - 更新配置
- `DELETE /api/admin/config/{id}` - 删除配置
- `GET /api/admin/config/link/defaults` - 获取链接默认配置
- `GET /api/admin/config/script/config` - 获取脚本配置

## 5. 配置使用方式

### 在服务中使用
```java
@Autowired
private SystemConfigService systemConfigService;

// 获取默认奖励点数
Integer defaultQuantity = systemConfigService.getDefaultQuantity();

// 获取刷新间隔
Integer refreshInterval = systemConfigService.getRefreshInterval();
```

### 动态修改配置
```java
// 更新配置
SystemConfig config = systemConfigService.getConfigByKey("link.default_quantity");
config.setConfigValue("100");
systemConfigService.updateConfig(config);
```

## 6. 数据库脚本

### 执行顺序
1. 执行 `docs/game.sql` 中的新表创建语句
2. 系统会自动插入默认配置数据

### 注意事项
- 新表使用 `utf8mb4` 字符集
- 配置键具有唯一性约束
- 系统配置标记为 `is_system=1`，不建议删除

## 7. 业务逻辑调整

### LinkGenerationService
- 使用配置服务获取过期时间等参数
- 修复了字段设置问题
- `quantity` 现在代表每次的奖励点数
- `times` 代表总次数

### 配置管理
- 支持运行时动态修改配置
- 提供完整的CRUD操作
- 支持配置类型验证
- 提供便捷的配置获取方法

## 8. 后续扩展建议

1. **缓存机制**: 对频繁访问的配置添加缓存
2. **配置验证**: 在更新配置时添加值格式验证
3. **配置变更日志**: 记录配置变更历史
4. **配置导入导出**: 支持配置文件导入导出
5. **权限控制**: 对敏感配置的修改权限控制

## 9. 测试建议

1. 测试配置的增删改查功能
2. 验证LinkBatch表的字段映射
3. 测试配置的动态修改是否生效
4. 验证默认配置值的正确性
5. 测试配置服务的异常处理
