diff --git a/app/Domains/Virtual/Exports/CardExport.php b/app/Domains/Virtual/Exports/CardExport.php index f3d51d60..3cbd6bd8 100644 --- a/app/Domains/Virtual/Exports/CardExport.php +++ b/app/Domains/Virtual/Exports/CardExport.php @@ -19,6 +19,7 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With public function __construct(array $conditions = []) { + $conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0; $this->conditions = $conditions; parent::__construct(); } diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index 45fa5d1a..d4e227ba 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -124,6 +124,50 @@ trait OrderCardConcern $relation->where('transaction_no', 'like', "%{$conditions['transaction_no']}%"); }); } + + switch ($conditions['card_status']) { + case 0: + $query->whereNull('service_start_at')->whereHas('card', function ($relation) { + $relation->whereNull('cancelled_at'); + })->where('created_at', '<', Carbon::now()->subMonths(6)); + break; + + case 1: + $query->whereNull('service_start_at')->whereHas('card', function ($relation) { + $relation->whereNull('cancelled_at'); + })->where('created_at', '>=', Carbon::now()->subMonths(6)); + break; + + case 2: + $havingRaw = sprintf("MAX(service_end_at) >= '%s'", date('Y-m-d H:i:s')); + + $query->whereNotNull('service_start_at') + ->groupBy('sim')->havingRaw($havingRaw) + ->whereHas('card', function ($relation) { + $relation->whereNull('cancelled_at'); + }); + break; + + case 3: + $havingRaw = sprintf("MAX(service_end_at) < '%s'", date('Y-m-d H:i:s')); + + $query->whereNotNull('service_start_at') + ->groupBy('sim')->havingRaw($havingRaw) + ->whereHas('card', function ($relation) { + $relation->whereNull('cancelled_at'); + }); + break; + + case 4: + $query->whereHas('card', function ($relation) { + $relation->whereNotNull('cancelled_at'); + }); + break; + + default: + # code... + break; + } }); return $this; diff --git a/app/Domains/Virtual/Services/CardService.php b/app/Domains/Virtual/Services/CardService.php index f1b0d514..4bce1385 100644 --- a/app/Domains/Virtual/Services/CardService.php +++ b/app/Domains/Virtual/Services/CardService.php @@ -39,80 +39,17 @@ class CardService extends Service public function index(array $conditions = []) { $limit = $conditions['limit'] ?? 20; - $conditions['type'] = 0; + $conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0; - if (isset($conditions['card_status'])) { - $res = $this->listByCardStatus($conditions); - $total = $res->total(); - $conditions['sim'] = $res->pluck('sim')->toArray(); - } else { - $total = $this->orderCardPartitionRepository->withConditions($conditions)->applyConditions()->count(); - } + $total = $this->orderCardPartitionRepository->withConditions($conditions)->count(); - $page = Request::get('page'); - - $cards = $this->orderCardPartitionRepository->withConditions($conditions)->applyConditions()->forPage($page, $limit)->get(); + $cards = $this->orderCardPartitionRepository->selectRaw('sim')->withConditions($conditions)->forPage($page, $limit)->get(); $cards = static::transformer($cards); return new LengthAwarePaginator($cards, $total, $limit); } - public function listByCardStatus(array $conditions = []) - { - $limit = $conditions['limit'] ?? 20; - $conditions['type'] = [0, 1, 2]; - - $query = $this->orderCardPartitionRepository->selectRaw('sim')->withConditions($conditions); - - switch ($conditions['card_status']) { - - case 0: - $query = $query->whereNull('service_start_at')->whereHas('card', function ($relation) { - $relation->whereNull('cancelled_at'); - })->where('created_at', '<', Carbon::now()->subMonths(6)); - break; - - case 1: - $query = $query->whereNull('service_start_at')->whereHas('card', function ($relation) { - $relation->whereNull('cancelled_at'); - })->where('created_at', '>=', Carbon::now()->subMonths(6)); - break; - - case 2: - $havingRaw = sprintf("MAX(service_end_at) >= '%s'", date('Y-m-d H:i:s')); - - $query = $query->whereNotNull('service_start_at') - ->groupBy('sim')->havingRaw($havingRaw) - ->whereHas('card', function ($relation) { - $relation->whereNull('cancelled_at'); - }); - break; - - case 3: - $havingRaw = sprintf("MAX(service_end_at) < '%s'", date('Y-m-d H:i:s')); - - $query = $query->whereNotNull('service_start_at') - ->groupBy('sim')->havingRaw($havingRaw) - ->whereHas('card', function ($relation) { - $relation->whereNull('cancelled_at'); - }); - break; - - case 4: - $query = $query->whereHas('card', function ($relation) { - $relation->whereNotNull('cancelled_at'); - }); - break; - - default: - # code... - break; - } - - return $query->paginate($limit); - } - /** * 格式转化 *