91 lines
3.9 KiB
Go
91 lines
3.9 KiB
Go
package ebai
|
||
|
||
import (
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/business/partner"
|
||
"git.rosy.net.cn/jx-callback/globals"
|
||
"git.rosy.net.cn/jx-callback/globals/api"
|
||
)
|
||
|
||
const (
|
||
timeout4WaybillCancel = 10 * time.Minute // 饿百发送运单取消消息10分钟后,如果没有转自送,就要取消订单,且不再发送订单取消消息
|
||
)
|
||
|
||
var (
|
||
VendorWaybillStatus2StatusMap = map[string]int{
|
||
ebaiapi.WaybillStatusNew: model.WaybillStatusUnknown,
|
||
ebaiapi.WaybillStatusRequestDelivery: model.WaybillStatusUnknown,
|
||
ebaiapi.WaybillStatusWait4Courier: model.WaybillStatusNew,
|
||
ebaiapi.WaybillStatusCourierAccepted: model.WaybillStatusAccepted,
|
||
ebaiapi.WaybillStatusCourierPickedup: model.WaybillStatusDelivering,
|
||
ebaiapi.WaybillStatusDeliveryCancled: model.WaybillStatusCanceled,
|
||
ebaiapi.WaybillStatusFinished: model.WaybillStatusDelivered,
|
||
// ebaiapi.WaybillStatusExceptional: model.WaybillStatusCanceled, // 饿百的配送异常不应该当成取消来处理,比如:1568651453228834871
|
||
ebaiapi.WaybillStatusSelfDelivery: model.WaybillStatusUnknown,
|
||
ebaiapi.WaybillStatusDontDeliver: model.WaybillStatusCanceled,
|
||
ebaiapi.WaybillStatusDeliveryRejected: model.WaybillStatusCanceled,
|
||
ebaiapi.WaybillStatusCourierArrived: model.WaybillStatusCourierArrived,
|
||
}
|
||
)
|
||
|
||
func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string) int {
|
||
if status, ok := VendorWaybillStatus2StatusMap[vendorStatus]; ok {
|
||
return status
|
||
}
|
||
return model.WaybillStatusUnknown
|
||
}
|
||
|
||
func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
||
order := c.callbackMsg2Waybill(msg)
|
||
globals.SugarLogger.Debugf("ebai onWaybillMsg orderID:%s", order.VendorOrderID)
|
||
if order.Status == model.WaybillStatusNew || order.Status == model.WaybillStatusAccepted { // 饿百新运单事件要查询快递员信息,因为可能事件错序
|
||
if result, err := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err != nil {
|
||
globals.SugarLogger.Warnf("ebai onWaybillMsg orderID:%s OrderDeliveryGet failed with error:%v", order.VendorOrderID, err)
|
||
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, order.VendorOrderID)
|
||
} else {
|
||
order.CourierName = utils.Interface2String(result["name"])
|
||
order.CourierMobile = utils.Interface2String(result["phone"])
|
||
}
|
||
if order.Status == model.WaybillStatusNew {
|
||
order2, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.WaybillVendorID)
|
||
if order2 != nil {
|
||
if order2.Status == model.OrderStatusWaitAccepted {
|
||
order2.Status = model.OrderStatusNew
|
||
scheduler.CurrentScheduler.OnOrderNew(order2, false, false)
|
||
}
|
||
}
|
||
}
|
||
} else if order.Status == model.WaybillStatusCanceled {
|
||
utils.AfterFuncWithRecover(timeout4WaybillCancel, func() {
|
||
if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil {
|
||
if localOrder.Status < model.OrderStatusEndBegin {
|
||
c.trySyncCancelStatus(order.VendorOrderID)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||
}
|
||
|
||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *ebaiapi.CallbackMsg) (retVal *model.Waybill) {
|
||
vendorStatus := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"]))
|
||
orderID := GetOrderIDFromMsg(msg)
|
||
retVal = &model.Waybill{
|
||
VendorOrderID: orderID,
|
||
OrderVendorID: model.VendorIDEBAI,
|
||
VendorWaybillID: orderID,
|
||
WaybillVendorID: model.VendorIDEBAI,
|
||
Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
||
VendorStatus: vendorStatus,
|
||
StatusTime: utils.Timestamp2Time(msg.Timestamp),
|
||
|
||
VendorOrgCode: msg.Source,
|
||
}
|
||
return retVal
|
||
}
|