停车场管理系统
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

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