AdminController.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\AddService;
  4. use App\Events\DeleteService;
  5. use App\Exceptions\BaseException;
  6. use App\Models\Admin;
  7. use App\Models\Warea;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Hash;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Log;
  12. use Illuminate\Validation\Rule;
  13. use Illuminate\Support\Facades\Validator;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Redis;
  16. use Illuminate\Support\Facades\Cache;
  17. use Tymon\JWTAuth\JWTAuth;
  18. class AdminController extends Controller
  19. {
  20. protected $jwt;
  21. public function __construct(JWTAuth $jwt)
  22. {
  23. $this->jwt = $jwt;
  24. }
  25. /*管理员列表*/
  26. public function getAdminList(Request $request){
  27. $input=$request->all();
  28. $page_size=$input['page_size'];
  29. $page_index=$input['page_index'];
  30. $num = ($page_index - 1) * $page_size;
  31. // $search_name=$input['search_name'];
  32. $count=Admin::where(function ($query) {
  33. $query->where('status', '=', 1)
  34. ->orWhere('status', '=', '2');
  35. })->count();
  36. if($count==0){
  37. $this->error('400001','没有管理员信息');
  38. }
  39. $list=Admin::with('role:id,name')->where(function ($query) {
  40. $query->where('status', '=', 1)
  41. ->orWhere('status', '=', '2');
  42. })
  43. ->orderBy('id', 'desc')
  44. ->skip($num)->take($page_size)->get();
  45. if($list){
  46. return $this->success_list($list,'获取成功',$count);
  47. }
  48. return $this->error();
  49. }
  50. //管理员登录
  51. public function login(Request $request)
  52. {
  53. $input=$request->all();
  54. $rules=[
  55. 'name'=>'required|between:5,12',
  56. 'password'=>'required|between:6,12'
  57. ];
  58. $messages=[
  59. 'name.required'=>'账号不能为空.',
  60. 'name.between'=>'账号长度应为5-12个字符.',
  61. 'password.required'=>'密码不能为空.',
  62. 'password.between'=>'密码长度应为6-12个字符.',
  63. ];
  64. $validator = Validator::make($input, $rules, $messages);
  65. if($validator->fails()){
  66. return $this->error('400013',$validator->errors()->first());
  67. }
  68. $admin=Admin::where('name','admin')->first();
  69. if($admin){
  70. if($admin->status=='2'){
  71. return $this->error('400004','账户已禁用');
  72. }
  73. }else{
  74. return $this->error('400004','账户名不存在');
  75. }
  76. if (!$token = $this->jwt->attempt($request->only('name', 'password'))) {
  77. return $this->error('400004','账户名称和密码有误');
  78. }
  79. return $this->success($token);
  80. }
  81. //获取当前管理员信息
  82. public function getCurrentAdmin(){
  83. $admin=Admin::with('role:id,name,permissions')->find(Auth::user()->id);
  84. if($admin){
  85. return $this->success($admin);
  86. }
  87. return $this->error();
  88. }
  89. //添加管理员
  90. public function uploadAdmin(Request $request){
  91. $input=$request->all();
  92. $rules=[
  93. 'name'=>[
  94. 'required',
  95. Rule::unique('admins')
  96. ->where(function ($query) {
  97. $query->where('deleted_at', null);
  98. }),
  99. 'between:5,12'
  100. ],
  101. 'password'=>'required|between:6,12',
  102. 'role_id'=>'required',
  103. 'mobile'=>'required_if:role_id,23|size:11',
  104. ];
  105. $messages=[
  106. 'name.required'=>'账号不能为空.',
  107. 'name.between'=>'账号长度应为5-12个字符.',
  108. 'name.unique'=>'账号名已存在.',
  109. 'password.required'=>'密码不能为空.',
  110. 'password.between'=>'密码长度应为6 -12个字符.',
  111. 'role_id.required'=>'请选择角色.',
  112. 'mobile.size'=>'手机号长度应为11个字符.',
  113. 'mobile.required_if'=>'政委手机号必填'
  114. ];
  115. $validator = Validator::make($input, $rules, $messages);
  116. if($validator->fails()){
  117. return $this->error('400013',$validator->errors()->first());
  118. }
  119. DB::beginTransaction();
  120. $result=Admin::create([
  121. 'name' => $input['name'],
  122. 'password' => Hash::make($input['password']),
  123. 'mobile'=>$input['mobile'],
  124. 'status' => 1,
  125. 'role_id' => $input['role_id']
  126. ]);
  127. if($input['role_id']==23){//政委 政委主管
  128. event(new AddService($result));
  129. }
  130. if($result->id){
  131. DB::commit();
  132. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加管理员:'.$input['name'].'成功');
  133. return $this->success([]);
  134. }
  135. DB::rollback();
  136. return $this->error();
  137. }
  138. //修改管理员
  139. public function updateAdmin(Request $request){
  140. $input=$request->all();
  141. $rules=[
  142. 'name'=>[
  143. 'required',
  144. Rule::unique('admins')
  145. ->ignore($input['id'], 'id')
  146. ->where(function ($query) {
  147. $query->where('deleted_at', null);
  148. }),
  149. 'between:5,12'
  150. ],
  151. 'password'=>'required|between:6,12',
  152. 'role_id'=>'required',
  153. 'mobile'=>'required_if:role_id,23|size:11',
  154. ];
  155. $messages=[
  156. 'name.required'=>'账号不能为空.',
  157. 'name.unique'=>'账号已存在.',
  158. 'name.between'=>'账号长度应为5-12个字符.',
  159. 'password.required'=>'密码不能为空.',
  160. 'password.between'=>'密码长度应为6 -12个字符.',
  161. 'role_id.required'=>'请选择角色.',
  162. 'mobile.size'=>'手机号长度应为11个字符.',
  163. 'mobile.required_if'=>'政委手机号必填'
  164. ];
  165. $validator = Validator::make($input, $rules, $messages);
  166. if($validator->fails()){
  167. return $this->error('400013',$validator->errors()->first());
  168. }
  169. DB::beginTransaction();
  170. $admin=Admin::where('name',$input['name'])->first();
  171. if($admin){
  172. if($admin->id!=$input['id']){
  173. return $this->error('400012','账号名已存在.');
  174. }
  175. }
  176. $ad=Admin::find($input['id']);
  177. $before=$ad->mobile;
  178. $role_id=$ad->role_id;
  179. if($role_id==23) {//政委 政委主管
  180. if($input['role_id']!=$role_id){
  181. $count=Warea::where('admin_id',$input['id'])->count();
  182. if($count>0){
  183. return $this->error('450001','该政委管理战区,暂时不能变更角色,若要变更,请移除战区管理');
  184. }
  185. }
  186. }
  187. $data['name'] = $input['name'];
  188. $data['password'] = Hash::make($input['password']);
  189. $data['role_id'] = $input['role_id'];
  190. $data['mobile'] = $input['mobile'];
  191. $row=Admin::where('id',$input['id'])->update($data);
  192. if($input['role_id']==23){//政委 政委主管
  193. $result=Admin::where('id',$input['id'])->first();
  194. $result->before=$before;
  195. event(new AddService($result));
  196. }
  197. if($row){
  198. DB::commit();
  199. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改管理员:'.$input['name'].'信息成功');
  200. return $this->success([]);
  201. }
  202. DB::rollBack();
  203. return $this->error();
  204. }
  205. /* 禁用管理员*/
  206. public function disableAdmin(Request $request){
  207. $admin=Admin::find($request->post('id'));
  208. $admin->status=($admin->status==1)?'2':'1';
  209. $row=$admin->save();
  210. if($row){
  211. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')禁用管理员:'.$admin->name.'成功');
  212. return $this->success([]);
  213. }
  214. return $this->error();
  215. }
  216. //删除管理员
  217. public function destoryAdmin(Request $request){
  218. $admin=Admin::find($request->post('id'));
  219. if($admin->role_id==23){
  220. $count=Warea::where('admin_id',$admin->id)->count();
  221. if($count>0){
  222. return $this->error('450001','该政委管理战区,暂时不能删除,若要删除,请移除战区管理');
  223. }
  224. }
  225. DB::beginTransaction();
  226. $row=$admin->delete();
  227. event(new DeleteService($admin));
  228. if($row){
  229. DB::commit();
  230. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')删除管理员:'.$admin->name.'成功');
  231. return $this->success([]);
  232. }
  233. DB::rollBack();
  234. return $this->error();
  235. }
  236. //管理员退出登录
  237. public function logout()
  238. {
  239. Auth::logout();
  240. return $this->success([],'退出成功');
  241. }
  242. /* 管理员修改密码 */
  243. public function updatePassword(Request $request)
  244. {
  245. $adminId = Auth::user()->id;
  246. $input = $request->all();
  247. $admin=Admin::find($adminId);
  248. if (!Hash::check($input['oldpassword'], $admin->password)){
  249. return $this->error('400014','密码验证有误');
  250. }
  251. if (Hash::check($input['password'], $admin->password)){
  252. return $this->error('400014','新密码与旧密码相同');
  253. }
  254. $admin->password=Hash::make($input['password']);
  255. $row=$admin->save();
  256. if ($row) {
  257. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改密码成功');
  258. Auth::logout();
  259. return $this->success([]);
  260. }
  261. return $this->error();
  262. }
  263. /*测试方法*/
  264. // public function decode(Request $request)
  265. // {
  266. // $user=Auth::user();
  267. // Cache::put('foo', 'baz', 600);
  268. // $value = Cache::get('foo');
  269. // Redis::set('user','123333');
  270. // $user= Redis::get('user');
  271. // return $this->success($value.'//'.$user);
  272. // }
  273. }