UserController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. <?php
  2. namespace App\Http\Controllers;
  3. use http\Env\Response;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Support\Facades\Auth;
  7. use App\Models\User;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Validator;
  10. use EasyWeChat\Factory;
  11. class UserController extends Controller
  12. {
  13. public function __construct()
  14. {
  15. }
  16. public function getOpenidToken(Request $request)
  17. {
  18. $code = $request->code;
  19. $config = config('wechat.defaults.mini_program.default');
  20. $mini = Factory::miniProgram($config);
  21. $info = $mini->auth->session($code);
  22. if (isset($info['errcode'])) {
  23. return response()->json([
  24. 'error_code' => '411111',
  25. 'msg' => 'code 不正确'
  26. ]);
  27. }
  28. $openid = $info['openid'];
  29. $where['openid'] = $openid;
  30. $where['del_is'] = 0;
  31. $userInfo = User::where($where)->first();
  32. if ($userInfo) {
  33. $token = Auth::guard('api')->fromUser($userInfo);
  34. return response()->json([
  35. 'error_code' => 200,
  36. 'msg' => '获取成功',
  37. 'token' => $token,
  38. 'openid' => $openid
  39. ]);
  40. } else {
  41. return response()->json([
  42. 'error_code' => 200,
  43. 'msg' => '没有认证',
  44. 'cert' => '0',
  45. 'openid' => $openid
  46. ]);
  47. }
  48. }
  49. public function login(Request $request)
  50. {
  51. $input = $request->all();
  52. $rules = [
  53. 'cre_num' => 'required',
  54. 'name' => 'required|max:16',
  55. ];
  56. $messages = [
  57. 'name.required' => '党员名称不能为空.',
  58. 'name.max' => '党员名称不能超过16个字符.',
  59. 'cre_num.required' => '手机号或档案号不能为空.',
  60. ];
  61. $validator = Validator::make($input, $rules, $messages);
  62. if ($validator->fails()) {
  63. return response()->json([
  64. 'error_code' => 41113,
  65. 'msg' => $validator->errors()->first()
  66. ]);
  67. }
  68. $where['name'] = $input['name'];
  69. $where['del_is'] = 0;
  70. $cre_num = $input['cre_num'];
  71. $openid = $input['openid'];
  72. $user = User::where($where)
  73. ->where(function ($query) use ($cre_num) {
  74. $query->where('cre_num', $cre_num)
  75. ->orWhere('telphone', $cre_num);
  76. })
  77. ->first();
  78. if (isset($user)) {
  79. $teamInfo = DB::table('team')->where('id', $user->team_id)->first();
  80. if ($teamInfo) {
  81. $data['teamid'] = $teamInfo->id;
  82. $data['teamname'] = $teamInfo->name;
  83. } else {
  84. $data['teamid'] = '0';
  85. $data['teamname'] = '无支部';
  86. }
  87. if ($user->openid) {
  88. return response()->json([
  89. 'error_code' => 400014,
  90. 'msg' => '该账号信息已绑定',
  91. ]);
  92. }
  93. $row = DB::table('users')
  94. ->where($where)
  95. ->where(function ($query) use ($cre_num) {
  96. $query->where('cre_num', $cre_num)
  97. ->orWhere('telphone', $cre_num);
  98. })
  99. ->update(['openid' => $openid]);
  100. if ($row) {
  101. if ($token = Auth::guard('api')->fromUser($user)) {
  102. $data['token'] = $token;
  103. return response()->json([
  104. 'error_code' => 200,
  105. 'msg' => '认证成功',
  106. 'data' => $data,
  107. 'openid' => $openid
  108. ]);
  109. } else {
  110. return response()->json([
  111. 'error_code' => 203,
  112. 'msg' => '获取token失败',
  113. ]);
  114. }
  115. } else {
  116. return response()->json([
  117. 'error_code' => 202,
  118. 'msg' => '认证失败',
  119. ]);
  120. }
  121. } else {
  122. return response()->json([
  123. 'error_code' => 42201,
  124. 'msg' => '用户信息不存在'
  125. ]);
  126. }
  127. }
  128. public function userRemoveBinding(Request $request)
  129. {
  130. $userid = Auth::user()->id;
  131. $row = DB::table('users')->where('id', $userid)->update(['cert' => '0', 'openid' => '']);
  132. if ($row) {
  133. return response()->json([
  134. 'error_code' => 200,
  135. 'msg' => '解绑成功'
  136. ]);
  137. } else {
  138. return response()->json([
  139. 'error_code' => 0,
  140. 'msg' => '解绑失败'
  141. ]);
  142. }
  143. }
  144. public function certTeam(Request $request)
  145. {
  146. $userid = Auth::user()->id;
  147. if ((int)Auth::user()->cert === 2) {
  148. return response()->json([
  149. 'error_code' => 200,
  150. 'msg' => '认证通过'
  151. ]);
  152. }
  153. $row = DB::table('users')->where('id', $userid)->update(['cert' => '2']);
  154. if ($row) {
  155. return response()->json([
  156. 'error_code' => 200,
  157. 'msg' => '认证通过'
  158. ]);
  159. } else {
  160. return response()->json([
  161. 'error_code' => 0,
  162. 'msg' => '认证失败'
  163. ]);
  164. }
  165. }
  166. /* 获取信息 */
  167. public function getUserInfo(Request $request)
  168. {
  169. $userid = Auth::user()->id;
  170. $data = DB::table('users')
  171. ->leftJoin('team', 'users.team_id', '=', 'team.id')
  172. ->where('users.id', $userid)
  173. ->select('users.*', 'team.name as teamname')
  174. ->first();
  175. if ($data) {
  176. return response()->json([
  177. 'error_code' => 200,
  178. 'msg' => '获取成功',
  179. 'data' => $data
  180. ]);
  181. } else {
  182. return response()->json([
  183. 'error_code' => 0,
  184. 'msg' => '获取失败'
  185. ]);
  186. }
  187. }
  188. /* 修改信息 */
  189. public function changeUserInfo(Request $request)
  190. {
  191. $rules = [
  192. 'telphone' => 'required|regex:/^1[345789]\d{9}$/',
  193. 'name' => 'required|max:16',
  194. ];
  195. $messages = [
  196. 'name.required' => '党员名称不能为空.',
  197. 'name.max' => '党员名称不能超过16个字符.',
  198. 'telphone.required' => '手机号不能为空.',
  199. 'telphone.regex' => '手机号格式有误.',
  200. ];
  201. $validator = Validator::make($request->all(), $rules, $messages);
  202. if ($validator->fails()) {
  203. return response()->json([
  204. 'error_code' => 41113,
  205. 'msg' => $validator->errors()->first()
  206. ]);
  207. }
  208. $info['name'] = $request->name;
  209. $info['telphone'] = $request->telphone;
  210. $userid = Auth::user()->id;
  211. $row = DB::table('users')->where('id', $userid)->update($info);
  212. if ($row) {
  213. return response()->json([
  214. 'error_code' => 200,
  215. 'msg' => '修改成功'
  216. ]);
  217. } else {
  218. return response()->json([
  219. 'error_code' => 0,
  220. 'msg' => '修改失败'
  221. ]);
  222. }
  223. }
  224. /*下载承诺书*/
  225. public function downloadCommitBook(Request $request)
  226. {
  227. $url = 'http://' . $request->server('SERVER_NAME') . '/images/commit/承诺书模板.doc';
  228. return response()->json([
  229. 'error_code' => 200,
  230. 'url' => $url
  231. ]);
  232. }
  233. /** 上传承诺书 */
  234. public function uploadCommitBook(Request $request)
  235. {
  236. $file = $request->file('file');//获取上传的文件
  237. if ($file->isValid()) {
  238. $filename = $file->getClientOriginalName();//获取上传文件的文件名(带后缀,如abc.png)
  239. $fileextension = $file->getClientOriginalExtension();//获取上传文件的后缀(如abc.png,获取到的为png)
  240. if (!preg_match('/(jpg|jpeg|png|gif)/', strtolower($filename))) {
  241. return response()->json([
  242. 'error_code' => 0,
  243. 'msg' => '您只能上传通用的图片格式'
  244. ]);
  245. }
  246. $filesize = $file->getSize();//获取上传文件的大小
  247. if ($filesize / 1024 > 2000) {
  248. return response()->json([
  249. 'error_code' => 0,
  250. 'msg' => '请检查您上传的文件不能大于2000KB'
  251. ]);
  252. }
  253. $newfilename = date("YmdHis") . mt_rand(1000, 9999) . substr(md5(uniqid(rand(1000, 9999))), 6, 18) . '.' . $fileextension;
  254. $newpath = $request->server('DOCUMENT_ROOT') . '/images/commit';
  255. $path = $file->move($newpath, $newfilename);
  256. if ($path) {
  257. $imgurl = 'http://' . $request->server('SERVER_NAME') . '/images/commit/' . $newfilename;
  258. $userid = Auth::user()->id;
  259. $row = DB::table('upload_commit_log')->insert([
  260. 'uid' => $userid,
  261. 'imageUrl' => $imgurl,
  262. 'created_at' => date("Y-m-d H:i:s")
  263. ]);
  264. if ($row) {
  265. return response()->json([
  266. 'error_code' => 200,
  267. 'msg' => '承诺书上传成功',
  268. 'location' => $imgurl
  269. ]);
  270. } else {
  271. return response()->json([
  272. 'error_code' => 0,
  273. 'msg' => '承诺书上传失败'
  274. ]);
  275. }
  276. } else {
  277. return response()->json([
  278. 'error_code' => 0,
  279. 'msg' => '承诺书图片上传失败'
  280. ]);
  281. }
  282. } else {
  283. return response()->json([
  284. 'error_code' => 0,
  285. 'msg' => '承诺书图片上传失败'
  286. ]);
  287. }
  288. }
  289. /* 获取承诺书*/
  290. public function getCommitList(Request $request)
  291. {
  292. $uid = Auth::user()->id;
  293. $page_size = $request->page_size;
  294. $page_index = $request->page_index;
  295. $num = ($page_index - 1) * $page_size;
  296. $count = DB::table('upload_commit_log')
  297. ->where('uid', $uid)
  298. ->count();
  299. if ($count > 0) {
  300. $list = DB::table('upload_commit_log')
  301. ->where('uid', $uid)
  302. ->orderBy('id', 'desc')
  303. ->skip($num)->take($page_size)->get();
  304. if ($list) {
  305. return response()->json([
  306. 'error_code' => 200,
  307. 'msg' => '获取承诺书成功',
  308. 'data' => $list,
  309. 'count' => $count
  310. ]);
  311. } else {
  312. return response()->json([
  313. 'error_code' => 0,
  314. 'msg' => '获取承诺书失败'
  315. ]);
  316. }
  317. } else {
  318. return response()->json([
  319. 'error_code' => 200,
  320. 'msg' => '没有承诺书信息',
  321. 'data' => [],
  322. 'count' => $count
  323. ]);
  324. }
  325. }
  326. /** 删除承诺书 */
  327. public function destoryCommit(Request $request)
  328. {
  329. $rules = [
  330. 'id' => 'required',
  331. ];
  332. $messages = [
  333. 'id.required' => '请选择要删除的承诺书.'
  334. ];
  335. $validator = Validator::make($request->all(), $rules, $messages);
  336. if ($validator->fails()) {
  337. return response()->json([
  338. 'error_code' => 41113,
  339. 'msg' => $validator->errors()->first()
  340. ]);
  341. }
  342. $where['id'] = $request->id;
  343. $commit = DB::table('upload_commit_log')->where($where)->first();
  344. if (empty($commit)) {
  345. return response()->json([
  346. 'error_code' => 400010,
  347. 'msg' => '承诺书不存在'
  348. ]);
  349. }
  350. $row = DB::table('upload_commit_log')
  351. ->where($where)
  352. ->delete();
  353. if ($row) {
  354. $filePath = $commit->imageUrl;
  355. $fileName = explode('/', $filePath);
  356. $commitName = end($fileName);
  357. $path = $request->server('DOCUMENT_ROOT') . '/images/commit/' . $commitName;
  358. Log::info('ID为 ' . $commit->uid . ' 用户的承诺书被删除');
  359. unlink($path);
  360. return response()->json([
  361. 'error_code' => 200,
  362. 'msg' => '删除成功'
  363. ]);
  364. } else {
  365. return response()->json([
  366. 'error_code' => 0,
  367. 'msg' => '删除失败'
  368. ]);
  369. }
  370. }
  371. public function getUserTeamInfo()
  372. {
  373. $uid = Auth::user()->id;
  374. $teamid = DB::table('users')->where('id', $uid)->value('team_id');
  375. if ($teamid) {
  376. $data = DB::table('team')->where('id', $teamid)->first();
  377. if ($data) {
  378. return response()->json([
  379. 'error_code' => 200,
  380. 'msg' => '获取支部信息成功',
  381. 'data' => $data
  382. ]);
  383. } else {
  384. return response()->json([
  385. 'error_code' => 0,
  386. 'msg' => '获取支部信息失败'
  387. ]);
  388. }
  389. } else {
  390. return response()->json([
  391. 'error_code' => 0,
  392. 'msg' => '获取支部信息失败'
  393. ]);
  394. }
  395. }
  396. /**
  397. * Get the authenticated User
  398. *
  399. * @return \Illuminate\Http\JsonResponse
  400. */
  401. public function me()
  402. {
  403. return response()->json($this->guard()->user());
  404. }
  405. /**
  406. * Log the user out (Invalidate the token)
  407. *
  408. * @return \Illuminate\Http\JsonResponse
  409. */
  410. public function logout()
  411. {
  412. $this->guard()->logout();
  413. return response()->json(['message' => 'Successfully logged out']);
  414. }
  415. /**
  416. * Refresh a token.
  417. *
  418. * @return \Illuminate\Http\JsonResponse
  419. */
  420. public function refresh()
  421. {
  422. return $this->respondWithToken($this->guard()->refresh());
  423. }
  424. /**
  425. * Get the token array structure.
  426. *
  427. * @param string $token
  428. *
  429. * @return \Illuminate\Http\JsonResponse
  430. */
  431. protected function respondWithToken($token)
  432. {
  433. return response()->json([
  434. 'access_token' => $token,
  435. 'token_type' => 'bearer',
  436. 'expires_in' => $this->guard()->factory()->getTTL() * 60
  437. ]);
  438. }
  439. /**
  440. * Get the guard to be used during authentication.
  441. *
  442. * @return \Illuminate\Contracts\Auth\Guard
  443. */
  444. public function guard()
  445. {
  446. return Auth::guard();
  447. }
  448. }