RandomRewardAction.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Module\Game\AdminControllers\Actions;
  3. use App\Module\Game\Services\RewardService;
  4. use App\Module\Game\Models\GameRewardGroup;
  5. use Dcat\Admin\Grid\RowAction;
  6. use Illuminate\Http\Request;
  7. /**
  8. * 单次随机奖励操作
  9. */
  10. class RandomRewardAction extends RowAction
  11. {
  12. /**
  13. * 操作按钮标题
  14. *
  15. * @var string
  16. */
  17. protected $title = '<i class="fa fa-gift"></i> 单次随机奖励';
  18. /**
  19. * 处理请求
  20. *
  21. * @param Request $request
  22. * @return mixed
  23. */
  24. public function handle(Request $request)
  25. {
  26. try {
  27. $id = $this->getKey();
  28. // 获取奖励组信息
  29. $group = GameRewardGroup::find($id);
  30. if (!$group) {
  31. return $this->response()
  32. ->error('奖励组不存在');
  33. }
  34. // 模拟单次随机奖励
  35. $result = RewardService::simulateReward($id);
  36. if (!$result->success) {
  37. return $this->response()
  38. ->error('模拟奖励失败: ' . $result->errorMessage);
  39. }
  40. // 格式化奖励结果
  41. $rewardText = $this->formatRewardItems($result->items);
  42. return $this->response()
  43. ->success("单次随机奖励结果:\n{$rewardText}")
  44. ->detail('奖励组', $group->name)
  45. ->detail('编码', $group->code);
  46. } catch (\Exception $e) {
  47. return $this->response()
  48. ->error('操作失败: ' . $e->getMessage());
  49. }
  50. }
  51. /**
  52. * 格式化奖励项显示
  53. *
  54. * @param array $items
  55. * @return string
  56. */
  57. private function formatRewardItems(array $items): string
  58. {
  59. if (empty($items)) {
  60. return '无奖励';
  61. }
  62. $formatted = [];
  63. foreach ($items as $item) {
  64. $formatted[] = \App\Module\Game\Services\RewardTypeDescriptor::formatRewardDisplayFromDto($item, false);
  65. }
  66. return implode("\n", $formatted);
  67. }
  68. /**
  69. * 确认信息
  70. *
  71. * @return array|string|void
  72. */
  73. public function confirm()
  74. {
  75. return ['确定要进行单次随机奖励模拟吗?', '此操作仅模拟奖励结果,不会实际发放奖励'];
  76. }
  77. }