From 4bfef1d2202fc375d002b70536684c3ee7d45764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Thu, 16 Dec 2021 13:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Order/OrderController.php | 30 +++++++++++++++++-- app/Endpoint/Api/routes.php | 1 + app/Models/Order.php | 29 ++++++++++-------- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php index da756b0a..0e4922db 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php @@ -6,6 +6,7 @@ use App\Endpoint\Api\Http\Controllers\Controller; use App\Endpoint\Api\Http\Resources\OrderSimpleResource; use App\Exceptions\BizException; use App\Helpers\Paginator as PaginatorHelper; +use App\Models\Order; use App\Services\OrderService; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Http\Request; @@ -105,6 +106,29 @@ class OrderController extends Controller return OrderSimpleResource::make($order); } + /** + * 确认收货/完成订单 + * + * @param int $id + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function confirm($id, Request $request) + { + $order = $request->user()->orders()->findOrFail($id); + + if (! $order->isConfirmable()) { + throw new BizException('订单不可确认'); + } + + $order->update([ + 'status' => Order::STATUS_COMPLETED, + 'completed_at' => now(), + ]); + + return response()->noContent(); + } + /** * 取消订单 * @@ -117,10 +141,12 @@ class OrderController extends Controller $order = $request->user()->orders()->findOrFail($id); if (! $order->isCancelable()) { - throw new BizException('订单无法取消'); + throw new BizException('订单不可取消'); } - $order->markAsCancelled(); + $order->update([ + 'status' => Order::STATUS_CANCELLED, + ]); return response()->noContent(); } diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 8d71012f..c9e33a30 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -111,6 +111,7 @@ Route::group([ // 订单 Route::apiResource('order/orders', OrderController::class); + Route::post('order/orders/{order}/confirm', [OrderController::class, 'confirm']); Route::post('order/orders/{order}/cancel', [OrderController::class, 'cancel']); Route::post('order/verify-order', OrderVerifyController::class); }); diff --git a/app/Models/Order.php b/app/Models/Order.php index 006f7d02..1906a5f5 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -24,6 +24,13 @@ class Order extends Model 'status' => self::STATUS_PENDING, ]; + /** + * @var array + */ + protected $casts = [ + 'completed_at' => 'datetime', + ]; + /** * @var array */ @@ -57,6 +64,16 @@ class Order extends Model return $this->hasMany(OrderProduct::class); } + /** + * 确认此订单是否可以被确认 + * + * @return bool + */ + public function isConfirmable(): bool + { + return in_array($this->status, [static::STATUS_PAID, static::STATUS_SHIPPED]); + } + /** * 确认此订单是否可以被取消 * @@ -67,18 +84,6 @@ class Order extends Model return in_array($this->status, [static::STATUS_PENDING, static::STATUS_PAID]); } - /** - * 将订单标记未已取消 - * - * @return void - */ - public function markAsCancelled(): void - { - $this->forceFill([ - 'status' => static::STATUS_CANCELLED, - ])->save(); - } - /** * 获取订单支付金额 *