diff --git a/app/Models/Order.php b/app/Models/Order.php index f04cac61..d174d27e 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -173,6 +173,14 @@ class Order extends Model return $this->morphMany(PayLog::class, 'payable'); } + /** + * 属于此订单的售后单 + */ + public function afterSales() + { + return $this->hasMany(AfterSale::class, 'order_id'); + } + /** * 此订单是否待付款 * @@ -253,14 +261,6 @@ class Order extends Model */ public function markAsCompleted() { - // 加载订单商品 - $this->loadMissing('products'); - - foreach ($this->products->loadMissing(['spu', 'sku']) as $product) { - $product->spu?->increment('sales', $product->quantity); - $product->sku?->increment('sales', $product->quantity); - } - $this->update([ 'status' => static::STATUS_COMPLETED, 'completed_at' => now(), diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 08e96f5a..aa33db24 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -302,9 +302,12 @@ class OrderService { // 扣商品库存 $sku->update([ + 'sales' => DB::Raw("sales + {$qty}"), 'stock' => DB::raw("stock - {$qty}"), // 库存 ]); + $sku->spu?->increment('sales', $qty); + // 如果是因为赠品库存不足引起的异常,则需重试 do { try { @@ -705,7 +708,7 @@ class OrderService throw new BizException('购物车商品已丢失'); } - $shoppingCartItems->load('sku'); + $shoppingCartItems->load('sku.spu'); $lostShoppingCartItems = $shoppingCartItems->filter(function ($item) { return $item->sku === null;