Modules_Manage_Controllers_ManagerController.proxy.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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. use \Hyperf\Di\Aop\ProxyTrait;
  24. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  25. function __construct()
  26. {
  27. if (method_exists(parent::class, '__construct')) {
  28. parent::__construct(...func_get_args());
  29. }
  30. $this->__handlePropertyHandler(__CLASS__);
  31. }
  32. /**
  33. * 分页列表.
  34. * @param ManagerRepository $managerRepository
  35. * @param ValidatorFactoryInterface $validatorFactory
  36. * @return mixed|ManagerPagesResponse
  37. */
  38. public function lists(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  39. {
  40. $inputData = $this->getJsonData();
  41. $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'manager_id' => 'nullable', 'username' => 'nullable', 'nick' => 'nullable', 'is_locked' => 'nullable|integer', 'role_id' => 'nullable|integer', 'email' => 'nullable|email'];
  42. $validator = $validatorFactory->make($inputData, $rules);
  43. if ($validator->fails()) {
  44. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  45. return json_fail($validator->errors()->first());
  46. }
  47. $orders = [['created_at', 'DESC']];
  48. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  49. if ($pageSize > 500) {
  50. $pageSize = CommonConstant::PAGE_SIZE;
  51. }
  52. $page = format_page($inputData['page']);
  53. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  54. $managers = make(ManagerRepository::class)->pushCriteria(new ManagerPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
  55. return new ManagerPagesResponse($managers);
  56. }
  57. /**
  58. * 详情
  59. * @param ManagerRepository $managerRepository
  60. * @param ValidatorFactoryInterface $validatorFactory
  61. * @return mixed|ManagerDetailResponse
  62. */
  63. public function detail(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  64. {
  65. $inputData = $this->getJsonData();
  66. $rules = ['manager_id' => 'required|string'];
  67. $validator = $validatorFactory->make($inputData, $rules);
  68. if ($validator->fails()) {
  69. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  70. return json_fail($validator->errors()->first());
  71. }
  72. $manager = make(ManagerRepository::class)->pushCriteria(new CommonWithCriteria(['role']))->findBy('manager_id', $inputData['manager_id']);
  73. return new ManagerDetailResponse($manager);
  74. }
  75. /**
  76. * 添加.
  77. * @param ManagerRepository $managerRepository
  78. * @param ValidatorFactoryInterface $validatorFactory
  79. * @param PermissionRoleRepository $permissionRoleRepository
  80. * @return mixed|CommonSuccessPkResponse
  81. */
  82. public function add(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository)
  83. {
  84. $inputData = $this->getJsonData();
  85. $rules = ['username' => 'required|min:2|max:60', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'required|min:6|max:64', 'email' => 'nullable|max:120'];
  86. $validator = $validatorFactory->make($inputData, $rules);
  87. if ($validator->fails()) {
  88. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  89. return json_fail($validator->errors()->first());
  90. }
  91. $username = strtolower(trim($inputData['username']));
  92. if (make(ManagerRepository::class)->isExistsUsername($username)) {
  93. return json_fail('用户名已经存在');
  94. }
  95. $roleId = intval($inputData['role_id']);
  96. $roleName = '';
  97. $roleObj = make(PermissionRoleRepository::class)->find($roleId);
  98. if (!empty($roleObj)) {
  99. $roleName = $roleObj->name;
  100. }
  101. $setarr = ['username' => $username, 'nick' => trim($inputData['nick']), 'role_id' => intval($roleId), 'role_name' => $roleName];
  102. if (isset($inputData['email'])) {
  103. $email = trim($inputData['email']);
  104. } else {
  105. $email = '';
  106. }
  107. $salt = random(6);
  108. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $salt);
  109. $setarr['salt'] = $salt;
  110. $setarr['password'] = $password;
  111. $setarr['email'] = $email;
  112. $result = make(ManagerRepository::class)->create($setarr);
  113. if (!$result) {
  114. return json_fail('创建失败');
  115. } else {
  116. $logSubject = '添加一个管理员,账号:' . $username;
  117. $logSvalue = $result->manager_id;
  118. $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
  119. $this->log($logSubject, $logSvalue, $logDbData);
  120. return new CommonSuccessPkResponse($result->manager_id);
  121. }
  122. }
  123. /**
  124. * 修改管理员.
  125. * @param ManagerRepository $managerRepository
  126. * @param ValidatorFactoryInterface $validatorFactory
  127. * @param PermissionRoleRepository $permissionRoleRepository
  128. * @return mixed|CommonSuccessPkResponse
  129. */
  130. public function modify(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository)
  131. {
  132. $inputData = $this->getJsonData();
  133. $rules = ['manager_id' => 'required|string', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120'];
  134. $validator = $validatorFactory->make($inputData, $rules);
  135. if ($validator->fails()) {
  136. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  137. return json_fail($validator->errors()->first());
  138. }
  139. $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
  140. if (empty($manager)) {
  141. return json_fail(trans('common.err_resource_not_found'));
  142. }
  143. $oldManager = clone $manager;
  144. $manager->nick = $inputData['nick'];
  145. $manager->role_id = intval($inputData['role_id']);
  146. $roleName = '';
  147. $roleObj = make(PermissionRoleRepository::class)->find($manager->role_id);
  148. if (!empty($roleObj)) {
  149. $roleName = $roleObj->name;
  150. }
  151. $manager->role_name = $roleName;
  152. if (isset($inputData['email'])) {
  153. $email = trim($inputData['email']);
  154. $manager->email = $email;
  155. } else {
  156. $manager->email = '';
  157. }
  158. if (!empty($inputData['password'])) {
  159. $salt = $manager->salt;
  160. if (empty($salt)) {
  161. $salt = random(6);
  162. }
  163. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
  164. $manager->salt = $salt;
  165. $manager->password = $password;
  166. }
  167. $result = $manager->save();
  168. if (!$result) {
  169. return json_fail('修改失败');
  170. } else {
  171. $logSubject = '修改一个管理员,账号:' . $manager->username;
  172. $logSvalue = $manager->manager_id;
  173. $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]];
  174. $this->log($logSubject, $logSvalue, $logDbData);
  175. return new CommonSuccessPkResponse($manager->manager_id);
  176. }
  177. }
  178. /**
  179. * 删除单个.
  180. * @param ManagerRepository $managerRepository
  181. * @param ValidatorFactoryInterface $validatorFactory
  182. * @return mixed|CommonSuccessPkResponse
  183. */
  184. public function delete(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  185. {
  186. $inputData = $this->getJsonData();
  187. $rules = ['manager_id' => 'required|string'];
  188. $validator = $validatorFactory->make($inputData, $rules);
  189. if ($validator->fails()) {
  190. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  191. return json_fail($validator->errors()->first());
  192. }
  193. $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']);
  194. if (empty($manager)) {
  195. return json_fail(trans('common.err_resource_not_found'));
  196. }
  197. $oldManager = clone $manager;
  198. $result = $manager->delete();
  199. if (!$result) {
  200. return json_fail('删除失败');
  201. } else {
  202. $logSubject = '删除一个管理员,账号:' . $oldManager->username;
  203. $logSvalue = $oldManager->manager_id;
  204. $logDbData = ['after_items' => [], 'before_items' => [$oldManager->toArray()]];
  205. $this->log($logSubject, $logSvalue, $logDbData);
  206. return new CommonSuccessPkResponse($inputData['manager_id']);
  207. }
  208. }
  209. /**
  210. * 批量操作.
  211. * @param ManagerRepository $managerRepository
  212. * @param ValidatorFactoryInterface $validatorFactory
  213. * @return mixed
  214. */
  215. public function batch(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory)
  216. {
  217. $inputData = $this->getJsonData();
  218. $operateName = $inputData['operate_name'] ?? '';
  219. switch ($operateName) {
  220. case 'delete':
  221. $itemPks = $inputData['item_pks'] ?? [];
  222. if (!empty($itemPks)) {
  223. $model = new ManagerModel();
  224. $resultItems = $model->whereIn('manager_id', $itemPks)->delete();
  225. if ($resultItems) {
  226. $strPks = implode(',', $itemPks);
  227. $logSubject = '批量删除多个管理员';
  228. $logSvalue = $strPks;
  229. $logDbData = ['after_items' => [], 'before_items' => []];
  230. $this->log($logSubject, $logSvalue, $logDbData);
  231. }
  232. }
  233. $data = ['result' => 'success', 'pks' => $itemPks];
  234. return json_success($data);
  235. break;
  236. default:
  237. break;
  238. }
  239. return json_fail('未知操作');
  240. }
  241. /**
  242. * 我的详情.
  243. * @return mixed|ManagerDetailResponse
  244. */
  245. public function detailMe()
  246. {
  247. $manager = $this->getCurrentManger();
  248. if (empty($manager)) {
  249. return json_fail(trans('common.err_resource_not_found'));
  250. }
  251. return new ManagerDetailResponse($manager);
  252. }
  253. /**
  254. * 修改自己信息.
  255. * @return mixed|CommonSuccessPkResponse
  256. */
  257. public function modifyMe()
  258. {
  259. $inputData = $this->getJsonData();
  260. $rules = ['nick' => 'required|max:60', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120'];
  261. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  262. if ($validator->fails()) {
  263. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  264. return json_fail($validator->errors()->first());
  265. }
  266. $manager = $this->getCurrentManger();
  267. if (empty($manager)) {
  268. return json_fail(trans('common.err_resource_not_found'));
  269. }
  270. $oldManager = clone $manager;
  271. $manager->nick = $inputData['nick'];
  272. if (isset($inputData['email'])) {
  273. $email = trim($inputData['email']);
  274. $manager->email = $email;
  275. } else {
  276. $manager->email = '';
  277. }
  278. if (!empty($inputData['password'])) {
  279. $salt = $manager->salt;
  280. if (empty($salt)) {
  281. $salt = random(6);
  282. }
  283. $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt);
  284. $manager->salt = $salt;
  285. $manager->password = $password;
  286. }
  287. $result = $manager->save();
  288. if (!$result) {
  289. return json_fail('修改失败');
  290. } else {
  291. $logSubject = '修改自己管理员信息,账号:' . $manager->username;
  292. $logSvalue = $manager->manager_id;
  293. $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]];
  294. $this->log($logSubject, $logSvalue, $logDbData);
  295. return new CommonSuccessPkResponse($manager->manager_id);
  296. }
  297. }
  298. }