6
0
Fork 0

确认订单

release
李静 2021-12-16 13:37:17 +08:00
parent 2176d67622
commit 4bfef1d220
3 changed files with 46 additions and 14 deletions

View File

@ -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();
}

View File

@ -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);
});

View File

@ -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();
}
/**
* 获取订单支付金额
*