query('draw_no', '')); $status = trim((string) $request->query('status', '')); $q = Draw::query()->orderByDesc('draw_time')->orderByDesc('id'); if ($drawNo !== '') { $q->where('draw_no', 'like', '%'.$drawNo.'%'); } if ($status !== '') { $q->where('status', $status); } /** @var LengthAwarePaginator $paginator */ $paginator = $q->paginate($p['perPage'], ['*'], 'page', $p['page']); return AdminApiList::json($paginator, fn (Draw $row) => $this->row($row)); } /** @return array */ private function row(Draw $draw): array { return [ 'id' => (int) $draw->id, 'draw_no' => $draw->draw_no, 'business_date' => $draw->business_date instanceof Carbon ? $draw->business_date->format('Y-m-d') : (string) $draw->business_date, 'sequence_no' => (int) $draw->sequence_no, 'status' => $draw->status, 'start_time' => $draw->start_time?->toIso8601String(), 'close_time' => $draw->close_time?->toIso8601String(), 'draw_time' => $draw->draw_time?->toIso8601String(), 'cooling_end_time' => $draw->cooling_end_time?->toIso8601String(), 'result_source' => $draw->result_source, 'current_result_version' => (int) $draw->current_result_version, 'settle_version' => (int) $draw->settle_version, 'is_reopened' => (bool) $draw->is_reopened, 'total_bet_minor' => (int) TicketOrder::query()->where('draw_id', $draw->id)->sum('total_actual_deduct'), 'total_payout_minor' => (int) TicketItem::query()->where('draw_id', $draw->id)->sum('win_amount') + (int) TicketItem::query()->where('draw_id', $draw->id)->sum('jackpot_win_amount'), 'profit_loss_minor' => (int) TicketOrder::query()->where('draw_id', $draw->id)->sum('total_actual_deduct') - ( (int) TicketItem::query()->where('draw_id', $draw->id)->sum('win_amount') + (int) TicketItem::query()->where('draw_id', $draw->id)->sum('jackpot_win_amount') ), 'updated_at' => $draw->updated_at?->toIso8601String(), ]; } }