|
|
|
@ -4,41 +4,36 @@ namespace App\Services; |
|
|
|
|
|
|
|
use App\Models\Parking; |
|
|
|
use App\Models\ParkingChannel; |
|
|
|
use App\Models\ParkingGateControl; |
|
|
|
use App\Models\ParkingLicensePlate; |
|
|
|
use App\Models\ParkingReservation; |
|
|
|
use App\Models\ParkingSpaceType; |
|
|
|
use Exception; |
|
|
|
use Illuminate\Support\Facades\DB; |
|
|
|
|
|
|
|
class ParkingGateControlService extends BaseService |
|
|
|
{ |
|
|
|
protected string $menuTitle = 'gate_control'; |
|
|
|
|
|
|
|
public static array $typeArr = [ |
|
|
|
public static array $typeArr |
|
|
|
= [ |
|
|
|
1 => 'automatic', |
|
|
|
2 => 'manual' |
|
|
|
]; |
|
|
|
|
|
|
|
/** |
|
|
|
* @return array|string[] |
|
|
|
*/ |
|
|
|
public function getType(): array |
|
|
|
{ |
|
|
|
$typeArr = self::$typeArr; |
|
|
|
foreach ($typeArr as $key => $value) { |
|
|
|
$typeArr[$key] = __service($this->menuTitle . '.' . $value); |
|
|
|
} |
|
|
|
return $typeArr; |
|
|
|
} |
|
|
|
protected string $menuTitle = 'gate_control'; |
|
|
|
|
|
|
|
public function getItem($item) |
|
|
|
{ |
|
|
|
$typeArr = $this->getType(); |
|
|
|
$date = date("Y-m-d", strtotime($item['enter_at'])); |
|
|
|
|
|
|
|
$item['reserve_id'] = ParkingReservation::query()->where( |
|
|
|
'license_plate_id', |
|
|
|
$item['license_plate_id'] |
|
|
|
)->where('date', $date)->value('reserve_id'); |
|
|
|
'id', |
|
|
|
$item['reservation_id'] |
|
|
|
)->value( |
|
|
|
'reserve_id' |
|
|
|
); |
|
|
|
$item['member_type'] = ParkingSpaceType::getName($item['member_type']); |
|
|
|
$item['license_plate'] = ParkingLicensePlate::getNumber($item['license_plate_id']); |
|
|
|
$item['license_plate'] = ParkingLicensePlate::getNumber( |
|
|
|
$item['license_plate_id'] |
|
|
|
); |
|
|
|
$ParkingChannel = ParkingChannel::getFirst($item['channel_id']); |
|
|
|
$item['channel'] = ''; |
|
|
|
$item['parking'] = ''; |
|
|
|
@ -48,11 +43,131 @@ class ParkingGateControlService extends BaseService |
|
|
|
} |
|
|
|
$item['enter_type_str'] = $typeArr[$item['enter_type']]; |
|
|
|
$item['leave_type_str'] = $typeArr[$item['leave_type']] ?? ''; |
|
|
|
$item['dwell_time'] = get_time_difference_str($item['enter_at'], $item['leave_at']); |
|
|
|
$item['dwell_time'] = get_time_difference_str( |
|
|
|
$item['enter_at'], |
|
|
|
$item['leave_at'] |
|
|
|
); |
|
|
|
|
|
|
|
$item['enter_img'] = get_image_url($item['enter_img']); |
|
|
|
$item['leave_img'] = get_image_url($item['leave_img']); |
|
|
|
unset($item['license_plate_id'], $item['channel_id']); |
|
|
|
unset($item['license_plate_id'], $item['channel_id'], $item['reservation_id'], $item['free_passage']); |
|
|
|
return $item; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @return array|string[] |
|
|
|
*/ |
|
|
|
public function getType(): array |
|
|
|
{ |
|
|
|
$typeArr = self::$typeArr; |
|
|
|
foreach ($typeArr as $key => $value) { |
|
|
|
$typeArr[$key] = __service($this->menuTitle . '.' . $value); |
|
|
|
} |
|
|
|
return $typeArr; |
|
|
|
} |
|
|
|
|
|
|
|
public function enterModel($data) |
|
|
|
{ |
|
|
|
try { |
|
|
|
DB::beginTransaction(); |
|
|
|
$number = $data['number']; |
|
|
|
$enter_time = $data['enter_time']; |
|
|
|
$is_reservation = $data['is_reservation'] ?? 0; |
|
|
|
$date = date("Y-m-d", strtotime($enter_time)); |
|
|
|
$reservation_id = 0; |
|
|
|
$license_plate_id = ''; |
|
|
|
$member_type = 0; |
|
|
|
$customer_id = ''; |
|
|
|
$member_id = ''; |
|
|
|
$ParkingReservation = ParkingReservation::query()->where([ |
|
|
|
'reserve_id' => $number, |
|
|
|
'status' => 1, |
|
|
|
'date' => $date |
|
|
|
])->first(); |
|
|
|
if ($ParkingReservation) { |
|
|
|
$reservation_id = $ParkingReservation['id']; |
|
|
|
$license_plate_id = $ParkingReservation['license_plate_id']; |
|
|
|
$member_type = $ParkingReservation['member_type']; |
|
|
|
$customer_id = $ParkingReservation['customer_id']; |
|
|
|
$member_id = $ParkingReservation['member_id']; |
|
|
|
} |
|
|
|
$enter_img = $data['enter_img'] ?? ''; |
|
|
|
$channel_id = $data['channel_id']; |
|
|
|
if (!$license_plate_id) { |
|
|
|
$license_plate_id = (new ParkingLicensePlateService( |
|
|
|
$this->logService |
|
|
|
))->createLicenseId($number); |
|
|
|
} |
|
|
|
|
|
|
|
$id = ParkingGateControl::query()->where( |
|
|
|
'license_plate_id', |
|
|
|
$license_plate_id |
|
|
|
)->whereNull('leave_at')->value('id'); |
|
|
|
if ($id) { |
|
|
|
throw new Exception( |
|
|
|
__service($this->menuTitle . '.cat_exists') |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
$model = ParkingGateControl::query()->create([ |
|
|
|
'license_plate_id' => $license_plate_id, |
|
|
|
'channel_id' => $channel_id, |
|
|
|
'enter_type' => 2, |
|
|
|
'enter_img' => $enter_img, |
|
|
|
'enter_at' => $enter_time, |
|
|
|
'reservation_id' => $reservation_id, |
|
|
|
'member_type' => $member_type, |
|
|
|
'customer_id' => $customer_id, |
|
|
|
'member_id' => $member_id, |
|
|
|
'created_at' => get_datetime() |
|
|
|
]); |
|
|
|
$this->logService->logCreated($model, $this->menuTitle . '.create_enter'); |
|
|
|
DB::commit(); |
|
|
|
return $model; |
|
|
|
} catch (Exception $e) { |
|
|
|
DB::rollBack(); |
|
|
|
throw $e; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function leaveModel($data) |
|
|
|
{ |
|
|
|
try { |
|
|
|
DB::beginTransaction(); |
|
|
|
$license_plate = $data['license_plate']; |
|
|
|
$leave_time = $data['leave_time']; |
|
|
|
$leave_img = $data['leave_img'] ?? ''; |
|
|
|
$free_passage = $data['free_passage'] ?? 0; |
|
|
|
$license_plate_id = (new ParkingLicensePlateService( |
|
|
|
$this->logService |
|
|
|
))->createLicenseId($license_plate); |
|
|
|
$id = ParkingGateControl::query()->where( |
|
|
|
'license_plate_id', |
|
|
|
$license_plate_id |
|
|
|
)->whereNull('leave_at')->value('id'); |
|
|
|
if (!$id) { |
|
|
|
throw new Exception( |
|
|
|
__service($this->menuTitle . '.cat_not_exists') |
|
|
|
); |
|
|
|
} |
|
|
|
$model = ParkingGateControl::query()->findOrFail($id); |
|
|
|
$oldValue = $model->toArray(); |
|
|
|
|
|
|
|
$model->update([ |
|
|
|
'enter_type' => 2, |
|
|
|
'leave_img' => $leave_img, |
|
|
|
'leave_at' => $leave_time, |
|
|
|
'free_passage' => $free_passage, |
|
|
|
'updated_at' => get_datetime() |
|
|
|
]); |
|
|
|
$this->logService->logUpdated($model, $oldValue, $this->menuTitle . '.update_leave'); |
|
|
|
DB::commit(); |
|
|
|
return $model; |
|
|
|
} catch (Exception $e) { |
|
|
|
DB::rollBack(); |
|
|
|
throw $e; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|