ManagerController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <?php
  2. /**
  3. * 管理员控制器.
  4. *
  5. * @author jim <jim458734573@gmail.com>
  6. * @date 2020-01-23 00:08:32
  7. */
  8. declare(strict_types=1);
  9. namespace Modules\Manage\Controllers;
  10. use App\Constants\CommonConstant;
  11. use App\Model\ManagerModel;
  12. use App\Repositories\Criterias\CommonWithCriteria;
  13. use App\Repositories\Criterias\ManagerPagesCriteria;
  14. use App\Repositories\Criterias\OrderLimitCriteria;
  15. use App\Repositories\ManagerRepository;
  16. use App\Repositories\PermissionRoleRepository;
  17. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  18. use Modules\Manage\Responses\CommonSuccessPkResponse;
  19. use Modules\Manage\Responses\ManagerDetailResponse;
  20. use Modules\Manage\Responses\ManagerPagesResponse;
  21. class ManagerController extends BaseController
  22. {
  23. /**
  24. * 分页列表.
  25. * @param ManagerRepository $managerRepository
  26. * @param ValidatorFactoryInterface $validatorFactory
  27. * @return mixed|ManagerPagesResponse
  28. */
  29. public function lists(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  30. {
  31. $inputData = $this->getJsonData();
  32. $rules = [
  33. 'page' => 'nullable|integer',
  34. 'page_size' => 'nullable|integer',
  35. 'manager_id' => 'nullable',
  36. 'username' => 'nullable',
  37. 'nick' => 'nullable',
  38. 'is_locked' => 'nullable|integer',
  39. 'role_id' => 'nullable|integer',
  40. 'email' => 'nullable|email',
  41. ];
  42. $validator = $validatorFactory->make($inputData, $rules);
  43. if ($validator->fails()) {
  44. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  45. return json_fail($validator->errors()->first());
  46. }
  47. $orders = [
  48. ['created_at', 'DESC'],
  49. ];
  50. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  51. if ($pageSize > 500) {
  52. $pageSize = CommonConstant::PAGE_SIZE;
  53. }
  54. $page = format_page($inputData['page']);
  55. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  56. $managers = make(ManagerRepository::class)->pushCriteria(new ManagerPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
  57. return new ManagerPagesResponse($managers);
  58. }
  59. /**
  60. * 详情
  61. * @param ManagerRepository $managerRepository
  62. * @param ValidatorFactoryInterface $validatorFactory
  63. * @return mixed|ManagerDetailResponse
  64. */
  65. public function detail(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  66. {
  67. $inputData = $this->getJsonData();
  68. $rules = [
  69. 'manager_id' => 'required|string',
  70. ];
  71. $validator = $validatorFactory->make($inputData, $rules);
  72. if ($validator->fails()) {
  73. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  74. return json_fail($validator->errors()->first());
  75. }
  76. $manager = make(ManagerRepository::class)->pushCriteria(new CommonWithCriteria(['role']))->findBy('manager_id', $inputData['manager_id']);
  77. return new ManagerDetailResponse($manager);
  78. }
  79. /**
  80. * 添加.
  81. * @param ManagerRepository $managerRepository
  82. * @param ValidatorFactoryInterface $validatorFactory
  83. * @param PermissionRoleRepository $permissionRoleRepository
  84. * @return mixed|CommonSuccessPkResponse
  85. */
  86. public function add(
  87. ManagerRepository $managerRepository,
  88. ValidatorFactoryInterface $validatorFactory,
  89. PermissionRoleRepository $permissionRoleRepository
  90. ) {
  91. $inputData = $this->getJsonData();
  92. $rules = [
  93. 'username' => 'required|min:2|max:60',
  94. 'nick' => 'required|max:60',
  95. 'role_id' => 'required|integer',
  96. 'password' => 'required|min:6|max:64',
  97. 'email' => 'nullable|max:120',
  98. ];
  99. $validator = $validatorFactory->make($inputData, $rules);
  100. if ($validator->fails()) {
  101. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  102. return json_fail($validator->errors()->first());
  103. }
  104. $username = strtolower(trim($inputData['username']));
  105. if (make(ManagerRepository::class)->isExistsUsername($username)) {
  106. return json_fail('用户名已经存在');
  107. }
  108. $roleId = intval($inputData['role_id']);
  109. $roleName = '';
  110. $roleObj = make(PermissionRoleRepository::class)->find($roleId);
  111. if (!empty($roleObj)) {
  112. $roleName = $roleObj->name;
  113. }
  114. $setarr = [
  115. 'username' => $username,
  116. 'nick' => trim($inputData['nick']),
  117. 'role_id' => intval($roleId),
  118. 'role_name' => $roleName,
  119. ];
  120. if (isset($inputData['email'])) {
  121. $email = trim($inputData['email']);
  122. } else {
  123. $email = '';
  124. }
  125. $salt = random(6);
  126. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $salt);
  127. $setarr['salt'] = $salt;
  128. $setarr['password'] = $password;
  129. $setarr['email'] = $email;
  130. $result = make(ManagerRepository::class)->create($setarr);
  131. if (!$result) {
  132. return json_fail('创建失败');
  133. } else {
  134. $logSubject = '添加一个管理员,账号:'. $username;
  135. $logSvalue = $result->manager_id;
  136. $logDbData = [
  137. 'after_items' => [
  138. $result->toArray(),
  139. ],
  140. 'before_items' => [],
  141. ];
  142. $this->log($logSubject, $logSvalue, $logDbData);
  143. return new CommonSuccessPkResponse($result->manager_id);
  144. }
  145. }
  146. /**
  147. * 修改管理员.
  148. * @param ManagerRepository $managerRepository
  149. * @param ValidatorFactoryInterface $validatorFactory
  150. * @param PermissionRoleRepository $permissionRoleRepository
  151. * @return mixed|CommonSuccessPkResponse
  152. */
  153. public function modify(
  154. ManagerRepository $managerRepository,
  155. ValidatorFactoryInterface $validatorFactory,
  156. PermissionRoleRepository $permissionRoleRepository
  157. ) {
  158. $inputData = $this->getJsonData();
  159. $rules = [
  160. 'manager_id' => 'required|string',
  161. 'nick' => 'required|max:60',
  162. 'role_id' => 'required|integer',
  163. 'password' => 'nullable|min:6|max:64',
  164. 'email' => 'nullable|max:120',
  165. ];
  166. $validator = $validatorFactory->make($inputData, $rules);
  167. if ($validator->fails()) {
  168. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  169. return json_fail($validator->errors()->first());
  170. }
  171. $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
  172. if (empty($manager)) {
  173. return json_fail(trans('common.err_resource_not_found'));
  174. }
  175. $oldManager = clone $manager;
  176. $manager->nick = $inputData['nick'];
  177. $manager->role_id = intval($inputData['role_id']);
  178. $roleName = '';
  179. $roleObj = make(PermissionRoleRepository::class)->find($manager->role_id);
  180. if (!empty($roleObj)) {
  181. $roleName = $roleObj->name;
  182. }
  183. $manager->role_name = $roleName;
  184. if (isset($inputData['email'])) {
  185. $email = trim($inputData['email']);
  186. $manager->email = $email;
  187. } else {
  188. $manager->email = '';
  189. }
  190. if (!empty($inputData['password'])) {
  191. $salt = $manager->salt;
  192. if (empty($salt)) {
  193. $salt = random(6);
  194. }
  195. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
  196. $manager->salt = $salt;
  197. $manager->password = $password;
  198. }
  199. $result = $manager->save();
  200. if (!$result) {
  201. return json_fail('修改失败');
  202. } else {
  203. $logSubject = '修改一个管理员,账号:'. $manager->username;
  204. $logSvalue = $manager->manager_id;
  205. $logDbData = [
  206. 'after_items' => [
  207. $manager->toArray(),
  208. ],
  209. 'before_items' => [
  210. $oldManager->toArray(),
  211. ],
  212. ];
  213. $this->log($logSubject, $logSvalue, $logDbData);
  214. return new CommonSuccessPkResponse($manager->manager_id);
  215. }
  216. }
  217. /**
  218. * 删除单个.
  219. * @param ManagerRepository $managerRepository
  220. * @param ValidatorFactoryInterface $validatorFactory
  221. * @return mixed|CommonSuccessPkResponse
  222. */
  223. public function delete(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  224. {
  225. $inputData = $this->getJsonData();
  226. $rules = [
  227. 'manager_id' => 'required|string',
  228. ];
  229. $validator = $validatorFactory->make($inputData, $rules);
  230. if ($validator->fails()) {
  231. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  232. return json_fail($validator->errors()->first());
  233. }
  234. $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
  235. if (empty($manager)) {
  236. return json_fail(trans('common.err_resource_not_found'));
  237. }
  238. $oldManager = clone $manager;
  239. $result = $manager->delete();
  240. if (!$result) {
  241. return json_fail('删除失败');
  242. } else {
  243. $logSubject = '删除一个管理员,账号:'. $oldManager->username;
  244. $logSvalue = $oldManager->manager_id;
  245. $logDbData = [
  246. 'after_items' => [
  247. ],
  248. 'before_items' => [
  249. $oldManager->toArray(),
  250. ],
  251. ];
  252. $this->log($logSubject, $logSvalue, $logDbData);
  253. return new CommonSuccessPkResponse($inputData['manager_id']);
  254. }
  255. }
  256. /**
  257. * 批量操作.
  258. * @param ManagerRepository $managerRepository
  259. * @param ValidatorFactoryInterface $validatorFactory
  260. * @return mixed
  261. */
  262. public function batch(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  263. {
  264. $inputData = $this->getJsonData();
  265. $operateName = $inputData['operate_name'] ?? '';
  266. switch ($operateName) {
  267. case 'delete':
  268. $itemPks = $inputData['item_pks'] ?? [];
  269. if (!empty($itemPks)) {
  270. $model = new ManagerModel();
  271. $resultItems = $model->whereIn('manager_id', $itemPks)->delete();
  272. if ($resultItems) {
  273. $strPks = implode(',', $itemPks);
  274. $logSubject = '批量删除多个管理员';
  275. $logSvalue = $strPks;
  276. $logDbData = [
  277. 'after_items' => [
  278. ],
  279. 'before_items' => [],
  280. ];
  281. $this->log($logSubject, $logSvalue, $logDbData);
  282. }
  283. }
  284. $data = [
  285. 'result' => 'success',
  286. 'pks' => $itemPks,
  287. ];
  288. return json_success($data);
  289. break;
  290. default:
  291. break;
  292. }
  293. return json_fail('未知操作');
  294. }
  295. /**
  296. * 我的详情.
  297. * @return mixed|ManagerDetailResponse
  298. */
  299. public function detailMe()
  300. {
  301. $manager = $this->getCurrentManger();
  302. if (empty($manager)) {
  303. return json_fail(trans('common.err_resource_not_found'));
  304. }
  305. return new ManagerDetailResponse($manager);
  306. }
  307. /**
  308. * 修改自己信息.
  309. * @return mixed|CommonSuccessPkResponse
  310. */
  311. public function modifyMe()
  312. {
  313. $inputData = $this->getJsonData();
  314. $rules = [
  315. 'nick' => 'required|max:60',
  316. 'password' => 'nullable|min:6|max:64',
  317. 'email' => 'nullable|max:120',
  318. ];
  319. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  320. if ($validator->fails()) {
  321. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  322. return json_fail($validator->errors()->first());
  323. }
  324. $manager = $this->getCurrentManger();
  325. if (empty($manager)) {
  326. return json_fail(trans('common.err_resource_not_found'));
  327. }
  328. $oldManager = clone $manager;
  329. $manager->nick = $inputData['nick'];
  330. if (isset($inputData['email'])) {
  331. $email = trim($inputData['email']);
  332. $manager->email = $email;
  333. } else {
  334. $manager->email = '';
  335. }
  336. if (!empty($inputData['password'])) {
  337. $salt = $manager->salt;
  338. if (empty($salt)) {
  339. $salt = random(6);
  340. }
  341. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
  342. $manager->salt = $salt;
  343. $manager->password = $password;
  344. }
  345. $result = $manager->save();
  346. if (!$result) {
  347. return json_fail('修改失败');
  348. } else {
  349. $logSubject = '修改自己管理员信息,账号:'. $manager->username;
  350. $logSvalue = $manager->manager_id;
  351. $logDbData = [
  352. 'after_items' => [
  353. $manager->toArray(),
  354. ],
  355. 'before_items' => [
  356. $oldManager->toArray(),
  357. ],
  358. ];
  359. $this->log($logSubject, $logSvalue, $logDbData);
  360. return new CommonSuccessPkResponse($manager->manager_id);
  361. }
  362. }
  363. }