refactor: 重构权限服务类

This commit is contained in:
Ying
2023-07-03 10:08:34 +08:00
parent 8becf0ef36
commit 4e377def8d
42 changed files with 1679 additions and 1524 deletions

View File

@@ -0,0 +1,176 @@
<?php
declare (strict_types=1);
// +----------------------------------------------------------------------
// | swiftAdmin 极速开发框架 [基于WebMan开发]
// +----------------------------------------------------------------------
// | Copyright (c) 2020-2030 http://www.swiftadmin.net
// +----------------------------------------------------------------------
// | swiftAdmin.net High Speed Development Framework
// +----------------------------------------------------------------------
// | Author: meystack <coolsec@foxmail.com> Apache 2.0 License
// +----------------------------------------------------------------------
namespace app\admin\service;
use app\admin\enums\AdminNoticeEnum;
use app\common\exception\OperateException;
use app\common\model\system\AdminNotice;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use Webman\Event\Event;
class AdminNoticeService
{
/**
* 获取消息列表
* @param int $adminId
* @return array
* @throws DbException
*/
public static function dataList(int $adminId): array
{
$type = input('type', AdminNoticeEnum::TODO);
$page = input('page', 1);
$limit = input('limit', 10);
$title = input('title', '');
if ($type == 'send') {
$where[] = ['type', '=', AdminNoticeEnum::MESSAGE];
$where[] = ['send_id', '=', $adminId];
} else {
$where[] = ['type', '=', $type];
$where[] = ['admin_id', '=', $adminId];
}
$status = input('status', 'all');
if ($status !== 'all') {
$where[] = ['status', '=', $status];
}
if (!empty($title)) {
$where[] = ['title', 'like', '%' . $title . '%'];
}
$count = AdminNotice::where($where)->count();
$list = AdminNotice::with(['admin'])->where($where)
->order('id', 'desc')
->limit((int)$limit)
->page((int)$page)
->select()->toArray();
return [$count, $list];
}
/**
* 获取管理员通知列表
* @param int $adminId
* @return array
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public static function bells(int $adminId): array
{
$collection = AdminNoticeEnum::COLLECTION;
foreach ($collection as $item) {
$where = [
['type', '=', $item],
['admin_id', '=', $adminId],
];
$count[$item] = AdminNotice::where($where)->where('status', 0)->count();
$list[$item] = AdminNotice::with(['admin'])->withoutField('content')->where($where)->limit(3)->order('id desc')->select()->toArray();
}
return [$count ?? [], $list ?? []];
}
/**
* 获取管理员通知列表
* @param int $adminId
* @return array
* @throws DbException
*/
public static function getBells(int $adminId): array
{
$type = input('type', AdminNoticeEnum::NOTICE);
$page = input('page', 1);
$limit = input('limit', 3);
$where[] = ['type', '=', $type];
$where[] = ['admin_id', '=', $adminId];
return AdminNotice::with(['admin'])->where($where)
->order('id', 'desc')
->paginate(['list_rows' => $limit, 'page' => $page])
->toArray();
}
/**
* 添加消息
* @param array $data
* @param string $type
* @return bool
* @throws OperateException
*/
public static function add(array $data = [], string $type = ''): bool
{
if (!$data) {
return false;
}
try {
$model = new AdminNotice();
$type == 'array' ? $model->saveAll($data) : $model->create($data);
} catch (\Exception $e) {
throw new OperateException($e->getMessage());
}
// 钩子消息推送
Event::emit('sendAdminNotice', $data);
return true;
}
/**
* 获取管理员通知详情
* @param $id
* @param $adminId
* @return array
* @throws OperateException
*/
public static function getDetail($id, $adminId): array
{
$detail = AdminNotice::with(['admin'])->where(['id' => $id])->findOrEmpty()->toArray();
if (empty($detail)) {
throw new OperateException('数据不存在');
}
if (!in_array($adminId,[$detail['admin_id'],$detail['send_id']])){
throw new OperateException('非法访问');
}
if ($detail['type'] !== AdminNoticeEnum::TODO && $detail['admin_id'] == $adminId) {
AdminNotice::update(['status' => 1], ['id' => $id]);
}
return $detail;
}
/**
* 删除消息
* @param int $id
* @param int $adminId
* @return bool
* @throws OperateException
*/
public static function delete(int $id = 0, int $adminId = 0): bool
{
$detail = AdminNotice::where('id', $id)->findOrEmpty()->toArray();
if (empty($detail)) {
throw new OperateException('数据不存在');
}
$receive = $detail['send_id'] == $adminId && $detail['status'] == 1;
if ($detail['admin_id'] != $adminId || $receive) {
throw new OperateException('无权删除');
}
AdminNotice::destroy($id);
return true;
}
}