ArticleController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace app\api\controller\publics;
  3. use app\models\article\Article;
  4. use app\models\article\ArticleCategory;
  5. use app\models\article\ArticleGood;
  6. use app\models\article\ArticleReply;
  7. use app\models\user\EnterpriseUser;
  8. use app\Request;
  9. use crmeb\services\CacheService;
  10. use crmeb\services\UtilService;
  11. /**
  12. * 文章类
  13. * Class ArticleController
  14. * @package app\api\controller\publics
  15. */
  16. class ArticleController
  17. {
  18. /**
  19. * 文章列表
  20. * @param Request $request
  21. * @param $cid
  22. * @return mixed
  23. */
  24. public function lst(Request $request, $cid)
  25. {
  26. list($page, $limit) = UtilService::getMore([
  27. ['page', 1],
  28. ['limit', 10],
  29. ], $request, true);
  30. $list = Article::cidByArticleList($cid, $page, $limit, "id,title,image_input,visit,from_unixtime(add_time,'%Y-%m-%d %H:%i') as add_time,synopsis,url") ?? [];
  31. if (is_object($list)) $list = $list->toArray();
  32. return app('json')->successful($list);
  33. }
  34. /**
  35. * 文章详情
  36. * @param $id
  37. * @return mixed
  38. * @throws \think\db\exception\DataNotFoundException
  39. * @throws \think\db\exception\ModelNotFoundException
  40. * @throws \think\db\exception\DbException
  41. */
  42. public function details($id, Request $request)
  43. {
  44. $content = Article::getArticleOne($id);
  45. if (!$content) return app('json')->fail('此文章已经不存在!');
  46. $content["visit"] = $content["visit"] + 1;
  47. $content["cart_name"] = ArticleCategory::getArticleCategoryField($content['cid']);
  48. $content['add_time'] = date($content['add_time']);
  49. $uid = $request->uid();
  50. $content['mer'] = EnterpriseUser::getInfo($content['mer_id'], $uid);
  51. $content['goods'] = ArticleGood::where('aid', $id)->where('status', 1)->count();
  52. if ($request->isLogin()) {
  53. $content['is_goods'] = ArticleGood::where('aid', $id)->where('uid', $request->uid())->find();
  54. }
  55. Article::edit(['visit' => $content["visit"]], $id);//增加浏览次数
  56. //根据文章查询对应的订阅号信息
  57. return app('json')->successful($content);
  58. }
  59. /**
  60. * 首页推荐文章
  61. * @return mixed
  62. */
  63. public function hot(Request $request)
  64. {
  65. $page = $request->get();
  66. $list = Article::getArticleListHot("id,title,image_input,visit,add_time,synopsis,url,mer_id,is_hot,is_top", $page) ?? [];
  67. if (is_object($list)) $list = $list->toArray();
  68. return app('json')->successful($list);
  69. }
  70. //检索
  71. public function search(Request $request)
  72. {
  73. $data = $request->get();
  74. $model = new Article();
  75. $res = $model->search($data);
  76. if (is_object($res)) $res = $res->toArray();
  77. return app('json')->successful($res);
  78. }
  79. // 相关阅读
  80. public function relevant(Request $request)
  81. {
  82. $type = $request->get('type');
  83. $num = mt_rand(0, 20);
  84. $list = Article::where('cid', $type)->where('status',1)->where('is_check',1)->limit($num, 5)->select();
  85. $ct = count($list);
  86. if (empty($ct)) {
  87. $list = Article::where('cid', $type)->where('status',1)->where('is_check',1)->limit(0, 5)->select();
  88. }
  89. if (is_object($list)) $list = $list->toArray();
  90. return app('json')->successful($list);
  91. }
  92. /**
  93. * 文章 banner
  94. * @return mixed
  95. */
  96. public function banner()
  97. {
  98. $list = Article::getArticleListBanner("id,title,image_input,visit,from_unixtime(add_time,'%Y-%m-%d %H:%i') as add_time,synopsis,url") ?? [];
  99. if (is_object($list)) $list = $list->toArray();
  100. return app('json')->successful($list);
  101. }
  102. public function replyList($id, Request $request)
  103. {
  104. $page = $request->get('page', 1);
  105. $limit = $request->get('limit', 10);
  106. $list = ArticleReply::with('user')
  107. ->where('aid', $id)
  108. ->order('id desc')
  109. ->page($page, $limit)->select()
  110. ->each(function ($item) {
  111. if ($item['to_id']) {
  112. $item['to'] = ArticleReply::with('user')->where('id', $item['to_id'])->find();
  113. }
  114. });
  115. $count = ArticleReply::where('aid', $id)->count();
  116. return app('json')->success('ok', compact('list', 'count'));
  117. }
  118. public function reply($id, Request $request)
  119. {
  120. $last_time = CacheService::get('reply_' . $request->uid() . '_' . $id, 0);
  121. if (time() - $last_time < 60) return app('json')->fail('请勿连续多次提交评论');
  122. CacheService::set('reply_' . $request->uid() . '_' . $id, time());
  123. list($content, $to_id) = UtilService::postMore([
  124. ['content', '', '', '', ['not_empty_check'], ['请输入回复的内容']],
  125. ['to_id', 0]
  126. ], $request, true);
  127. $res = ArticleReply::create(['uid' => $request->uid(), 'aid' => $id, 'to_id' => $to_id, 'add_time' => time(), 'content' => $content]);
  128. if ($to_id) {
  129. //发送通知
  130. }
  131. if ($res)
  132. return app('json')->success('评论成功');
  133. else {
  134. return app('json')->fail('评论失败');
  135. }
  136. }
  137. public function good($id, Request $request)
  138. {
  139. $info = ArticleGood::where('aid', $id)->where('uid', $request->uid())->find();
  140. if ($info) {
  141. $res = ArticleGood::where('id', $info['id'])->update(['status' => ($info['status'] ? 0 : 1)]);
  142. } else {
  143. $res = ArticleGood::create(['uid' => $request->uid(), 'aid' => $id, 'status' => 1]);
  144. }
  145. if ($res)
  146. return app('json')->success('操作成功');
  147. else {
  148. return app('json')->fail('操作失败');
  149. }
  150. }
  151. public function myReply(Request $request)
  152. {
  153. $page = $request->get('page', 1);
  154. $limit = $request->get('limit', 10);
  155. $list = ArticleReply::with('article')->where('uid', $request->uid())->order('id desc')->page($page, $limit)->select()
  156. ->each(function ($item) {
  157. if ($item['to_id']) {
  158. $item['to'] = ArticleReply::with('user')->where('id', $item['to_id'])->find();
  159. }
  160. });
  161. $count = ArticleReply::where('uid', $request->uid())->count();
  162. return app('json')->success('ok', compact('list', 'count'));
  163. }
  164. public function toMyReply(Request $request)
  165. {
  166. $page = $request->get('page', 1);
  167. $limit = $request->get('limit', 10);
  168. $ids = ArticleReply::where('uid', $request->uid())->column('id');
  169. $list = ArticleReply::with(['user', 'article'])->where('to_id', 'in', $ids)->where('to_id', '<>', 0)->order('id desc')->page($page, $limit)->select()
  170. ->each(function ($item) {
  171. if ($item['to_id']) {
  172. $item['to'] = ArticleReply::where('id', $item['to_id'])->find();
  173. }
  174. });
  175. $count = ArticleReply::where('to_id', 'in', $ids)->where('to_id', '<>', 0)->count();
  176. return app('json')->success('ok', compact('list', 'count'));
  177. }
  178. }