1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?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);
- foreach ($list as &$item) {
- [$distance,$unit] = \app\utils\Common::distanceTo($item['distance']);
- $item['distance'] = "{$distance}{$unit}";
- }
- return $this->success('success',$list);
- }
- // 商铺列表
- public function info()
- {
- $params = $this->request->param();
- $userLng = $this->auth->lng;
- $userLat = $this->auth->lat;
- $model = new OfflineShopModel();
- $select = ['*'];
- if (!empty($userLng) && !empty($userLat)) {
- $select[] = Db::raw("(st_distance(point ({$userLng}, {$userLat}),point(lng,lat))*111195) as distance");
- }
- $info = $model->getDetail(params: $params,select: $select);
- if (!empty($info)) {
- $info['images'] = explode(',',$info['image']);
- }
- return $this->success('success',$info);
- }
- }
|