12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use app\common\model\OfflineShopModel;
- use app\common\model\OfflineTypeModel;
- use app\utils\DataUtil;
- use think\Db;
- /**
- * 示例接口
- */
- class OfflineShop extends Api
- {
- protected $noNeedLogin = [''];
- protected $noNeedRight = ['*'];
- // 商圈分类
- public function type()
- {
- $params = $this->request->param();
- $model = new OfflineTypeModel();
- $model->setSelect(['id','pid','name','image']);
- $list = $model->getList(params: $params,orderBy: ['weigh' => 'desc','id' => 'desc']);
- return $this->success('success',DataUtil::recursion($list,'id','pid'));
- }
- // 商铺列表
- public function list()
- {
- $params = $this->request->param();
- $userLng = $this->auth->lng;
- $userLat = $this->auth->lat;
- $model = new OfflineShopModel();
- $select = ['id', 'type_id', 'type_ids', 'name', 'image', 'lng', 'lat', 'address', 'telephone', 'star', 'sales'];
- $orderBy = [];
- if (!empty($userLng) && !empty($userLat)) {
- $select[] = Db::raw("(st_distance(point ({$userLng}, {$userLat}),point(lng,lat))*111195) as distance");
- !empty($params['distance']) && $params['distance'] = $params['distance'] * 1000;
- }
- if (!empty($this->auth->city)) {
- $params['city'] = $this->auth->city;
- }
- if (isset($params['rank_type'])) {
- switch ($params['rank_type']) {
- case 1:
- $orderBy['star'] = 'desc';
- break;
- case 2:
- $orderBy['sales'] = 'desc';
- break;
- case 3:
- if (!empty($userLng) && !empty($userLat)) {
- $orderBy['distance'] = 'asc';
- }
- break;
- default:
- if (!empty($userLng) && !empty($userLat)) {
- $orderBy['distance'] = 'asc';
- }
- $orderBy['star'] = 'desc';
- $orderBy['sales'] = 'desc';
- break;
- }
- }
- $list = $model->getList(params: $params,orderBy: array_merge($orderBy,['weigh' => 'desc']),select: $select);
- return $this->success('success',$list);
- }
- }
|