/**
* @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
;