QueryPageStores添加radius,lng,lat参数
This commit is contained in:
@@ -9,9 +9,12 @@ type PageShopWithPlaceName struct {
|
||||
|
||||
CityName string `json:"cityName"`
|
||||
DistrictName string `json:"districtName"`
|
||||
Distance int `json:"distance"`
|
||||
}
|
||||
|
||||
func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID int, orgCode string, cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int) (pagedInfo *model.PagedInfo, err error) {
|
||||
func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID int, orgCode string,
|
||||
cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int,
|
||||
lng1, lat1, lng2, lat2 float64) (pagedInfo *model.PagedInfo, err error) {
|
||||
sql := `
|
||||
SELECT SQL_CALC_FOUND_ROWS
|
||||
t1.*,
|
||||
@@ -59,6 +62,10 @@ func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStor
|
||||
sql += " AND t1.sku_count >= ?"
|
||||
sqlParams = append(sqlParams, minSkuCount)
|
||||
}
|
||||
if lng1 > 0 {
|
||||
sql += " AND t1.lng >= ? AND t1.lat >= ? AND t1.lng <= ? AND t1.lat <= ?"
|
||||
sqlParams = append(sqlParams, lng1, lat1, lng2, lat2)
|
||||
}
|
||||
if keyword != "" {
|
||||
keywordLike := "%" + keyword + "%"
|
||||
sql += " AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.org_code LIKE ? OR t1.address LIKE ? OR t2.name LIKE ? OR t3.name LIKE ? OR t1.licence_code LIKE ?"
|
||||
@@ -70,9 +77,7 @@ func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStor
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
pageSize = FormalizePageSize(pageSize)
|
||||
if offset < 0 {
|
||||
offset = 0
|
||||
}
|
||||
offset = FormalizePageOffset(offset)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
var shopList []*PageShopWithPlaceName
|
||||
Begin(db)
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/netspider"
|
||||
"github.com/astaxie/beego"
|
||||
@@ -49,6 +54,9 @@ func (c *NetSpiderController) GetAndStoreCitiesShops() {
|
||||
// @Param minShopScore query float64 false "门店分值最小值"
|
||||
// @Param minRecentOrderNum query int false "最近单量最小值"
|
||||
// @Param minSkuCount query int false "SKU数量最小值"
|
||||
// @Param radius query int false "关注点半径(米)"
|
||||
// @Param lng query string false "关注点经度"
|
||||
// @Param lat query string false "关注点纬度"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /QueryPageStores [get]
|
||||
@@ -57,7 +65,64 @@ func (c *NetSpiderController) QueryPageStores() {
|
||||
if params.MapData["vendorID"] == nil {
|
||||
params.VendorID = -1
|
||||
}
|
||||
retVal, err = dao.QueryPageStores(dao.GetDB(), params.PageSize, params.Offset, params.Keyword, params.VendorStoreID, params.VendorID, params.OrgCode, params.CityCode, params.DistrictCode, params.Tel, float32(params.MinShopScore), params.MinRecentOrderNum, params.MinSkuCount)
|
||||
var lng, lat, lng1, lat1, lng2, lat2 float64
|
||||
params.Offset = dao.FormalizePageOffset(params.Offset)
|
||||
params.PageSize = dao.FormalizePageSize(params.PageSize)
|
||||
offset := params.Offset
|
||||
pageSize := params.PageSize
|
||||
if params.Radius > 0 {
|
||||
lng = utils.Str2Float64WithDefault(params.Lng, 0)
|
||||
lat = utils.Str2Float64WithDefault(params.Lat, 0)
|
||||
if lng == 0 || lat == 0 {
|
||||
return nil, "", fmt.Errorf("坐标信息%s,%s不合法", params.Lng, params.Lat)
|
||||
}
|
||||
lng2, _ = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 90)
|
||||
_, lat2 = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 0)
|
||||
lng1 = lng - (lng2 - lng)
|
||||
lat1 = lat - (lat2 - lat)
|
||||
offset = 0
|
||||
pageSize = model.UnlimitedPageSize
|
||||
}
|
||||
pagedInfo, err := dao.QueryPageStores(dao.GetDB(), pageSize, offset, params.Keyword, params.VendorStoreID, params.VendorID, params.OrgCode,
|
||||
params.CityCode, params.DistrictCode, params.Tel, float32(params.MinShopScore), params.MinRecentOrderNum, params.MinSkuCount,
|
||||
lng1, lat1, lng2, lat2)
|
||||
if err == nil {
|
||||
if params.Radius > 0 && (params.Offset != 0 || params.PageSize != model.UnlimitedPageSize) {
|
||||
shopList, _ := pagedInfo.Data.([]*dao.PageShopWithPlaceName)
|
||||
pagedInfo.TotalCount = len(shopList)
|
||||
if len(shopList) > 0 {
|
||||
for _, v := range shopList {
|
||||
v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000)
|
||||
}
|
||||
sort.Sort(PageShopList(shopList))
|
||||
if params.Offset < len(shopList) {
|
||||
index := params.Offset + params.PageSize
|
||||
if index > len(shopList) {
|
||||
index = len(shopList)
|
||||
}
|
||||
shopList = shopList[params.Offset:index]
|
||||
} else {
|
||||
shopList = nil
|
||||
}
|
||||
}
|
||||
pagedInfo.Data = shopList
|
||||
}
|
||||
retVal = pagedInfo
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
type PageShopList []*dao.PageShopWithPlaceName
|
||||
|
||||
func (l PageShopList) Len() int {
|
||||
return len(l)
|
||||
}
|
||||
|
||||
func (l PageShopList) Less(i, j int) bool {
|
||||
return l[i].Distance < l[j].Distance
|
||||
}
|
||||
|
||||
func (l PageShopList) Swap(i, j int) {
|
||||
l[i], l[j] = l[j], l[i]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user