package jd import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/controller" "git.rosy.net.cn/jx-callback/business/model" ) type WaybillController struct { } func init() { controller.WaybillManager.RegisterDeliveryProvider(controller.VendorIDJD, new(WaybillController)) } func (c *WaybillController) OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { controller.CallMsgHandler(func() { retVal = c.onWaybillMsg(msg) }, msg.OrderID) return retVal } func (c *WaybillController) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { order := c.callbackMsg2Waybill(msg) switch msg.DeliveryStatus { case jdapi.DeliveryStatusWait4Grap: order.Status = controller.WaybillStatusNew case jdapi.DeliveryStatusAccepted: order.Status = controller.WaybillStatusAccepted case jdapi.DeliveryStatusCourierCanceled: order.Status = controller.WaybillStatusCanceled case jdapi.DeliveryStatusCourierArrived: order.Status = controller.WaybillStatusCourierArrived case jdapi.DeliveryStatusGotGoods: order.Status = controller.WaybillStatusDelivering case jdapi.DeliveryStatusFinished: order.Status = controller.WaybillStatusDelivered case jdapi.DeliveryStatusFailedDelivery: order.Status = controller.WaybillStatusFailed default: order.Status = controller.WaybillStatusUnknown } return jdapi.Err2CallbackResponse(controller.WaybillManager.OnWaybillStatusChanged(order), order.VendorStatus) } func (c *WaybillController) callbackMsg2Waybill(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *model.Waybill) { retVal = &model.Waybill{ VendorOrderID: msg.OrderID, OrderVendorID: controller.VendorIDJD, VendorWaybillID: msg.OrderID, WaybillVendorID: controller.VendorIDJD, CourierName: msg.DeliveryManName, CourierMobile: msg.DeliveryManPhone, VendorStatus: msg.DeliveryStatus, WaybillCreatedAt: utils.Str2Time(msg.DeliveryStatusTime), } return retVal }