1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| class OrderService {
public function getOrderDetail(int $orderId): array { $order = Order::with([ 'user:id,username,nickname', 'items.product:id,name,image', 'items.sku:id,name,price', 'address', 'payments' => function($query) { $query->where('status', 'success'); } ])->find($orderId); if (!$order) { throw new \Exception('订单不存在'); } return [ 'order' => $order->toArray(), 'total_paid' => $order->payments->sum('amount'), 'item_count' => $order->items->sum('quantity') ]; }
public function createOrder(array $orderData): Order { Db::startTrans(); try { $order = Order::create([ 'order_no' => $this->generateOrderNo(), 'user_id' => $orderData['user_id'], 'total_amount' => $orderData['total_amount'], 'status' => 'pending' ]); $items = []; foreach ($orderData['items'] as $item) { $items[] = new OrderItem([ 'product_id' => $item['product_id'], 'sku_id' => $item['sku_id'], 'quantity' => $item['quantity'], 'price' => $item['price'], 'total_price' => $item['quantity'] * $item['price'] ]); } $order->items()->saveAll($items); $order->address()->save(new OrderAddress($orderData['address'])); Db::commit(); return $order; } catch (\Exception $e) { Db::rollback(); throw $e; } }
private function generateOrderNo(): string { return date('YmdHis') . mt_rand(1000, 9999); } }
|