瀏覽代碼

fixed:用户端-反选技师

刘学玺 4 月之前
父節點
當前提交
7a0c925640
共有 4 個文件被更改,包括 41 次插入24 次删除
  1. 5 3
      app/Models/Order.php
  2. 7 3
      app/Models/WalletPaymentRecord.php
  3. 26 18
      app/Services/Client/OrderService.php
  4. 3 0
      routes/api.php

+ 5 - 3
app/Models/Order.php

@@ -10,7 +10,9 @@ use Slowlyo\OwlAdmin\Models\BaseModel as Model;
  */
 class Order extends Model
 {
-	use SoftDeletes;
+    use SoftDeletes;
 
-	protected $table = 'order';
-}
+    protected $table = 'order';
+
+    protected $guarded = [];
+}

+ 7 - 3
app/Models/WalletPaymentRecord.php

@@ -10,12 +10,15 @@ use Slowlyo\OwlAdmin\Models\BaseModel as Model;
  */
 class WalletPaymentRecord extends Model
 {
-	use SoftDeletes;
+    use SoftDeletes;
 
-	protected $table = 'wallet_payment_records';
+    protected $table = 'wallet_payment_records';
+
+    protected $guarded = [];
 
     /**
      * @Author FelixYin
+     *
      * @description 支付记录所属交易
      */
     public function trans()
@@ -25,10 +28,11 @@ class WalletPaymentRecord extends Model
 
     /**
      * @Author FelixYin
+     *
      * @description 支付记录所属钱包
      */
     public function wallet()
     {
         return $this->belongsTo('App\Models\Wallet', 'wallet_id');
     }
-}
+}

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

@@ -2,6 +2,8 @@
 
 namespace App\Services\Client;
 
+use App\Enums\OrderGrabRecordStatus;
+use App\Enums\OrderRecordStatus;
 use App\Enums\OrderSource;
 use App\Enums\OrderStatus;
 use App\Enums\OrderType;
@@ -1079,13 +1081,19 @@ class OrderService
                 // 2. 验证技师
                 $coach = $this->validateCoach($coachId);
 
-                // 3. 更新订单信息
+                // 3. 检查抢单池是否已有抢单成功记录
+                $existsGrabSuccess = $order->grabRecords()
+                    ->where('state', OrderGrabRecordStatus::SUCCEEDED->value)
+                    ->exists();
+                abort_if($existsGrabSuccess, 400, '该订单已抢单成功');
+
+                // 4. 更新订单信息
                 $this->updateOrderForAssign($order, $coachId);
 
-                // 4. 创建订单记录(指派)
+                // 5. 创建订单记录(指派)
                 $this->createAssignRecord($order, $userId);
 
-                // 5. 处理支付
+                // 6. 处理支付
                 if ($order->payment_type == 'balance') {
                     $this->handleBalancePaymentForAssign($order, $userId, $coachId);
                 }
@@ -1107,7 +1115,7 @@ class OrderService
             'order_id' => $order->id,
             'object_id' => $userId,
             'object_type' => MemberUser::class,
-            'state' => 'assigned',
+            'state' => OrderRecordStatus::ASSIGNED->value,
             'remark' => '指定技师',
         ]);
     }
@@ -1127,7 +1135,7 @@ class OrderService
         $wallet->decrement('available_balance', $order->balance_amount);
 
         // 更新订单状态
-        $order->update(['state' => 'wait_service']);
+        $order->update(['state' => OrderStatus::PAID->value]);
 
         // 创建钱包支付记录
         WalletPaymentRecord::create([
@@ -1142,24 +1150,24 @@ class OrderService
             'state' => 'success',
         ]);
 
+        // 创建接单记录
+        // OrderRecord::create([
+        //     'order_id' => $order->id,
+        //     'object_id' => $userId,
+        //     'object_type' => MemberUser::class,
+        //     'state' => OrderRecordStatus::ASSIGNED->value,
+        //     'remark' => '已分配技师',
+        // ]);
+
         // 创建支付成功记录
         OrderRecord::create([
             'order_id' => $order->id,
             'object_id' => $userId,
             'object_type' => MemberUser::class,
-            'state' => 'pay',
+            'state' => OrderRecordStatus::PAID->value,
             'remark' => '余额支付成功',
         ]);
 
-        // 创建接单记录
-        OrderRecord::create([
-            'order_id' => $order->id,
-            'object_type' => CoachUser::class,
-            'object_id' => $coachId,
-            'state' => 'accepted',
-            'remark' => '抢单成功',
-        ]);
-
         // 更新抢单记录
         $this->updateGrabRecords($order->id, $coachId);
     }
@@ -1171,13 +1179,13 @@ class OrderService
     {
         // 验证用户状态
         $user = MemberUser::where('id', $userId)
-            ->where('state', 'enable')
+            ->where('state', UserStatus::OPEN->value)
             ->firstOrFail();
 
         // 验证订单状态
         $order = Order::where('user_id', $userId)
             ->where('id', $orderId)
-            ->whereIn('state', [OrderStatus::CREATED->value])
+            ->whereIn('state', [OrderStatus::CREATED->value, OrderStatus::PAID->value])
             ->lockForUpdate()
             ->firstOrFail();
 
@@ -1221,7 +1229,7 @@ class OrderService
     {
         OrderGrabRecord::where('order_id', $orderId)
             ->update([
-                'state' => 'success',
+                'state' => OrderGrabRecordStatus::SUCCEEDED->value,
                 'coach_id' => $coachId,
             ]);
     }

+ 3 - 0
routes/api.php

@@ -105,6 +105,9 @@ Route::prefix('client')->group(function () {
             // Route::post('get-coach-config', [OrderController::class, 'getCoachConfig']);
             // Route::post('calculate-delivery-fee', [OrderController::class, 'calculateDeliveryFee']);
             Route::get('grab-list', [OrderController::class, 'getOrderGrabList']);
+            // 指派技师
+            Route::post('assign-coach', [App\Http\Controllers\Client\OrderController::class, 'assignCoach'])
+                ->name('assign-coach');
         });
 
         // 钱包相关