can('dcat.admin.draw_activities.change_tickets'); } /** * Handle the form request. * * @param array $input * * @return mixed */ public function handle(array $input) { $drawActivity = DrawActivity::findOrFail($this->payload['id']); if ($drawActivity->isClosed()) { throw new BizException('活动已结束'); } $user = User::findOrFail($input['user_id']); switch ($input['type']) { case static::TYPE_SUB: $number = $input['number'] * -1; $remark = $input['remark'] ?? '系统扣除'; break; default: $number = $input['number']; $remark = $input['remark'] ?? '系统增加'; break; } try { DB::beginTransaction(); (new DrawTicketService())->change($user, $drawActivity, $number, $remark); DB::commit(); } catch (QueryException $e) { DB::rollBack(); if (strpos($e->getMessage(), 'Numeric value out of range') !== false) { throw new BizException('抽奖次数不足'); } throw $e; } catch (Throwable $e) { DB::rollBack(); throw $e; } return $this->response() ->success(__('admin.update_succeeded')) ->refresh(); } /** * Build a form here. */ public function form() { $this->radio('type', '类型') ->options([ static::TYPE_ADD => '增加', static::TYPE_SUB => '扣除', ]) ->required(); $this->select('user_id', '手机号') ->ajax(admin_route('api.users')) ->required(); $this->number('number', '次数') ->min(0) ->required(); $this->textarea('remark', '备注') ->rules(['max:255']); } public function default() { return [ 'type' => static::TYPE_ADD, 'number' => 1, ]; } }