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

<?php
namespace App\Services;
use App\Models\AdminUsers;
use App\Models\Parking;
use App\Models\ParkingChannel;
use App\Models\ParkingLicensePlate;
use App\Models\ParkingSpaceType;
use App\Models\ParkingWhitelist;
use Exception;
use Illuminate\Support\Facades\DB;
class ParkingWhitelistService extends BaseService
{
protected string $menuTitle = 'whitelist';
public static function getItemData($item)
{
$service = new self(new OperationLogService());
return $service->getItem($item);
}
public function getItem($item)
{
$item['license_plate'] = ParkingLicensePlate::getNumber(
$item['license_plate_id']
);
$item['parking'] = Parking::getName($item['parking_id']);
$channel_list = ParkingChannel::getChannelData(
$item['channel_ids']
);
$item['channel_str'] = '';
if ($channel_list) {
$channel_arr = array_column((array)$channel_list, 'name');
$item['channel_str'] = implode(',', $channel_arr);
}
$item['member_type_str']
= ParkingSpaceType::getName($item['member_type']);
$item['admin_username'] = AdminUsers::getUsername(
$item['admin_user_id']
);
unset(
$item['license_plate_id'],
$item['parking_id'],
$item['channel_ids'],
$item['member_type'],
$item['admin_user_id'],
$item['status']
);
return $item;
}
/**
* @param array $data
* @throws Exception
*/
public function createModel(array $data)
{
try {
DB::beginTransaction();
$license_plate = $data['license_plate'];
$LicensePlate = new ParkingLicensePlateService($this->logService);
$license_plate_id = $LicensePlate->saveNumber($license_plate);
$existsWhere = [
['license_plate_id', '=', $license_plate_id]
];
if (ParkingWhitelist::query()->where($existsWhere)->exists()) {
throw new Exception(
__service($this->menuTitle . '.number_exists')
);
}
$channel_ids = implode(',', $data['channel_ids']);
$model = ParkingWhitelist::query()->create([
'license_plate_id' => $license_plate_id,
'parking_id' => $data['parking_id'],
'member_type' => $data['member_type'] ?? 0,
'admin_user_id' => $data['admin_user_id'],
'channel_ids' => $channel_ids ?? '',
'reason' => $data['reason'],
'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();
$license_plate = $data['license_plate'];
$LicensePlate = new ParkingLicensePlateService($this->logService);
$license_plate_id = $LicensePlate->saveNumber($license_plate);
// 验证
$existsWhere = [
['license_plate_id', '=', $license_plate_id],
['id', '<>', $id]
];
if (ParkingWhitelist::query()->where($existsWhere)->exists()) {
throw new Exception(
__service($this->menuTitle . '.number_exists')
);
}
// 更新
$model = ParkingWhitelist::query()->findOrFail($id);
$oldValues = $model->toArray();
$channel_ids = implode(',', $data['channel_ids']);
$model->update([
'license_plate_id' => $license_plate_id,
'parking_id' => $data['parking_id'],
'member_type' => $data['member_type'] ?? 0,
'admin_user_id' => $data['admin_user_id'],
'channel_ids' => $channel_ids ?? '',
'reason' => $data['reason'],
'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 = ParkingWhitelist::query()->findOrFail($id);
$this->logService->logDeleted($model, $this->menuTitle . '.delete');
$model->delete();
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}