DuplicateConsumeGroupAction.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Module\Game\AdminControllers\Actions;
  3. use App\Module\Game\Models\GameConsumeGroup;
  4. use App\Module\Game\Models\GameConsumeItem;
  5. use Dcat\Admin\Grid\RowAction;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. /**
  9. * 复制消耗组行操作
  10. */
  11. class DuplicateConsumeGroupAction extends RowAction
  12. {
  13. /**
  14. * 按钮标题
  15. *
  16. * @var string
  17. */
  18. protected $title = '<i class="fa fa-copy"></i> 复制';
  19. /**
  20. * 处理请求
  21. *
  22. * @param Request $request
  23. * @return \Dcat\Admin\Actions\Response
  24. */
  25. public function handle(Request $request)
  26. {
  27. // 获取当前行ID
  28. $id = $this->getKey();
  29. // 查找原消耗组
  30. $originalGroup = GameConsumeGroup::find($id);
  31. if (!$originalGroup) {
  32. return $this->response()->error('消耗组不存在');
  33. }
  34. // 开启事务
  35. DB::beginTransaction();
  36. try {
  37. // 创建新消耗组
  38. $newGroup = new GameConsumeGroup();
  39. $newGroup->name = $originalGroup->name . ' (复制)';
  40. $newGroup->code = $originalGroup->code . '_copy_' . time();
  41. $newGroup->description = $originalGroup->description;
  42. $newGroup->save();
  43. // 复制消耗项
  44. $originalItems = GameConsumeItem::where('group_id', $id)->get();
  45. foreach ($originalItems as $item) {
  46. $newItem = new GameConsumeItem();
  47. $newItem->group_id = $newGroup->id;
  48. $newItem->consume_type = $item->consume_type;
  49. $newItem->target_id = $item->target_id;
  50. $newItem->param1 = $item->param1;
  51. $newItem->param2 = $item->param2;
  52. $newItem->quantity = $item->quantity;
  53. $newItem->extra_data = $item->extra_data;
  54. $newItem->save();
  55. }
  56. DB::commit();
  57. return $this->response()
  58. ->success('复制成功')
  59. ->refresh();
  60. } catch (\Exception $e) {
  61. DB::rollBack();
  62. return $this->response()->error('复制失败: ' . $e->getMessage());
  63. }
  64. }
  65. /**
  66. * 确认信息
  67. *
  68. * @return string
  69. */
  70. public function confirm()
  71. {
  72. return '确定要复制这个消耗组吗?';
  73. }
  74. }