1
This commit is contained in:
@@ -2,14 +2,15 @@ package cms
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/baidunavi"
|
||||
"math"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/baidunavi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/ebai"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||
@@ -100,6 +101,9 @@ var (
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
AutonaviKeyList = []string{autonavi.AMAPCyclingPlanKey1, autonavi.AMAPCyclingPlanKey2, autonavi.AMAPCyclingPlanKey3, autonavi.AMAPCyclingPlanKey4, autonavi.AMAPCyclingPlanKey5}
|
||||
AutonaviKeyIndex = 0
|
||||
)
|
||||
|
||||
func InitServiceInfo(version string, buildTime time.Time, gitCommit string) {
|
||||
@@ -586,8 +590,8 @@ func GetCityBankBranches(ctx *jxcontext.Context, cityCode int, bankCode string)
|
||||
return info, err
|
||||
}
|
||||
|
||||
// GetSToUWalkingDistance 获取商家与用户间步行距离
|
||||
func GetSToURidingDistance(sLng, sLat, uLng, uLat float64) (stepInfo interface{}, err error) {
|
||||
// GetSToURidingDistance 获取商家与用户间步行距离
|
||||
func GetSToURidingDistance(sLng, sLat, uLng, uLat float64, orderId string) (stepInfo interface{}, err error) {
|
||||
var coords []*baidunavi.Coordinate
|
||||
coords = append(coords, &baidunavi.Coordinate{
|
||||
Lng: sLng,
|
||||
@@ -605,3 +609,109 @@ func GetSToURidingDistance(sLng, sLat, uLng, uLat float64) (stepInfo interface{}
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// GetSToURidingDistance2 获取商家与用户间步行距离
|
||||
func GetSToURidingDistance2(sLng, sLat, uLng, uLat float64, orderId string) (wayBill *model.Waybill, err error) {
|
||||
var (
|
||||
origin = fmt.Sprintf("%f,%f", sLng, sLat)
|
||||
destination = fmt.Sprintf("%f,%f", uLng, uLat)
|
||||
db = dao.GetDB()
|
||||
)
|
||||
|
||||
for {
|
||||
// 骑手坐标
|
||||
waybills, err := dao.GetWaybills(db, orderId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range waybills {
|
||||
if v.Status == model.WaybillStatusCanceled {
|
||||
continue
|
||||
}
|
||||
//if v.Status >= model.WaybillStatusAccepted && v.Status <= model.WaybillStatusCanceled {
|
||||
// 获取骑行路线图
|
||||
if v.OriginalData == "" {
|
||||
originalData, distance, durationTime, err := GetCyclingLine(origin, destination)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
v.OriginalData = strings.Join(originalData, ";")
|
||||
v.Distance = distance
|
||||
v.DurationTime = durationTime
|
||||
}
|
||||
//}
|
||||
|
||||
// 如果是三方配送,更新骑手信息
|
||||
if handler := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handler != nil {
|
||||
riderInfo, _ := handler.Handler.GetRiderInfo(v.VendorOrderID, v.ID+1000000, v.VendorWaybillID)
|
||||
if riderInfo != nil {
|
||||
v.CourierCoordinate = fmt.Sprintf("%s,%s", riderInfo.Longitude, riderInfo.Latitude)
|
||||
if (v.CourierName == "" || v.CourierMobile == "") && riderInfo.CourierName != "" {
|
||||
v.CourierName = riderInfo.CourierName
|
||||
v.CourierMobile = riderInfo.CourierPhone
|
||||
}
|
||||
}
|
||||
}
|
||||
// 如果是平台配送,获取骑手信息
|
||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.WaybillVendorID); handler != nil {
|
||||
riderInfo, _ := handler.OrderLogisticsStatus(v.VendorOrderID)
|
||||
if riderInfo != nil {
|
||||
v.CourierCoordinate = fmt.Sprintf("%s,%s", riderInfo.Longitude, riderInfo.Latitude)
|
||||
if (v.CourierName == "" || v.CourierMobile == "") && riderInfo.CourierName != "" {
|
||||
v.CourierName = riderInfo.CourierName
|
||||
v.CourierMobile = riderInfo.CourierPhone
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 当这个运单为假物流/门店真实自送/获取运单骑手信息为空的时候使用假的骑手信息
|
||||
if v.WaybillVendorID == model.VendorJXFakeWL || v.WaybillVendorID == model.VendorIDUnknown || v.CourierCoordinate == "" {
|
||||
riderLine := strings.Split(v.OriginalData, ";") // 路线坐标点
|
||||
|
||||
courierDistance := float64(time.Now().Unix()-v.WaybillCreatedAt.Unix()) * (float64(v.Distance) / float64(v.DurationTime)) // 当前骑手骑行距离
|
||||
nowCourierDrop := int64(math.Ceil((courierDistance / float64(v.Distance)) * float64(len(riderLine)))) // 当前骑手骑行距离,占中的骑行距离百分比.
|
||||
if nowCourierDrop >= int64(len(riderLine)) {
|
||||
v.CourierCoordinate = riderLine[nowCourierDrop-2]
|
||||
}
|
||||
if nowCourierDrop <= 0 {
|
||||
v.CourierCoordinate = riderLine[0]
|
||||
}
|
||||
if v.Status == model.WaybillStatusDelivered {
|
||||
v.CourierCoordinate = riderLine[len(riderLine)-1]
|
||||
}
|
||||
}
|
||||
|
||||
dao.UpdateEntity(db, v, "OriginalData", "CourierCoordinate", "Distance", "DurationTime")
|
||||
if v.CourierName == "" || v.CourierMobile == "" {
|
||||
v.CourierName = "暂无骑手"
|
||||
v.CourierMobile = "暂无电话"
|
||||
}
|
||||
|
||||
return v, nil
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// GetCyclingLine 获取骑行路线
|
||||
func GetCyclingLine(origin, destination string) (polyLineList []string, distance, duration int64, errCode error) {
|
||||
for {
|
||||
polyLineList, distance, duration, errCode = api.AutonaviAPI.GetCyclingPlan(origin, destination)
|
||||
if errCode != nil {
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "高德地图骑行方案获取错误:", utils.Format4Output(errCode, false))
|
||||
}
|
||||
if errCode != nil && errCode.Error() == autonavi.DAILYQUERYOVERLIMIT {
|
||||
AutonaviKeyIndex += model.YES
|
||||
if AutonaviKeyIndex >= len(AutonaviKeyList) {
|
||||
AutonaviKeyIndex = model.NO
|
||||
}
|
||||
api.AutonaviAPI.SetKey(AutonaviKeyList[AutonaviKeyIndex])
|
||||
} else if errCode != nil {
|
||||
return nil, 0, 0, errCode
|
||||
}
|
||||
|
||||
if len(polyLineList) > model.NO {
|
||||
return polyLineList, distance, duration, errCode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user