57 lines
2.1 KiB
PHP
57 lines
2.1 KiB
PHP
<?php
|
|
namespace App\Domains\Company\Http\Controllers;
|
|
|
|
use App\Core\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository;
|
|
use App\Domains\Virtual\Services\PackageService;
|
|
|
|
class CardController extends Controller
|
|
{
|
|
protected $request;
|
|
protected $account;
|
|
protected $orderCardPartitionRepository;
|
|
|
|
/**
|
|
* 构造函数,自动注入.
|
|
*/
|
|
public function __construct(Request $request, OrderCardPartitionRepository $orderCardPartitionRepository)
|
|
{
|
|
$this->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;
|
|
}
|
|
}
|