diff --git a/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php index 1ace63ae..3feacd25 100644 --- a/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php @@ -200,8 +200,22 @@ class OrderController extends Controller * @param Request $request * @return void */ - public function cancelOrder($id, Request $request) + public function cancelOrder($id, Request $request, OrderService $orderService) { + $order = DealerOrder::findOrFail($id); + $userId = $request->user()->id; + if (!$order->isUser($userId)) { + throw new BizException('订单未找到'); + } + try { + DB::beginTransaction(); + $orderService->cancelOrder($order); + DB::commit(); + } catch (Throwable $th) { + DB::rollBack(); + report($th); + throw new BizException('操作失败,请刷新后再试'); + } return response()->noContent(); } } diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 93910463..0d3753a4 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -240,5 +240,7 @@ Route::group([ Route::post('orders/{order}/paid', [Dealer\OrderController::class, 'paidOrder']); //确认收货 Route::post('orders/{order}/shippinged', [Dealer\OrderController::class, 'shippingedOrder']); + //取消订单 + Route::post('orders/{order}/cancel', [Dealer\OrderController::class, 'cancelOrder']); }); }); diff --git a/app/Models/DealerOrder.php b/app/Models/DealerOrder.php index d13f74b4..7fd49d1d 100644 --- a/app/Models/DealerOrder.php +++ b/app/Models/DealerOrder.php @@ -189,6 +189,12 @@ class DealerOrder extends Model return $this->status == DealerOrderStatus::Cancelled; } + /** + * 能否操作 + * + * @param [type] $userId + * @return boolean + */ public function canCurd($userId) { return $this->isUser($userId) || $this->isConsignor($userId); diff --git a/app/Services/Dealer/OrderService.php b/app/Services/Dealer/OrderService.php index 637d7571..94b8ad14 100644 --- a/app/Services/Dealer/OrderService.php +++ b/app/Services/Dealer/OrderService.php @@ -195,6 +195,16 @@ class OrderService ]); } + public function cancelOrder(DealerOrder $order) + { + if (!($order->isPending() || $order->isPendinged() || $order->isPay())) { + throw new BizException('订单状态异常,请刷新后再试'); + } + $order->update([ + 'status' => DealerOrderStatus::Cancelled, + ]); + } + /** * 更新订单发货人 *