Browse Source

feat:订单管理->加钟

刘学玺 4 months ago
parent
commit
3710a7a961

+ 6 - 4
app/Http/Controllers/Client/OrderController.php

@@ -308,18 +308,20 @@ class OrderController extends Controller
      *
      * @authenticated
      *
-     * @urlParam order_id required 订单ID. Example: 123
+     * @bodyParam project_id int required 项目ID. Example: 1
+     * @bodyParam use_balance boolean 使用余额. Example: false
+     * @bodyParam order_id int 订单ID. Example: 1
      *
      * @response {
      *   "status": "success",
      *   "data": {}
      * }
      */
-    public function addTime(Request $request, $orderId)
+    public function addTime(Request $request)
     {
-        $userId = Auth::user()->id;
+        $data = $request->only(['project_id', 'use_balance', 'order_id']);
 
-        return $this->service->addTime($userId, $orderId);
+        return $this->service->createOrder(Auth::user()->id, $data);
     }
 
     /**

+ 11 - 16
app/Services/Client/AccountService.php

@@ -2,16 +2,10 @@
 
 namespace App\Services\Client;
 
-use App\Models\MemberUser;
 use App\Models\MemberSocialAccount;
-use App\Models\SysConfig;
-use App\Models\Wallet;
-use App\Models\CoachUser;
-use App\Models\WalletWithdrawRecord;
+use App\Models\MemberUser;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
-use Illuminate\Support\Facades\DB;
-
 
 class AccountService
 {
@@ -40,7 +34,7 @@ class AccountService
         // 验证验证码
         $cacheCode = Cache::get("verify_code:{$mobile}");
 
-        if (!$cacheCode || $cacheCode != $code) {
+        if (! $cacheCode || $cacheCode != $code) {
             throw new \Exception('验证码错误');
         }
 
@@ -49,7 +43,7 @@ class AccountService
             ['mobile' => $mobile],
             [
                 'state' => 'enable',
-                'register_area' => request()->header('area_code')
+                'register_area' => request()->header('area_code'),
             ]
         );
 
@@ -58,7 +52,7 @@ class AccountService
 
         return [
             'token' => $token,
-            'user' => $user
+            'user' => $user,
         ];
     }
 
@@ -71,15 +65,15 @@ class AccountService
         $socialAccount = MemberSocialAccount::firstOrCreate(
             [
                 'platform' => 'WECHAT',
-                'social_id' => $openid
+                'social_id' => $openid,
             ]
         );
 
         $user = $socialAccount->user;
-        if (!$user) {
+        if (! $user) {
             $user = MemberUser::create([
                 'state' => 'enable',
-                'register_area' => request()->header('area_code')
+                'register_area' => request()->header('area_code'),
             ]);
             $socialAccount->update(['user_id' => $user->id]);
         }
@@ -89,7 +83,7 @@ class AccountService
 
         return [
             'token' => $token,
-            'user' => $user
+            'user' => $user,
         ];
     }
 
@@ -100,6 +94,7 @@ class AccountService
     {
         $user = Auth::user();
         $user->tokens()->delete();
+
         return ['message' => '退出成功'];
     }
 
@@ -110,7 +105,7 @@ class AccountService
     {
         $user = Auth::user();
 
-        if (!$user || $user->state !== 'enable') {
+        if (! $user || $user->state !== 'enable') {
             throw new \Exception('用户状态异常');
         }
 
@@ -118,7 +113,7 @@ class AccountService
         $user->save();
         $user->delete();
         $user->tokens()->delete();
+
         return ['message' => '账号已注销'];
     }
-
 }

+ 48 - 32
app/Services/Client/OrderService.php

@@ -16,6 +16,7 @@ use App\Models\Project;
 use App\Models\SysConfig;
 use App\Models\User;
 use App\Models\WalletRefundRecord;
+use Carbon\Carbon;
 use Exception;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -116,24 +117,6 @@ class OrderService
                     ->where('state', 'enable')
                     ->firstOrFail();
 
-                $address = $user->addresses()
-                    ->where('id', $data['address_id'])
-                    ->firstOrFail();
-
-                // 查询技师及其认证状态
-                $coach = CoachUser::where('id', $data['coach_id'])
-                    ->where('state', 'enable')
-                    ->whereHas('info', function ($query) {
-                        $query->where('state', 'approved');
-                    })
-                    ->whereHas('qual', function ($query) {
-                        $query->where('state', 'approved');
-                    })
-                    ->whereHas('real', function ($query) {
-                        $query->where('state', 'approved');
-                    })
-                    ->firstOrFail();
-
                 $project = Project::where('id', $data['project_id'])
                     ->where('state', 'enable')
                     ->firstOrFail();
@@ -141,6 +124,48 @@ class OrderService
                 // 2. 创建订单
                 $orderType = isset($data['order_id']) ? 'add_time' : 'normal';
 
+                if ($orderType == 'normal') {
+
+                    // 查询技师及其认证状态
+                    $coach = CoachUser::where('id', $data['coach_id'])
+                        ->where('state', 'enable')
+                        ->whereHas('info', function ($query) {
+                            $query->where('state', 'approved');
+                        })
+                        ->whereHas('qual', function ($query) {
+                            $query->where('state', 'approved');
+                        })
+                        ->whereHas('real', function ($query) {
+                            $query->where('state', 'approved');
+                        })
+                        ->firstOrFail();
+
+                } else {
+                    // 1. 检查原订单
+                    $originalOrder = $user->orders->where('id', $data['order_id'])
+                        ->whereIn('state', ['service_ing', 'service_end']) // 只有服务中和服务结束的订单可以加钟
+                        ->firstOrFail();
+
+                    // 2. 设置加钟订单的服务时间
+                    if ($originalOrder->state == 'service_ing') {
+                        // 服务中订单,加钟开始时间为原订单结束时间
+                        $startTime = now(); // Carbon::parse($originalOrder->service_time)->addMinutes($originalOrder->project->duration);
+                    } else {
+                        // 服务结束订单,加钟开始时间为当前时间
+                        $startTime = now();
+                    }
+
+                    // 3. 构建加钟订单数据
+                    $data['order_id'] = $data['order_id']; // 关联原订单ID
+                    $data['address_id'] = $originalOrder->address_id;
+                    $data['service_time'] = $startTime;
+                    $data['coach_id'] = $originalOrder->coach_id;
+                }
+
+                $address = $user->addresses()
+                    ->where('id', $data['address_id'])
+                    ->firstOrFail();
+
                 // 计算订单金额
                 $amounts = $this->calculateOrderAmount(
                     $userId,
@@ -152,6 +177,7 @@ class OrderService
                 );
 
                 $order = new Order;
+
                 $order->user_id = $userId;
                 $order->project_id = $data['project_id'];
                 $order->coach_id = $data['coach_id'];
@@ -164,9 +190,11 @@ class OrderService
                 $order->project_amount = $amounts['project_amount'];
                 $order->traffic_amount = $orderType == 'add_time' ? 0 : $amounts['delivery_fee'];
                 $order->payment_type = ($data['use_balance'] && $amounts['pay_amount'] == 0) ? 'balance' : null;
+
                 $order->service_time = $data['service_time'];
 
                 // 从用户地址获取位置信息
+                $order->address_id = $data['address_id'];
                 $order->longitude = $address->longitude; // 经度
                 $order->latitude = $address->latitude;   // 纬度
                 $order->location = $address->location;   // 定位地址
@@ -186,7 +214,7 @@ class OrderService
 
                 // 4. 余额支付处理
                 if ($order->payment_type == 'balance') {
-                    $order->state = 'wait_receive';
+                    $order->state = $orderType == 'normal' ? 'wait_receive' : 'service_ing';
                     $order->save();
 
                     // 创建订单支付记录
@@ -446,7 +474,7 @@ class OrderService
                     'remark' => '技师已离开',
                 ]);
 
-                // 3. 修订单状态为撤离
+                // 3. 修��订单状态为撤离
                 $order->state = 'leave';
                 $order->save();
 
@@ -749,18 +777,6 @@ class OrderService
         ];
     }
 
-    /**
-     * 加钟
-     */
-    public function addTime($userId, $orderId)
-    {
-        $order = Order::where('id', $orderId)
-            ->where('user_id', $userId)
-            ->firstOrFail();
-
-        return $this->createOrder($userId, $order->project_id, $order->address_id, $order->coach_id, 0, $orderId);
-    }
-
     /**
      * 指定技师
      */

