新增抖音授权登录,添加定时任务,更新[配送中的订单骑手位置!
This commit is contained in:
@@ -3,6 +3,7 @@ package dada
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/dadaapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -83,6 +84,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
||||
}
|
||||
case dadaapi.OrderStatusDelivering:
|
||||
order.Status = model.WaybillStatusDelivering
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID)
|
||||
case dadaapi.OrderStatusFinished:
|
||||
order.Status = model.WaybillStatusDelivered
|
||||
case dadaapi.OrderStatusCanceled, dadaapi.OrderStatusExpired:
|
||||
@@ -422,3 +424,26 @@ func (c *DeliveryHandler) GetRidderPosition(ctx *jxcontext.Context, vendorOrgCod
|
||||
}
|
||||
return lng, lat, err
|
||||
}
|
||||
|
||||
// 获取骑手信息(订单详情)
|
||||
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
||||
order, err := api.DadaAPI.QueryOrderInfo(orderId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if order.StatusCode != 3 {
|
||||
return nil, errors.New("订单未分配骑手,或订单已经完成了")
|
||||
}
|
||||
|
||||
return &mtpsapi.RiderInfo{
|
||||
OrderId: "",
|
||||
ThirdCarrierOrderId: orderId,
|
||||
CourierName: order.TransporterName,
|
||||
CourierPhone: order.TransporterPhone,
|
||||
LogisticsProviderCode: string(mtpsapi.DaDaCode),
|
||||
LogisticsStatus: order.StatusCode,
|
||||
Latitude: order.TransporterLat,
|
||||
Longitude: order.TransporterLng,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package delivery
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
"math"
|
||||
"time"
|
||||
|
||||
@@ -148,3 +149,73 @@ func OnWaybillCreated(waybill *model.Waybill) {
|
||||
model.VendorChineseNames[waybill.WaybillVendorID], waybill.VendorWaybillID, jxutils.IntPrice2StandardCurrencyString(deliveryFee), jxutils.IntPrice2StandardCurrencyString(alarmFee))
|
||||
}
|
||||
}
|
||||
|
||||
// 订单骑手信息推送:将获取到的三方配送订单,且订单状态为配送中的订单,将配送人员的信息返回给订单方
|
||||
// 该方法为定时任务,没五分钟推送一次订单消息,订单状态发生变化时
|
||||
//配送状态code,如下提供配送状态枚举值,
|
||||
//以及各配送状态对应在C端(用户端)和B端(商家PC端)后台展示的配送状态信息。
|
||||
//未同步配送状态时(C端:商家已接单;B端:待发配送)
|
||||
//0-配送单发往配送(C端:商家已接单;B端:待骑手接单)
|
||||
//1-已创建配送包裹(C端:商家已接单;B端:待骑手接单)
|
||||
//5-已分配骑手(C端:商家已接单;B端:已分配骑手)
|
||||
//10-骑手已接单(C端:骑手正在赶往商家;B端:待骑手取货)
|
||||
//15-骑手已到店(C端:骑手到店取货中;B端:骑手已到店)
|
||||
//20-骑手已取货(C端:商品配送中/骑手正在送货;B端:骑手已取货)
|
||||
//40-骑手已送达(C端:商品已送达;B端:骑手已送达)
|
||||
//100-配送单已取消(C端:商家已接单;B端:配送已取消)
|
||||
//注:若同步配送状态为“配送单已取消”,接口仍支持继续同步配送状态。 说明:商家如未上传此信息,则平台默认值为20(现已要求必传)。
|
||||
func GetOrderRiderInfoToPlatform(orderId string) {
|
||||
params := make(map[string]interface{}, 0)
|
||||
params["brandID"] = 0
|
||||
params["statuss"] = 20
|
||||
params["isDateFinish"] = false
|
||||
params["isIncludeFake"] = true
|
||||
params["mustInvoice"] = false
|
||||
params["adjustCount"] = 0
|
||||
params["waybillVendorIDs"] = `[101,102,103]`
|
||||
if orderId != "" { // 订单id会忽略其他参数
|
||||
params["keyword"] = orderId
|
||||
}
|
||||
//params["offset"] = 0
|
||||
//params["pageSize"] = 10000
|
||||
// 查询三天内一万条数据
|
||||
orders, _, err := dao.GetOrders(dao.GetDB(), nil, false, true, time.Now().Add(-24*3*time.Hour).Format("2006-01-02"), time.Now().Format("2006-01-02"), false, nil, false, "", params, 0, 10000)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("GetOrder err :%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, v := range orders {
|
||||
var riderInfo *mtpsapi.RiderInfo
|
||||
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil {
|
||||
riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, utils.Str2Int64(v.VendorWaybillId2), v.VendorWaybillID)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("Get Order waybill rider info err :%v", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// 目前只推送美团骑手信息
|
||||
switch v.VendorID {
|
||||
case model.VendorIDMTWM: // 美团发单
|
||||
paramsMap := utils.Struct2Map(riderInfo, "", true)
|
||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorOrderID, paramsMap); err != nil {
|
||||
globals.SugarLogger.Errorf("Error pushing meituan rider information :%v", err)
|
||||
}
|
||||
}
|
||||
case model.VendorIDELM: // 饿了么
|
||||
case model.VendorIDEBAI: // 饿百发单
|
||||
|
||||
case model.VendorIDJD: // 京东发单
|
||||
case model.VendorIDGD: // 美团发单
|
||||
case model.VendorIDYB: // 银豹发单
|
||||
case model.VendorIDJDShop: // 京东商城
|
||||
case model.VendorIDWSC: // 微盟微商城
|
||||
default:
|
||||
globals.SugarLogger.Errorf("Order source error, non system order")
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package fn
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -234,6 +235,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon
|
||||
order.Status = model.WaybillStatusCourierArrived
|
||||
case fnpsapi.OrderStatusDelivering: // 2 配送中
|
||||
order.Status = model.WaybillStatusDelivering
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID)
|
||||
case fnpsapi.OrderStatusDelivered: // 3 已经送达
|
||||
order.Status = model.WaybillStatusDelivered
|
||||
case fnpsapi.OrderStatusAcceptCacle: // 4取消订单
|
||||
@@ -280,3 +282,29 @@ func GetDesiredFee(vendorOrderID string) (desiredFee int64) {
|
||||
}
|
||||
return desiredFee
|
||||
}
|
||||
|
||||
// 获取骑手信息
|
||||
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
||||
// 获取订单状态
|
||||
order, err := api.FnAPI.QueryOrder(orderId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 获取骑手坐标
|
||||
knightInfo, err := api.FnAPI.GetKnightInfo(&fnpsapi.GetOrderDetailReq{PartnerOrderCode: orderId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &mtpsapi.RiderInfo{
|
||||
OrderId: "",
|
||||
ThirdCarrierOrderId: orderId,
|
||||
CourierName: knightInfo.CarrierDriverName,
|
||||
CourierPhone: knightInfo.CarrierDriverPhone,
|
||||
LogisticsProviderCode: string(mtpsapi.FnPsCode),
|
||||
LogisticsStatus: order.OrderStatus, // 默认正在配送中
|
||||
Latitude: knightInfo.CarrierDriverLatitude,
|
||||
Longitude: knightInfo.CarrierDriverLongitude,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package jdeclp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
|
||||
@@ -102,3 +103,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
|
||||
func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -103,6 +103,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
||||
order.Remark = order.CourierName + "," + order.CourierMobile
|
||||
case mtpsapi.OrderStatusPickedUp:
|
||||
order.Status = model.WaybillStatusDelivering
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID)
|
||||
case mtpsapi.OrderStatusDeliverred:
|
||||
order.Status = model.WaybillStatusDelivered
|
||||
case mtpsapi.OrderStatusCanceled:
|
||||
@@ -380,3 +381,23 @@ func (c *DeliveryHandler) GetRidderPosition(ctx *jxcontext.Context, vendorOrgCod
|
||||
}
|
||||
return lng, lat, err
|
||||
}
|
||||
|
||||
// 获取骑手信息 美团配送 deliveryId,mtPeisongId这两参数美团专属
|
||||
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
||||
// 获取订单状态
|
||||
order, err := api.MtpsAPI.QueryOrderStatus(deliveryId, mtPeisongId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &mtpsapi.RiderInfo{
|
||||
OrderId: utils.Interface2String(order["mt_peisong_id"]),
|
||||
ThirdCarrierOrderId: utils.Interface2String(order["order_id"]),
|
||||
CourierName: utils.Interface2String(order["courier_name"]),
|
||||
CourierPhone: utils.Interface2String(order["courier_phone"]),
|
||||
LogisticsProviderCode: string(mtpsapi.MTPsCode),
|
||||
LogisticsStatus: int(utils.MustInterface2Int64(order["status"])), // 默认正在配送中
|
||||
Latitude: utils.Interface2String(order["order_id"]),
|
||||
Longitude: utils.Interface2String(order["order_id"]),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package partner
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
@@ -40,6 +40,8 @@ type IDeliveryPlatformHandler interface {
|
||||
GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *WaybillFeeInfo, err error)
|
||||
//投诉骑手
|
||||
ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error)
|
||||
// 获取骑手信息
|
||||
GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error)
|
||||
}
|
||||
|
||||
type IDeliveryUpdateStoreHandler interface {
|
||||
|
||||
@@ -67,6 +67,8 @@ type IPurchasePlatformOrderHandler interface {
|
||||
GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID, afsOrderID string) (orderAfsInfo *OrderAfsInfo, err error)
|
||||
//投诉骑手
|
||||
ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error)
|
||||
//推送订单骑手信息
|
||||
GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) ( err error)
|
||||
}
|
||||
|
||||
type IAddWaybillTip interface {
|
||||
|
||||
@@ -26,7 +26,7 @@ func TestPrintMsg(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
context := CurPrinterHandler.getOrderContent(order, "13412345678")
|
||||
context := CurPrinterHandler.getOrderContent(order, "13412345678",nil)
|
||||
//context := CurPrinterHandler.getOrderContentBig(order, "13412345678")
|
||||
status, err := CurPrinterHandler.PrintMsg(jxcontext.AdminCtx, "218510310", "ztdpveyg", "test", context)
|
||||
t.Log(utils.Format4Output(status, false))
|
||||
|
||||
@@ -157,3 +157,7 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
|
||||
vendorCats, err = p.getVendorCategories(1, 0)
|
||||
return vendorCats, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -179,3 +179,7 @@ func OnTokenChange(values url.Values) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -97,3 +97,7 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
|
||||
}
|
||||
return vendorCats, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -32,3 +32,8 @@ func (c *PurchaseHandler) GetVendorID() int {
|
||||
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
||||
return imgHint, err
|
||||
}
|
||||
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -93,6 +93,14 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
||||
return order, result, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) getOrderRider(vendorOrgCode, vendorStoreID string,param map[string]interface{}) ( err error) {
|
||||
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) ( err error) {
|
||||
return p.getOrderRider(vendorOrgCode, vendorStoreID, param)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) {
|
||||
order, _, err = p.getOrder(vendorOrgCode, vendorOrderID, vendorStoreID)
|
||||
return order, err
|
||||
|
||||
@@ -41,3 +41,8 @@ func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgUR
|
||||
func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) {
|
||||
return vendorCats, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user