192 lines
6.0 KiB
PHP
192 lines
6.0 KiB
PHP
<?php
|
|
namespace App\Domains\Company\Http\Controllers;
|
|
|
|
use App\Dicts;
|
|
use Carbon\Carbon;
|
|
use App\Core\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Exceptions\NotExistException;
|
|
use App\Domains\Virtual\Services\OrderService;
|
|
use App\Domains\Virtual\Services\CommonService;
|
|
use App\Domains\Virtual\Services\PackageService;
|
|
use App\Domains\Virtual\Repositories\OrderRepository;
|
|
|
|
class OrderController extends Controller
|
|
{
|
|
protected $request;
|
|
protected $orderService;
|
|
|
|
/**
|
|
* 构造函数,自动注入.
|
|
*/
|
|
public function __construct(Request $request, OrderService $orderService)
|
|
{
|
|
$this->request = $request;
|
|
$this->orderService = $orderService;
|
|
$this->account = $request->user('company');
|
|
}
|
|
|
|
/**
|
|
* 订单列表
|
|
*/
|
|
public function paginate(Dicts $dicts)
|
|
{
|
|
$conditions = $this->request->all();
|
|
$conditions['company_id'] = $this->account->company_id;
|
|
$conditions['type'] = $conditions['type'] ?? 0;
|
|
|
|
$res = $this->orderService->paginate($conditions);
|
|
|
|
$carrierOperators = $dicts->get('carrier_operator');
|
|
$orderStatues = $dicts->get('order_status');
|
|
$transactionStatuses = $dicts->get('transaction_status');
|
|
|
|
$res->transform(function ($item) use ($carrierOperators, $orderStatues, $transactionStatuses) {
|
|
return [
|
|
'id' => $item->id,
|
|
'sn' => $item->sn,
|
|
'package_name' => $item->package['name'],
|
|
'pay_channel' => CommonService::namePayChannel($item->pay_channel),
|
|
'carrier_operator' => $carrierOperators[$item->package['carrier_operator']],
|
|
'unit_price' => $item->unit_price,
|
|
'counts' => $item->counts,
|
|
'total_price' => $item->total_price,
|
|
'custom_price' => $item->custom_price,
|
|
'order_status' => $item->order_status,
|
|
'order_status_name' => $orderStatues[$item->order_status],
|
|
'transaction_status' => $item->transaction_status,
|
|
'transaction_status_name' => $transactionStatuses[$item->transaction_status],
|
|
'order_at' => (string)$item->order_at,
|
|
];
|
|
});
|
|
|
|
if (empty($res)) {
|
|
return err('没有更多数据');
|
|
}
|
|
|
|
if ($last = $res->last()) {
|
|
$order_at = Carbon::parse($last['order_at']);
|
|
$conditions['starttime'] = $order_at->copy()->startOfMonth()->startOfDay()->format('Y-m-d H:i:s');
|
|
$conditions['endtime'] = $order_at->copy()->endOfMonth()->endOfDay()->format('Y-m-d H:i:s');
|
|
}
|
|
|
|
$count = $this->orderService->count($conditions);
|
|
|
|
$count['starttime'] = $conditions['starttime'];
|
|
$count['endtime'] = $conditions['endtime'];
|
|
|
|
return res(['count' => $count, 'orders' => $res], '订单列表', 201);
|
|
}
|
|
|
|
/**
|
|
* 订单详情
|
|
*/
|
|
public function show(Dicts $dicts, $id)
|
|
{
|
|
if (!$order = app(OrderRepository::class)->find($id)) {
|
|
throw new NotExistException('订单不存在或已删除');
|
|
}
|
|
|
|
$carrierOperators = $dicts->get('carrier_operator');
|
|
$orderStatues = $dicts->get('order_status');
|
|
$transactionStatuses = $dicts->get('company_transaction_status');
|
|
|
|
$package = PackageService::load($order->package_id);
|
|
|
|
$order->pay_channel = CommonService::namePayChannel($order->pay_channel);
|
|
$order->package_name = $package['name'];
|
|
$order->carrier_operator = $carrierOperators[$package['carrier_operator']];
|
|
$order->order_status = $order->order_status;
|
|
$order->order_status_name = $orderStatues[$order->order_status];
|
|
$order->transaction_status = $order->transaction_status;
|
|
$order->transaction_status_name = $transactionStatuses[$order->transaction_status];
|
|
$order->unit_price = sprintf('%.02f', $order->unit_price/100);
|
|
$order->total_price = sprintf('%.02f', $order->total_price/100);
|
|
$order->custom_price = sprintf('%.02f', $order->custom_price/100);
|
|
|
|
$order->extends = [
|
|
'cancel_remark' => $order->extends['cancel_remark'] ?? '',
|
|
'refund_channel' => $order->extends['refund_channel'] ?? '',
|
|
'refund_account' => $order->extends['refund_account'] ?? '',
|
|
'refund_remark' => $order->extends['refund_remark'] ?? '',
|
|
];
|
|
|
|
return res($order, '订单详情', 201);
|
|
}
|
|
|
|
/**
|
|
* 订单卡清单
|
|
*/
|
|
public function cards($id)
|
|
{
|
|
if (!$order = app(OrderRepository::class)->find($id)) {
|
|
throw new NotExistException('订单不存在或已删除');
|
|
}
|
|
|
|
$conditions = $this->request->all();
|
|
$conditions['order_id'] = $order->id;
|
|
|
|
$cards = $this->orderService->cards($conditions);
|
|
|
|
return res($cards, '订单卡清单', 201);
|
|
}
|
|
|
|
/**
|
|
* 下单
|
|
*/
|
|
public function store()
|
|
{
|
|
$attributes = $this->request->all();
|
|
$attributes['company_id'] = $this->account->company_id;
|
|
$attributes['source'] = 0;
|
|
$attributes['type'] = $attributes['type'] ?? 0;
|
|
|
|
$res = $this->orderService->store($attributes);
|
|
|
|
return res($res, '下单成功');
|
|
}
|
|
|
|
/**
|
|
* 下单
|
|
*/
|
|
public function storeAdded()
|
|
{
|
|
$attributes = $this->request->all();
|
|
$attributes['company_id'] = $this->account->company_id;
|
|
$attributes['source'] = 0;
|
|
$attributes['type'] = $attributes['type'] ?? 0;
|
|
|
|
$res = $this->orderService->storeAdded($attributes);
|
|
|
|
return res($res, '下单成功');
|
|
}
|
|
|
|
/**
|
|
* 取消订单
|
|
*/
|
|
public function cancel()
|
|
{
|
|
$ids = $this->request->ids();
|
|
|
|
foreach ($ids as $id) {
|
|
$res = $this->orderService->cancel($id);
|
|
}
|
|
|
|
return res(true, '取消成功');
|
|
}
|
|
|
|
/**
|
|
* 确认收货
|
|
*/
|
|
public function received()
|
|
{
|
|
$ids = $this->request->ids();
|
|
|
|
foreach ($ids as $id) {
|
|
$res = $this->orderService->received($id);
|
|
}
|
|
|
|
return res(true, '修改成功');
|
|
}
|
|
}
|