orderCardRepository = $orderCardRepository; $this->cardRepository = $cardRepository; } /** * 卡列表 * * @param array $conditions * @return mixed */ public function index(array $conditions = []) { $limit = $conditions['limit'] ?? 20; $cards = $this->orderCardRepository->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'); $timelines = OrderCardPartition::select(['sim', 'type', 'package_id', 'service_start_at', 'service_end_at']) ->whereIn('sim', $cards->pluck('sim')->toArray())->orderBy('created_at')->get(); $timelines->map(function ($item) { $package = app(PackageService::class)->load($item->package_id); $item->type_name = self::$typeNames[$item->type]; $item->name = $package['name']; $item->service_start_at = Carbon::parse($item->service_start_at)->format('Y-m'); $item->service_end_at = Carbon::parse($item->service_end_at)->format('Y-m'); }); $timelines = $timelines->groupBy('sim'); $cards->transform(function ($item) use ($carrierOperators, $cardStatus, $timelines) { $status = static::getStatus($item->card); $_timelines = $timelines[$item->sim]; $company = app(CompanyService::class)->load($item->company_id); $package = app(PackageService::class)->load($item->package_id); $service_start_at = min(array_pluck($_timelines, 'service_start_at')); $service_end_at = 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; } }