Information.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\model\InformationArticle;
  4. use app\common\model\InformationGoods;
  5. use app\common\model\NewsCate;
  6. use app\common\model\NutritionCase;
  7. use app\common\model\StoreBanner;
  8. use app\common\model\UserCollect;
  9. use app\common\model\UserTrack;
  10. /**
  11. * @title 资讯(营养百科)
  12. * @controller Information
  13. * @group base
  14. */
  15. class Information extends Base
  16. {
  17. public function initialize()
  18. {
  19. parent::initialize();
  20. parent::setUid();
  21. }
  22. /**
  23. * @title 获取分类(共两级)
  24. * @desc 获取分类
  25. * @author qc
  26. * @url /api/Information/getCateTree
  27. * @method GET
  28. * @header name:Authorization require:1 desc:Token
  29. * @return name:id type:int default:-- desc:分类id
  30. * @return name:logo type:string default:-- desc:图标
  31. * @return name:title type:string default:0 desc:分类名称
  32. * @return name:children type:array default:0 desc:下级(数据同上)
  33. */
  34. public function getCateTree()
  35. {
  36. $list = NewsCate::where(['is_deleted'=>0])->field('id,logo,title,pid,desc')->order('sort desc')->select()->toArray();
  37. $list = make_tree($list);
  38. $this->success('ok',['list'=>$list]);
  39. }
  40. /**
  41. * @title 获取二级分类
  42. * @desc 获取二级分类
  43. * @author qc
  44. * @url /api/Information/getSecondCate
  45. * @method GET
  46. * @header name:Authorization require:1 desc:Token
  47. * @param name:pid type:int default:-- desc:一级分类id
  48. * @return name:id type:int default:-- desc:分类id
  49. * @return name:logo type:string default:-- desc:图标
  50. * @return name:title type:string default:0 desc:分类名称
  51. * @return name:desc type:string default:0 desc:分类描述
  52. */
  53. public function getSecondCate()
  54. {
  55. $pid = input('pid');
  56. $list = NewsCate::where(['is_deleted'=>0,'pid'=>$pid])->field('id,logo,title,pid,desc')->order('sort desc')->select()->toArray();
  57. $this->success('ok',['list'=>$list]);
  58. }
  59. /**
  60. * @title 获取亚健康资讯标签
  61. * @desc 获取亚健康资讯标签
  62. * @author qc
  63. * @url /api/Information/getNutritionCaseList
  64. * @method GET
  65. * @header name:Authorization require:1 desc:Token
  66. * @return name:title type:string default:-- desc:标签名
  67. */
  68. public function getNutritionCaseList()
  69. {
  70. $list = NutritionCase::field('id,title')->where(['status'=>1,'is_deleted'=>0])->order('sort desc ,id desc')->select()->toArray();
  71. $this->success('ok',['list'=>$list]);
  72. }
  73. /**
  74. * @title 获取亚健康资讯标签详情
  75. * @desc 获取亚健康资讯标签详情
  76. * @author qc
  77. * @url /api/Information/getNutritionCaseDetail
  78. * @method GET
  79. * @header name:Authorization require:1 desc:Token
  80. * @param name:id type:int default:-- desc:标签id
  81. * @return name:title type:string default:-- desc:标签名
  82. * @return name:intro type:string default:-- desc:详情介绍
  83. */
  84. public function getNutritionCaseDetail()
  85. {
  86. $id= input('get.id');
  87. $detail = NutritionCase::where('id',$id)->find()->toArray();
  88. $this->success('ok',['detail'=>$detail]);
  89. }
  90. /**
  91. * @title 随机获取亚健康资讯标签
  92. * @desc 随机获取
  93. * @author qc
  94. * @url /api/Information/getRandNutritionCase
  95. * @method GET
  96. * @header name:Authorization require:1 desc:Token
  97. * @param name:num type:int default:4 desc:随机数量
  98. * @return name:title type:string default:-- desc:标签名
  99. */
  100. public function getRandNutritionCase()
  101. {
  102. $num = input('get.num',4);
  103. $list = NutritionCase::field('id,title')->where(['status'=>1,'is_deleted'=>0])->order('sort desc ,id desc')->column('title','id');
  104. $rand_key = array_rand($list,$num);
  105. $rand_list = [];
  106. foreach ($rand_key as $key) {
  107. $rand_list[] = ['id'=>$key,'title'=>$list[$key]];
  108. }
  109. $this->success('ok',['list'=>$rand_list]);
  110. }
  111. /**
  112. * @title 获取轮播图
  113. * @desc 获取轮播图
  114. * @author qc
  115. * @url /api/Information/getBanner
  116. * @method GET
  117. * @header name:Authorization require:1 desc:Token
  118. * @param name:num type:int default:5 desc:查询数量
  119. * @return name:cover type:srting default:-- desc:图片路径
  120. * @return name:link type:srting default:-- desc:链接
  121. */
  122. public function getBanner()
  123. {
  124. $num = input('get.num',5);
  125. $list = StoreBanner::where(['place'=>2,'is_deleted'=>0])
  126. ->field('id,cover,link')
  127. ->limit(0,$num)
  128. ->order('sort desc ,id desc')
  129. ->select()->toArray();
  130. $this->success('ok',['list'=>$list]);
  131. }
  132. /**
  133. * @title 获取资讯列表
  134. * @desc
  135. * @author qc
  136. * @method GET
  137. * @url /api/Information/getInformationList
  138. * @header name:Authorization require:1 desc:Token
  139. * @param name:page type:int default:1 desc:页数
  140. * @param name:page_num type:int default:20 desc:每页数量
  141. * @param name:title type:string default:-- desc:标题
  142. * @param name:type type:int default:0 desc:类型(0全部,1图文,2视频)
  143. * @param name:first_classify type:int default:0 desc:一级分类
  144. * @param name:second_classify type:int default:0 desc:二级分类
  145. * @param name:is_top type:int default:0 desc:置顶查询传1(置顶文章查询)
  146. * @param name:label_id type:int default:0 desc:标签id(亚健康资讯)
  147. * @return name:title type:string default:-- desc:标题
  148. * @return name:cover type:string default:-- desc:封面
  149. * @return name:video_url type:string default:-- desc:视频地址
  150. * @return name:detail type:string default:-- desc:详情(视频没有这个)
  151. * @return name:first_classify type:int default:-- desc:一级分类(/api/Information/getCateTree这个接口返回的第一级id)
  152. * @return name:second_classify type:int default:-- desc:二级分类(/api/Information/getCateTree这个接口返回的第二级id)
  153. * @return name:type type:string default:-- desc:1图文2视频
  154. * @return name:is_top type:int default:-- desc:是否置顶(0否,1是)
  155. * @return name:read_num type:int default:-- desc:阅读量
  156. * @return name:is_collect type:int default:-- desc:是否收藏
  157. * @return name:collect_num type:int default:-- desc:收藏量
  158. * @return name:is_hot type:int default:-- desc:是否热门(0否,1是)
  159. * @return name:is_new type:int default:-- desc:是否是最新(0否,1是)
  160. */
  161. public function getInformationList()
  162. {
  163. $sel_where = [];
  164. $sel_where[] = ['is_deleted','=',0];
  165. $sel_where[] = ['status','=',1];
  166. $title = input('get.title');
  167. $type = input('get.type');
  168. $is_top = input('get.is_top');
  169. $first_classify = input('get.first_classify');
  170. $second_classify = input('get.second_classify');
  171. $label_id = input('get.label_id');
  172. if($title) $sel_where[] = ['title','like','%'.$title.'%'];
  173. if($type) $sel_where[] = ['type','=',$type];
  174. if($first_classify) $sel_where[] = ['first_classify','=',$first_classify];
  175. if($second_classify) $sel_where[] = ['second_classify','=',$second_classify];
  176. if($is_top) $sel_where[] = ['is_top','=',$is_top];
  177. if($label_id) $sel_where[] = ['label','like','%'.'|'.$label_id.'|'.'%'];
  178. $new_ids = InformationArticle::order('id desc')->limit(0,3)->column('id');
  179. $list = InformationArticle::where($sel_where)
  180. ->order('is_top desc,sort desc ,id desc')
  181. ->limit($this->off_set,$this->page)->select()->toArray();
  182. array_walk($list,function (&$v,$k)use ($new_ids){
  183. $v['is_collect'] = UserCollect::checkCollectByType($this->user_id,2,$v['id']);
  184. $v['is_new'] = in_array($v['id'],$new_ids)? 1 :0;
  185. $v['collect_num'] = UserCollect::where(['coll_type'=>2,'coll_id'=>$v['id']])->count();
  186. $v['is_hot'] = $v['collect_num'] > 10000 ? 1:0;
  187. });
  188. $this->success('ok',['list'=>$list]);
  189. }
  190. /**
  191. * @title 获取资讯详情
  192. * @desc 获取资讯详情
  193. * @author qc
  194. * @method GET
  195. * @url /api/Information/getInformationDetail
  196. * @header name:Authorization require:1 desc:Token
  197. * @param name:id type:int default:0 desc:资讯id
  198. * @return name:title type:string default:-- desc:标题
  199. * @return name:cover type:string default:-- desc:封面
  200. * @return name:video_url type:string default:-- desc:视频地址
  201. * @return name:detail type:string default:-- desc:详情(视频没有这个)
  202. * @return name:first_classify type:int default:-- desc:一级分类
  203. * @return name:second_classify type:int default:-- desc:二级分类
  204. * @return name:type type:string default:-- desc:1图文2视频
  205. * @return name:is_top type:int default:-- desc:是否置顶(0否,1是)
  206. * @return name:read_num type:int default:-- desc:阅读量
  207. * @return name:is_collect type:int default:-- desc:是否收藏(0否,1是)
  208. * @return name:collect_num type:int default:-- desc:收藏量
  209. * @return name:is_hot type:int default:-- desc:是否热门(0否,1是)
  210. * @return name:label type:int default:-- desc:亚健康标签id串(格式:|id|id|)
  211. * @return name:label_name type:array default:-- desc:亚健康标签
  212. * @return name:label_name.title type:array default:-- desc:亚健康标签名
  213. * @return name:platform_name type:string default:-- desc:平台名称
  214. */
  215. public function getInformationDetail()
  216. {
  217. $sel_where = [];
  218. $sel_where[] = ['is_deleted','=',0];
  219. $sel_where[] = ['status','=',1];
  220. $sel_where[] = ['id','=',input('get.id')];
  221. if($this->user_id)UserTrack::createTrack($this->user_id,2,input('get.id'));
  222. $detail = InformationArticle::where($sel_where)
  223. ->order('is_top desc,sort desc ,id desc')->find();
  224. if(!$detail)$this->error('该资讯已下线');
  225. $detail['is_collect'] = UserCollect::checkCollectByType($this->user_id,2,$detail->id);
  226. $detail['collect_num'] = UserCollect::where(['coll_type'=>2,'coll_id'=>$detail->id])->count();
  227. $detail['is_hot'] = $detail['collect_num'] > 10000 ? 1:0;
  228. $detail['label_name'] = [];
  229. if($detail['label']){
  230. $label_id = explode('|',trim($detail['label'],'|'));
  231. $detail['label_name'] = NutritionCase::field('id,title')->where('id','in',$label_id)->select()->toArray();
  232. }
  233. $detail['platform_name'] = config('text.platform_name');
  234. $this->success('ok',['detail'=>$detail]);
  235. }
  236. /**
  237. * @title 获取资讯相关商品
  238. * @desc 获取资讯相关商品
  239. * @author qc
  240. * @method GET
  241. * @url /api/Information/getInformationGoods
  242. * @header name:Authorization require:1 desc:Token
  243. * @param name:id type:int default:0 desc:资讯id
  244. * @param name:page type:int default:1 desc:页数
  245. * @param name:page_num type:int default:20 desc:每页数量
  246. * @return name:id type:string default:-- desc:资讯相关商品记录id
  247. * @return name:news_id type:string default:-- desc:资讯id
  248. * @return name:goods_set type:array default:-- desc:商品信息
  249. * @return name:goods_set.name type:string default:-- desc:商品名称
  250. * @return name:goods_set.desc type:float default:-- desc:商品简介(副标题)
  251. * @return name:goods_set.cover type:string default:-- desc:商品封面
  252. * @return name:goods_set.low_price type:float default:-- desc:最低价格
  253. */
  254. public function getInformationGoods()
  255. {
  256. $id = input('get.id');
  257. $list = InformationGoods::with('goodsSet')->where(['news_id'=>$id])->limit($this->off_set,$this->page_num)->select();
  258. $this->success('ok',['list'=>$list]);
  259. }
  260. }