vd/app/Domains/Company/Http/Controllers/CardController.php
2019-04-15 17:13:33 +08:00

78 lines
2.9 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;
use App\Domains\Virtual\Services\ProductService;
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];
if ($this->request->has('sim')) {
$conditions['sim'] = $this->request->ids('sim');
}
$limit = $conditions['limit'] ?? 20;
$cards = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) sim, company_id')->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')
->whereIn('type', $conditions['type'])
->whereIn('sim', $cards->pluck('sim')->toArray())
->where(function($query) use ($time){
$query->where('service_start_at', '<=', $time)->orWhereNull('service_start_at');
})
->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;
$package = PackageService::load($item->package_id);
$item->package_name = $package['name'] ?? '';
$item->carrier_operator = $package['carrier_operator'] ?? 255;
$product = ProductService::load($package['type'], $this->account->company_id, $item->package_id);
$item->price = $product['price'] ? sprintf('%.02f', $product['price']/100) : 9999;
$item->renew_price = $product['renew_price'] ? sprintf('%.02f', $product['renew_price']/100) : 9999;
});
return res($cards, '卡列表', 201);
}
}