* @date 2020-01-23 00:08:32 */ declare (strict_types=1); namespace Modules\Manage\Controllers; use App\Constants\CommonConstant; use App\Model\ManagerModel; use App\Repositories\Criterias\CommonWithCriteria; use App\Repositories\Criterias\ManagerPagesCriteria; use App\Repositories\Criterias\OrderLimitCriteria; use App\Repositories\ManagerRepository; use App\Repositories\PermissionRoleRepository; use Hyperf\Validation\Contract\ValidatorFactoryInterface; use Modules\Manage\Responses\CommonSuccessPkResponse; use Modules\Manage\Responses\ManagerDetailResponse; use Modules\Manage\Responses\ManagerPagesResponse; class ManagerController 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__); } /** * 分页列表. * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @return mixed|ManagerPagesResponse */ public function lists(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $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']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [['created_at', 'DESC']]; $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page']); // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate); $managers = make(ManagerRepository::class)->pushCriteria(new ManagerPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page); return new ManagerPagesResponse($managers); } /** * 详情 * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @return mixed|ManagerDetailResponse */ public function detail(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['manager_id' => 'required|string']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = make(ManagerRepository::class)->pushCriteria(new CommonWithCriteria(['role']))->findBy('manager_id', $inputData['manager_id']); return new ManagerDetailResponse($manager); } /** * 添加. * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @param PermissionRoleRepository $permissionRoleRepository * @return mixed|CommonSuccessPkResponse */ public function add(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository) { $inputData = $this->getJsonData(); $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']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $username = strtolower(trim($inputData['username'])); if (make(ManagerRepository::class)->isExistsUsername($username)) { return json_fail('用户名已经存在'); } $roleId = intval($inputData['role_id']); $roleName = ''; $roleObj = make(PermissionRoleRepository::class)->find($roleId); if (!empty($roleObj)) { $roleName = $roleObj->name; } $setarr = ['username' => $username, 'nick' => trim($inputData['nick']), 'role_id' => intval($roleId), 'role_name' => $roleName]; if (isset($inputData['email'])) { $email = trim($inputData['email']); } else { $email = ''; } $salt = random(6); $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $salt); $setarr['salt'] = $salt; $setarr['password'] = $password; $setarr['email'] = $email; $result = make(ManagerRepository::class)->create($setarr); if (!$result) { return json_fail('创建失败'); } else { $logSubject = '添加一个管理员,账号:' . $username; $logSvalue = $result->manager_id; $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse($result->manager_id); } } /** * 修改管理员. * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @param PermissionRoleRepository $permissionRoleRepository * @return mixed|CommonSuccessPkResponse */ public function modify(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory, PermissionRoleRepository $permissionRoleRepository) { $inputData = $this->getJsonData(); $rules = ['manager_id' => 'required|string', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $manager->nick = $inputData['nick']; $manager->role_id = intval($inputData['role_id']); $roleName = ''; $roleObj = make(PermissionRoleRepository::class)->find($manager->role_id); if (!empty($roleObj)) { $roleName = $roleObj->name; } $manager->role_name = $roleName; if (isset($inputData['email'])) { $email = trim($inputData['email']); $manager->email = $email; } else { $manager->email = ''; } if (!empty($inputData['password'])) { $salt = $manager->salt; if (empty($salt)) { $salt = random(6); } $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt); $manager->salt = $salt; $manager->password = $password; } $result = $manager->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '修改一个管理员,账号:' . $manager->username; $logSvalue = $manager->manager_id; $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse($manager->manager_id); } } /** * 删除单个. * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @return mixed|CommonSuccessPkResponse */ public function delete(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['manager_id' => 'required|string']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = make(ManagerRepository::class)->findBy('manager_id', $inputData['manager_id']); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $result = $manager->delete(); if (!$result) { return json_fail('删除失败'); } else { $logSubject = '删除一个管理员,账号:' . $oldManager->username; $logSvalue = $oldManager->manager_id; $logDbData = ['after_items' => [], 'before_items' => [$oldManager->toArray()]]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse($inputData['manager_id']); } } /** * 批量操作. * @param ManagerRepository $managerRepository * @param ValidatorFactoryInterface $validatorFactory * @return mixed */ public function batch(ManagerRepository $managerRepository, ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $operateName = $inputData['operate_name'] ?? ''; switch ($operateName) { case 'delete': $itemPks = $inputData['item_pks'] ?? []; if (!empty($itemPks)) { $model = new ManagerModel(); $resultItems = $model->whereIn('manager_id', $itemPks)->delete(); if ($resultItems) { $strPks = implode(',', $itemPks); $logSubject = '批量删除多个管理员'; $logSvalue = $strPks; $logDbData = ['after_items' => [], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); } } $data = ['result' => 'success', 'pks' => $itemPks]; return json_success($data); break; default: break; } return json_fail('未知操作'); } /** * 我的详情. * @return mixed|ManagerDetailResponse */ public function detailMe() { $manager = $this->getCurrentManger(); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } return new ManagerDetailResponse($manager); } /** * 修改自己信息. * @return mixed|CommonSuccessPkResponse */ public function modifyMe() { $inputData = $this->getJsonData(); $rules = ['nick' => 'required|max:60', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = $this->getCurrentManger(); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $manager->nick = $inputData['nick']; if (isset($inputData['email'])) { $email = trim($inputData['email']); $manager->email = $email; } else { $manager->email = ''; } if (!empty($inputData['password'])) { $salt = $manager->salt; if (empty($salt)) { $salt = random(6); } $password = make(ManagerRepository::class)->generatePassword($inputData['password'], $manager->salt); $manager->salt = $salt; $manager->password = $password; } $result = $manager->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '修改自己管理员信息,账号:' . $manager->username; $logSvalue = $manager->manager_id; $logDbData = ['after_items' => [$manager->toArray()], 'before_items' => [$oldManager->toArray()]]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessPkResponse($manager->manager_id); } } }