request = $request; $this->account = $request->user('company'); $this->orderCardPartitionRepository = $orderCardPartitionRepository; } /** * 订单列表 */ public function index() { $conditions = $this->request->all(); $conditions['company_id'] = $this->account->company_id; $conditions['type'] = [0, 1]; $limit = $conditions['limit'] ?? 20; $cards = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) sim')->withConditions($conditions)->paginate($limit); $services = $this->orderCardPartitionRepository->selectRaw('MIN(service_start_at),MAX(service_end_at)') ->whereIn('sim', $cards->pluck('sim')->toArray())->groupBy('sim')->get()->keyBy('sim'); $time = Carbon::now()->format('Y-m-d H:i:s'); $packages = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) package_id') ->whereIn('sim', $cards->pluck('sim')->toArray()) ->where('service_start_at', '<=', $time)->orderBy('sim')->orderBy('service_start_at', 'desc') ->get()->keyBy('sim'); $cards->map(function ($item) use ($services, $packages) { $item->service_start_at = $services[$item->sim]['service_start_at'] ?? ''; $item->service_end_at = $services[$item->sim]['service_end_at'] ?? ''; $item->package_id = $packages[$item->sim]['package_id'] ?? 0; $item->package_name = PackageService::load($item->package_id)['package_name'] ?? ''; }); return $cards; } }