Info.php 11 KB

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