* @date 2020-01-31 10:44:33 */ declare (strict_types=1); namespace Modules\Manage\Controllers; use App\Constants\CommonConstant; use App\Repositories\ConfigRepoistory; use App\Repositories\Criterias\ManagerLogPagesCriteria; use App\Repositories\Criterias\OrderLimitCriteria; use App\Repositories\ManagerLogRepository; use Hyperf\Validation\Contract\ValidatorFactoryInterface; use Modules\Manage\Responses\CommonDetailResponse; use Modules\Manage\Responses\CommonPagesResponse; use Modules\Manage\Responses\CommonSuccessPkResponse; use Modules\Manage\Responses\SystemLogPagesResponse; class SystemController extends BaseController { use \Hyperf\Di\Aop\ProxyTrait; use \Hyperf\Di\Aop\PropertyHandlerTrait; function __construct() { if (method_exists(parent::class, '__construct')) { parent::__construct(...func_get_args()); } $this->__handlePropertyHandler(__CLASS__); } private $configSgroup = 'sys'; /** * 读取配置信息. * @return mixed */ public function configInfo() { $inputData = $this->getJsonData(); $sgroup = !empty($inputData['sgroup']) ? $inputData['sgroup'] : $this->configSgroup; /*$cacheKey = 'config_'. $this->configSgroup; $cache = make(CacheInterface::class); $data = $cache->rememberForever($cacheKey, function () { return make(ConfigRepoistory::class)->pickByKeys([], $this->configSgroup); });*/ $data = make(ConfigRepoistory::class)->pickByKeys('', $sgroup); // $data = make(ConfigRepoistory::class)->get('asdasd', $this->configSgroup, ''); return new CommonDetailResponse($data); } /** * 配置保存. * @return mixed */ public function configSave() { $inputData = $this->getJsonData(); $sgroup = data_get($inputData, 'sgroup', ''); $items = data_get($inputData, 'input', []); if (!empty($sgroup) && !empty($items)) { $repo = make(ConfigRepoistory::class); $repo->saveByKeys($items, $sgroup); // 保存后同时更新缓存. $repo->updateConfigCache($sgroup); } // 操作日志. $logSubject = '保存系统配置'; $logSvalue = ''; $logDbData = ['after_items' => [], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse(''); } /** * 获取所有分组. * @return mixed */ public function configType() { $arrData = []; $items = make(ConfigRepoistory::class)->getAllGroup(); if ($items->count()) { foreach ($items as $k => $v) { $arrData[$v->sgroup] = $v->sgroup; } } return json_success($arrData); } /** * 配置缓存更新. * @return mixed */ public function configUpdateCache() { make(ConfigRepoistory::class)->updateConfigCache($this->configSgroup); // make(ConfigRepoistory::class)->clearAllCache(); // 操作日志. $logSubject = '更新系统配置缓存'; $logSvalue = ''; $logDbData = ['after_items' => [], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse(''); } /** * 清除所有缓存. * @return CommonSuccessPkResponse */ public function clearAllCache() { make(ConfigRepoistory::class)->clearAllCache(); // 操作日志. $logSubject = '清楚所有缓存'; $logSvalue = ''; $logDbData = ['after_items' => [], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse(''); } /** * 管理日志列表. * @return mixed|CommonPagesResponse */ public function logLists() { $inputData = $this->getJsonData(); $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'username' => 'nullable|max:60', 'nick' => 'nullable|max:60', 'subject' => 'nullable|max:700', 'module' => 'nullable|max:30', 'ip' => 'nullable|max:40']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page']); $orders = [['created_at', 'DESC']]; // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate); $lists = make(ManagerLogRepository::class)->pushCriteria(new ManagerLogPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page); return new SystemLogPagesResponse($lists); } }