update: 提交所有修改和新增功能代码

This commit is contained in:
lihanqi
2026-02-14 12:15:01 +08:00
parent dc59f393fa
commit ec597ffe2e
77 changed files with 4417 additions and 2411 deletions

View File

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