You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
100 lines
3.0 KiB
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Constants\ErrorCode;
|
|
use App\Constants\LogLabel;
|
|
use App\Model\OrderMain;
|
|
use App\Request\OrderOfflineRequest;
|
|
use App\Request\OrderOnlineRequest;
|
|
use App\Service\SeparateAccountsServiceInterface;
|
|
use Hyperf\DbConnection\Db;
|
|
use Hyperf\Di\Annotation\Inject;
|
|
use App\Service\OrderServiceInterface;
|
|
use Hyperf\HttpMessage\Stream\SwooleStream;
|
|
use Hyperf\Validation\ValidationException;
|
|
|
|
class OrderController extends BaseController
|
|
{
|
|
|
|
/**
|
|
* @Inject
|
|
* @var OrderServiceInterface
|
|
*/
|
|
protected $orderService;
|
|
|
|
/**
|
|
* @Inject
|
|
* @var SeparateAccountsServiceInterface
|
|
*/
|
|
protected $separateAccountsService;
|
|
|
|
public function addOnlineOrder(OrderOnlineRequest $request)
|
|
{
|
|
$orderMainId = $this->orderService->addOnlineOrder($request->validated());
|
|
if (!is_int($orderMainId)) {
|
|
return $this->result(ErrorCode::ORDER_FAILURE, '', $orderMainId);
|
|
}
|
|
return $this->success(['order_id' => $orderMainId]);
|
|
}
|
|
|
|
public function addOfflineOrder(OrderOfflineRequest $request)
|
|
{
|
|
$orderMainId = $this->orderService->addOfflineOrder($request->validated());
|
|
if (!is_int($orderMainId)) {
|
|
return $this->result(ErrorCode::ORDER_FAILURE, '', $orderMainId);
|
|
}
|
|
return $this->success(['order_id' => $orderMainId]);
|
|
}
|
|
|
|
/**
|
|
* 用户完成订单-确认收货
|
|
*/
|
|
public function userComp()
|
|
{
|
|
|
|
$validator = $this->validationFactory->make(
|
|
$this->request->all(),
|
|
[
|
|
'user_id' => 'required|nonempty|integer',
|
|
'order_id' => 'required|nonempty|numeric',
|
|
],
|
|
[
|
|
'*.*' => ':attribute 参数不正确',
|
|
]
|
|
);
|
|
|
|
if ($validator->fails()) {
|
|
// Handle exception
|
|
throw new ValidationException($validator);
|
|
return;
|
|
}
|
|
|
|
$userId = $this->request->input('user_id');
|
|
$orderId = $this->request->input('order_id');
|
|
$orderExist = OrderMain::query()
|
|
->where(['id' => $orderId, 'state' => OrderMain::ORDER_STATE_DELIVERY, 'user_id' => $userId])
|
|
->exists();
|
|
|
|
if (!$orderExist) {
|
|
$this->log->event(LogLabel::ONLINE_COMPLETE_LOG, ['order_not_found' => 'order_not_found']);
|
|
return $this->result(ErrorCode::SEPARATE_ACCOUNTS_ERROR, '', '操作失败,订单异常或不存在');
|
|
}
|
|
|
|
Db::beginTransaction();
|
|
try {
|
|
|
|
$this->orderService->onlineCompleted($orderId);
|
|
$this->separateAccountsService->orderOnlineCompleted($orderId);
|
|
|
|
Db::commit();
|
|
return $this->success(['order_id' => $orderId]);
|
|
} catch (\Exception $e) {
|
|
|
|
Db::rollBack();
|
|
$this->log->event(LogLabel::ONLINE_COMPLETE_LOG, ['exception' => $e->getMessage()]);
|
|
return $this->result(ErrorCode::SEPARATE_ACCOUNTS_ERROR, '', '操作失败,请稍后重试');
|
|
}
|
|
|
|
}
|
|
}
|