UserController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 思维定制
  5. * Date: 2018/7/13
  6. * Time: 15:08
  7. */
  8. namespace App\Http\Controllers\Api\V1;
  9. use App\Models\FavoriteModel;
  10. use App\Models\MessagesFollowerModel;
  11. use App\Models\MessagesInfoModel;
  12. use App\Models\MessagesTagModel;
  13. use App\Models\PaymentInfoModel;
  14. use App\Models\SeenModel;
  15. use App\Models\UserInfoModel;
  16. use Illuminate\Http\Request;
  17. use Illuminate\Support\Facades\DB;
  18. use Validator;
  19. use App\Services\Base\ErrorCode;
  20. class UserController extends Controller
  21. {
  22. /**
  23. * @api {post} /api/user/release 发布知识(userRelease)
  24. * @apiDescription 发布知识(userRelease)userRelease
  25. * @apiGroup User
  26. * @apiPermission none
  27. * @apiVersion 0.1.0
  28. * @apiParam {text} content 内容
  29. * @apiParam {string} title 标题
  30. * @apiParam {number} price 价格
  31. * @apiParam {int} type 知识类型 1 悬赏 2 付费 0免费
  32. * @apiParam {text} pic_url 图片
  33. * @apiParam {array} tag['id'] 标签ID tag['name'] 标签内容
  34. * @apiSuccessExample {json} Success-Response:
  35. * HTTP/1.1 200 OK
  36. * {
  37. * "status": true,
  38. * "status_code": 0,
  39. * "message": "",
  40. * "data": {
  41. * "msg": "添加成功"
  42. * }
  43. *}
  44. * @apiErrorExample {json} Error-Response:
  45. * HTTP/1.1 400 Bad Request
  46. * {
  47. * "state": false,
  48. * "code": 1000,
  49. * "message": "传入参数不正确",
  50. * "data": null or []
  51. * }
  52. */
  53. public function userRelease(Request $request)
  54. {
  55. $validator = Validator::make($request->all(),
  56. [
  57. 'content' => 'required',
  58. 'type' => 'required',
  59. 'title' => 'required',
  60. ],
  61. [
  62. 'content.required' => '内容不能为空!',
  63. 'type.required' => 'type不能为空!',
  64. 'title.required' => '标题不能为空!'
  65. ]
  66. );
  67. if ($validator->fails()) {
  68. return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
  69. }
  70. $userAuth = Auth('api')->user();
  71. if(!$userAuth){
  72. $msg = 'token已过期,请重新登录';
  73. return $this->api($msg);
  74. }
  75. DB::beginTransaction();
  76. $data = $request->input();
  77. $tag = $data['tag'];
  78. /*$tag[0]['name'] = 'asd';
  79. $tag[0]['id'] = 0;
  80. $tag[1]['id'] = 0;
  81. $tag[1]['name'] = 'dfse';*/
  82. $content['content'] = $data['content'];
  83. $content['title'] = $data['title'];
  84. $content['price'] = $data['price'];
  85. $content['type'] = $data['type'];
  86. $content['pic_url'] = $data['pic_url'];
  87. $content['sort'] = 1;
  88. $content['state'] = 0;
  89. $user = UserInfoModel::find($userAuth->id);
  90. $content['phone'] = $user->mobile;
  91. $content['user_id'] = $user->id;
  92. $create_res = MessagesInfoModel::create($content);
  93. if($data['type'] == 1){
  94. $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
  95. $user->money -= $data['price'];
  96. if($user->money<0){
  97. $msg = '您的余额已不足,请先充值';
  98. DB::rollback();
  99. return $this->api(compact('msg'));
  100. }
  101. if(!$user->save()){
  102. $msg = '购买失败';
  103. DB::rollback();
  104. return $this->api(compact('msg'));
  105. }
  106. $save['openid'] = $user->openid;
  107. $save['out_trade_no'] = $out_trade_no;
  108. $save['to_user'] = 0;
  109. $save['msg_id'] = $create_res->id;
  110. $save['user_id'] = $userAuth->id;
  111. $save['price'] = $data['price'];
  112. $save['type'] = 3;
  113. $res = PaymentInfoModel::create($save);
  114. if(!$res) {
  115. $msg = '购买失败';
  116. DB::rollback();
  117. return $this->api(compact('msg'));
  118. }
  119. }
  120. foreach($tag as $key=>$val) {
  121. if($val['id'] == 0){
  122. $save['name'] = $val['name'];
  123. $save['sort'] = 0;
  124. $res = MessagesTagModel::create($save);
  125. $id = $res->id;
  126. } else {
  127. $id = $val['id'];
  128. }
  129. $relation['messages_id'] = $create_res->id;
  130. $relation['tag_id'] = $id;
  131. DB::table('messages_tag_relation')->insert($relation);
  132. }
  133. $msg = '添加成功';
  134. DB::commit();
  135. return $this->api(compact('msg'));
  136. }
  137. /**
  138. * @api {get} /api/user/edit_favorite 添加/删除收藏(userEditFavorite)
  139. * @apiDescription 添加/删除收藏(userEditFavorite)userEditFavorite
  140. * @apiGroup User
  141. * @apiPermission none
  142. * @apiVersion 0.1.0
  143. * @apiParam {int} message_id 知识id
  144. * @apiParam {int} type 操作类型 1 添加 0 删除
  145. * @apiSuccessExample {json} Success-Response:
  146. * HTTP/1.1 200 OK
  147. * {
  148. * "status": true,
  149. * "status_code": 0,
  150. * "message": "",
  151. * "data": {
  152. * "msg": "添加成功"
  153. * }
  154. *}
  155. * @apiErrorExample {json} Error-Response:
  156. * HTTP/1.1 400 Bad Request
  157. * {
  158. * "state": false,
  159. * "code": 1000,
  160. * "message": "传入参数不正确",
  161. * "data": null or []
  162. * }
  163. */
  164. public function userEditFavorite(Request $request)
  165. {
  166. $validator = Validator::make($request->all(),
  167. [
  168. 'messages_id' => 'required',
  169. 'type' => 'required',
  170. ],
  171. [
  172. 'messages_id.required' => '信息id不能为空!',
  173. 'type.required' => 'type不能为空!',
  174. ]
  175. );
  176. if ($validator->fails()) {
  177. return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
  178. }
  179. $userAuth = Auth('api')->user();
  180. if(!$userAuth){
  181. $msg = 'token已过期,请重新登录';
  182. return $this->api($msg);
  183. }
  184. $data = $request->input();
  185. //dd($data);
  186. $check = FavoriteModel::where([['user_id',$userAuth->id],['messages_id',$data['messages_id']]])->first();
  187. if($data['type'] == 1) {
  188. if($check){
  189. $msg = '已添加收藏,请勿重复操作';
  190. return $this->api(compact('msg'));
  191. }
  192. $save['user_id'] = $userAuth->id;
  193. $save['messages_id'] = $data['messages_id'];
  194. $res = FavoriteModel::create($save);
  195. if($res){
  196. $msg = '添加成功';
  197. } else {
  198. $msg = '添加失败';
  199. }
  200. return $this->api(compact('msg'));
  201. } else {
  202. if(!$check){
  203. $msg = '已移除收藏,请勿重复操作';
  204. return $this->api(compact('msg'));
  205. }
  206. $favorite = FavoriteModel::find($check->id);
  207. $res = $favorite->delete();
  208. if($res){
  209. $msg = '删除成功';
  210. } else {
  211. $msg = '删除失败';
  212. }
  213. return $this->api(compact('msg'));
  214. }
  215. }
  216. /**
  217. * @api {get} /api/user/favorite 添加/删除收藏(userFavorite)
  218. * @apiDescription 添加/删除收藏(userFavorite)userFavorite
  219. * @apiGroup User
  220. * @apiPermission none
  221. * @apiVersion 0.1.0
  222. * @apiSuccessExample {json} Success-Response:
  223. * HTTP/1.1 200 OK
  224. * {
  225. * "status": true,
  226. * "status_code": 0,
  227. * "message": "",
  228. * "data": {
  229. * "messages": {
  230. * "id": 1,
  231. * "title": "爱我的",
  232. * "type": 0,
  233. * }
  234. * }
  235. *}
  236. * @apiErrorExample {json} Error-Response:
  237. * HTTP/1.1 400 Bad Request
  238. * {
  239. * "state": false,
  240. * "code": 1000,
  241. * "message": "传入参数不正确",
  242. * "data": null or []
  243. * }
  244. */
  245. public function userFavorite(Request $request)
  246. {
  247. $userAuth = Auth('api')->user();
  248. if(!$userAuth){
  249. $msg = 'token已过期,请重新登录';
  250. return $this->api($msg);
  251. }
  252. $data = FavoriteModel::where('user_id',$userAuth->id)->paginate(5);
  253. $messages = array();
  254. foreach ($data as $key=>$val){
  255. $messages[] = MessagesInfoModel::where('id',$val['messages_id'])->select('id','title','type')->first();
  256. }
  257. return $this->api(compact('messages'));
  258. }
  259. /**
  260. * @api {get} /api/user/my_message 我的发布(userMyMessage)
  261. * @apiDescription 我的发布(userMyMessage)userMyMessage
  262. * @apiGroup User
  263. * @apiPermission none
  264. * @apiVersion 0.1.0
  265. * @apiParam {int} state 类型 -1 全部 0 免费 1 悬赏 2 付费
  266. * @apiSuccessExample {json} Success-Response:
  267. * HTTP/1.1 200 OK
  268. * {
  269. * "status": true,
  270. * "status_code": 0,
  271. * "message": "",
  272. * "data": {
  273. * "messages": {
  274. * "id": 1,
  275. * "title": "爱我的",
  276. * "type": 0,
  277. * }
  278. * }
  279. *}
  280. * @apiErrorExample {json} Error-Response:
  281. * HTTP/1.1 400 Bad Request
  282. * {
  283. * "state": false,
  284. * "code": 1000,
  285. * "message": "传入参数不正确",
  286. * "data": null or []
  287. * }
  288. */
  289. public function userMyMessage(Request $request)
  290. {
  291. $validator = Validator::make($request->all(),
  292. [
  293. 'state' => 'integer',
  294. ],
  295. [
  296. 'state.integer' => 'state参数错误!',
  297. ]
  298. );
  299. if ($validator->fails()) {
  300. return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
  301. }
  302. $userAuth = Auth('api')->user();
  303. if(!$userAuth){
  304. $msg = 'token已过期,请重新登录';
  305. return $this->api($msg);
  306. }
  307. $state = $request->input('state');
  308. if(!empty($state)){
  309. $messages = MessagesInfoModel::where([['user_id',$userAuth->id],['type',$state]])->select('id','title','type')->paginate(5);
  310. } else {
  311. $messages = MessagesInfoModel::where([['user_id',$userAuth->id]])->select('id','title','type')->paginate(5);
  312. }
  313. return $this->api(compact('messages'));
  314. }
  315. /**
  316. * @api {get} /api/user/get_message 我的参与(userGetMessages)
  317. * @apiDescription 我的参与(userGetMessages)userGetMessages
  318. * @apiGroup User
  319. * @apiPermission none
  320. * @apiVersion 0.1.0
  321. * @apiParam {int} state 类型 -1 全部 0 免费 1 悬赏 2 付费
  322. * @apiSuccessExample {json} Success-Response:
  323. * HTTP/1.1 200 OK
  324. * {
  325. * "status": true,
  326. * "status_code": 0,
  327. * "message": "",
  328. * "data": {
  329. * "messages": {
  330. * "id": 1,
  331. * "title": "爱我的",
  332. * "type": 0,
  333. * }
  334. * }
  335. *}
  336. * @apiErrorExample {json} Error-Response:
  337. * HTTP/1.1 400 Bad Request
  338. * {
  339. * "state": false,
  340. * "code": 1000,
  341. * "message": "传入参数不正确",
  342. * "data": null or []
  343. * }
  344. */
  345. public function userGetMessages(Request $request)
  346. {
  347. $validator = Validator::make($request->all(),
  348. [
  349. 'state' => 'integer',
  350. ],
  351. [
  352. 'state.integer' => 'state参数错误!',
  353. ]
  354. );
  355. if ($validator->fails()) {
  356. return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
  357. }
  358. $userAuth = Auth('api')->user();
  359. if(!$userAuth){
  360. $msg = 'token已过期,请重新登录';
  361. return $this->api($msg);
  362. }
  363. $state = $request->input('state');
  364. if(!empty($state)){
  365. $messages = MessagesFollowerModel::where([['user_id',$userAuth->id]])->infos()->where('type',$state)->paginate(5);
  366. } else {
  367. $messages = MessagesFollowerModel::where([['user_id',$userAuth->id]])->infos()->paginate(5);
  368. }
  369. return $this->api(compact('messages'));
  370. }
  371. /**
  372. * @api {get} /api/user/message_detail 我的发布详情(userMessageDetail)
  373. * @apiDescription 我的发布详情(userMessageDetail)userMessageDetail
  374. * @apiGroup User
  375. * @apiPermission none
  376. * @apiVersion 0.1.0
  377. * @apiParam {int} id 信息id
  378. * @apiSuccessExample {json} Success-Response:
  379. * HTTP/1.1 200 OK
  380. * {
  381. * "status": true,
  382. * "status_code": 0,
  383. * "message": "",
  384. * "data": {
  385. * "messages": {
  386. * "id": 1,
  387. * "title": "爱我的",
  388. * "content": "爱我的",
  389. * "user_id": 1,
  390. * "price": 1,
  391. * "phone": "18228068397",
  392. * "comment": "瓦坎达入口",
  393. * "type": 1,
  394. * "sort": 1,
  395. * "deleted_at": null,
  396. * "created_at": "2018-07-12 17:06:23",
  397. * "updated_at": "2018-07-12 17:06:26",
  398. * "state": 0,
  399. * "pic_url": "",
  400. * "followers_num": 1,
  401. * "followers": [
  402. * {
  403. * "id": 5,
  404. * "messages_id": 1,
  405. * "user_id": 1,
  406. * "username": "Richod",
  407. * "mobile": "1111",
  408. * "deleted_at": null,
  409. * "created_at": "2018-07-17 09:21:18",
  410. * "updated_at": "2018-07-17 09:21:18",
  411. * "state": 0
  412. * }
  413. * ],
  414. * "income": ""
  415. * }
  416. * }
  417. *}
  418. * @apiErrorExample {json} Error-Response:
  419. * HTTP/1.1 400 Bad Request
  420. * {
  421. * "state": false,
  422. * "code": 1000,
  423. * "message": "传入参数不正确",
  424. * "data": null or []
  425. * }
  426. */
  427. public function userMessageDetail(Request $request)
  428. {
  429. $id = $request->input('id');
  430. $messages = MessagesInfoModel::find($id);
  431. $messages->followers_num = MessagesFollowerModel::where([['messages_id',$messages->id]])->count();
  432. $messages->followers = array();
  433. if($messages->type == 1){
  434. $followers = MessagesFollowerModel::where([['messages_id',$messages->id]])->get();
  435. $messages->followers = $followers;
  436. $messages->income = '';
  437. }
  438. if($messages->type == 2){
  439. $followers = MessagesFollowerModel::where([['messages_id',$messages->id]])->get();
  440. $messages->followers = $followers;
  441. $messages->income = $messages->followers_num * $messages->price;
  442. }
  443. if($messages->type == 0) {
  444. $messages->followers = '';
  445. $messages->income = '';
  446. }
  447. return $this->api(compact('messages'));
  448. }
  449. /**
  450. * @api {get} /api/user/complete_message 结束悬赏(userCompleteMessages)
  451. * @apiDescription 结束悬赏(userCompleteMessages)userCompleteMessages
  452. * @apiGroup User
  453. * @apiPermission none
  454. * @apiVersion 0.1.0
  455. * @apiParam {int} message_id 知识id
  456. * @apiParam {int} follower_id 悬赏者信息id
  457. * @apiParam {int} type 操作类型 1 添加 0 删除
  458. * @apiSuccessExample {json} Success-Response:
  459. * HTTP/1.1 200 OK
  460. * "data": {
  461. * "code": 1
  462. * "msg": "添加成功"
  463. * }
  464. * @apiErrorExample {json} Error-Response:
  465. * HTTP/1.1 400 Bad Request
  466. * {
  467. * "state": false,
  468. * "code": 1000,
  469. * "message": "传入参数不正确",
  470. * "data": null or []
  471. * }
  472. */
  473. public function userCompleteMessages(Request $request)
  474. {
  475. $validator = Validator::make($request->all(),
  476. [
  477. 'message_id' => 'require|integer',
  478. 'follower_id' => 'require|integer',
  479. ],
  480. [
  481. 'message_id.require|integer' => 'message_id参数错误!',
  482. 'follower_id.require|integer' => 'follower_id参数错误!',
  483. ]
  484. );
  485. if ($validator->fails()) {
  486. return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
  487. }
  488. $userAuth = Auth('api')->user();
  489. if(!$userAuth){
  490. $msg = 'token已过期,请重新登录';
  491. return $this->api($msg);
  492. }
  493. $followers_id = $request->input('follower_id');
  494. $message_id = $request->input('message_id');
  495. $messages_followers = MessagesFollowerModel::find($followers_id);
  496. $messages = MessagesInfoModel::where([['id'=>$messages_followers->messages_id],['type',1],['state',0],['user_id',$userAuth->id]])->first();
  497. if(!$messages||$message_id!=$messages->id){
  498. $data['msg'] = '该知识不存在,或者已完成';
  499. $data['code'] = 0;
  500. return $this->api($data);
  501. }
  502. $user = UserInfoModel::find($messages_followers->user_id);
  503. $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
  504. $user->money += $messages->price;
  505. if(!$user->save()){
  506. $data['msg'] = '确认失败';
  507. $data['code'] = 0;
  508. return $this->api($data);
  509. }
  510. $save['openid'] = $user->openid;
  511. $save['out_trade_no'] = $out_trade_no;
  512. $save['to_user'] = $messages_followers->user_id;
  513. $save['user_id'] = 0;
  514. $save['msg_id'] = $messages->id;
  515. $save['price'] = $messages->price;
  516. $save['type'] = 3;
  517. $res = PaymentInfoModel::create($save);
  518. if(!$res) {
  519. $data['msg'] = '确认失败';
  520. $data['code'] = 1;
  521. } else {
  522. $data['msg'] = '确认成功';
  523. $data['code'] = 0;
  524. }
  525. $messages->state = 1;
  526. $messages->save();
  527. $messages_followers->state = 1;
  528. $messages_followers->save();
  529. return $this->api($data);
  530. }
  531. }