test_lgq/niucloud/app/service/admin/site/SiteGroupService.php
2024-01-24 17:36:08 +08:00

180 lines
5.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\site;
use app\model\addon\Addon;
use app\model\site\Site;
use app\model\site\SiteGroup;
use app\model\sys\SysMenu;
use app\service\admin\sys\MenuService;
use app\service\core\addon\CoreAddonService;
use app\service\core\site\CoreSiteService;
use core\base\BaseAdminService;
use core\exception\AdminException;
use core\exception\CommonException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Cache;
/**
* 站点分组服务层
* Class SiteGroupService
* @package app\service\admin\site
*/
class SiteGroupService extends BaseAdminService
{
public static $cache_tag_name = 'site_group_cache';
public static $cache_name = 'site_group_menu_ids';
public function __construct()
{
parent::__construct();
$this->model = new SiteGroup();
}
/**
* 站点分组列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'group_id, group_name, group_desc, app, addon, create_time, update_time';
$search_model = $this->model->withSearch(['keywords'],$where)->field($field)->order('create_time desc');
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取所有分组
* @return array
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function getAll()
{
$field = 'group_id, group_name, group_desc, create_time, update_time, app';
return $this->model->field($field)->select()->toArray();
}
/**
* 分组详情
* @param int $group_id
* @return array
*/
public function getInfo(int $group_id)
{
$field = 'group_id, group_name, group_desc, app, addon, create_time, update_time';
return $this->model->where([['group_id', '=', $group_id]])->field($field)->findOrEmpty()->toArray();
}
/**
* 添加站点分组
* @param array $data
* @return mixed
*/
public function add(array $data)
{
//判断应用是否全部是有效的已安装应用
$this->checkAddon(array_merge($data['app'], $data['addon']));
$res = $this->model->create($data);
return $res->group_id;
}
/**
* 修改站点分组
* @param int $group_id
* @param array $data
* @return true
*/
public function edit(int $group_id, array $data){
//判断应用是否全部是有效的已安装应用
$this->checkAddon(array_merge($data['app'], $data['addon']));
$this->model->update($data, [['group_id', '=', $group_id]]);
//删除缓存
$cache_name = self::$cache_name . $group_id;
Cache::delete($cache_name);
$site_list = (new Site())->field('site_id')->where([ ['group_id', '=', $group_id] ])->select()->toArray();
if (!empty($site_list)) {
foreach ($site_list as $site) {
Cache::tag(CoreSiteService::$cache_tag_name . $site['site_id'])->clear();
}
}
return true;
}
public function checkAddon($group_roles){
$install_addon_list = (new CoreAddonService())->getInstallAddonList();
$install_addon_keys = array_column($install_addon_list, 'key');
if(count(array_intersect($install_addon_keys, $group_roles)) != count($group_roles)) throw new AdminException('SITE_GROUP_APP_NOT_EXIST');
return true;
}
/**
* 删除分组
* @param int $group_id
* @return bool
* @throws DbException
*/
public function del(int $group_id)
{
$count = (new Site())->where([['group_id', '=', $group_id]])->count();
if($count > 0)
{
throw new CommonException('SITE_GROUP_IS_EXIST');
}
$res = $this->model->where([['group_id', '=', $group_id]])->delete();
$cache_name = self::$cache_name . $group_id;
Cache::delete($cache_name);
return $res;
}
/**
* 通过站点分组获取站点包含的权限和应用
* @param $group_id
* @return void
*/
public function getGroupAddon($group_id){
$cache_name = self::$cache_name . $group_id;
return cache_remember(
$cache_name,
function () use ($group_id) {
$group = $this->model->findOrEmpty($group_id);
$addon = [];
if (!$group->isEmpty()) {
$addon = array_merge([ $group['app'] ], $group['addon']);
}
return $addon;
},
[MenuService::$cache_tag_name,self::$cache_tag_name]
);
}
/**
* 创建所有权限的菜单
*/
public function addAllMenuGroup()
{
// $menus = (new SysMenu())->where([['app_type', '=', 'site']])->column("menu_key");
$data = [
'group_name' => "默认套餐",
'group_desc' => '',
'app' => '',
'addon' => []
];
return $this->add($data);
}
}