AdminController.php 14 KB

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