From 781db692fe36258c91ccc29f801f3e044c2b146c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Tue, 14 Dec 2021 13:31:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Endpoint/Api/Filters/OrderFilter.php | 9 ++++++ .../Controllers/Order/OrderController.php | 30 +++++++++++++++++++ .../Http/Resources/OrderProductResource.php | 27 +++++++++++++++++ .../Http/Resources/OrderSimpleResource.php | 26 ++++++++++++++++ app/Endpoint/Api/routes.php | 4 +++ app/Models/Order.php | 23 +++++++++++++- app/Models/OrderProduct.php | 17 +++++++++-- 7 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 app/Endpoint/Api/Filters/OrderFilter.php create mode 100644 app/Endpoint/Api/Http/Controllers/Order/OrderController.php create mode 100644 app/Endpoint/Api/Http/Resources/OrderProductResource.php create mode 100644 app/Endpoint/Api/Http/Resources/OrderSimpleResource.php diff --git a/app/Endpoint/Api/Filters/OrderFilter.php b/app/Endpoint/Api/Filters/OrderFilter.php new file mode 100644 index 00000000..60846749 --- /dev/null +++ b/app/Endpoint/Api/Filters/OrderFilter.php @@ -0,0 +1,9 @@ +user()->orders() + ->with('products') + ->filter($request->all()) + ->latest('id') + ->simplePaginate($perPage); + + return OrderSimpleResource::collection($orders); + } +} diff --git a/app/Endpoint/Api/Http/Resources/OrderProductResource.php b/app/Endpoint/Api/Http/Resources/OrderProductResource.php new file mode 100644 index 00000000..f4d7a495 --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/OrderProductResource.php @@ -0,0 +1,27 @@ + $this->id, + 'sku_id' => $this->sku_id, + 'name' => $this->name, + 'cover' => $this->cover, + 'specs' => array_values((array) $this->specs), + 'quantity' => $this->quantity, + 'total_amount' => $this->total_amount_format, + ]; + } +} diff --git a/app/Endpoint/Api/Http/Resources/OrderSimpleResource.php b/app/Endpoint/Api/Http/Resources/OrderSimpleResource.php new file mode 100644 index 00000000..f006f3bf --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/OrderSimpleResource.php @@ -0,0 +1,26 @@ + $this->id, + 'sn' => $this->sn, + 'total_amount' => $this->total_amount_format, + 'status' => $this->status, + 'products' => OrderProductResource::collection($this->whenLoaded('products')), + 'created_date' => $this->created_at->toDateString(), + ]; + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index de20d769..ef8e057d 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -12,6 +12,7 @@ use App\Endpoint\Api\Http\Controllers\Auth\ResetPasswordController; use App\Endpoint\Api\Http\Controllers\CaptchaController; use App\Endpoint\Api\Http\Controllers\CouponController; use App\Endpoint\Api\Http\Controllers\MessageController; +use App\Endpoint\Api\Http\Controllers\Order\OrderController; use App\Endpoint\Api\Http\Controllers\Product\HotController; use App\Endpoint\Api\Http\Controllers\Product\ProductCategoryController; use App\Endpoint\Api\Http\Controllers\Product\ProductSkuController; @@ -98,5 +99,8 @@ Route::group([ Route::get('articles/{article}', [ArticleController::class, 'show']); Route::post('articles/{article}/read', [ArticleController::class, 'read']); Route::post('articles/{article}/like', [ArticleController::class, 'like']); + + // 订单 + Route::apiResource('order/orders', OrderController::class); }); }); diff --git a/app/Models/Order.php b/app/Models/Order.php index ca6ed475..0190504b 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -2,14 +2,26 @@ namespace App\Models; +use App\Helpers\Numeric; +use EloquentFilter\Filterable; use Illuminate\Database\Eloquent\Model; class Order extends Model { + use Filterable; + public const STATUS_PENDING = 0; // 待付款 public const STATUS_COMPLETED = 9; // 已完成 public const STATUS_CANCELLED = 10; // 已取消 + /** + * @var array + */ + protected $attributes = [ + 'reduced_amount' => 0, + 'status' => self::STATUS_PENDING, + ]; + /** * @var array */ @@ -22,7 +34,6 @@ class Order extends Model 'shipping_fee', 'products_total_amount', 'total_amount', - 'weight', 'note', 'remark', 'pay_sn', @@ -43,4 +54,14 @@ class Order extends Model { return $this->hasMany(OrderProduct::class); } + + /** + * 获取订单支付金额 + * + * @return string + */ + public function getTotalAmountFormatAttribute() + { + return Numeric::trimZero(bcdiv($this->attributes['total_amount'], 100, 2)); + } } diff --git a/app/Models/OrderProduct.php b/app/Models/OrderProduct.php index 58d55ebc..879278bb 100644 --- a/app/Models/OrderProduct.php +++ b/app/Models/OrderProduct.php @@ -2,13 +2,16 @@ namespace App\Models; -use App\Casts\Price; +use App\Helpers\Numeric; use Illuminate\Database\Eloquent\Model; class OrderProduct extends Model { + /** + * @var array + */ protected $casts = [ - 'total_amount'=>Price::class, + 'specs' => 'json', ]; /** @@ -32,4 +35,14 @@ class OrderProduct extends Model 'reduced_amount', 'total_amount', ]; + + /** + * 获取订单支付金额 + * + * @return string + */ + public function getTotalAmountFormatAttribute() + { + return Numeric::trimZero(bcdiv($this->attributes['total_amount'], 100, 2)); + } }