SystemController.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\controller;
  8. use plugin\saiadmin\app\cache\UserAuthCache;
  9. use plugin\saiadmin\app\cache\UserInfoCache;
  10. use plugin\saiadmin\app\logic\system\SystemDictTypeLogic;
  11. use plugin\saiadmin\app\logic\system\SystemLoginLogLogic;
  12. use plugin\saiadmin\app\logic\system\SystemNoticeLogic;
  13. use plugin\saiadmin\app\logic\system\SystemOperLogLogic;
  14. use plugin\saiadmin\basic\BaseController;
  15. use plugin\saiadmin\app\logic\system\SystemMenuLogic;
  16. use plugin\saiadmin\app\logic\system\SystemUserLogic;
  17. use plugin\saiadmin\app\logic\system\SystemAttachmentLogic;
  18. use plugin\saiadmin\utils\ServerMonitor;
  19. use support\Request;
  20. use support\Response;
  21. use plugin\saiadmin\utils\Arr;
  22. use Tinywan\Storage\Storage;
  23. /**
  24. * 系统控制器
  25. */
  26. class SystemController extends BaseController
  27. {
  28. /**
  29. * 用户信息
  30. */
  31. public function userInfo(): Response
  32. {
  33. $logic = new SystemMenuLogic();
  34. $info['user'] = $this->adminInfo;
  35. if ($this->adminInfo['id'] === 1) {
  36. $info['codes'] = ['*'];
  37. $info['roles'] = ['superAdmin'];
  38. $info['routers'] = $logic->getAllMenus();
  39. } else {
  40. $info['codes'] = $logic->getAuthByAdminId($this->adminInfo['id']);
  41. $info['roles'] = Arr::getArrayColumn($this->adminInfo['roleList'],'code');
  42. $info['routers'] = $logic->getRoutersByAdminId($this->adminInfo['id']);
  43. }
  44. return $this->success($info);
  45. }
  46. /**
  47. * 全部字典数据
  48. */
  49. public function dictAll(): Response
  50. {
  51. $logic = new SystemDictTypeLogic();
  52. $query = $logic->where('status', 1)
  53. ->field('id, name, code, remark')
  54. ->with(['dicts' => function ($query) {
  55. $query->where('status', 1)->withoutField(['created_by','updated_by','create_time','update_time'])->order('sort desc');
  56. }]);
  57. $data = $logic->getAll($query);
  58. $dict = $this->packageDict($data, 'code');
  59. return $this->success($dict);
  60. }
  61. /**
  62. * 组合数据
  63. * @param $array
  64. * @param $field
  65. * @return array
  66. */
  67. private function packageDict($array, $field): array
  68. {
  69. $result = [];
  70. foreach ($array as $item) {
  71. if (isset($item[$field])) {
  72. if (isset($result[$item[$field]])) {
  73. $result[$item[$field]] = [($result[$item[$field]])];
  74. $result[$item[$field]][] = $item['dicts'];
  75. } else {
  76. $result[$item[$field]] = $item['dicts'];
  77. }
  78. }
  79. }
  80. return $result;
  81. }
  82. /**
  83. * 获取资源列表
  84. * @param Request $request
  85. * @return Response
  86. */
  87. public function getResourceList(Request $request): Response
  88. {
  89. $logic = new SystemAttachmentLogic();
  90. $where = $request->more([
  91. ['origin_name', ''],
  92. ['storage_mode', ''],
  93. ['mime_type', ''],
  94. ]);
  95. $query = $logic->search($where);
  96. $data = $logic->getList($query);
  97. return $this->success($data);
  98. }
  99. /**
  100. * 获取用户列表
  101. * @param Request $request
  102. * @return Response
  103. */
  104. public function getUserList(Request $request): Response
  105. {
  106. $logic = new SystemUserLogic();
  107. $where = $request->more([
  108. ['username', ''],
  109. ['nickname', ''],
  110. ['phone', ''],
  111. ['email', ''],
  112. ['dept_id', ''],
  113. ['role_id', ''],
  114. ['post_id', ''],
  115. ]);
  116. $query = $logic->search($where);
  117. $query->field('id, username, nickname, phone, email, create_time');
  118. $data = $logic->getList($query);
  119. return $this->success($data);
  120. }
  121. /**
  122. * 根据id获取用户信息
  123. * @param Request $request
  124. * @return Response
  125. */
  126. public function getUserInfoByIds(Request $request): Response
  127. {
  128. $ids = $request->input('ids');
  129. $logic = new SystemUserLogic();
  130. $data = $logic->where('id', 'in', $ids)
  131. ->field('id, username, nickname, phone, email, create_time')
  132. ->select()
  133. ->toArray();
  134. return $this->success($data);
  135. }
  136. /**
  137. * 下载网络图片
  138. */
  139. public function saveNetworkImage(Request $request): Response
  140. {
  141. $url = $request->input('url', '');
  142. $config = Storage::getConfig('local');
  143. $logic = new SystemAttachmentLogic();
  144. $data = $logic->saveNetworkImage($url, $config);
  145. return $this->success($data, '操作成功');
  146. }
  147. /**
  148. * 上传图片
  149. */
  150. public function uploadImage(Request $request): Response
  151. {
  152. $logic = new SystemAttachmentLogic();
  153. $type = $request->input('mode', 'system');
  154. if ($type == 'local') {
  155. return $this->success($logic->uploadBase('image', true));
  156. }
  157. return $this->success($logic->uploadBase('image'));
  158. }
  159. /**
  160. * 上传文件
  161. */
  162. public function uploadFile(Request $request): Response
  163. {
  164. $logic = new SystemAttachmentLogic();
  165. $type = $request->input('mode', 'system');
  166. if ($type == 'local') {
  167. return $this->success($logic->uploadBase('file', true));
  168. }
  169. return $this->success($logic->uploadBase('file'));
  170. }
  171. /**
  172. * 根据id下载资源
  173. * @param Request $request
  174. * @return Response
  175. */
  176. public function downloadById(Request $request): Response
  177. {
  178. $id = $request->input('id');
  179. $logic = new SystemAttachmentLogic();
  180. $model = $logic->find($id);
  181. $object_name = $model->object_name;
  182. return response()->download($model->storage_path, $object_name);
  183. }
  184. /**
  185. * 根据hash下载资源
  186. * @param Request $request
  187. * @return Response
  188. */
  189. public function downloadByHash(Request $request): Response
  190. {
  191. $hash = $request->input('hash');
  192. $logic = new SystemAttachmentLogic();
  193. $model = $logic->where('hash', $hash)->find();
  194. $object_name = $model->object_name;
  195. return response()->download($model->storage_path, $object_name);
  196. }
  197. /**
  198. * 获取登录日志
  199. * @return Response
  200. */
  201. public function getLoginLogList(): Response
  202. {
  203. $logic = new SystemLoginLogLogic();
  204. $logic->init($this->adminInfo);
  205. $query = $logic->search(['username' => $this->adminName]);
  206. $data = $logic->getList($query);
  207. return $this->success($data);
  208. }
  209. /**
  210. * 获取操作日志
  211. * @return Response
  212. */
  213. public function getOperationLogList(): Response
  214. {
  215. $logic = new SystemOperLogLogic();
  216. $logic->init($this->adminInfo);
  217. $query = $logic->search(['username' => $this->adminName])->hidden(['request_data', 'delete_time']);
  218. $data = $logic->getList($query);
  219. return $this->success($data);
  220. }
  221. /**
  222. * 获取服务器信息
  223. * @return Response
  224. */
  225. public function getServerInfo(): Response
  226. {
  227. $service = new ServerMonitor();
  228. return $this->success([
  229. 'cpu' => $service->getCpuInfo(),
  230. 'memory' => $service->getMemInfo(),
  231. 'phpenv' => $service->getPhpAndEnvInfo(),
  232. ]);
  233. }
  234. /**
  235. * 基本统计
  236. * @return Response
  237. */
  238. public function statistics(): Response
  239. {
  240. $userLogic = new SystemUserLogic();
  241. $userCount = $userLogic->count('id');
  242. $uploadLogic = new SystemAttachmentLogic();
  243. $attachCount = $uploadLogic->count('id');
  244. $loginLogic = new SystemLoginLogLogic();
  245. $loginCount = $loginLogic->count('id');
  246. $operLogic = new SystemOperLogLogic();
  247. $operCount = $operLogic->count('id');
  248. return $this->success([
  249. 'user' => $userCount,
  250. 'attach' => $attachCount,
  251. 'login' => $loginCount,
  252. 'operate' => $operCount,
  253. ]);
  254. }
  255. /**
  256. * 登录统计图表
  257. * @return Response
  258. */
  259. public function loginChart(): Response
  260. {
  261. $logic = new SystemLoginLogLogic();
  262. $data = $logic->loginChart();
  263. return $this->success($data);
  264. }
  265. /**
  266. * 系统通知
  267. * @param Request $request
  268. * @return Response
  269. */
  270. public function systemNotice(Request $request) : Response
  271. {
  272. $where = $request->more([
  273. ['title', ''],
  274. ['type', ''],
  275. ['create_time', ''],
  276. ]);
  277. $logic = new SystemNoticeLogic();
  278. $logic->init($this->adminInfo);
  279. $query = $logic->search($where);
  280. $data = $logic->getList($query);
  281. return $this->success($data);
  282. }
  283. /**
  284. * 清除缓存
  285. * @return Response
  286. */
  287. public function clearAllCache() : Response
  288. {
  289. $userInfoCache = new UserInfoCache($this->adminId);
  290. $userInfoCache->clearUserInfo();
  291. $userAuthCache = new UserAuthCache($this->adminId);
  292. $userAuthCache->clearUserCache();
  293. return $this->success([], '清除缓存成功!');
  294. }
  295. }