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

133 lines
3.2 KiB

<?php
namespace App\Services;
use App\Models\ParkingSpaceAttributes;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ParkingSpaceAttributesService
{
/**
* @var OperationLogService
*/
private OperationLogService $logService;
/**
* 构造函数
* @param OperationLogService $logService
*/
public function __construct(OperationLogService $logService)
{
$this->logService = $logService;
}
/**
* 创建车位属性
* @param array $data
* @return Model|Builder
* @throws Exception
*/
public function createModel(array $data): Model|Builder
{
try {
DB::beginTransaction();
if (ParkingSpaceAttributes::query()->where(
'attributes',
$data['attributes']
)->exists()
) {
throw new Exception(
__('service.space_attributes.attributes_exists')
);
}
$model = ParkingSpaceAttributes::query()->create([
'attributes' => $data['attributes'],
'import_diagram' => $data['import_diagram'],
'created_at' => get_datetime()
]);
$this->logService->logCreated($model, '创建车位属性');
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param array $data
* @param int $id
* @return Model|Builder
* @throws Exception
*/
public function updateModel(array $data, int $id): Model|Builder
{
try {
DB::beginTransaction();
// 验证
$existsWhere = [
['attributes', '=', $data['attributes']],
['id', '<>', $id]
];
if (
ParkingSpaceAttributes::query()->where($existsWhere)->exists()
) {
throw new Exception(
__('service.space_attributes.attributes_exists')
);
}
// 更新
$model = ParkingSpaceAttributes::query()->findOrFail($id);
$oldValues = $model->toArray();
$model->update([
'attributes' => $data['attributes'],
'import_diagram' => $data['import_diagram'],
'updated_at' => get_datetime()
]);
$this->logService->logUpdated($model, $oldValues, '更新车位属性');
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 = ParkingSpaceAttributes::query()->findOrFail($id);
$this->logService->logDeleted($model, '删除车位属性');
$model->delete();
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}