/** * @ApiTitle (附近最近的门店) * @ApiSummary (如果传了shop_id则返回这个店铺的信息,如果没传则根据经纬度判断返回最近的店铺信息) * @ApiMethod (POST) * @ApiHeaders (name=platform, type=string, required=false, description="平台") * @ApiParams (name="lat", type="float", required=true, description="经度") * @ApiParams (name="lng", type="float", required=true, description="纬度") * @ApiParams (name="shop_id", type="integer", required=false, description="店铺id") * @ApiReturn ({"code":1,"msg":"","data":{}}) * * @ApiReturnParams (name="id", type="integer", description="店铺id") * @ApiReturnParams (name="name", type="string", description="店铺名称") * @ApiReturnParams (name="mobile", type="string", description="店铺电话") * @ApiReturnParams (name="notice", type="string", description="店铺公告") * @ApiReturnParams (name="min_price", type="string", description="最低起送价格") * @ApiReturnParams (name="delivery_price", type="string", description="配送费/运费") * @ApiReturnParams (name="lat", type="float", description="经度") * @ApiReturnParams (name="lng", type="float", description="纬度") * @ApiReturnParams (name="distance", type="float", description="配送距离,0表示不配送外卖") * @ApiReturnParams (name="address", type="string", description="店铺地址详情") * @ApiReturnParams (name="address_map", type="string", description="地图选择的地址") * @ApiReturnParams (name="image", type="string", description="店铺logo") * @ApiReturnParams (name="status", type="integer", description="是否营业中:0=否,1=是") * @ApiReturnParams (name="status_text", type="integer", description="营业状态") * @ApiReturnParams (name="far", type="float", description="距离") * @ApiReturnParams (name="far_text", type="float", description="距离/km") * @ApiReturnParams (name="bussines_time", type="string", description="营业时间") * */ public function nearby() { $lat = $this->request->post('lat'); $lng = $this->request->post('lng'); $shopId = $this->request->post('shop_id', 0); if (!$lat || !$lng) { $this->error('参数错误'); } $shopModel = new \addons\unidrink\model\Shop(); $shop = $shopModel->getList($lat, $lng, 1, 1, $shopId); if ($shop && is_array($shop)) { $shop = $shop[0]; $shop->append(['status_text'])->toArray(); $shop['far_text'] = number_format($shop['far'], 3) . 'km'; } $this->success('', $shop); } /** * @ApiTitle (获取所有店铺) * @ApiSummary (获取所有店铺) * @ApiMethod (POST) * */ public function getList() { $keyword = $this->request->post('kw', ''); $lat = $this->request->post('lat'); $lng = $this->request->post('lng'); $page = $this->request->post('page', 1); $pagesize = $this->request->post('pagesize', 10); if (!$lat || !$lng) { $this->error('参数错误'); } $shopModel = new \addons\unidrink\model\Shop(); $list = $shopModel->getList($lat, $lng, $page, $pagesize, 0, $keyword); if ($list) { $list = collection($list)->append(['status_text'])->toArray(); foreach ($list as &$shop) { $shop['far_text'] = number_format($shop['far'], 3) . 'km'; } } $this->success('', $list); }
/** * 根据给定条件获取店铺列表 */ public function getList($lat = 0, $lng = 0, $page = 1, $pagesize = 10, $shop_id = 0, $keyword = '', $order = 'far') { $query = $this ->field("id,name,mobile,notice,min_price,delivery_price,lat,lng,distance,address,address_map,image,status,starttime,endtime, (6371 * acos ( cos ( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin ( radians($lat) ) * sin( radians( lat ) )) ) AS far"); if ($shop_id != 0) { $query = $query->where('id = :shop_id', ['shop_id' => $shop_id]); } if ($keyword != '') { $query = $query->where("name LIKE :name", ['name' => '%'.$keyword.'%']); } $shop = $query ->fetchSql(false) ->order($order) ->page($page, $pagesize) ->select(); return $shop; }
CREATE TABLE `ry_shop` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '店铺名称', `mobile` VARCHAR(20) NOT NULL COMMENT '店铺电话', `image` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '图片', `images` TEXT NOT NULL COMMENT '多张图片', `address` VARCHAR(255) NOT NULL COMMENT '详细地址', `address_map` VARCHAR(255) NOT NULL COMMENT '地图定位地址', `starttime` INT(10) NOT NULL COMMENT '营业开始时间', `endtime` INT(10) NOT NULL COMMENT '营业结束时间', `lng` VARCHAR(30) NOT NULL COMMENT '经度', `lat` VARCHAR(30) NOT NULL COMMENT '纬度', `province` INT(10) NOT NULL COMMENT '省份id', `city` INT(10) NOT NULL COMMENT '所在城市id', `area` INT(10) NOT NULL COMMENT '地区id', `distance` INT(10) NOT NULL DEFAULT '0' COMMENT '外卖配送距离,单位为千米。0表示不送外卖', `min_price` DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '起送价钱', `delivery_price` DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '配送价格', `notice` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '公告', `status` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '是否营业:0=否,1=是', `createtime` INT(10) NOT NULL COMMENT '创建时间', `updatetime` INT(10) NOT NULL COMMENT '更新时间', `deletetime` INT(10) NULL DEFAULT NULL COMMENT '删除时间', `admin_id` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '管理员id', `uniprint_id` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '打印机id', PRIMARY KEY (`id`) ) COMMENT='店铺' COLLATE='utf8_general_ci' ENGINE=InnoDB ;