# 大乐透奖金规则更新说明

## 更新概述
大乐透奖池字段单位从"元"改为"亿元"，以便与Excel导入数据保持一致。

## 1. 数据库变更

### 字段类型修改
- **字段名**：`prizePool`
- **旧类型**：`BIGINT`（单位：元）
- **新类型**：`DECIMAL(10,2)`（单位：亿元）
- **表名**：`dlt_draw_record`

### SQL脚本
- `sql/update_prize_pool_to_decimal.sql`: 修改奖池字段类型

## 2. 代码变更

### 2.1 实体类更新
**DltDrawRecord.java**
- `prizePool` 字段从 `Long` 改为 `Double`
- 单位从"元"改为"亿元"

### 2.2 工具类更新
**DltPrizeCalculator.java**
- `calculatePrize()` 方法参数 `prizePool` 从 `Long` 改为 `Double`
- 奖池阈值从 `800000000L`（8亿元）改为 `8.0`（8亿）
- 注释更新为"单位：亿元"

### 2.3 导入逻辑更新
**DltDataImporter.java**
- `importD1Data()` 方法：删除 `* 100000000` 转换，直接存储亿元值
- `appendD1Data()` 方法：删除 `* 100000000` 转换，直接存储亿元值
- 日志输出改为"亿元"

### 2.4 服务层更新
**DltDataAnalysisServiceImpl.java**
- `processPendingDltPredictions()` 方法中 `prizePool` 类型从 `Long` 改为 `Double`
- 日志输出改为"亿元"

## 3. 奖金规则

### 奖池阈值
- **高奖金档**：奖池 ≥ 8亿元
- **低奖金档**：奖池 < 8亿元

### 奖金标准

| 奖项 | 中奖条件 | 奖池≥8亿 | 奖池<8亿 |
|------|---------|---------|---------|
| 一等奖 | 5+2 | 500万封顶（浮动） | 500万封顶（浮动） |
| 二等奖 | 5+1 | 500万封顶（浮动） | 500万封顶（浮动） |
| 三等奖 | 5+0 或 4+2 | 6666元 | 5000元 |
| 四等奖 | 4+1 | 380元 | 300元 |
| 五等奖 | 4+0 或 3+2 | 200元 | 150元 |
| 六等奖 | 3+1 或 2+2 | 18元 | 15元 |
| 七等奖 | 3+0 或 1+2 或 2+1 或 0+2 | 7元 | 5元 |

## 4. 使用说明

### 4.1 数据库迁移
执行SQL脚本修改字段类型：
```bash
mysql -u用户名 -p数据库名 < sql/update_prize_pool_to_decimal.sql
```

### 4.2 Excel导入格式
D1工作表（大乐透开奖数据）列结构：
- A列：开奖期号
- B列：开奖日期
- C-G列：前区球1-5
- H-I列：后区球1-2
- **J列：奖池金额（单位：亿元，如 8.50、10.25）**

**示例**：
- Excel中填写：`8.50` 表示 8.50亿元
- 数据库存储：`8.50`
- 判断逻辑：`8.50 >= 8.0` → 使用高奖金档

### 4.3 API接口
现有接口无需修改，系统会自动：
1. 导入数据时直接存储亿元值
2. 处理待开奖预测时根据奖池判断奖金档位
3. 返回结果中奖池单位为亿元

## 5. 注意事项

1. **奖池金额单位变更**：
   - Excel中：以"亿元"为单位（如8.50表示8.50亿元）
   - 数据库中：以"亿元"为单位存储（DECIMAL(10,2)类型）
   - 判断阈值：8亿元
   - **重要**：如果之前已经导入过数据（以元为单位），需要执行 `sql/update_prize_pool_to_decimal.sql` 来转换数据类型

2. **数据精度**：
   - 奖池金额使用 DECIMAL(10,2) 类型，最多支持10位数字，小数点后2位
   - 可以精确表示到0.01亿元（即100万元）

3. **向后兼容**：
   - `DltPrizeCalculator.calculatePrize()` 提供了无奖池参数的重载方法，默认奖池为0
   - 旧代码可以继续使用，但建议更新为传入奖池参数的版本

## 6. 测试建议

1. 测试高奖金档：导入奖池≥8亿的数据，验证奖金计算正确
2. 测试低奖金档：导入奖池<8亿的数据，验证奖金计算正确
3. 测试边界值：导入奖池=8.00的数据，验证使用高奖金档
4. 测试空值：验证奖池为空时默认为0.0

## 7. 文件清单

### 修改文件
- `src/main/java/com/xy/xyaicpzs/domain/entity/DltDrawRecord.java`
- `src/main/java/com/xy/xyaicpzs/util/DltPrizeCalculator.java`
- `src/main/java/com/xy/xyaicpzs/util/DltDataImporter.java`
- `src/main/java/com/xy/xyaicpzs/service/impl/DltDataAnalysisServiceImpl.java`

### 新增文件
- `大乐透奖金规则更新说明.md`（本文件）

### SQL脚本
- `sql/update_prize_pool_to_decimal.sql`（同时更新双色球和大乐透）

## 8. 完成状态

✅ 数据库字段类型修改
✅ 实体类更新
✅ 工具类更新
✅ 导入逻辑更新
✅ 服务层更新
✅ 代码编译通过

**所有代码已完成并通过编译检查，可以部署使用。**
