AdminService.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace App\Services\Base;
  3. use App\Http\Middleware\SingleLoginLimit;
  4. use App\Repositories\Criteria\Base\AdminCriteria;
  5. use App\Repositories\Eloquent\Base\AdminRepositoryEloquent;
  6. use App\Repositories\Enums\ModelStatusEnum;
  7. use App\Repositories\Enums\ResponseCodeEnum;
  8. use App\Repositories\Models\Base\Admin;
  9. use App\Repositories\Presenters\Base\AdminPresenter;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Hash;
  12. class AdminService
  13. {
  14. /**
  15. * @var AdminRepositoryEloquent
  16. */
  17. private $adminRepository;
  18. /**
  19. * AdminService constructor.
  20. *
  21. * @param AdminRepositoryEloquent $adminRepositoryEloquent
  22. */
  23. public function __construct(AdminRepositoryEloquent $adminRepositoryEloquent)
  24. {
  25. $this->adminRepository = $adminRepositoryEloquent;
  26. }
  27. /**
  28. * @param Request $request
  29. *
  30. * @return mixed
  31. * @throws \Prettus\Repository\Exceptions\RepositoryException
  32. */
  33. public function handleList(Request $request)
  34. {
  35. $this->adminRepository->pushCriteria(new AdminCriteria($request));
  36. $this->adminRepository->setPresenter(AdminPresenter::class);
  37. return $this->adminRepository->searchAdminsByPage();
  38. }
  39. /**
  40. * @param $id
  41. *
  42. * @return \Illuminate\Database\Eloquent\Model
  43. */
  44. public function handleProfile($id)
  45. {
  46. $this->adminRepository->setPresenter(AdminPresenter::class);
  47. return $this->adminRepository->searchAdminBy($id);
  48. }
  49. /**
  50. * @param array $data
  51. *
  52. * @return mixed
  53. * @throws \Prettus\Validator\Exceptions\ValidatorException
  54. */
  55. public function handleStore($data)
  56. {
  57. $data['password'] = Hash::make($data['password']);
  58. $admin = Admin::query()->where('mobile', $data['mobile'])->first();
  59. if (!$admin) {
  60. $admin = $this->adminRepository->create($data);
  61. } else {
  62. abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '该手机号已经存在');
  63. $admin->fill($data);
  64. $admin->save();
  65. }
  66. if (array_key_exists('role_ids', $data) && is_array($data['role_ids'])) $admin->syncRoles($data['role_ids']);
  67. return $admin;
  68. }
  69. /**
  70. * @param array $data
  71. *
  72. * @return mixed
  73. * @throws \Prettus\Validator\Exceptions\ValidatorException
  74. */
  75. public function handleUpdate($data)
  76. {
  77. if (array_key_exists('password', $data)) unset($data['password']);
  78. $admin = $this->adminRepository->update($data, $data['id']);
  79. if (array_key_exists('role_ids', $data) && is_array($data['role_ids'])) $admin->syncRoles($data['role_ids']);
  80. return $admin;
  81. }
  82. /**
  83. * 删除用户
  84. * @param $id
  85. * @return int
  86. */
  87. public function handleDelete($id)
  88. {
  89. $admin = $this->adminRepository->find($id);
  90. return $admin->delete();
  91. }
  92. /**
  93. * 批量删除
  94. * @param $ids
  95. * @return int
  96. */
  97. public function handleBatchDelete($ids = [])
  98. {
  99. $admins = Admin::query()->whereIn('id', $ids)->get();
  100. foreach ($admins as $admin) {
  101. $admin->delete();
  102. }
  103. return true;
  104. }
  105. /**
  106. * 重置密码
  107. * @param Request $request
  108. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  109. * @throws \Prettus\Validator\Exceptions\ValidatorException
  110. */
  111. public function handleResetPassword(Request $request)
  112. {
  113. return $this->adminRepository->update([
  114. 'password' => Hash::make($request->get('password', '123456')),
  115. ], $request->get('id'));
  116. }
  117. /**
  118. * 重置密码
  119. * @param Request $request
  120. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  121. * @throws \Prettus\Validator\Exceptions\ValidatorException
  122. */
  123. public function handleMeResetPassword($password, $admin_id = false)
  124. {
  125. if (!$admin_id) $admin_id = login_admin_id();
  126. return $this->adminRepository->update([
  127. 'password' => Hash::make($password),
  128. ], $admin_id);
  129. }
  130. /**
  131. * 选项数据
  132. * @param Request $request
  133. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  134. * @throws \Prettus\Repository\Exceptions\RepositoryException
  135. */
  136. public function handleSelectOptions(Request $request)
  137. {
  138. $this->adminRepository->pushCriteria(new AdminCriteria($request));
  139. return $this->adminRepository->all(['id', 'name', 'mobile', 'username', 'sex']);
  140. }
  141. /**
  142. * 账号密码登录
  143. * @param $request
  144. * @return bool
  145. */
  146. public function handleAccountLogin($credentials, $request)
  147. {
  148. $credentials['password'] = base64_decode($credentials['password']);
  149. $credentials['status'] = ModelStatusEnum::OK;
  150. if (!$token = auth()->guard('admins')->attempt($credentials)) {
  151. return false;
  152. }
  153. //单机登录限制
  154. $admin_id = login_admin_id();
  155. SingleLoginLimit::setToken('admins', $admin_id, $token);
  156. $this->adminRepository->updateLoginInfo($admin_id, getClientIp());
  157. return $token;
  158. }
  159. /**
  160. * 获取登录用户信息
  161. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  162. */
  163. public function handleMe()
  164. {
  165. $this->adminRepository->setPresenter(AdminPresenter::class);
  166. $admin = $this->adminRepository->find(login_admin_id());
  167. return $admin;
  168. }
  169. /**
  170. * @param Request $request
  171. * @return mixed
  172. */
  173. public function handleConfirmPassword(Request $request)
  174. {
  175. $credentials = $request->only(['id', 'password']);
  176. return $this->adminRepository->byIdConfirmPassword($credentials['id'], $credentials['password']);
  177. }
  178. /**
  179. * 更换手机号
  180. * @param $admin
  181. * @param $mobile
  182. * @return
  183. */
  184. public function handleBindMobile($admin_id, $mobile)
  185. {
  186. $admin = $this->adminRepository->find($admin_id);
  187. $admin->mobile = $mobile;
  188. $admin->save();
  189. return true;
  190. }
  191. /**
  192. * 更新个人数据
  193. * @param $data
  194. * @param $admin_id
  195. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  196. * @throws \Prettus\Validator\Exceptions\ValidatorException
  197. */
  198. public function handleMeUpdate($data, $admin_id = false)
  199. {
  200. if (!$admin_id) $admin_id = login_admin_id();
  201. return $this->adminRepository->update($data, $admin_id);
  202. }
  203. }