Files
jx-callback/business/partner/purchase/mtwm/waybill.go

67 lines
2.2 KiB
Go

package mtwm
import (
"net/url"
"time"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner"
)
var (
VendorWaybillStatus2StatusMap = map[string]int{
mtwmapi.WaybillStatusWait4Delivery: model.WaybillStatusNew,
mtwmapi.WaybillStatusAccepted: model.WaybillStatusAccepted,
mtwmapi.WaybillStatusCourierArrived: model.WaybillStatusCourierArrived,
mtwmapi.WaybillStatusPickedup: model.WaybillStatusDelivering,
mtwmapi.WaybillStatusDelivered: model.WaybillStatusDelivered,
mtwmapi.WaybillStatusCanceled: model.WaybillStatusCanceled,
}
)
func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string) int {
if status, ok := VendorWaybillStatus2StatusMap[vendorStatus]; ok {
return status
}
return model.WaybillStatusUnknown
}
func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
waybill := c.callbackMsg2Waybill(msg)
err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
if err == nil && waybill.Status == model.WaybillStatusDelivering {
msg := &mtwmapi.CallbackMsg{
Cmd: FakeMsgTypeOrderDelivering,
Data: url.Values{},
}
msg.Data.Set("timestamp", utils.Int64ToStr(time.Now().Unix()))
msg.Data.Set("utime", msg.Data.Get("timestamp"))
msg.Data.Set(mtwmapi.KeyOrderID, waybill.VendorOrderID)
msg.Data.Set("status", mtwmapi.OrderStatusDelivering)
utils.CallFuncAsync(func() {
OnOrderCallbackMsg(msg)
})
}
return mtwmapi.Err2CallbackResponse(err, "")
}
func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
orderID := GetOrderIDFromMsg(msg)
vendorStatus := msg.Data.Get("logistics_status")
retVal = &model.Waybill{
VendorOrderID: orderID,
OrderVendorID: model.VendorIDMTWM,
VendorWaybillID: orderID,
WaybillVendorID: model.VendorIDMTWM,
CourierName: msg.Data.Get("dispatcher_name"),
CourierMobile: msg.Data.Get("dispatcher_mobile"),
VendorStatus: vendorStatus,
Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.Data.Get("time"))),
Remark: "",
}
return retVal
}