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]; if ($this->request->has('sim')) { $conditions['sim'] = $this->request->ids('sim'); } $limit = $conditions['limit'] ?? 20; $cards = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) sim')->withConditions($conditions)->paginate($limit); $services = $this->orderCardPartitionRepository->selectRaw('sim,MIN(service_start_at) as service_start_at,MAX(service_end_at) as 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) sim, package_id, product_id') ->whereIn('type', $conditions['type']) ->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->product_id = $packages[$item->sim]['product_id'] ?? 0; $item->package_id = $packages[$item->sim]['package_id'] ?? 0; $item->package_name = PackageService::load($item->package_id)['name'] ?? ''; $item->price = ProductService::load($item->product_id)['price'] ?? 0; $item->renew_price = ProductService::load($item->product_id)['renew_price'] ?? 0; }); return res($cards, '卡列表', 201); } }