Files
cpzs-backend/大乐透奖金规则更新说明.md

133 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

# 大乐透奖金规则更新说明
## 更新概述
大乐透奖池字段单位从"元"改为"亿元"以便与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. 完成状态
✅ 数据库字段类型修改
✅ 实体类更新
✅ 工具类更新
✅ 导入逻辑更新
✅ 服务层更新
✅ 代码编译通过
**所有代码已完成并通过编译检查,可以部署使用。**