You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.1 KiB
152 lines
5.1 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Device;
|
|
|
|
use App\Models\ParkingAccessRecord;
|
|
use App\Models\ParkingCamera;
|
|
use App\Models\ParkingSpace;
|
|
use App\Models\ParkingSpaceCamera;
|
|
use App\Services\HikParkingCameraService;
|
|
use App\Services\ParkingAccessRecordService;
|
|
use App\Services\ParkingCameraService;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
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()->where('camera_ip', '<>', '192.168.66.63')->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 = HikParkingCameraService::getBody();
|
|
if (!$body) {
|
|
return $this->responseService->error('empty');
|
|
}
|
|
return $this->responseService->success($body, 'SUCCESS');
|
|
}
|
|
|
|
// 变等完成回调完成
|
|
public function setCameraBody(Request $request): JsonResponse
|
|
{
|
|
$data = $request->all();
|
|
$id = $data['id'] ?? 0;
|
|
if ($id && is_numeric($id)) {
|
|
HikParkingCameraService::sendSuccessful($id);
|
|
return $this->responseService->success([], 'SUCCESS');
|
|
}
|
|
return $this->responseService->error('empty');
|
|
}
|
|
|
|
// 获取在线状态设备
|
|
public function onlineCamera(): JsonResponse
|
|
{
|
|
$data = [];
|
|
$cameraRes = ParkingCamera::query()->where('status', 1)->select(
|
|
['id', 'camera_ip']
|
|
)->get()->toArray();
|
|
if ($cameraRes) {
|
|
$cameraArr = array_column($cameraRes, 'camera_ip', 'id');
|
|
$cameraIds = array_keys($cameraArr);
|
|
$spaceCameraRes = ParkingSpaceCamera::query()->whereIn(
|
|
'camera_id',
|
|
$cameraIds
|
|
)
|
|
->where('space_id', '>', 0)->select(['camera_id', 'space_id'])
|
|
->get()->toArray();
|
|
|
|
foreach ($spaceCameraRes as $item) {
|
|
// 非维修车辆返回
|
|
$spaceRes = ParkingSpace::query()->where('id', $item['space_id'])->first(['number', 'status', 'floor_id']);
|
|
|
|
if ($spaceRes) {
|
|
$number = $spaceRes['number'];
|
|
$status = $spaceRes['status'];
|
|
$exists = true;
|
|
if ($status == 2) {
|
|
$where = [
|
|
'space_id' => $item['space_id'],
|
|
'floor_id' => $spaceRes['floor_id'],
|
|
'status' => 1
|
|
];
|
|
$exists = ParkingAccessRecord::query()->where($where)->exists();
|
|
}
|
|
if ($exists) {
|
|
$data[] = [
|
|
'camera_ip' => $cameraArr[$item['camera_id']],
|
|
'number' => $number
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $this->responseService->success(['list' => $data]);
|
|
}
|
|
|
|
// 车辆进出入
|
|
public function vehicleEntry(Request $request): JsonResponse
|
|
{
|
|
$data = $request->all();
|
|
$list = $data['list'] ?? [];
|
|
DB::beginTransaction();
|
|
try {
|
|
if (!$list) {
|
|
throw new \Exception('empty');
|
|
}
|
|
foreach ($list as $item) {
|
|
$camera_ip = $item['camera_ip'] ?? '';
|
|
$number = $item['number'] ?? '';
|
|
$license_plate = $item['license_plate_number'] ?? '';
|
|
$date_time = $item['date_time'] ?? date("Y-m-d H:i:s", time());
|
|
$image_data = $item['image_data'] ?? '';
|
|
if ($camera_ip && $number) {
|
|
ParkingAccessRecordService::query()->enterOrLeave(
|
|
$camera_ip,
|
|
$number,
|
|
$license_plate,
|
|
$date_time,
|
|
$image_data
|
|
);
|
|
}
|
|
}
|
|
DB::commit();
|
|
return $this->responseService->success([], 'SUCCESS');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
dd($e);
|
|
return $this->responseService->error('FAILURE');
|
|
}
|
|
}
|
|
}
|
|
|