Merge remote-tracking branch 'origin/mark' into yonghui

This commit is contained in:
苏尹岚
2019-11-27 15:02:37 +08:00
3 changed files with 76 additions and 7 deletions

View File

@@ -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)

View File

@@ -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]
}

View File

@@ -74,8 +74,7 @@ func Init() {
if !beego.AppConfig.DefaultBool("disableJd", false) {
JdAPI = jdapi.New(beego.AppConfig.String("jdToken"), beego.AppConfig.String("jdAppKey"), beego.AppConfig.String("jdSecret"))
cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "")
JdAPI.SetCookie("shop.o2o.jd.com1", cookieValue)
JdAPI.SetCookie("lsp-store1.jddj.com", cookieValue)
JdAPI.SetJdCookie(cookieValue)
conf := platformapi.NewDefAPIConfig()
conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