Browse Source

feat: 更新技师状态管理逻辑

在AutoFinishOrder和OrderService中新增技师状态更新逻辑,确保在订单完成时自动将技师状态从忙碌更新为空闲。同时,在OrderService中添加了对技师状态的验证和更新,提升了订单处理的准确性和用户体验。此更改增强了系统对技师工作状态的管理。
刘学玺 2 months ago
parent
commit
fb95d1f4b0

+ 14 - 1
app/Jobs/AutoFinishOrder.php

@@ -14,6 +14,7 @@ use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
+use App\Enums\TechnicianWorkStatus;
 
 class AutoFinishOrder implements ShouldQueue
 {
@@ -49,7 +50,7 @@ class AutoFinishOrder implements ShouldQueue
             DB::transaction(function () {
                 // 获取订单信息并加锁
                 $order = Order::query()
-                    ->with(['project'])
+                    ->with(['project', 'coach'])
                     ->where('id', $this->order->id)
                     ->lockForUpdate()
                     ->first();
@@ -78,6 +79,18 @@ class AutoFinishOrder implements ShouldQueue
                 $order->updated_at = now();
                 $order->save();
 
+                // 检测并更新技师状态
+                if ($order->coach && $order->coach->work_status === TechnicianWorkStatus::BUSY->value) {
+                    $order->coach->update([
+                        'work_status' => TechnicianWorkStatus::FREE->value
+                    ]);
+
+                    Log::info('自动结束订单 - 技师状态已更新为空闲', [
+                        'order_id' => $order->id,
+                        'coach_id' => $order->coach_id
+                    ]);
+                }
+
                 // 记录订单状态变更日志
                 OrderRecord::create([
                     'order_id' => $order->id,

+ 10 - 0
app/Services/Client/OrderService.php

@@ -41,6 +41,7 @@ use App\Models\FinanceRecord;
 use App\Models\OrderRefundRecord;
 use App\Enums\PaymentType;
 use App\Enums\TransactionStatus;
+use App\Enums\TechnicianWorkStatus;
 
 readonly class OrderService
 {
@@ -1092,6 +1093,15 @@ readonly class OrderService
                 // 2. 验证技师状
                 $coach = $this->validateCoach($order->coach_id);
 
+                // 3. 检测并更新技师状态
+
+                // 如果技师状态为忙碌,则更新为空闲
+                if ($coach->work_status === TechnicianWorkStatus::BUSY->value) {
+                    $coach->update([
+                        'work_status' => TechnicianWorkStatus::FREE->value
+                    ]);
+                }
+
                 // 4. 完成订单
                 $this->completeOrder($order, $userId);
 

+ 9 - 2
app/Services/Coach/OrderService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services\Coach;
 
+use App\Models\Coach;
 use App\Models\Order;
 use App\Enums\OrderType;
 use App\Models\CoachUser;
@@ -9,22 +10,23 @@ use App\Enums\OrderSource;
 use App\Enums\OrderStatus;
 use App\Models\MemberUser;
 use App\Models\OrderRecord;
+use App\Enums\PaymentMethod;
 use App\Enums\ProjectStatus;
 use App\Models\SettingGroup;
 use App\Jobs\AutoFinishOrder;
 use App\Enums\TechnicianStatus;
 use App\Models\OrderGrabRecord;
 use App\Enums\OrderRecordStatus;
+use App\Enums\TransactionStatus;
 use Illuminate\Support\Facades\DB;
 use App\Enums\TechnicianAuthStatus;
+use App\Enums\TechnicianWorkStatus;
 use Illuminate\Support\Facades\Log;
 use App\Enums\OrderGrabRecordStatus;
 use App\Services\SettingItemService;
 use App\Enums\TechnicianLocationType;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Redis;
-use App\Enums\PaymentMethod;
-use App\Models\Coach;
 
 class OrderService
 {
@@ -801,6 +803,11 @@ class OrderService
                 $order->service_end_time = $now->copy()->addMinutes($order->project_duration);
                 $order->save();
 
+                // 更新技师状态为忙碌中
+                $coach->update([
+                    'state' => TechnicianWorkStatus::BUSY->value
+                ]);
+
                 // 记录订单状态变更日志
                 OrderRecord::create([
                     'order_id' => $orderId,