Ver Fonte

feat:订单管理->结束订单

刘学玺 há 4 meses atrás
pai
commit
aeff525fac

+ 1 - 1
app/Http/Controllers/Client/OrderController.php

@@ -68,7 +68,7 @@ class OrderController extends Controller
      *
      * @description 结束订单
      *
-     * @bodyParam order_id int required 订单ID Example: 123
+     * @bodyParam order_id int required 订单ID Example: 1
      *
      * @response {
      *   "status": "success",

+ 30 - 18
app/Services/Client/OrderService.php

@@ -384,27 +384,39 @@ class OrderService
     public function finishOrder($userId, $orderId)
     {
         return DB::transaction(function () use ($userId, $orderId) {
-            $order = Order::where('user_id', $userId)
-                ->where('id', $orderId)
-                ->first();
+            try {
+                // 1. 参数校验
+                $order = Order::where('user_id', $userId)
+                    ->where('id', $orderId)
+                    ->where('state', 'service_ing') // 订单状态必须是服务中
+                    ->firstOrFail();
 
-            if (! $order) {
-                throw new Exception('订单不存在');
-            }
+                if (! $order) {
+                    throw new Exception('订单不能结束');
+                }
 
-            // 添加订单结束记录
-            OrderRecord::create([
-                'order_id' => $orderId,
-                'user_id' => $userId,
-                'state' => 'finish',
-                'remark' => '服务完成',
-            ]);
+                // 2. 创建订单历史记录
+                OrderRecord::create([
+                    'order_id' => $orderId,
+                    'object_id' => $userId,
+                    'object_type' => MemberUser::class,
+                    'state' => 'finish',
+                    'remark' => '服务完成',
+                ]);
 
-            // 修改订单状态
-            $order->state = 'finished';
-            $order->save();
+                // 3. 修改订单状态为服务结束
+                $order->state = 'service_end';
+                $order->save();
 
-            return ['message' => '订单已完成'];
+                return ['message' => '订单已完成'];
+            } catch (Exception $e) {
+                Log::error('结束订单失败:', [
+                    'message' => $e->getMessage(),
+                    'user_id' => $userId,
+                    'order_id' => $orderId,
+                ]);
+                throw $e;
+            }
         });
     }
 
@@ -685,7 +697,7 @@ class OrderService
                 ->first();
 
             if (! $agentProject) {
-                throw new Exception('代理商项目不在');
+                throw new Exception('代理商项目不���在');
             }
 
             $project->price = $agentProject->price;