$data['floor_id'], 'license_plate_id' => $data['license_plate_id'], 'space_id' => $data['space_id'], 'status' => 1, 'enter_time' => $data['enter_time'], 'scene_image' => $data['scene_image'], 'created_at' => date("Y-m-d H:i:s", time()) ]; $model = ParkingAccessRecord::query()->create($data); $this->logService->logCreated($model, $this->menuTitle . '.create'); } /** * @return ParkingAccessRecordService */ public static function query(): ParkingAccessRecordService { return new self(new OperationLogService()); } // 离开车位 public function leaveData($id, $data) { $model = ParkingAccessRecord::query()->findOrFail($id); $oldValues = $model->toArray(); $data = [ 'status' => 0, 'leave_time' => $data['leave_time'], 'updated_at' => date("Y-m-d H:i:s", time()) ]; $model->update($data); $this->logService->logUpdated( $model, $oldValues, $this->menuTitle . '.update' ); } // 车辆进入车位 public function enterOrLeave($camera_ip, $space_number, $license_plate, $now_time, $image_data = '') { $camera_id = ParkingCamera::query()->where('camera_ip', $camera_ip) ->value('id'); $ParkingSpace = ParkingSpace::query()->where('number', $space_number) ->first(); $exists = false; $space_id = 0; $spaceData = []; if ($ParkingSpace) { $spaceData = $ParkingSpace->toArray(); $space_id = $spaceData['id']; $exists = ParkingSpaceCamera::query()->where([ 'camera_id' => $camera_id, 'space_id' => $space_id ])->exists(); } if (!$exists) { return; } $data = [ 'space_id' => $space_id, 'floor_id' => $spaceData['floor_id'], ]; // 记录车牌信息 if ($license_plate) { $licensePlateService = new ParkingLicensePlateService( $this->logService ); $license_plate_id = $licensePlateService->saveNumber($license_plate); $data['license_plate_id'] = $license_plate_id; } // 查询车位记录 $id = ParkingAccessRecord::query()->where($data)->where('status', 1) ->value('id'); $ParkingSpaceService = new ParkingSpaceService($this->logService); // 停播存在车牌不存在 if ($id && !$license_plate) { $data['leave_time'] = strtotime($now_time); $this->leaveData($id, $data); // 同步车位车辆进入 $ParkingSpaceService->updateEnterLeave($space_id, 0, $now_time); // 车牌存在 } elseif (isset($data['license_plate_id']) && $license_plate) { $data['enter_time'] = strtotime($now_time); $data['scene_image'] = $this->saveSceneImage($image_data); $this->enterData($data); // 同步车位车辆进入 $ParkingSpaceService->updateEnterLeave( $space_id, 1, $now_time, $data['license_plate_id'], $data['scene_image'] ); } } // 手动添加车辆进出记录 public function syncSpaceStatusRecord( $floor_id, $license_plate_id, $space_id, $datetime, $status = 0 ) { $data = [ 'space_id' => $space_id, 'floor_id' => $floor_id, ]; $where = [ ['space_id', '=', $space_id], ['floor_id', '=', $floor_id] ]; $date_times = strtotime($datetime); // 车辆进入创建记录 if ($status == 1 && $license_plate_id) { $data['license_plate_id'] = $license_plate_id; $data['enter_time'] = $date_times; $this->enterData($data); // 查询当前车位是否存在其他未离开车辆,当不包含刚进入车辆 $where[] = ['license_plate_id', '<>', $license_plate_id]; } // 查询车位进入车辆记录 $id = ParkingAccessRecord::query()->where($where)->where('status', 1) ->value('id'); if ($id) { $data['leave_time'] = $date_times; $this->leaveData($id, $data); } } // 保存场景图 public function saveSceneImage($imageData): string { $scene_image = ''; if ($imageData) { $filename = time() . '_' . md5(Str::random(6)) . '.jpg'; $save_file_path = 'public/images/scene/' . date("Ymd") . '/' . $filename; $deBaseData = base64_decode($imageData); Storage::put($save_file_path, $deBaseData); $scene_image = Storage::url($save_file_path); } return $scene_image; } }