118 lines
4.1 KiB
PHP
118 lines
4.1 KiB
PHP
<?php
|
|
namespace App\Domains\Real\Services;
|
|
|
|
use App\Dicts;
|
|
use App\Core\Service;
|
|
use App\Domains\Virtual\Services\CompanyService;
|
|
use App\Domains\Virtual\Services\PackageService;
|
|
use App\Domains\Real\Repositories\OrderRepository;
|
|
use App\Domains\Real\Repositories\OrderCardPartitionRepository;
|
|
use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository;
|
|
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository as VirtualOrderCardPartitionRepository;
|
|
use Carbon\Carbon;
|
|
|
|
class OrderService extends Service
|
|
{
|
|
public $orderRepository;
|
|
public $orderCardPartitionRepository;
|
|
|
|
/**
|
|
* 构造函数
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct(OrderRepository $orderRepository, OrderCardPartitionRepository $orderCardPartitionRepository)
|
|
{
|
|
$this->orderRepository = $orderRepository;
|
|
$this->orderCardPartitionRepository = $orderCardPartitionRepository;
|
|
}
|
|
|
|
/**
|
|
* 订单列表
|
|
*
|
|
* @return void
|
|
*/
|
|
public function index(array $conditions = [])
|
|
{
|
|
$conditions['type'] = $conditions['type'] ?? 0;
|
|
$limit = $conditions['limit'] ?? 10;
|
|
|
|
$carrierOperators = app(Dicts::class)->get('carrier_operator');
|
|
|
|
$res = $this->orderRepository->withCount(['cards' => function ($query) {
|
|
$query->where('virtual_order_id', '<>', 0);
|
|
}])->withConditions($conditions)->applyConditions()->paginate($limit);
|
|
|
|
$res->map(function ($item) use ($carrierOperators) {
|
|
$item->pay_channel_name = CommonService::namePayChannel($item->pay_channel);
|
|
$item->company_name = CommonService::company($item->company_id)['name'];
|
|
$item->package = CommonService::package($item->package_id);
|
|
$item->package_name = $item->package['name'];
|
|
$item->carrier_operator_name = $carrierOperators[$item->package['carrier_operator']];
|
|
$item->unit_price = sprintf('%.02f', $item->unit_price/100);
|
|
$item->total_price = sprintf('%.02f', $item->total_price/100);
|
|
});
|
|
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 获取卡列表
|
|
*
|
|
* @param int $orderId
|
|
* @return void
|
|
*/
|
|
public function cards(array $conditions = [])
|
|
{
|
|
$cards = $this->orderCardPartitionRepository->select(['sim', 'virtual_order_id', 'counts'])
|
|
->withConditions($conditions)->applyConditions()->get();
|
|
|
|
$tmpCards = $cards->groupBy('virtual_order_id');
|
|
|
|
$orderIds = $tmpCards->keys()->unique()->toArray();
|
|
|
|
$key = array_search(0, $orderIds);
|
|
|
|
if (!is_null($key)) {
|
|
unset($orderIds[$key]);
|
|
}
|
|
|
|
$virtualOrders = [];
|
|
// 有订单的从订单中读取公司和套餐
|
|
if (!empty($orderIds)) {
|
|
$virtualOrders = app(VirtualOrderRepository::class)->withConditions(['id' => $orderIds])->get()->keyBy('id');
|
|
}
|
|
|
|
$simArray = isset($tmpCards[0]) ? $tmpCards[0]->pluck('sim')->toArray() : [];
|
|
|
|
$virtualOrderCards = [];
|
|
// 没有订单的从当前状态下读取公司和套餐
|
|
if (!empty($simArray)) {
|
|
$virtualOrderCards = app(VirtualOrderCardPartitionRepository::class)->selectRaw('distinct on (sim) sim,company_id,package_id')
|
|
->withConditions([
|
|
'type' => [0, 1],
|
|
'sim' => $simArray,
|
|
])->newest()->get()->keyBy('sim');
|
|
}
|
|
|
|
$cards->map(function ($item) use ($virtualOrders, $virtualOrderCards) {
|
|
$item->sim = (string)$item->sim;
|
|
$item->company_name = '';
|
|
$item->package_name = '';
|
|
|
|
if ($item->virtual_order_id) {
|
|
$virtual = $virtualOrders[$item->virtual_order_id];
|
|
} else {
|
|
$virtual = $virtualOrderCards[$item->sim];
|
|
}
|
|
|
|
if ($virtual) {
|
|
$item->company_name = CompanyService::load($virtual['company_id'])['name'];
|
|
$item->package_name = PackageService::load($virtual['package_id'])['name'];
|
|
}
|
|
});
|
|
|
|
return $cards->sortBy('sim')->values();
|
|
}
|
|
}
|