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

193 lines
5.6 KiB

<?php
namespace App\Services;
use App\Models\AdminRoleUsers;
use App\Models\AdminUsers;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
final class AdminUsersService
{
/**
* @var OperationLogService
*/
private OperationLogService $logService;
/**
* 构造函数
* @param OperationLogService $logService
*/
public function __construct(OperationLogService $logService)
{
$this->logService = $logService;
}
/**
* @param array $data
* @return Builder|Model
* @throws Exception
*/
public function createModel(array $data): Builder|Model
{
try {
DB::beginTransaction();
if (AdminUsers::query()->where('username', $data['username'])
->exists()
) {
throw new Exception(__('service.admin_user.name_exists'));
}
$model = AdminUsers::query()->create([
'username' => $data['username'],
'password' => Hash::make($data['password']),
'name' => $data['name'],
'avatar' => '',
'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => 1,
'created_at' => get_datetime()
]);
$user_id = $model->id;
$this->logService->logCreated($model, '创建用户');
// 角色id
$AdminRoleUsers = AdminRoleUsers::query()->create([
'role_id' => $data['role_id'],
'user_id' => $user_id,
'created_at' => get_datetime()
]);
$this->logService->logCreated($AdminRoleUsers, '创建用户关联角色');
// 停车场id
$packing_id = $data['packing_id'];
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param array $data
* @param int $id
* @return AdminUsers
* @throws Exception
*/
public function updateModel(array $data, int $id): AdminUsers
{
try {
DB::beginTransaction();
$existsWhere = [
['username', '=', $data['username']],
['id', '<>', $id]
];
if (AdminUsers::query()->where($existsWhere)->exists()) {
throw new Exception(__('service.admin_user.name_exists'));
}
$model = AdminUsers::findOrFail($id);
$oldValue = $model->toArray();
$model->update([
'username' => $data['username'],
'password' => Hash::make($data['password']),
'name' => $data['name'],
'avatar' => '',
'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => $data['status'],
'created_at' => get_datetime()
]);
// 角色id
$role_id = $data['role_id'];
$oldAdminRoleUsers = AdminRoleUsers::query()->where('user_id', $id)
->get()->toArray();
$updateData = [
'role_id' => $role_id,
'updated_at' => get_datetime()
];
AdminRoleUsers::query()->where('user_id', $id)->update($updateData);
$newAdminRoleUsers = $oldAdminRoleUsers;
$newAdminRoleUsers['role_id'] = $role_id;
$newAdminRoleUsers['updated_at'] = $updateData['updated_at'];
$this->logService->logUpdatedData(
new AdminRoleUsers(),
$oldAdminRoleUsers,
'更新用户关联角色',
$newAdminRoleUsers
);
//
$packing_id = $data['packing_id'];
$this->logService->logUpdated($model, $oldValue, '更新用户');
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 = AdminUsers::findOrFail($id);
$this->logService->logDeleted($model, '删除用户');
$model->delete();
// 删除用户关联角色
$oldAdminRoleUser = AdminRoleUsers::query()->where(
['user_id' => $id]
)->select()->get()->toArray();
AdminRoleUsers::query()->where(['user_id' => $id])->delete();
$this->logService->logDeletedData(
new AdminRoleUsers(),
'删除用户关联角色',
$oldAdminRoleUser
);
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
/**
* @param $item
* @param int $is_edit
* @return mixed
*/
public function optionItem($item, int $is_edit = 0): mixed
{
$item['status_str'] = $item['status'] ? __('admin.normal')
: __('admin.freeze');
$item['role_name'] = $item->roles->value('name');
$item['packing_name'] = '';
if ($is_edit) {
$item['role_id'] = $item['roles'][0]['id'];
$item['packing_id'] = '';
}
unset($item['roles']);
return $item;
}
}