diff --git a/app/Http/Controllers/Device/BaseController.php b/app/Http/Controllers/Device/BaseController.php new file mode 100644 index 0000000..9067fd6 --- /dev/null +++ b/app/Http/Controllers/Device/BaseController.php @@ -0,0 +1,23 @@ +responseService = new ApiResponseService(); + } + +} diff --git a/app/Http/Controllers/Device/CameraApiController.php b/app/Http/Controllers/Device/CameraApiController.php new file mode 100644 index 0000000..f0f62ed --- /dev/null +++ b/app/Http/Controllers/Device/CameraApiController.php @@ -0,0 +1,107 @@ +service = $service; + } + + public function getCameraData(): JsonResponse + { + $data = ParkingCamera::query()->select(['id', 'camera_ip', 'status']) + ->get() + ->toArray(); + return $this->responseService->success(['list' => $data]); + } + + public function updateCameraStatus(Request $request): JsonResponse + { + $data = $request->all(); + $list = $data['list']; + foreach ($list as $item) { + $id = $item['id'] ?? 0; + $camera_ip = $item['camera_ip'] ?? ''; + $status = $item['status'] ?? 0; + $this->service->updateStatus($id, $camera_ip, $status); + } + return $this->responseService->success([], 'SUCCESS'); + } + + public function getCameraBody(): JsonResponse + { + $body = [ + "lampType" => "internal", + "VehicleNumber" => [ + "VehicleChannelNum" => 1, + "VehicleChannelList" => [ + [ + "LampSoure" => "internal", // unrelated + "VehicleNoExist" => [ + "enabled" => true, + "flashEnabled" => false, + "lampColor" => 'green' + ], + "VehicleExist" => [ + "enabled" => true, + "flashEnabled" => false, + "lampColor" => 'green' + ] + ] + ] + ], + "replaceLampCtrl" => [ + "enabled" => false, + "ipV4Address" => "0.0.0.0", + "portNo" => 80, + "username" => "admin", + "password" => "dddf4589f3430f7b7395bb9d35e05b27" + ], + "lampStatusArr" => [ + [ + "name" => "内置灯", + "value" => "相机自控", + "\$\$hashKey" => "062" + ], + [ + "name" => "外置灯1", + "value" => "相机自控", + "\$\$hashKey" => "063" + ], + [ + "name" => "外置灯2", + "value" => "相机自控", + "\$\$hashKey" => "064" + ], + [ + "name" => "外置灯3", + "value" => "相机自控", + "\$\$hashKey" => "065" + ] + ] + ]; + if (!$body) { + return $this->responseService->error('empty'); + } else { +// $bodyArr = json_decode($body); +// Cache::delete('camera_body'); + } + return $this->responseService->success($body, 'SUCCESS'); + } +} diff --git a/app/Services/AdminNoticeService.php b/app/Services/AdminNoticeService.php index 6f346f8..9499c1e 100644 --- a/app/Services/AdminNoticeService.php +++ b/app/Services/AdminNoticeService.php @@ -195,4 +195,21 @@ class AdminNoticeService extends BaseService throw $e; } } + + // 设备离线通知 + public static function addDeviceOfflineNotice( + $camera_id, + $camera_ip, + $space_id, + $floor_id, + $user_id + ) { + $data = [ + 'camera_id' => $camera_id, + 'camera_ip' => $camera_ip, + 'space_id' => $space_id, + 'floor_id' => $floor_id + ]; + self::createData(2, 3, $data, $user_id); + } } diff --git a/app/Services/HikParkingCameraService.php b/app/Services/HikParkingCameraService.php index 7d37c41..c69035f 100644 --- a/app/Services/HikParkingCameraService.php +++ b/app/Services/HikParkingCameraService.php @@ -3,6 +3,7 @@ namespace App\Services; use GuzzleHttp\Client; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; class HikParkingCameraService @@ -173,18 +174,20 @@ class HikParkingCameraService ] ] ];*/ - $url = $this->getUri() . $this->MULTI_PARKING_SPACES_LAMP; - $query = [ - 'format' => $this->format, - 'security' => 1, - 'iv' => md5(rand('000000', '999999')) - ]; - $url .= '?' . http_build_query($query); +// $url = $this->getUri() . $this->MULTI_PARKING_SPACES_LAMP; +// $query = [ +// 'format' => $this->format, +// 'security' => 1, +// 'iv' => md5(rand('000000', '999999')) +// ]; +// $url .= '?' . http_build_query($query); +// +// $response = Http::timeout(3) +// ->withoutVerifying() +// ->withDigestAuth($this->device['username'], $this->device['password']) +// ->put($url, $body); - $response = Http::timeout(3) - ->withoutVerifying() - ->withDigestAuth($this->device['username'], $this->device['password']) - ->put($url, $body); + Cache::put('camera_body', json_encode($body)); //dd($response->json(), $response->body(), $response->object(), $response); } } diff --git a/app/Services/ParkingCameraService.php b/app/Services/ParkingCameraService.php index b02d36b..7a87549 100644 --- a/app/Services/ParkingCameraService.php +++ b/app/Services/ParkingCameraService.php @@ -278,4 +278,41 @@ class ParkingCameraService extends BaseService $item['status'] = $statusArr[$item['status']] ?? ''; return $item; } + + // 更新状态 + public function updateStatus($id, $camera_ip, $status): int + { + $model = ParkingCamera::query()->where('id', $id)->where( + 'camera_ip', + $camera_ip + )->first(); + if ($model) { + $oldValue = $model->toArray(); + if ($oldValue['status'] != $status) { + $model->update(['status' => $status]); + // 记录变更日志 + $this->logService->logUpdated( + $model, + $oldValue, + 'parking_camera.update_status' + ); + // 设备离线提醒 + if (!$status) { + $space_id = ParkingSpaceCamera::query()->where( + 'camera_id', + $id + )->orderBy('id', 'desc')->value('space_id'); + AdminNoticeService::addDeviceOfflineNotice( + $id, + $camera_ip, + $space_id, + $oldValue['floor_id'], + 1 + ); + } + return 1; + } + } + return 0; + } } diff --git a/resources/lang/en/log.php b/resources/lang/en/log.php index 60e52f9..fa848a8 100644 --- a/resources/lang/en/log.php +++ b/resources/lang/en/log.php @@ -68,7 +68,8 @@ return [ 'update' => 'Update parking camera', 'delete' => 'Delete parking camera', 'create_space_camera' => 'Create a parking light camera', - 'delete_space_camera' => 'Delete parking light camera' + 'delete_space_camera' => 'Delete parking light camera', + 'update_status' => 'Update device status' ], 'parking_space' => [ 'create' => 'Create parking space', diff --git a/resources/lang/zh-CN/log.php b/resources/lang/zh-CN/log.php index a967afd..ae3cb73 100644 --- a/resources/lang/zh-CN/log.php +++ b/resources/lang/zh-CN/log.php @@ -68,7 +68,8 @@ return [ 'update' => '更新车位相机', 'delete' => '删除车位相机', 'create_space_camera' => '创建车位控灯相机', - 'delete_space_camera' => '删除车位控灯相机' + 'delete_space_camera' => '删除车位控灯相机', + 'update_status' => '更新设备状态' ], 'parking_space' => [ 'create' => '创建车位', diff --git a/resources/lang/zh-TW/log.php b/resources/lang/zh-TW/log.php index d44d171..e6bea14 100644 --- a/resources/lang/zh-TW/log.php +++ b/resources/lang/zh-TW/log.php @@ -68,7 +68,8 @@ return [ 'update' => '更新車位相機', 'delete' => '删除車位相機', 'create_space_camera' => '創建車位控燈相機', - 'delete_space_camera' => '删除車位控燈相機' + 'delete_space_camera' => '删除車位控燈相機', + 'update_status' => '更新設備狀態' ], 'parking_space' => [ 'create' => '創建車位', diff --git a/routes/api.php b/routes/api.php index 9ca9a6c..1f04e90 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,3 +14,4 @@ use Illuminate\Support\Facades\Route; */ include __DIR__ . '/' . 'admin/api.php'; +include __DIR__ . '/' . 'device/api.php'; diff --git a/routes/device/api.php b/routes/device/api.php new file mode 100644 index 0000000..d69d755 --- /dev/null +++ b/routes/device/api.php @@ -0,0 +1,15 @@ + 'device'], function () { + + // 获取车位相机设备信息 + Route::get('/camera/getStatus', [CameraApiController::class, 'getCameraData']); + // 更新车位相机设备信息 + Route::put('/camera/getStatus', [CameraApiController::class, 'updateCameraStatus']); + // 获取车位相机设备更新信息 + Route::get('/camera/getBody', [CameraApiController::class, 'getCameraBody']); + +});