经过详细的代码检查和文档对比,奖励组系统的实际代码实现与文档描述高度一致,是一个设计优秀、实现完整的系统。
game_reward_groups 表:字段定义、类型、约束完全一致game_reward_items 表:字段定义、类型、约束完全一致game_reward_logs 表:字段定义、类型、约束完全一致REWARD_TYPE 枚举定义与文档完全一致ITEM(1) - 物品奖励FUND_CONFIG(2) - 账户种类奖励PET_EXP(3) - 宠物经验奖励PET_ENERGY(4) - 宠物体力奖励CURRENCY(5) - 币种奖励FARM_SHRINE(6) - 神像奖励(农场buff)OTHER(99) - 其他奖励RewardService - 对外接口RewardLogic - 业务逻辑处理GameRewardGroup, GameRewardItem, GameRewardLogRewardGrantedEvent - 奖励发放事件RewardGroupDto, RewardItemDto, RewardResultDto// 代码中使用事务检查确保数据一致性
Helper::check_tr();
// 发放奖励后触发事件
event(new RewardGrantedEvent($userId, $groupId, $groupCode, $sourceType, $sourceId, $rewardItems));
// 每次奖励发放都会记录到 game_reward_logs 表
$this->logReward($userId, $groupId, $sourceType, $sourceId, $rewardItems);
// 完善的异常捕获和错误返回
try {
// 奖励发放逻辑
} catch (Exception $e) {
Log::error("发放奖励失败", [...]);
return RewardResultDto::fail("发放奖励失败: " . $e->getMessage());
}
在原有的简单类型列表基础上,添加了每种奖励类型的详细参数说明:
| 奖励类型 | target_id含义 | param1含义 | param2含义 |
|---|---|---|---|
| ITEM | 物品ID | 品质等级 | 绑定状态 |
| FUND_CONFIG | 账户种类ID | 来源类型 | 预留 |
| CURRENCY | 币种ID | 来源类型 | 预留 |
| FARM_SHRINE | 神像类型 | 神像类型(兼容) | 持续时间(小时) |
// 发放奖励示例
$result = RewardService::grantReward(
userId: 1001,
groupIdOrCode: 'daily_sign_day1',
sourceType: 'daily_sign',
sourceId: 1
);
// 获取奖励组信息示例
$groupDto = RewardService::getRewardGroup('daily_sign_day1');
基于实际代码实现,提供了更具体的使用建议:
详细记录了检查过程和结果,为后续维护提供参考。
奖励组系统是一个设计优秀、实现完整、文档准确的系统:
这是一个可以作为其他系统设计参考的优秀实现案例。