Files
cpzs-backend/大乐透奖金规则更新说明.md
2026-02-14 12:15:01 +08:00

133 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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