From fda661c61645aba92c302b1bcbe1fa8119b1e8a8 Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Thu, 5 Jun 2025 21:49:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AA=BF=E6=95=B4=20room=20=E8=B3=87=E6=96=99?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=2020250605?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/RoomControlController.php | 54 ++++++++----------- app/Http/Requests/ReceiveSwitchRequest.php | 47 ++++++++++++++++ 2 files changed, 68 insertions(+), 33 deletions(-) create mode 100644 app/Http/Requests/ReceiveSwitchRequest.php diff --git a/app/Http/Controllers/RoomControlController.php b/app/Http/Controllers/RoomControlController.php index d3add42..78c1a73 100644 --- a/app/Http/Controllers/RoomControlController.php +++ b/app/Http/Controllers/RoomControlController.php @@ -3,8 +3,7 @@ namespace App\Http\Controllers; use App\Http\Requests\SendRoomSwitchCommandRequest; -use App\Http\Requests\ReceiveRoomRegisterRequest; -use App\Http\Requests\ReceiveRoomStatusDataRequest; +use App\Http\Requests\ReceiveSwitchRequest; use App\Services\TcpSocketClient; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; @@ -100,41 +99,30 @@ class RoomControlController extends Controller return ApiResponse::success("命令已發送:$command"); } - public function receiveSwitch(SendRoomSwitchCommandRequest $request): JsonResponse + public function receiveSwitch(ReceiveSwitchRequest $request): JsonResponse { $validated = $request->validated(); - $branch = Branch::where('name',$validated['branch_name'])->first(); - $roomType = null; - $roomName = null; - // 從 room_name(例如 PC101, SVR01)中擷取 type 與 name - if (preg_match('/^([A-Za-z]+)(\d+)$/', $validated['room_name'], $matches)) { - $roomType = strtolower($matches[1]); // 'PC' → 'pc' - $roomName = $matches[2]; // '101' - } - $room = Room::where('branch_id', $branch->id) - ->where('name', $roomName) - ->where('type', $roomType) - ->first(); - if (!$branch) { - return ApiResponse::error('分店不存在'); + if ($validated['status'] === 'error') { + $validated['started_at'] = null; + $validated['ended_at'] = null; } - if (!$room) { - return ApiResponse::error('房間不存在'); - } - if($validated['command']==='error'){ - $room->is_online=0; - $room->status=$validated['command']; - $room->started_at=null; - $room->ended_at=null; - }else{ - $room->status=$validated['command']; - $room->started_at=$validated['started_at']; - $room->ended_at=$validated['ended_at']; - } - $room->save(); - - return ApiResponse::success($room); + $room = Room::updateOrCreate( + ['id' => $validated['id']], + [ + 'branch_id' => $validated['branch_id'], + 'type' => $validated['type'], + 'name' => $validated['name'], + 'floor' => $validated['floor'], + 'internal_ip' => $validated['internal_ip'], + 'port' => $validated['port'], + 'is_online' => $validated['is_online'], + 'status' => $validated['status'], + 'started_at' => $validated['started_at'], + 'ended_at' => $validated['ended_at'], + ] + ); + return ApiResponse::success($room->refresh()); } } diff --git a/app/Http/Requests/ReceiveSwitchRequest.php b/app/Http/Requests/ReceiveSwitchRequest.php new file mode 100644 index 0000000..3d4e78e --- /dev/null +++ b/app/Http/Requests/ReceiveSwitchRequest.php @@ -0,0 +1,47 @@ +|string> + */ + public function rules(): array + { + return [ + 'id' => ['required','integer','exists:rooms,id'], + 'branch_id' => ['required','integer','exists:branches,id'], + 'floor' => ['required','integer'], + 'type' => ['required','in:unset,pc,svr'], + 'name' => ['required','string'], + 'internal_ip' => ['nullable','string'], + 'port' => ['nullable','integer'], + 'is_online' => ['required','integer'], + 'status' => ['required','in:active,closed,fire,error'], + 'started_at' => ['nullable','date_format:Y-m-d H:i:s'], + 'ended_at' => ['nullable','date_format:Y-m-d H:i:s'], + ]; + } +}