+ 1 - 1
app/Services/Client/ProjectService.php

@@ -12,7 +12,7 @@ class ProjectService
     /**
      * 获取项目列表
      */
-    public function getProjectList($areaCode, $projectCateId = null)
+    public function getProjectList($areaCode, $projectCateId = null, $type = 'normal')
     {
         // 根据区域代码获取代理商
         $agent = $this->findAvailableAgent($areaCode);

+ 2 - 1
routes/api.php

@@ -86,12 +86,13 @@ Route::middleware('auth:sanctum')->group(function () {
         Route::post('confirm-leave', [OrderController::class, 'confirmLeave']);
         Route::get('list', [OrderController::class, 'list']);
         Route::get('detail/{id}', [OrderController::class, 'detail']);
+        Route::post('add-time', [OrderController::class, 'addTime']);
         // Route::post('refund/{id}', [OrderController::class, 'refund']);
         // Route::post('get-agent-config', [OrderController::class, 'getAgentConfig']);
         // Route::post('get-coach-config', [OrderController::class, 'getCoachConfig']);
         // Route::post('calculate-delivery-fee', [OrderController::class, 'calculateDeliveryFee']);
         // Route::post('calculate-order-amount', [OrderController::class, 'calculateOrderAmount']);
-        // Route::post('add-time/{orderId}', [OrderController::class, 'addTime']);
+
     });
 
 });