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