AdminController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <?php
  2. namespace Modules\Manager\Http\Controllers;
  3. use Modules\Manager\Events\AddService;
  4. use Modules\Manager\Events\DeleteService;
  5. use App\Exceptions\BaseException;
  6. use App\Models\Admin;
  7. use App\Models\Role;
  8. use App\Models\Warea;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Hash;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\Log;
  14. use Illuminate\Validation\Rule;
  15. use Illuminate\Support\Facades\Validator;
  16. use Illuminate\Support\Facades\DB;
  17. use Jenssegers\Agent\Facades\Agent;
  18. use Tymon\JWTAuth\JWTAuth;
  19. use Zhuzhichao\IpLocationZh\Ip;
  20. class AdminController extends Controller
  21. {
  22. protected $jwt;
  23. public function __construct(JWTAuth $jwt)
  24. {
  25. $this->jwt = $jwt;
  26. }
  27. /*管理员列表*/
  28. public function getAdminList(Request $request){
  29. $input=$request->all();
  30. $page_size=$input['page_size'];
  31. $page_index=$input['page_index'];
  32. $num = ($page_index - 1) * $page_size;
  33. // $search_name=$input['search_name'];
  34. $count=Admin::where(function ($query) {
  35. $query->where('status', '=', 1)
  36. ->orWhere('status', '=', '2');
  37. })->count();
  38. if($count==0){
  39. $this->error('400001','没有管理员信息');
  40. }
  41. $list=Admin::with('role:id,name')->where(function ($query) {
  42. $query->where('status', '=', 1)
  43. ->orWhere('status', '=', '2');
  44. })
  45. ->orderBy('id', 'desc')
  46. ->skip($num)->take($page_size)->get();
  47. if($list){
  48. return $this->success_list($list,'获取成功',$count);
  49. }
  50. return $this->error();
  51. }
  52. //管理员登录
  53. public function login(Request $request)
  54. {
  55. $input=$request->all();
  56. $rules=[
  57. 'name'=>'required|between:5,12',
  58. 'password'=>'required|between:6,12'
  59. ];
  60. $messages=[
  61. 'name.required'=>'账号不能为空.',
  62. 'name.between'=>'账号长度应为5-12个字符.',
  63. 'password.required'=>'密码不能为空.',
  64. 'password.between'=>'密码长度应为6-12个字符.',
  65. ];
  66. $validator = Validator::make($input, $rules, $messages);
  67. if($validator->fails()){
  68. return $this->error('400013',$validator->errors()->first());
  69. }
  70. $admin=Admin::where('name','admin')->first();
  71. if($admin){
  72. if($admin->status=='2'){
  73. return $this->error('400004','账户已禁用');
  74. }
  75. }else{
  76. return $this->error('400004','账户名不存在');
  77. }
  78. if (!$token = $this->jwt->attempt($request->only('name', 'password'))) {
  79. return $this->error('400004','账户名称和密码有误');
  80. }
  81. $user=Admin::where('name',$request->input('name'))->first();
  82. $ip=$request->ip();
  83. $address=Ip::find($ip);
  84. //浏览器名称
  85. $browser = Agent::browser();
  86. //操作系统
  87. $platform = Agent::platform();
  88. //设备名称
  89. $device = Agent::device();
  90. $data=[
  91. 'ip'=>$ip,
  92. 'address'=>$address[0].$address[1].$address[2],
  93. 'time'=>Carbon::now()->toDateTimeString(),
  94. 'created_at'=>Carbon::now()->toDateTimeString(),
  95. 'updated_at'=>Carbon::now()->toDateTimeString(),
  96. 'browser'=>$browser,
  97. 'platform'=>$platform,
  98. 'device'=>$device,
  99. 'is_phone'=>Agent::isPhone(),
  100. 'admin_name'=>$request->input('name')
  101. ];
  102. DB::table('admin_log')->insert($data);
  103. return $this->success($token,$user->id);
  104. }
  105. //管理员登录
  106. public function rewardlogin(Request $request)
  107. {
  108. $input=$request->all();
  109. $rules=[
  110. 'name'=>'required|between:5,12',
  111. 'password'=>'required|between:6,12'
  112. ];
  113. $messages=[
  114. 'name.required'=>'账号不能为空.',
  115. 'name.between'=>'账号长度应为5-12个字符.',
  116. 'password.required'=>'密码不能为空.',
  117. 'password.between'=>'密码长度应为6-12个字符.',
  118. ];
  119. $validator = Validator::make($input, $rules, $messages);
  120. if($validator->fails()){
  121. return $this->error('400013',$validator->errors()->first());
  122. }
  123. if ($request->input('name')!='DWBS_yjjl'){
  124. return $this->error('400004','账户名不存在');
  125. }
  126. if (!$token = $this->jwt->attempt($request->only('name', 'password'))) {
  127. return $this->error('400004','账户名称和密码有误');
  128. }
  129. $ip=$request->ip();
  130. $address=Ip::find($ip);
  131. //浏览器名称
  132. $browser = Agent::browser();
  133. //操作系统
  134. $platform = Agent::platform();
  135. //设备名称
  136. $device = Agent::device();
  137. $data=[
  138. 'ip'=>$ip,
  139. 'address'=>$address[0].$address[1].$address[2],
  140. 'time'=>Carbon::now()->toDateTimeString(),
  141. 'created_at'=>Carbon::now()->toDateTimeString(),
  142. 'updated_at'=>Carbon::now()->toDateTimeString(),
  143. 'browser'=>$browser,
  144. 'platform'=>$platform,
  145. 'device'=>$device,
  146. 'is_phone'=>Agent::isPhone(),
  147. 'admin_name'=>$request->input('name')
  148. ];
  149. DB::table('admin_log')->insert($data);
  150. return $this->success($token);
  151. }
  152. //获取当前管理员信息
  153. public function getCurrentAdmin(){
  154. $re=Admin::where('id',Auth::user()->id)->first();
  155. if ($re->role_ids){
  156. $role=Role::find($re->role_ids);
  157. $admin=$re;
  158. $admin->role->id=$role->id;
  159. $admin->role->name=$role->name;
  160. $admin->role->permissions=$role->permissions;
  161. }else{
  162. $admin=Admin::with('role:id,name,permissions')->find(Auth::user()->id);
  163. }
  164. if($admin){
  165. return $this->success($admin);
  166. }
  167. return $this->error();
  168. }
  169. //添加管理员
  170. public function uploadAdmin(Request $request){
  171. $input=$request->all();
  172. $rules=[
  173. 'name'=>[
  174. 'required',
  175. Rule::unique('admins')
  176. ->where(function ($query) {
  177. $query->where('deleted_at', null);
  178. }),
  179. 'between:5,12'
  180. ],
  181. 'password'=>'required|between:6,12',
  182. 'role_id'=>'required',
  183. 'mobile'=>'required_if:role_id,23|size:11',
  184. ];
  185. $messages=[
  186. 'name.required'=>'账号不能为空.',
  187. 'name.between'=>'账号长度应为5-12个字符.',
  188. 'name.unique'=>'账号名已存在.',
  189. 'password.required'=>'密码不能为空.',
  190. 'password.between'=>'密码长度应为6 -12个字符.',
  191. 'role_id.required'=>'请选择角色.',
  192. 'mobile.size'=>'手机号长度应为11个字符.',
  193. 'mobile.required_if'=>'政委手机号必填'
  194. ];
  195. $validator = Validator::make($input, $rules, $messages);
  196. if($validator->fails()){
  197. return $this->error('400013',$validator->errors()->first());
  198. }
  199. DB::beginTransaction();
  200. $result=Admin::create([
  201. 'name' => $input['name'],
  202. 'password' => Hash::make($input['password']),
  203. 'mobile'=>$input['mobile'],
  204. 'status' => 1,
  205. 'role_id' => $input['role_id']
  206. ]);
  207. if($input['role_id']==23){//政委 政委主管
  208. event(new AddService($result));
  209. }
  210. if($result->id){
  211. DB::commit();
  212. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加管理员:'.$input['name'].'成功');
  213. return $this->success([]);
  214. }
  215. DB::rollback();
  216. return $this->error();
  217. }
  218. //修改管理员
  219. public function updateAdmin(Request $request){
  220. $input=$request->all();
  221. $rules=[
  222. 'name'=>[
  223. 'required',
  224. Rule::unique('admins')
  225. ->ignore($input['id'], 'id')
  226. ->where(function ($query) {
  227. $query->where('deleted_at', null);
  228. }),
  229. 'between:5,12'
  230. ],
  231. 'password'=>'required|between:6,12',
  232. 'role_id'=>'required',
  233. 'mobile'=>'required_if:role_id,23|size:11',
  234. ];
  235. $messages=[
  236. 'name.required'=>'账号不能为空.',
  237. 'name.unique'=>'账号已存在.',
  238. 'name.between'=>'账号长度应为5-12个字符.',
  239. 'password.required'=>'密码不能为空.',
  240. 'password.between'=>'密码长度应为6 -12个字符.',
  241. 'role_id.required'=>'请选择角色.',
  242. 'mobile.size'=>'手机号长度应为11个字符.',
  243. 'mobile.required_if'=>'政委手机号必填'
  244. ];
  245. $validator = Validator::make($input, $rules, $messages);
  246. if($validator->fails()){
  247. return $this->error('400013',$validator->errors()->first());
  248. }
  249. DB::beginTransaction();
  250. $admin=Admin::where('name',$input['name'])->first();
  251. if($admin){
  252. if($admin->id!=$input['id']){
  253. return $this->error('400012','账号名已存在.');
  254. }
  255. }
  256. $ad=Admin::find($input['id']);
  257. $before=$ad->mobile;
  258. $role_id=$ad->role_id;
  259. if($role_id==23) {//政委 政委主管
  260. if($input['role_id']!=$role_id){
  261. $count=Warea::where('admin_id',$input['id'])->count();
  262. if($count>0){
  263. return $this->error('450001','该政委管理战区,暂时不能变更角色,若要变更,请移除战区管理');
  264. }
  265. }
  266. }
  267. $data['name'] = $input['name'];
  268. $data['password'] = Hash::make($input['password']);
  269. $data['role_id'] = $input['role_id'];
  270. $data['mobile'] = $input['mobile'];
  271. $row=Admin::where('id',$input['id'])->update($data);
  272. if($input['role_id']==23){//政委 政委主管
  273. $result=Admin::where('id',$input['id'])->first();
  274. $result->before=$before;
  275. event(new AddService($result));
  276. }
  277. if($row){
  278. DB::commit();
  279. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改管理员:'.$input['name'].'信息成功');
  280. return $this->success([]);
  281. }
  282. DB::rollBack();
  283. return $this->error();
  284. }
  285. /* 禁用管理员*/
  286. public function disableAdmin(Request $request){
  287. $admin=Admin::find($request->post('id'));
  288. $admin->status=($admin->status==1)?'2':'1';
  289. $row=$admin->save();
  290. if($row){
  291. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')禁用管理员:'.$admin->name.'成功');
  292. return $this->success([]);
  293. }
  294. return $this->error();
  295. }
  296. //删除管理员
  297. public function destoryAdmin(Request $request){
  298. $admin=Admin::find($request->post('id'));
  299. if($admin->role_id==23){
  300. $count=Warea::where('admin_id',$admin->id)->count();
  301. if($count>0){
  302. return $this->error('450001','该政委管理战区,暂时不能删除,若要删除,请移除战区管理');
  303. }
  304. }
  305. DB::beginTransaction();
  306. $row=$admin->delete();
  307. event(new DeleteService($admin));
  308. if($row){
  309. DB::commit();
  310. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')删除管理员:'.$admin->name.'成功');
  311. return $this->success([]);
  312. }
  313. DB::rollBack();
  314. return $this->error();
  315. }
  316. //管理员退出登录
  317. public function logout()
  318. {
  319. Auth::logout();
  320. return $this->success([],'退出成功');
  321. }
  322. /* 管理员修改密码 */
  323. public function updatePassword(Request $request)
  324. {
  325. $adminId = Auth::user()->id;
  326. $input = $request->all();
  327. $admin=Admin::find($adminId);
  328. if (!Hash::check($input['oldpassword'], $admin->password)){
  329. return $this->error('400014','密码验证有误');
  330. }
  331. if (Hash::check($input['password'], $admin->password)){
  332. return $this->error('400014','新密码与旧密码相同');
  333. }
  334. $admin->password=Hash::make($input['password']);
  335. $row=$admin->save();
  336. if ($row) {
  337. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改密码成功');
  338. Auth::logout();
  339. return $this->success([]);
  340. }
  341. return $this->error();
  342. }
  343. /*测试方法*/
  344. // public function decode(Request $request)
  345. // {
  346. // $user=Auth::user();
  347. // Cache::put('foo', 'baz', 600);
  348. // $value = Cache::get('foo');
  349. // Redis::set('user','123333');
  350. // $user= Redis::get('user');
  351. // return $this->success($value.'//'.$user);
  352. // }
  353. /*
  354. * 扫码枪信息展示
  355. * ***/
  356. public function ScanCodeInfo(){
  357. $data=DB::table('good_select')->get();
  358. return $this->success($data);
  359. }
  360. /*
  361. * 变更信息
  362. * ***/
  363. public function UpdateGoodSelectInfo(Request $request){
  364. $data=$request->all();
  365. DB::table('good_select')->where('id',$data['id'])->update([
  366. 'good_name'=>$data['good_name'],
  367. 'name'=>$data['name'],
  368. 'price'=>$data['price'],
  369. 'status'=>$data['status'],
  370. 'rank'=>$data['rank']
  371. ]);
  372. return $this->success([]);
  373. }
  374. public function judelogin(Request $request)
  375. {
  376. $input=$request->all();
  377. $rules=[
  378. 'name'=>'required|between:5,12',
  379. 'password'=>'required|between:6,12'
  380. ];
  381. $messages=[
  382. 'name.required'=>'账号不能为空.',
  383. 'name.between'=>'账号长度应为5-12个字符.',
  384. 'password.required'=>'密码不能为空.',
  385. 'password.between'=>'密码长度应为6-12个字符.',
  386. ];
  387. $validator = Validator::make($input, $rules, $messages);
  388. if($validator->fails()){
  389. return $this->error('400013',$validator->errors()->first());
  390. }
  391. if (!$token = $this->jwt->attempt($request->only('name', 'password'))) {
  392. return $this->error('400004','账户名称和密码有误');
  393. }
  394. return 1;
  395. }
  396. }