Browse Source

自动控制车位相机灯,自动更新车位相机状态

master
wanghongjun 1 month ago
parent
commit
d5481c0941
  1. 23
      app/Http/Controllers/Device/BaseController.php
  2. 107
      app/Http/Controllers/Device/CameraApiController.php
  3. 17
      app/Services/AdminNoticeService.php
  4. 25
      app/Services/HikParkingCameraService.php
  5. 37
      app/Services/ParkingCameraService.php
  6. 3
      resources/lang/en/log.php
  7. 3
      resources/lang/zh-CN/log.php
  8. 3
      resources/lang/zh-TW/log.php
  9. 1
      routes/api.php
  10. 15
      routes/device/api.php

23
app/Http/Controllers/Device/BaseController.php

@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Device;
use App\Http\Controllers\Controller;
use App\Services\ApiResponseService;
class BaseController extends Controller
{
/**
* @var ApiResponseService
*/
protected ApiResponseService $responseService;
/**
* 构造函数
*/
public function __construct() {
$this->responseService = new ApiResponseService();
}
}

107
app/Http/Controllers/Device/CameraApiController.php

@ -0,0 +1,107 @@
<?php
namespace App\Http\Controllers\Device;
use App\Models\ParkingCamera;
use App\Services\ParkingCameraService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class CameraApiController extends BaseController
{
/**
* @var ParkingCameraService
*/
protected ParkingCameraService $service;
/**
* @param ParkingCameraService $service
*/
public function __construct(ParkingCameraService $service) {
parent::__construct();
$this->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');
}
}

17
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);
}
}

25
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);
}
}

37
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;
}
}

3
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',

3
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' => '创建车位',

3
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' => '創建車位',

1
routes/api.php

@ -14,3 +14,4 @@ use Illuminate\Support\Facades\Route;
*/
include __DIR__ . '/' . 'admin/api.php';
include __DIR__ . '/' . 'device/api.php';

15
routes/device/api.php

@ -0,0 +1,15 @@
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Device\CameraApiController;
Route::group(['prefix' => 'device'], function () {
// 获取车位相机设备信息
Route::get('/camera/getStatus', [CameraApiController::class, 'getCameraData']);
// 更新车位相机设备信息
Route::put('/camera/getStatus', [CameraApiController::class, 'updateCameraStatus']);
// 获取车位相机设备更新信息
Route::get('/camera/getBody', [CameraApiController::class, 'getCameraBody']);
});
Loading…
Cancel
Save