UserController.php 17 KB

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