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

<?php
namespace App\Services;
use App\Models\ParkingChannel;
use Exception;
use Illuminate\Support\Facades\DB;
class ParkingChannelService extends BaseService
{
protected string $menuTitle = 'channel_management';
public static array $typeArr = [
1 => 'entrance',
2 => 'export'
];
public static array $positionArr = [
1 => 'on-site',
2 => 'off-site'
];
/**
* @return array|string[]
*/
public static function getType(): array
{
$typeArr = self::$typeArr;
foreach ($typeArr as $key => $value) {
$typeArr[$key] = __('service.channel_management.' . $value);
}
return $typeArr;
}
/**
* @return array|string[]
*/
public static function getPosition(): array
{
$positionArr = self::$positionArr;
foreach ($positionArr as $key => $value) {
$positionArr[$key] = __('service.channel_management.' . $value);
}
return $positionArr;
}
/**
* @param array $data
* @throws Exception
*/
public function createModel(array $data)
{
try {
DB::beginTransaction();
$existsWhere = [
['name', '=', $data['name']],
['parking_id', '=', $data['parking_id']],
['guard_booth_id', '=', $data['guard_booth_id']]
];
if (ParkingChannel::query()->where($existsWhere)->exists()) {
throw new Exception(__('service.channel_management.name_exists'));
}
$model = ParkingChannel::query()->create([
'name' => $data['name'],
'type' => $data['type'],
'position' => $data['position'],
'parking_id' => $data['parking_id'],
'guard_booth_id' => $data['guard_booth_id'],
'third_party_channel' => $data['third_party_channel'] ?? '',
'created_at' => get_datetime()
]);
$this->logService->logCreated($model, 'channel_management.create');
AdminTranslationService::saveTranslation(
$data['name'],
$data['en_name'] ?? '',
$data['tw_name'] ?? '',
$model->id,
6
);
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();
// 验证
$existsWhere = [
['name', '=', $data['name']],
['parking_id', '=', $data['parking_id']],
['guard_booth_id', '=', $data['guard_booth_id']],
['id', '<>', $id]
];
if (ParkingChannel::query()->where($existsWhere)->exists()) {
throw new Exception(__('service.channel_management.name_exists'));
}
// 更新
$model = ParkingChannel::query()->findOrFail($id);
$oldValues = $model->toArray();
$model->update([
'name' => $data['name'],
'type' => $data['type'],
'position' => $data['position'],
'parking_id' => $data['parking_id'],
'guard_booth_id' => $data['guard_booth_id'],
'third_party_channel' => $data['third_party_channel'] ?? '',
'updated_at' => get_datetime()
]);
$this->logService->logUpdated(
$model,
$oldValues,
'channel_management.update'
);
AdminTranslationService::saveTranslation(
$data['name'],
$data['en_name'] ?? '',
$data['tw_name'] ?? '',
$id,
6
);
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 = ParkingChannel::query()->findOrFail($id);
$this->logService->logDeleted($model, 'channel_management.delete');
$model->delete();
AdminTranslationService::syncDelete($id, 6);
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}