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.
136 lines
3.4 KiB
136 lines
3.4 KiB
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\AdminFloor;
|
|
use App\Models\Parking;
|
|
use App\Models\ParkingSpace;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ParkingManagementService extends BaseService
|
|
{
|
|
|
|
private static array $statusArr = ['disabled', 'enable'];
|
|
protected string $menuTitle = 'parking_management_list';
|
|
|
|
/**
|
|
* @return array|string[]
|
|
*/
|
|
public static function getStatus(): array
|
|
{
|
|
$statusArr = self::$statusArr;
|
|
foreach ($statusArr as $key => $value) {
|
|
$statusArr[$key] = __('admin.' . $value);
|
|
}
|
|
return $statusArr;
|
|
}
|
|
|
|
// 创建
|
|
public function createModel(array $data)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$model = Parking::query()->create([
|
|
'name' => $data['name'],
|
|
'open_time' => $data['open_time'],
|
|
'close_time' => $data['close_time'],
|
|
'address' => $data['address'],
|
|
'created_at' => get_datetime()
|
|
]);
|
|
|
|
$this->logService->logCreated($model, 'parking_management.create');
|
|
|
|
$this->saveTranslation(
|
|
$model->id,
|
|
$data['name'],
|
|
$data['en_name'] ?? '',
|
|
$data['tw_name'] ?? '',
|
|
3
|
|
);
|
|
|
|
DB::commit();
|
|
return $model;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
// 创建
|
|
public function updateModel(array $data, $id)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$model = Parking::query()->findOrFail($id);
|
|
$oldValue = $model->toArray();
|
|
|
|
$update = [
|
|
'name' => $data['name'],
|
|
'open_time' => $data['open_time'],
|
|
'close_time' => $data['close_time'],
|
|
'address' => $data['address'],
|
|
'status' => $data['status'] ?? 1,
|
|
'updated_at' => get_datetime()
|
|
];
|
|
$model->update($update);
|
|
|
|
$this->logService->logUpdated(
|
|
$model,
|
|
$oldValue,
|
|
'parking_management.update'
|
|
);
|
|
|
|
$this->saveTranslation(
|
|
$id,
|
|
$data['name'],
|
|
$data['en_name'] ?? '',
|
|
$data['tw_name'] ?? '',
|
|
3
|
|
);
|
|
|
|
DB::commit();
|
|
return $model;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function deleteModel(int $id): bool
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$model = Parking::query()->findOrFail($id);
|
|
|
|
$this->logService->logDeleted(
|
|
$model,
|
|
'parking_management.delete'
|
|
);
|
|
|
|
$model->delete();
|
|
|
|
AdminTranslationService::syncDelete($id, 3);
|
|
DB::commit();
|
|
return true;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function getParkingCount($parking_id)
|
|
{
|
|
$count = 0;
|
|
$floorIds = AdminFloor::query()->where('building_floor', $parking_id)
|
|
->pluck('id');
|
|
if ($floorIds) {
|
|
return ParkingSpace::query()->whereIn('floor_id', $floorIds)->count(
|
|
);
|
|
}
|
|
return $count;
|
|
}
|
|
}
|
|
|