orderCardRepository = $orderCardRepository; $this->cardRepository = $cardRepository; } /** * 卡列表 * * @param array $conditions * @return mixed */ public function index(array $conditions = []) { $limit = $conditions['limit'] ?? 20; $cards = $this->orderCardRepository->select([ '*', DB::raw('timelines_json(sim) as timelines'), ])->withConditions($conditions)->applyConditions()->paginate($limit); return static::transformer($cards); } /** * 格式转化 * * @param mixed $cards * @return mixed */ public static function transformer($cards) { $cards->load([ 'card:sim,imsi,iccid,virtual_activated_at,cancelled_at', ]); $carrierOperators = app(Dicts::class)->get('carrier_operator'); $cardStatus = app(Dicts::class)->get('card_status'); $cards->transform(function ($item) use ($carrierOperators, $cardStatus) { $status = static::getStatus($item->card); $_timelines = json_decode($item->timelines, true); try { foreach ($_timelines as &$timeline) { $package = app(PackageService::class)->load($timeline['package_id']); $timeline['type_name'] = self::$typeNames[$timeline['type']]; $timeline['name'] = $package['name']; $timeline['service_start_at'] = Carbon::parse($timeline['service_start_at'])->format('Y-m'); $timeline['service_end_at'] = Carbon::parse($timeline['service_end_at'])->format('Y-m'); } } catch (\Exception $e) { throw $e; } $company = app(CompanyService::class)->load($item->company_id); $package = app(PackageService::class)->load($item->package_id); $service_start_at = empty($_timelines) ? '' : min(array_pluck($_timelines, 'service_start_at')); $service_end_at = empty($_timelines) ? '' : max(array_pluck($_timelines, 'service_end_at')); return collect([ 'id' => sprintf('No%011d', $item->id), 'sim' => $item->sim, 'imsi' => $item->card['imsi'], 'iccid' => $item->card['iccid'], 'carrier_operator' => $carrierOperators[$package['carrier_operator']], 'company_name' => $company['name'], 'package_name' => $package['name'], 'virtual_activated_at' => (string)$item->card['virtual_activated_at'], 'status' => $status, 'status_name' => $cardStatus[$status], 'created_at' => (string)$item->created_at, 'updated_at' => (string)$item->updated_at, 'service_start_at' => $service_start_at, 'service_end_at' => $service_end_at, 'timelines' => $_timelines, ]); }); return collect($cards->toArray()); } /** * 卡状态 * * @param Card $card * @return void */ public static function getStatus($card) { return $card['virtual_activated_at'] ? ($card['cancelled_at'] ? 3 : 2) : 1; } }