UserController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Handlers\ImageHandler;
  4. use App\Models\Basic;
  5. use App\Models\DWBSUser;
  6. use App\Models\Enroll;
  7. use App\Models\User;
  8. use Carbon\Carbon;
  9. use EasyWeChat\Factory;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Cache;
  13. use App\Handlers\JudegeHandler;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Log;
  16. use Illuminate\Support\Facades\Validator;
  17. class UserController extends Controller
  18. {
  19. public function GetUpgradeInfo(){
  20. $re=Basic::whereIn('keys',['upgrade_status','upgrade_start_time','upgrade_end_time'])->pluck('value','keys');
  21. $data=[
  22. 'status'=>$re['upgrade_status'],
  23. 'start_time'=>$re['upgrade_start_time'],
  24. 'end_time'=>$re['upgrade_end_time'],
  25. ];
  26. $result = [
  27. "code"=>200,
  28. "msg"=>'',
  29. "data"=>$data,
  30. ];
  31. return response()->json($result,200);
  32. }
  33. public function return_userinfo(){
  34. $id=Auth::user()->id;
  35. return $this->success(User::where('id',$id)->select('nickname','avatar')->first());
  36. }
  37. public function store(Request $request, User $user, JudegeHandler $handler)
  38. {
  39. if ($request->has('password')){
  40. $account=$request->input('account');
  41. $password=$request->input('password');
  42. $a_user=DB::connection('mysql_dwbs')->table('users')->where('mobile',$account)->first();
  43. if (!$a_user){
  44. return $this->error(10000,'','账号密码不正确');
  45. }
  46. if ($a_user->password!=md5($password)){
  47. if ($a_user->password!=md5($password.$a_user->recom_code)){
  48. return $this->error(10000,'','账号密码不正确');
  49. }
  50. }
  51. // $miniProgram = app('wechat.mini_program');
  52. $header_type=$request->header('type');
  53. Log::error('headerType'.$header_type);
  54. if ($header_type){
  55. $config = [
  56. 'app_id' => 'wxa9d1325fd98f5a7d',
  57. 'secret' => 'b8cd4371804815530a1e1134e83a9488',
  58. 'log' => [
  59. 'level' => 'debug',
  60. 'file' => __DIR__.'/wechat.log',
  61. ],
  62. ];
  63. }else{
  64. $config = [
  65. 'app_id' => 'wx0348d5a266f867a3',
  66. 'secret' => 'c383d63a939a0d686e7b13b284a00bec',
  67. 'log' => [
  68. 'level' => 'debug',
  69. 'file' => __DIR__.'/wechat.log',
  70. ],
  71. ];
  72. }
  73. $miniProgram=Factory::miniProgram($config);
  74. $data = $miniProgram->auth->session($request->code);
  75. //获取到微信的openid和session_key
  76. // 如果结果错误,说明 code 已过期或不正确,返回 401 错误
  77. Log::error($data);
  78. if (isset($data['errcode'])) {
  79. return $this->error(401);
  80. }
  81. if ($account=='ceshi'){
  82. $account='18333333333';
  83. }
  84. $user=User::where('phone',$account)->first();
  85. if ($user){
  86. $user->openid=$data['openid'];
  87. $user->save();
  88. $token = Auth::guard('api')->fromUser($user);
  89. }else{
  90. if ($a_user->level==3){
  91. $service=DB::table('service')->where('phone',$account)->first();
  92. }else{
  93. if ($a_user->level==2){
  94. $ag_user=DB::connection('mysql_dwbs')->table('users')->where('id',$a_user->agent_id)->first();
  95. $service=DB::table('service')->where('phone',$ag_user->mobile)->first();
  96. }
  97. }
  98. $user=new User();
  99. $user->openid=$data['openid'];
  100. $user->phone=$account;
  101. $user->dwbs_id=$a_user->id;
  102. $user->name=$a_user->nickname;
  103. $user->nickname=$a_user->nickname;
  104. $user->war_names=$service->war_names;
  105. if (isset($data['unionid'])){
  106. $user->unionid=$data['unionid'];
  107. }
  108. $user->save();
  109. $token = Auth::guard('api')->fromUser($user);
  110. }
  111. }else{
  112. if ($request->phone == 18333333333 && $request->verify_code == 521520) {
  113. // $miniProgram = app('wechat.mini_program');
  114. $header_type=$request->header('type');
  115. Log::error('headerType'.$header_type);
  116. if ($header_type){
  117. $config = [
  118. 'app_id' => 'wxa9d1325fd98f5a7d',
  119. 'secret' => 'b8cd4371804815530a1e1134e83a9488',
  120. 'log' => [
  121. 'level' => 'debug',
  122. 'file' => __DIR__.'/wechat.log',
  123. ],
  124. ];
  125. }else{
  126. $config = [
  127. 'app_id' => 'wx0348d5a266f867a3',
  128. 'secret' => 'c383d63a939a0d686e7b13b284a00bec',
  129. 'log' => [
  130. 'level' => 'debug',
  131. 'file' => __DIR__.'/wechat.log',
  132. ],
  133. ];
  134. }
  135. $miniProgram=Factory::miniProgram($config);
  136. $data = $miniProgram->auth->session($request->code);
  137. //获取到微信的openid和session_key
  138. // 如果结果错误,说明 code 已过期或不正确,返回 401 错误
  139. if (isset($data['errcode'])){
  140. return $this->error(401);
  141. }
  142. DB::table('user')->where('phone', '=', '18333333333')->update([
  143. 'openid' => $data['openid'],
  144. 'avatar' => $request->avatar,
  145. ]);
  146. $users=DB::table('user')->where('phone',18333333333)->first();
  147. $user=User::find($users->id);
  148. // $user = User::find(130);
  149. $token = Auth::guard('api')->fromUser($user);
  150. }
  151. else {
  152. $verifyData = Cache::get($request->verify_key);
  153. Log::error($verifyData);
  154. $now=Carbon::now()->timestamp;
  155. if (!$verifyData) {
  156. // $re=DB::table('phone_code')->where('phone',$request->phone)->where('time','>',date('Y-m-d H:i:s',$now))->first();
  157. // if ($re){
  158. // if ($re->phone_code==$request->verify_code){
  159. // $dat=json_decode($re->data);
  160. // $phone=$re->phone;
  161. // }else{
  162. // return $this->response->array([
  163. // 'code' => 300,
  164. // 'msg' => '验证码错误'
  165. // ]);
  166. // }
  167. //
  168. // }else{
  169. return $this->response->array([
  170. 'code' => 400,
  171. 'msg' => '验证码已失效'
  172. ]);
  173. // }
  174. }else{
  175. if (!hash_equals($verifyData['code'], $request->verify_code)) {
  176. //返回401
  177. return $this->response->array([
  178. 'code' => 300,
  179. 'msg' => '验证码错误'
  180. ]);
  181. }
  182. $phone = $verifyData['phone'];
  183. //获取缓存中的用户数据
  184. $dat = $verifyData['data'];
  185. }
  186. $header_type=$request->header('type');
  187. Log::error('headerType'.$header_type);
  188. if ($header_type){
  189. $config = [
  190. 'app_id' => 'wxa9d1325fd98f5a7d',
  191. 'secret' => 'b8cd4371804815530a1e1134e83a9488',
  192. 'log' => [
  193. 'level' => 'debug',
  194. 'file' => __DIR__.'/wechat.log',
  195. ],
  196. ];
  197. }else{
  198. $config = [
  199. 'app_id' => 'wx0348d5a266f867a3',
  200. 'secret' => 'c383d63a939a0d686e7b13b284a00bec',
  201. 'log' => [
  202. 'level' => 'debug',
  203. 'file' => __DIR__.'/wechat.log',
  204. ],
  205. ];
  206. }
  207. $miniProgram=Factory::miniProgram($config);
  208. // $miniProgram = app('wechat.mini_program');
  209. $data = $miniProgram->auth->session($request->code);
  210. //获取到微信的openid和session_key
  211. // 如果结果错误,说明 code 已过期或不正确,返回 401 错误
  212. if (isset($data['errcode'])) {
  213. return $this->error(401,$data);
  214. }
  215. if (array_key_exists('openid',$dat)){
  216. DB::table('user')->where('id',$dat['id'])->update(['openid'=>$data['openid']]);
  217. // $users=DB::table('user')->where('phone',$request->phone)->first();
  218. $user=User::find($dat['id']);
  219. if ($header_type){
  220. $user->openid=$data['openid'];
  221. }
  222. if (isset($data['unionid'])){
  223. $user->unionid=$data['unionid'];
  224. }
  225. // if (!$user->dwbs_id){
  226. // $p=DWBSUser::where('mobile',$request->phone)->first();
  227. // if ($p){
  228. // $user->dwbs_id=$p->id;
  229. // }
  230. //
  231. // }
  232. $user->save();
  233. $token=Auth::guard('api')->fromUser($user);
  234. } else{
  235. return $this->error(5201,'','暂不支持新用户');
  236. $nickname=$dat->nickname;
  237. $user=new User();
  238. $user->openid=$data['openid'];
  239. $user->phone=$phone;
  240. $p=DWBSUser::where('mobile',$phone)->first();
  241. if ($p){
  242. $user->dwbs_id=$p->id;
  243. }
  244. $user->name=$nickname;
  245. $user->nickname=$nickname;
  246. $user->war_names=$dat->war_names;
  247. if (isset($data['unionid'])){
  248. $user->unionid=$data['unionid'];
  249. }
  250. $user->save();
  251. $token = Auth::guard('api')->fromUser($user);
  252. }
  253. Cache::forget($request->verify_key);
  254. }
  255. }
  256. $token = ['token' => $token];
  257. //需要返回数据的部分信息
  258. $now=Carbon::now()->timestamp;
  259. $time = DB::table('basic')->where('keys', '=', 'round_start_time')->value('value');
  260. $round_end = DB::table('basic')->where('keys', '=', 'round_end_time')->value('value');
  261. $banner_1=DB::table('basic')->where('keys','=','banner_1')->value('value');
  262. $banner_2=DB::table('basic')->where('keys','=','banner_2')->value('value');
  263. $banner_3=DB::table('basic')->where('keys','=','banner_3')->value('value');
  264. $banner_4=DB::table('basic')->where('keys','=','banner_4')->value('value');
  265. $money=DB::table('basic')->where('keys','=','cost')->value('value');
  266. $repair_start = DB::table('basic')->where('keys', '=', 'repair_start')->value('value');
  267. $repair_end = DB::table('basic')->where('keys', '=', 'repair_end')->value('value');
  268. $day=ceil(($round_end-$now)/(3600*24));
  269. $user_back = [
  270. 'id' => $user->id,
  271. 'name' => $user->name,
  272. 'money' => $money,
  273. 'day' => $day,
  274. 'upload_status' => true,
  275. 'phone' => (int)$user->phone,
  276. 'start_time' => $time * 1000,
  277. 'end_time' => (int)($round_end * 1000),
  278. 'banner_1'=>$banner_1,
  279. 'banner_2'=>$banner_2,
  280. 'banner_3'=>$banner_3,
  281. 'banner_4'=>$banner_4,
  282. 'openid'=>$data['openid'],
  283. 'repair_start' =>(int)$repair_start,
  284. 'repair_end' => (int)$repair_end,
  285. ];
  286. // return $user_back;
  287. //获取一些由时间决定的返回值
  288. $s = $this->basic_info($handler,$user->id,$time);
  289. $da = array_merge($user_back, $s, $token);
  290. if ($request->has('account')){
  291. if ($request->account=='ceshi'){
  292. $da['signuped']=true;
  293. }
  294. }else{
  295. if ($request->phone==18333333333){
  296. $da['signuped']=true;
  297. }
  298. }
  299. // return $da;
  300. return $this->response()->array([
  301. 'code' => 200,
  302. 'msg' => 'ok',
  303. 'data' => $da
  304. ]);
  305. }
  306. public function basic_info($handler,$id,$tt)
  307. {
  308. Log::error($id);
  309. $season = DB::table('basic')->where('keys', '=', 'season')->select('value')->first();
  310. $season = $season->value;
  311. $ss=DB::table('enroll')->where('uid','=',$id)->where('status','=',0)->where('season','=',$season)->first();
  312. $count = DB::table('enroll')->join('user','user.id','=','enroll.uid')->where([ ['enroll.season', '=', $season], ['enroll.status', '=', 0]])->count();//当前用户是否报名
  313. $key=Cache::get(md5($id));
  314. $link='';
  315. if ($ss){
  316. $signuped=true;
  317. $enroll_time=strtotime($ss->created_at)*1000;
  318. if (!$key){
  319. $now=Carbon::now()->timestamp;
  320. $t=$now-$tt;
  321. if ($t>0&&$t<3600*24*7*3){
  322. if ($t<3600*24*7){
  323. $week=1;
  324. }elseif (3600*24*7<$t||$t<3600*24*7*2){
  325. $week=2;
  326. }elseif (3600*24*7*2<$t||$t<3600*24*7*3){
  327. $week=3;
  328. }
  329. $re=DB::table('course_img')->where('season',$season)->where('week',$week)->first();
  330. if ($re){
  331. if ($re->course_img){
  332. $link=$re->course_img;
  333. }
  334. }
  335. }
  336. }
  337. }else{
  338. $signuped=false;
  339. $enroll_time=0;
  340. }
  341. $s = [
  342. 'season' => (int)$season,
  343. 'signuped' => $signuped,
  344. 'grade' => '',
  345. 'progress' => 0,
  346. 'enroll_time' => $enroll_time,
  347. 'total' => 0,
  348. 'count' => $count,
  349. 'score' => 0,
  350. 'rank' => 0,
  351. 'link' => $link,
  352. 'status' => $handler->judege()
  353. ];
  354. return $s;
  355. }
  356. public function update_phone(Request $request){
  357. $verifyData = Cache::get($request->verify_key);
  358. if (!$verifyData) {
  359. return $this->response->array([
  360. 'code' => 422,
  361. 'msg' => '验证码已失效'
  362. ]);
  363. }
  364. if (!hash_equals($verifyData['code'], $request->verify_code)) {
  365. //返回401
  366. return $this->response->array([
  367. 'code' => 421,
  368. 'msg' => '验证码错误'
  369. ]);
  370. }
  371. $phone = $verifyData['phone'];
  372. DB::table('user')->where('id',Auth::user()->id)->update([
  373. 'phone'=>$phone
  374. ]);
  375. return $this->success([]);
  376. }
  377. /**点击弹窗的确认**/
  378. public function submit_mess(){
  379. $user=Auth::user();
  380. $now=Carbon::now()->timestamp;
  381. $end=Carbon::tomorrow()->timestamp;
  382. $key=md5($user->id);
  383. Cache::put($key,'1',$end-$now);
  384. return $this->success([]);
  385. }
  386. public function account_status(){
  387. $id=Auth::user()->id;
  388. $re=User::where('id',$id)->select('account_status')->first();
  389. return $this->success(['status'=>$re->account_status]);
  390. }
  391. public function SaveUserInfo(Request $request){
  392. $rules=[
  393. 'avatar'=>'required',
  394. 'nickname'=>'required',
  395. ];
  396. $message=[
  397. 'avatar.required'=>'头像不能为空',
  398. 'nickname.required'=>'昵称不能为空',
  399. ];
  400. $va=Validator::make($request->all(),$rules,$message);
  401. if ($va->fails()){
  402. return $this->error(300,'',$va->errors()->first());
  403. }
  404. $id=Auth::user()->id;
  405. if ($request->nickname=='微信用户'){
  406. return $this->success([]);
  407. }
  408. User::where('id',$id)->update(['nickname'=>$request->nickname,'avatar'=>$request->avatar]);
  409. Log::error('用户信息i'.$request->input('nickname'));
  410. return $this->success([]);
  411. }
  412. public function SaveUserAvatar(Request $request,ImageHandler $imageHandler){
  413. $re=$imageHandler->save($request->file('file'),'avatar',random_int(1,999));
  414. return $this->success($re);
  415. }
  416. public function showAddress(){
  417. $id=Auth::user()->id;
  418. $user=User::find($id);
  419. return $this->success(json_decode($user->address_info));
  420. }
  421. public function UpdateAddAddress(Request $request){
  422. $address=User::find(Auth::user()->id);
  423. $address_arr=[
  424. 'username'=>$request->input('username'),
  425. 'mobile'=>$request->input('mobile'),
  426. 'province'=>$request->input('province'),
  427. 'city'=>$request->input('city'),
  428. 'area'=>$request->input('area'),
  429. 'address'=>$request->input('address'),
  430. ];
  431. $address->address_info=json_encode($address_arr);
  432. $address->save();
  433. return $this->success([]);
  434. }
  435. public function GetRule(){
  436. return $this->success([]);
  437. }
  438. }