Info.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 小程序公共API服务
  7. */
  8. namespace app\ais\controller\api\v1;
  9. use app\ais\controller\api\Base;
  10. use app\ais\model\AisCity;
  11. use app\ais\model\AisInfoCate;
  12. use app\ais\model\AisInfo;
  13. use app\ais\model\AisInfoFollow;
  14. use app\ais\model\AisInfoMp;
  15. use app\ais\model\AisConfig;
  16. use app\ais\model\AisInfoReply;
  17. use app\ais\model\AisStore;
  18. use app\common\model\SystemUser;
  19. use think\facade\Config;
  20. use util\Util;
  21. class Info extends Base{
  22. /**
  23. * 获取配置参数
  24. * @return void
  25. */
  26. public function getconfig(){
  27. $this->apiSign();
  28. $result = AisConfig::getConfig($this->miniapp_id);
  29. if(empty($result)){
  30. return enjson(204);
  31. }else{
  32. $data = json_decode($result->info,true);
  33. foreach ($data as $key => $value) {
  34. $data[$key]['money'] = intval($value['money']);
  35. }
  36. return enjson(200,$data);
  37. }
  38. }
  39. /**
  40. * 读取信息列表
  41. * @param integer 读取ID
  42. * @return json
  43. */
  44. public function index(){
  45. $param['page'] = $this->request->param('page/d');
  46. $param['cate_id'] = $this->request->param('cate_id/d',0);
  47. $param['citycode'] = $this->request->param('citycode/d');
  48. $param['state'] = $this->request->param('state/d',1);
  49. $param['keyword'] = $this->request->param('keyword/s');
  50. $this->apiSign($param);
  51. $order = "is_top desc,sort desc,id desc";
  52. $where = [];
  53. $where['member_miniapp_id'] = $this->miniapp_id;
  54. $where['is_lock'] = 0;
  55. if($param['citycode']){
  56. $where['citycode'] = AisCity::whereIn('parent_id',AisCity::where(['code' => $param['citycode']])->column('parent_id'))->column('code');
  57. }
  58. if($param['cate_id']){
  59. $where['cate_id'] = $param['cate_id'];
  60. }else{
  61. if(empty($param['keyword'])){
  62. if(!$param['state']){ //关注
  63. //读取我的关注UID
  64. $this->isUserAuth(); //我的关注要登录
  65. $uid = AisInfoFollow::where(['uid' => $this->user->id])->column('like_uid');
  66. if(empty($uid)){
  67. return enjson(204,'没有内容');
  68. }else{
  69. $where['uid'] = $uid;
  70. }
  71. }else{ //热门
  72. $order = "is_top desc,sort desc,like desc,id desc";
  73. }
  74. }
  75. }
  76. $data = AisInfo::apiLists($where,$order,$this->user,$param['keyword']);
  77. if(empty($data)){
  78. return enjson(204,'没有内容');
  79. }else{
  80. return enjson(200,'成功',$data);
  81. }
  82. }
  83. /**
  84. * 获取信息评论
  85. * @param integer 读取ID
  86. * @return json
  87. */
  88. public function reply(){
  89. $param['page'] = $this->request->param('page/d');
  90. $param['id'] = $this->request->param('id/d');
  91. $this->apiSign($param);
  92. $where['info_id'] = $param['id'];
  93. $where['state'] = 0;
  94. $rel = AisInfoReply::with([
  95. 'user' => function($query) {
  96. $query->field('id,nickname,face');
  97. },
  98. ])->where($where)->order('id desc')->paginate(10);
  99. $data = $rel->toArray()['data'];
  100. array_walk($data,function(&$item,$key){
  101. $item['is_like'] = 0;
  102. });
  103. if(empty($data)){
  104. return enjson(204);
  105. }else{
  106. return enjson(200,'成功',$data);
  107. }
  108. }
  109. /**
  110. * 读取微信API
  111. * @param integer 读取ID
  112. * @return json
  113. */
  114. public function cate(){
  115. $this->apiSign();
  116. $where = [];
  117. $where['member_miniapp_id'] = $this->miniapp_id;
  118. $data = AisInfoCate::where($where)->field('id,name')->order('sort desc,id desc')->select()->toArray();
  119. return enjson(200,'成功',$data);
  120. }
  121. /**
  122. * 获取单个信息
  123. * @param integer 读取ID
  124. * @return json
  125. */
  126. public function getview(int $info_id){
  127. $param['info_id'] = $this->request->param('info_id/d',0);
  128. $this->apiSign($param);
  129. $rel = AisInfo::with([
  130. 'user' => function($query) {
  131. $query->field('id,nickname,face');
  132. },
  133. 'cate' => function($query) {
  134. $query->field('id,tpl_id,title');
  135. },
  136. 'mp' => function($query) {
  137. $query->field('id,uid,logo,title,is_vip');
  138. }
  139. ])->where(['id'=> $info_id])->find();
  140. if(empty($rel)){
  141. return enjson(404);
  142. }
  143. //模板信息
  144. if(empty($rel->cate->tpl)){
  145. $rel['button_name'] = '立即下单';
  146. $rel['tips'] = '任何有用户发布,下单后请电话再次确认';
  147. $rel['is_shop'] = 0;
  148. $rel['users'] = [];
  149. }else{
  150. $rel['button_name'] = $rel->cate->tpl->button_name;
  151. $rel['tips'] = $rel->cate->tpl->tips;
  152. $rel['is_shop'] = $rel->cate->tpl->is_shop;
  153. $rel['users'] = json_decode($rel->cate->tpl->users,true);
  154. }
  155. $rel['images'] = $rel->images;
  156. $rel['images_len'] = count($rel->images);
  157. $rel['fields'] = empty($rel->fields) ? [] : json_decode($rel->fields,true);
  158. $rel['create_time'] = util::ftime($rel->create_time);
  159. $rel['is_mp'] = empty($rel->mp)?0:1;
  160. //是否点赞
  161. $rel['is_like'] = 0;
  162. $rel['like_face'] = empty($rel->like_face) ? [] : json_decode($rel->like_face,true);
  163. //判断是否被关注
  164. $rel['is_follow'] = !empty($rel->follow) && !empty($this->user) && $rel->follow->uid = $this->user->id ? 1:0;
  165. return enjson(200,'成功',$rel);
  166. }
  167. /**
  168. * 注册城市号
  169. */
  170. public function mp(){
  171. $param['uid'] = $this->request->param('uid/d',0);
  172. $param['mid'] = $this->request->param('mid/d',0);
  173. $this->apiSign($param);
  174. $where = [];
  175. if($param['mid']){
  176. $where['id'] = $param['mid'];
  177. }else{
  178. $where['uid'] = $param['uid'];
  179. }
  180. $rel = AisInfoMp::where($where)->find();
  181. if($rel){
  182. $rel->views = AisInfo::where(['uid' => $rel->uid])->count();
  183. $rel->like = AisInfoFollow::where(['uid' => $rel->uid])->count();
  184. $rel->is_follow = 0;
  185. $rel->vip_time = empty($rel->vip_time)?'0':date('Y-m-d',$rel->vip_time);
  186. $rel->reg_time = empty($rel->reg_time)?'0':date('Y-m-d',$rel->reg_time);
  187. if($this->user){
  188. $rel->is_follow = AisInfoFollow::where(['uid' => $this->user->id,'like_uid'=>$rel->uid])->count();
  189. }
  190. //读取好店
  191. $condition['manage_uid'] = $rel->uid;
  192. $condition['member_miniapp_id'] = $this->miniapp_id;
  193. $condition['is_lock'] = 0;
  194. $info = AisStore::getView($condition);
  195. if(empty($info)){
  196. $rel->is_store = 0;
  197. $rel->store = [];
  198. }else{
  199. $info->distance = getDistance($this->lbs->lng,$this->lbs->lat,$info['longitude'],$info['latitude']);
  200. $chain = [];
  201. foreach ($info->chain as $key => $value) {
  202. $chain[$key]['title'] = $value->title;
  203. $chain[$key]['address'] = $value->address;
  204. $chain[$key]['telphone'] = $value->telphone;
  205. $chain[$key]['distance'] = getDistance($this->lbs->lng,$this->lbs->lat,$value->longitude,$value->latitude);
  206. }
  207. unset($info->chain);
  208. $info->chain = $chain;
  209. $rel->store = $info;
  210. $rel->is_store = 1;
  211. }
  212. }else{
  213. if($param['uid']){
  214. $rel['is_store'] = 0;
  215. $rel['views'] = AisInfo::where(['uid' => $param['uid']])->count();
  216. $rel['like'] = AisInfoFollow::where(['uid' => $param['uid']])->count();
  217. $rel['fans'] = 0;
  218. $rel['is_follow'] = 0;
  219. $rel['vip_time'] = 0;
  220. $rel['reg_time'] = 0;
  221. $user = SystemUser::where(['id' => $param['uid']])->find();
  222. $rel['face'] = $user->face;
  223. $rel['nickname'] = $user->nickname;
  224. $rel['logo'] = $user->face;
  225. $rel['note'] = '未开通城市号';
  226. $rel['skin'] = Config::get('upload.upload_relative').'static/ais/skin/2.jpg';
  227. }
  228. }
  229. return enjson(200,$rel);
  230. }
  231. /**
  232. * 读取信息列表
  233. * @param integer 读取ID
  234. * @return json
  235. */
  236. public function me(){
  237. $param['page'] = $this->request->param('page/d',1);
  238. $param['state'] = $this->request->param('state/d',1);
  239. $param['uid'] = $this->request->param('uid/d',0);
  240. $param['mid'] = $this->request->param('mid/d',0);
  241. $param['sign'] = $this->request->param('sign');
  242. $this->apiSign($param);
  243. $where = [];
  244. $where['member_miniapp_id'] = $this->miniapp_id;
  245. $where['is_lock'] = 0;
  246. if($param['state']){
  247. $order = "is_top desc,id desc";
  248. $where['uid'] = $param['uid'];
  249. }else{ //热门
  250. $uid = AisInfoFollow::where(['uid' => $param['uid']])->column('like_uid');
  251. $where['uid'] = $uid;
  252. $order = "views desc,sort desc,id desc";
  253. }
  254. $data = AisInfo::apiLists($where,$order,$this->user);
  255. if(empty($data)){
  256. return enjson(204,'没有内容');
  257. }else{
  258. return enjson(200,'成功',$data);
  259. }
  260. }
  261. }