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.
188 lines
4.8 KiB
188 lines
4.8 KiB
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\ParkingLicensePlate;
|
|
use App\Models\ParkingSpaceType;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ParkingLicensePlateService
|
|
{
|
|
|
|
/**
|
|
* @var OperationLogService
|
|
*/
|
|
private OperationLogService $logService;
|
|
|
|
/**
|
|
* 构造函数
|
|
* @param OperationLogService $logService
|
|
*/
|
|
public function __construct(OperationLogService $logService)
|
|
{
|
|
$this->logService = $logService;
|
|
$this->logService->menuTitle = 'cat_attr';
|
|
}
|
|
|
|
/**
|
|
* 创建车牌号码
|
|
* @param array $data
|
|
* @throws Exception
|
|
*/
|
|
public function createModel(array $data)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
$model = $this->createData($data);
|
|
DB::commit();
|
|
return $model;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $data
|
|
* @throws Exception
|
|
*/
|
|
public function createData($data)
|
|
{
|
|
if (ParkingLicensePlate::query()->where('number', $data['number'])
|
|
->exists()
|
|
) {
|
|
throw new Exception(__('service.license_plate.number_exists'));
|
|
}
|
|
return $this->createNumber($data['number'], $data['space_type_id']);
|
|
}
|
|
|
|
public function createNumber($number, $space_type_id = 0)
|
|
{
|
|
$model = ParkingLicensePlate::query()->create([
|
|
'number' => $number,
|
|
'space_type_id' => $space_type_id,
|
|
'created_at' => get_datetime()
|
|
]);
|
|
$this->logService->logCreated($model, 'license_plate.create');
|
|
return $model;
|
|
}
|
|
|
|
public function saveNumber($number)
|
|
{
|
|
$id = ParkingLicensePlate::getValueId($number);
|
|
if (!$id) {
|
|
$model = $this->createNumber($number);
|
|
$id = $model->id;
|
|
}
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* @param array $data
|
|
* @param int $id
|
|
* @throws Exception
|
|
*/
|
|
public function updateModel(array $data, int $id)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
// 验证
|
|
$existsWhere = [
|
|
['number', '=', $data['number']],
|
|
['id', '<>', $id]
|
|
];
|
|
if (ParkingLicensePlate::query()->where($existsWhere)->exists()) {
|
|
throw new Exception(__('service.license_plate.number_exists'));
|
|
}
|
|
|
|
// 更新
|
|
$model = ParkingLicensePlate::query()->findOrFail($id);
|
|
$oldValues = $model->toArray();
|
|
|
|
$model->update([
|
|
'number' => $data['number'],
|
|
'updated_at' => get_datetime()
|
|
]);
|
|
|
|
$this->logService->logUpdated($model, $oldValues, 'license_plate.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 = ParkingLicensePlate::query()->findOrFail($id);
|
|
|
|
$this->logService->logDeleted($model, 'license_plate.delete');
|
|
|
|
$model->delete();
|
|
|
|
DB::commit();
|
|
return true;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function clearModel($space_type_id): bool
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
$oldLicensePlate = ParkingLicensePlate::query()->where(
|
|
'space_type_id',
|
|
$space_type_id
|
|
)
|
|
->select()->get()->toArray();
|
|
if (empty($oldLicensePlate)) {
|
|
throw new Exception(__('service.license_plate.not_clear'));
|
|
}
|
|
$this->logService->logDeletedData(
|
|
new ParkingLicensePlate(),
|
|
'license_plate.delete',
|
|
$oldLicensePlate
|
|
);
|
|
|
|
ParkingLicensePlate::query()->where('space_type_id', $space_type_id)
|
|
->delete();
|
|
|
|
DB::commit();
|
|
return true;
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function createLicenseId($number, $space_type_id = 0)
|
|
{
|
|
$license_id = ParkingLicensePlate::getValueId($number);
|
|
if (!$license_id) {
|
|
if (!$space_type_id) {
|
|
$space_type = ParkingSpaceType::getDefaultData();
|
|
$space_type_id = $space_type['id'] ?? 0;
|
|
}
|
|
$licenseModel = $this->createData([
|
|
'number' => $number,
|
|
'space_type_id' => $space_type_id
|
|
]);
|
|
$license_id = $licenseModel->id;
|
|
}
|
|
return $license_id;
|
|
}
|
|
}
|
|
|