完成用户要求的"你忘记修改使用的地方了",将所有调用 RewardService 奖励发放方法的地方从字符串参数改为枚举参数,确保整个系统的类型安全性。
在之前的任务中,我们修改了 RewardService 的方法签名,强制使用 REWARD_SOURCE_TYPE 枚举,但忘记了修改所有调用这些方法的地方。这导致:
文件:app/Module/AppGame/Handler/Shop/BuyHandler.php
修改内容:
use App\Module\Game\Enums\REWARD_SOURCE_TYPE;修改调用:'shop_buy' → REWARD_SOURCE_TYPE::SHOP_PURCHASE
// 修改前
$rewardResult = RewardService::grantReward(
$userId,
$shopItem->reward_group_id,
'shop_buy', // 字符串
$goodId
);
// 修改后
$rewardResult = RewardService::grantReward(
$userId,
$shopItem->reward_group_id,
REWARD_SOURCE_TYPE::SHOP_PURCHASE, // 枚举
$goodId
);
文件:app/Module/GameItems/Services/ChestService.php
修改内容:
use App\Module\Game\Enums\REWARD_SOURCE_TYPE;修改调用:'chest_open' → REWARD_SOURCE_TYPE::CHEST
// 修改前
$rewardResult = RewardService::grantRewardWithPity(
$userId,
$chestConfig->reward_group_id,
'chest_open', // 字符串
$chestId,
true
);
// 修改后
$rewardResult = RewardService::grantRewardWithPity(
$userId,
$chestConfig->reward_group_id,
REWARD_SOURCE_TYPE::CHEST, // 枚举
$chestId,
true
);
文件:app/Module/Task/Services/TaskRewardGroupService.php
修改内容:
use App\Module\Game\Enums\REWARD_SOURCE_TYPE;修改调用:'task' → REWARD_SOURCE_TYPE::TASK
// 修改前
$result = RewardService::grantReward($userId, $task->reward_group_id, 'task', $taskId);
// 修改后
$result = RewardService::grantReward($userId, $task->reward_group_id, REWARD_SOURCE_TYPE::TASK, $taskId);
文件:app/Module/Game/Docs/奖励组系统.md
修改内容:
将字符串参数改为枚举参数
// 修改前
$result = RewardService::grantReward(
userId: 1001,
groupIdOrCode: 'daily_sign_day1',
sourceType: 'daily_sign', // 字符串
sourceId: 1
);
// 修改后
$result = RewardService::grantReward(
userId: 1001,
groupIdOrCode: 'daily_sign_day1',
sourceType: REWARD_SOURCE_TYPE::SIGN_IN, // 枚举
sourceId: 1
);
文件:app/Module/Game/Docs/奖励组系统_独立概率模式使用示例.md
修改内容:
文件:app/Module/Game/Docs/奖励系统使用示例.md
修改内容:
REWARD_SOURCE_TYPE::TASK文件:AiWork/2025年06月/041014-宝箱保底机制实现.md
修改内容:
REWARD_SOURCE_TYPE::CHEST| 原字符串 | 新枚举 | 使用场景 |
|---|---|---|
'shop_buy' |
REWARD_SOURCE_TYPE::SHOP_PURCHASE |
商店购买 |
'chest_open' |
REWARD_SOURCE_TYPE::CHEST |
宝箱开启 |
'task' |
REWARD_SOURCE_TYPE::TASK |
任务奖励 |
'daily_sign' |
REWARD_SOURCE_TYPE::SIGN_IN |
每日签到 |
'gacha' |
REWARD_SOURCE_TYPE::CHEST |
抽卡系统 |
'event' |
REWARD_SOURCE_TYPE::ACTIVITY |
活动奖励 |
'test' |
REWARD_SOURCE_TYPE::TEST |
测试用途 |
运行测试命令验证枚举功能:
php artisan test:reward-source-type-enum
测试结果:
访问 http://kku_laravel.local.gd/admin/game-reward-logs 验证:
建议在代码审查中检查:
建议在开发规范中明确:
建议添加监控:
修改所有调用RewardService的地方使用枚举类型
- 修改BuyHandler商店购买使用REWARD_SOURCE_TYPE::SHOP_PURCHASE
- 修改ChestService宝箱开启使用REWARD_SOURCE_TYPE::CHEST
- 修改TaskRewardGroupService任务奖励使用REWARD_SOURCE_TYPE::TASK
- 更新所有文档示例代码使用枚举而不是字符串
- 确保所有奖励发放调用都使用类型安全的枚举参数
- 完成从字符串到枚举的全面迁移
此次修改成功完成了从字符串参数到枚举参数的全面迁移,确保了整个奖励系统的类型安全性。所有调用 RewardService 的地方都已更新为使用枚举,文档也同步更新,为后续的开发和维护奠定了坚实的基础。