GetStoreListByLocation添加可选参数needWalkDistance

This commit is contained in:
gazebo
2019-10-18 12:03:07 +08:00
parent 2d43b61f6f
commit aa0404c4a1
2 changed files with 27 additions and 3 deletions

View File

@@ -68,7 +68,8 @@ type Store4User struct {
CityName string `json:"cityName"` CityName string `json:"cityName"`
DistrictName string `json:"districtName"` DistrictName string `json:"districtName"`
Distance int `json:"distance"` Distance int `json:"distance"`
WalkDistance int `json:"walkDistance"`
} }
type Store4UserList []*Store4User type Store4UserList []*Store4User
@@ -78,6 +79,9 @@ func (x Store4UserList) Len() int {
} }
func (x Store4UserList) Less(i, j int) bool { 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 return x[i].Distance < x[j].Distance
} }
@@ -2028,7 +2032,7 @@ func SyncStoresQualify(ctx *jxcontext.Context, storeIDs []int, isAsync, isContin
return hint, err 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 ( const (
maxRadius = 5000 maxRadius = 5000
maxStoreCount4User = 5 maxStoreCount4User = 5
@@ -2077,6 +2081,25 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64) (storeList
storeList2 = append(storeList2, v) 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)) sort.Sort(Store4UserList(storeList2))
storeList = storeList2 storeList = storeList2
if len(storeList) > maxStoreCount4User { if len(storeList) > maxStoreCount4User {

View File

@@ -535,12 +535,13 @@ func (c *StoreController) SyncStoresCourierInfo() {
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param lng query float64 true "经度" // @Param lng query float64 true "经度"
// @Param lat query float64 true "纬度" // @Param lat query float64 true "纬度"
// @Param needWalkDistance query bool false "是否需要返回步行距离(且以步行距离排序)"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /GetStoreListByLocation [get] // @router /GetStoreListByLocation [get]
func (c *StoreController) GetStoreListByLocation() { func (c *StoreController) GetStoreListByLocation() {
c.callGetStoreListByLocation(func(params *tStoreGetStoreListByLocationParams) (retVal interface{}, errCode string, err error) { 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 return retVal, "", err
}) })
} }