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

157 lines
4.6 KiB

<?php
namespace App\Services;
use App\Models\ParkingPatternSpace;
use App\Models\ParkingSpace;
use App\Models\ParkingSpaceType;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;
class ParkingPatternSpaceService extends BaseService
{
public function __construct(OperationLogService $logService)
{
parent::__construct($logService);
$this->logService->menuTitle = 'model_manage';
}
/**
* @param $data
* @return Builder|Model
* @throws Exception
*/
public function createModel($data): Builder|Model
{
try {
DB::beginTransaction();
$where = [
'space_id' => $data['parking_space_id'],
'pattern_id' => $data['pattern_id']
];
if (ParkingPatternSpace::query()->where($where)->exists()) {
throw new Exception(__('service.parking_pattern.space_exists'));
}
if (!ParkingSpace::getNumber($data['parking_space_id'])) {
throw new Exception(__('service.parking_pattern.space_not_exists'));
}
if (!ParkingSpaceType::getName($data['parking_space_type'])) {
throw new Exception(__('service.parking_pattern.type_not_exists'));
}
$model = $this->createData($data);
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param $data
* @return Builder|Model
*/
public function createData($data): Builder|Model
{
$save = [
'pattern_id' => $data['pattern_id'],
'space_id' => $data['parking_space_id'],
'space_type_id' => $data['parking_space_type'],
'created_at' => get_datetime(),
'updated_at' => get_datetime()
];
$ParkingPatternSpace = ParkingPatternSpace::query()->create($save);
$this->logService->logCreated(
$ParkingPatternSpace,
'parking_pattern_space.create'
);
// 同步更新车位类型
(new ParkingSpaceService($this->logService))->syncUpdateSpaceData(
$save['space_id'],
$save['space_type_id'],
$data['pattern_id']
);
return $ParkingPatternSpace;
}
/**
* @param $data
* @param $id
* @return Builder|Builder[]|\Illuminate\Database\Eloquent\Collection|Model|null
* @throws Exception
*/
public function updateModel($data, $id)
{
try {
DB::beginTransaction();
$model = $this->updateData($id, $data['parking_space_type']);
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
// 更新车位类型
public function updateData($id, $parking_space_type)
{
$update = [
'space_type_id' => $parking_space_type,
'updated_at' => get_datetime()
];
$model = ParkingPatternSpace::query()->findOrFail($id);
$oldValues = $model->toArray();
$model->update($update);
$this->logService->logUpdated(
$model,
$oldValues,
'parking_pattern_space.update'
);
// 同步更新车位类型
(new ParkingSpaceService($this->logService))->syncUpdateSpaceData(
$oldValues['space_id'],
$update['space_type_id'],
$oldValues['pattern_id']
);
return $model;
}
public function deleteModel(int $id): bool
{
try {
DB::beginTransaction();
$model = ParkingPatternSpace::query()->findOrFail($id);
$this->logService->logDeleted($model, 'parking_pattern_space.delete');
$model->delete();
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
// 切换模式后 将模式的车位 类型,属性,
public static function getPatternSpaceTypeData()
{
$pattern_id = EventCalendarService::getTargetModeId();
if ($pattern_id) {
$type_ids = ParkingPatternSpace::query()->where(
'pattern_id',
$pattern_id
)->groupBy('space_type_id')->pluck('space_type_id');
if ($type_ids) {
return ParkingSpaceType::query()->whereIn('id', $type_ids)
->select(['id as space_type_id', 'name as space_type'])->get()->toArray();
}
}
return [];
}
}