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

176 lines
4.7 KiB

<?php
namespace App\Services;
use App\Models\AdminFloor;
use App\Models\AdminUsers;
use App\Models\Parking;
use App\Models\ParkingSpace;
use App\Models\ParkingSpaceRepair;
use Exception;
use Illuminate\Support\Facades\DB;
class ParkingSpaceRepairService extends BaseService
{
public array $syncStatusArr
= [
'not_synced',
'synced'
];
protected string $menuTitle = 'parking_repair_list';
public function getItem($item)
{
$ParkingSpace = ParkingSpace::query()->find($item['space_id']);
$item['parking_space_number'] = '';
$item['floor'] = '';
$item['parking'] = '';
if ($ParkingSpace) {
$item['parking_space_number'] = $ParkingSpace['number'];
$Floor = AdminFloor::getFirst($ParkingSpace['floor_id']);
$item['floor'] = $Floor['name'];
$item['parking'] = Parking::getName($Floor['building_floor']);
}
$item['admin_user'] = AdminUsers::getUsername($item['admin_user_id']);
$syncStatusArr = $this->getSyncStatus();
$item['sync_status_str'] = $syncStatusArr[$item['sync_status']] ?? '';
unset($item['admin_user_id'], $item['space_id']);
return $item;
}
/**
* @return array|string[]
*/
public function getSyncStatus(): array
{
$syncStatusArr = $this->syncStatusArr;
foreach ($syncStatusArr as $key => $value) {
$syncStatusArr[$key] = __service($this->menuTitle . '.' . $value);
}
return $syncStatusArr;
}
/**
* @param array $data
* @throws Exception
*/
public function createModel(array $data)
{
try {
DB::beginTransaction();
$spaceNameArr = explode(',', $data['parking_space_name']);
foreach ($spaceNameArr as $parking_space_name) {
$space_id = ParkingSpace::getValueId($parking_space_name);
$model = ParkingSpaceRepair::query()->create([
'space_id' => $space_id,
'admin_user_id' => $data['admin_user_id'],
'start_at' => $data['start_at'],
'end_at' => $data['end_at'],
'created_at' => get_datetime()
]);
$this->logService->logCreated(
$model,
$this->menuTitle . '.create'
);
}
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param array $data
* @param int $id
* @throws Exception
*/
public function updateModel(array $data, int $id)
{
try {
DB::beginTransaction();
$space_id = ParkingSpace::getValueId($data['parking_space_name']);
// 更新
$model = ParkingSpaceRepair::query()->findOrFail($id);
$oldValues = $model->toArray();
$model->update([
'space_id' => $space_id,
'admin_user_id' => $data['admin_user_id'],
'start_at' => $data['start_at'],
'end_at' => $data['end_at'],
'updated_at' => get_datetime()
]);
$this->logService->logUpdated(
$model,
$oldValues,
$this->menuTitle . '.update'
);
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param $id
* @return bool
* @throws Exception
*/
public function deleteModel($id): bool
{
try {
DB::beginTransaction();
$model = ParkingSpaceRepair::query()->findOrFail($id);
$this->logService->logDeleted($model, $this->menuTitle . '.delete');
$model->delete();
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param $ids
* @return bool
* @throws Exception
*/
public function batchDeleteModel($ids): bool
{
try {
DB::beginTransaction();
foreach ($ids as $id) {
$model = ParkingSpaceRepair::query()->findOrFail($id);
$this->logService->logDeleted(
$model,
$this->menuTitle . '.delete'
);
$model->delete();
}
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}