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