From aa0404c4a1347cd03fd737c6dd04eba1057a0822 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 18 Oct 2019 12:03:07 +0800 Subject: [PATCH] =?UTF-8?q?GetStoreListByLocation=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8F=AF=E9=80=89=E5=8F=82=E6=95=B0needWalkDistance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 27 +++++++++++++++++++++++++-- controllers/cms_store.go | 3 ++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 36ca5e8db..2a56c5c94 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -68,7 +68,8 @@ type Store4User struct { CityName string `json:"cityName"` DistrictName string `json:"districtName"` - Distance int `json:"distance"` + Distance int `json:"distance"` + WalkDistance int `json:"walkDistance"` } type Store4UserList []*Store4User @@ -78,6 +79,9 @@ func (x Store4UserList) Len() int { } func (x Store4UserList) Less(i, j int) bool { + if x[i].WalkDistance != x[j].Distance { + return x[i].WalkDistance < x[j].Distance + } return x[i].Distance < x[j].Distance } @@ -2028,7 +2032,7 @@ func SyncStoresQualify(ctx *jxcontext.Context, storeIDs []int, isAsync, isContin return hint, err } -func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64) (storeList []*Store4User, err error) { +func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDistance bool) (storeList []*Store4User, err error) { const ( maxRadius = 5000 maxStoreCount4User = 5 @@ -2077,6 +2081,25 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64) (storeList storeList2 = append(storeList2, v) } } + + // 如果要求以步行距离来算 + if needWalkDistance { + var coordList []*autonavi.Coordinate + for _, v := range storeList2 { + coordList = append(coordList, &autonavi.Coordinate{ + Lng: v.FloatLng, + Lat: v.FloatLat, + }) + } + if distanceList, err2 := api.AutonaviAPI.BatchWalkingDistance(lng, lat, coordList); err2 == nil { + for k, v := range storeList2 { + v.WalkDistance = int(distanceList[k]) + } + } else { + return nil, err2 + } + } + sort.Sort(Store4UserList(storeList2)) storeList = storeList2 if len(storeList) > maxStoreCount4User { diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 9b3696a3a..b6b27bde7 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -535,12 +535,13 @@ func (c *StoreController) SyncStoresCourierInfo() { // @Param token header string true "认证token" // @Param lng query float64 true "经度" // @Param lat query float64 true "纬度" +// @Param needWalkDistance query bool false "是否需要返回步行距离(且以步行距离排序)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetStoreListByLocation [get] func (c *StoreController) GetStoreListByLocation() { c.callGetStoreListByLocation(func(params *tStoreGetStoreListByLocationParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.GetStoreListByLocation(params.Ctx, params.Lng, params.Lat) + retVal, err = cms.GetStoreListByLocation(params.Ctx, params.Lng, params.Lat, params.NeedWalkDistance) return retVal, "", err }) }