# 系统配置说明

## 概述
系统配置表用于存储游戏平台的各种配置参数，支持动态配置和运行时修改。

## 配置表结构
表名：`system_config`

| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| config_key | varchar(100) | 配置键（唯一） |
| config_value | text | 配置值 |
| config_type | varchar(50) | 配置类型：STRING, INTEGER, BOOLEAN, JSON |
| description | varchar(500) | 配置描述 |
| is_system | tinyint(1) | 是否系统配置（1是，0否） |
| created_at | datetime(3) | 创建时间 |
| updated_at | datetime(3) | 更新时间 |

## 默认配置项

### 链接生成相关配置
- `link.default_quantity`: 每次副本的奖励点数（默认值：50）
- `link.refresh_interval`: 链接刷新间隔，单位：秒（默认值：300）
- `link.qr_expire_time`: 二维码过期时间，单位：秒（默认值：600）

### 脚本服务器相关配置
- `script.server_url`: 脚本服务器地址（默认值：http://36.138.184.60:12345）
- `script.qr_path_template`: 二维码图片路径模板（默认值：/{machineId}/二维码.png）

### 设备检测相关配置
- `device.idle_status`: 设备空闲状态的字符串标识（默认值：空闲）

## 参数说明

### 链接生成接口参数
- **`times`**: 打多少次副本，决定总的目标值
- **`linkCount`**: 生成多少个链接，决定链接任务的数量（默认值：1）

### 业务逻辑
1. 每次副本的奖励点数从配置表 `link.default_quantity` 获取
2. 总目标值 = `times` × 配置表中的默认奖励点数
3. 生成 `linkCount` 个链接任务供用户使用
4. 用户完成链接后，根据 `times` 和配置的奖励点数计算总奖励

## API接口

### 获取配置列表
```
GET /api/admin/config/list?page=1&size=20
```

### 根据键获取配置
```
GET /api/admin/config/key/{configKey}
```

### 根据类型获取配置
```
GET /api/admin/config/type/{configType}
```

### 创建配置
```
POST /api/admin/config
Content-Type: application/json

{
  "configKey": "custom.setting",
  "configValue": "value",
  "configType": "STRING",
  "description": "自定义设置",
  "isSystem": false
}
```

### 更新配置
```
PUT /api/admin/config/{id}
Content-Type: application/json

{
  "configKey": "custom.setting",
  "configValue": "new_value",
  "configType": "STRING",
  "description": "自定义设置",
  "isSystem": false
}
```

### 删除配置
```
DELETE /api/admin/config/{id}
DELETE /api/admin/config/key/{configKey}
```

### 获取链接默认配置
```
GET /api/admin/config/link/defaults
```

### 获取脚本配置
```
GET /api/admin/config/script/config
```

## 使用示例

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

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

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

// 获取脚本服务器地址
String serverUrl = systemConfigService.getScriptServerUrl();

// 获取设备空闲状态字符串
String idleStatus = systemConfigService.getDeviceIdleStatus();
```

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

## 注意事项

1. **系统配置**：标记为系统配置的项（is_system=1）通常不建议删除，这些是平台运行必需的基础配置。

2. **配置类型**：根据实际需要选择合适的配置类型，数值类型建议使用INTEGER，布尔值使用BOOLEAN。

3. **配置键命名**：建议使用点号分隔的层次结构，如：`module.submodule.setting`。

4. **配置值验证**：在更新配置时，建议对配置值进行格式验证，确保符合预期类型。

5. **缓存策略**：对于频繁访问的配置，建议在服务层添加缓存机制，提高性能。

## 扩展配置

可以根据业务需要添加更多配置项，例如：
- 用户权限相关配置
- 游戏规则配置
- 第三方服务配置
- 日志级别配置
- 性能调优参数
- 设备状态检测相关配置

## 配置变更说明

### 设备空闲状态检测优化

为了提高系统的灵活性，将设备空闲状态的判断字符串从硬编码改为可配置：

**影响的服务：**
- `DeviceStatusService`: 设备状态解析服务
- `DeviceStatusCheckService`: 设备状态检查服务

**配置项：**
- `device.idle_status`: 用于判断设备是否空闲的字符串（默认：空闲）

**使用场景：**
- 当设备管理系统返回的空闲状态字符串发生变化时，只需修改配置即可
- 支持多语言环境下的设备状态标识
- 便于系统维护和扩展