diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 7f9e41b46..d1ba7e230 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -162,12 +162,12 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model return err } -func (c *OrderManager) OnOrderStatusChanged(orderStatus *model.OrderStatus) (err error) { +func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) { // 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下 if orderStatus.Status == model.OrderStatusAccepted { - if order, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder { + if _, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder { if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil { - if order, err2 := handler.GetOrder(order.VendorOrgCode, orderStatus.VendorOrderID); err2 == nil { + if order, err2 := handler.GetOrder(vendorOrgCode, orderStatus.VendorOrderID); err2 == nil { c.OnOrderNew(order, orderStatus) } } diff --git a/business/jxcallback/orderman/waybill.go b/business/jxcallback/orderman/waybill.go index 8ef0425a1..1e9cba812 100644 --- a/business/jxcallback/orderman/waybill.go +++ b/business/jxcallback/orderman/waybill.go @@ -176,7 +176,7 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) { StatusTime: bill.StatusTime, Remark: bill.Remark, } - w.OnOrderStatusChanged(fakeOrderStatus) + w.OnOrderStatusChanged(bill.VendorOrgCode, fakeOrderStatus) } } return err diff --git a/business/model/order.go b/business/model/order.go index bec241f44..96624d07f 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -180,6 +180,8 @@ type Waybill struct { ModelTimeInfo `json:"-"` OriginalData string `orm:"type(text)" json:"-"` Remark string `orm:"-" json:"-"` // 用于传递remark + + VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 } func (w *Waybill) TableUnique() [][]string { diff --git a/business/partner/partner.go b/business/partner/partner.go index 54ce8ad9e..aedce9767 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -88,7 +88,7 @@ type IOrderManager interface { OnOrderNew(order *model.GoodsOrder, orderStatus *model.OrderStatus) (err error) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model.OrderStatus) (err error) - OnOrderStatusChanged(orderStatus *model.OrderStatus) (err error) + OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) OnOrderMsg(order *model.GoodsOrder, vendorStatus, remark string) (err error) OnWaybillStatusChanged(bill *model.Waybill) (err error) diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 1f0df7eeb..83f53d018 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -435,7 +435,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi. } } } - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged(msg.Source, status) } } retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil) diff --git a/business/partner/purchase/ebai/waybill.go b/business/partner/purchase/ebai/waybill.go index 0d7564fdd..8a8f551ba 100644 --- a/business/partner/purchase/ebai/waybill.go +++ b/business/partner/purchase/ebai/waybill.go @@ -73,6 +73,8 @@ func (c *PurchaseHandler) callbackMsg2Waybill(msg *ebaiapi.CallbackMsg) (retVal Status: c.GetWaybillStatusFromVendorStatus(vendorStatus), VendorStatus: vendorStatus, StatusTime: utils.Timestamp2Time(msg.Timestamp), + + VendorOrgCode: msg.Source, } return retVal } diff --git a/business/partner/purchase/elm/order.go b/business/partner/purchase/elm/order.go index 9bbdfbc5f..41f2130a5 100644 --- a/business/partner/purchase/elm/order.go +++ b/business/partner/purchase/elm/order.go @@ -96,13 +96,13 @@ func (c *PurchaseHandler) onOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) ( globals.SugarLogger.Warnf("onOrderStatusMsg elm msg:%v not handled", msg) return elmapi.SuccessResponse } - err := partner.CurOrderManager.OnOrderStatusChanged(status) + err := partner.CurOrderManager.OnOrderStatusChanged("", status) // 直接跳到拣货完成 if msg.MsgType == elmapi.MsgTypeOrderAccepted { status.Status = model.OrderStatusFinishedPickup status.VendorStatus = fakePickedUp - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged("", status) } // if globals.HandleLegacyJxOrder && err == nil { // c.legacyElmOrderStatusChanged(status) diff --git a/business/partner/purchase/jd/callback.go b/business/partner/purchase/jd/callback.go index a94fff6f0..9a4b0bf16 100644 --- a/business/partner/purchase/jd/callback.go +++ b/business/partner/purchase/jd/callback.go @@ -6,21 +6,21 @@ import ( func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { if CurPurchaseHandler != nil { - retVal = CurPurchaseHandler.OnOrderMsg(GetAPIByAppKey(msg.AppKey), msg) + retVal = CurPurchaseHandler.OnOrderMsg(appKey2OrgCode(msg.AppKey), msg) } return retVal } func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { if CurPurchaseHandler != nil { - retVal = CurPurchaseHandler.OnWaybillMsg(GetAPIByAppKey(msg.AppKey), msg) + retVal = CurPurchaseHandler.OnWaybillMsg(appKey2OrgCode(msg.AppKey), msg) } return retVal } func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { if CurPurchaseHandler != nil { - retVal = CurPurchaseHandler.OnStoreMsg(GetAPIByAppKey(msg.AppKey), msg) + retVal = CurPurchaseHandler.OnStoreMsg(appKey2OrgCode(msg.AppKey), msg) } return retVal } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index e2b8995d4..de2912a7b 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -26,6 +26,18 @@ func getAPI(appOrgCode string) (apiObj *jdapi.API) { return partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API) } +func appKey2OrgCode(appKey string) (vendorOrgCode string) { + apiList := partner.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) + for _, v := range apiList { + jdAPI := partner.CurAPIManager.GetAPI(model.VendorIDJD, v).(*jdapi.API) + if jdAPI.GetAppKey() == appKey { + vendorOrgCode = v + break + } + } + return vendorOrgCode +} + func GetAPIByAppKey(appKey string) (apiObj *jdapi.API) { if appKey == "" { apiObj = getAPI("") diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index 75a7cfb6a..dc658c7a9 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -44,9 +44,9 @@ var ( selfTakeCodeReg = regexp.MustCompile(`等待用户凭提货码(\d+)于`) ) -func (c *PurchaseHandler) OnOrderMsg(a *jdapi.API, msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { +func (c *PurchaseHandler) OnOrderMsg(vendorOrgCode string, msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { jxutils.CallMsgHandler(func() { - retVal = c.onOrderMsg(a, msg) + retVal = c.onOrderMsg(vendorOrgCode, msg) }, jxutils.ComposeUniversalOrderID(msg.BillID, model.VendorIDJD)) return retVal } @@ -66,7 +66,8 @@ func (c *PurchaseHandler) updateOrderFinancialInfo(a *jdapi.API, orderID string) return err } -func (c *PurchaseHandler) onOrderMsg(a *jdapi.API, msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { +func (c *PurchaseHandler) onOrderMsg(vendorOrgCode string, msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { + a := getAPI(vendorOrgCode) status := c.callbackMsg2Status(msg) if jdapi.StatusIDNewOrder == msg.StatusID { status.Status = model.OrderStatusNew // 因为京东将事件32000与状态32000混用,事件32000可能是新订单,也可能是已接单,统一当成新订单处理 @@ -91,7 +92,7 @@ func (c *PurchaseHandler) onOrderMsg(a *jdapi.API, msg *jdapi.CallbackOrderMsg) c.onOrderComment2(a, msg) }) } - err := partner.CurOrderManager.OnOrderStatusChanged(status) + err := partner.CurOrderManager.OnOrderStatusChanged(vendorOrgCode, status) // if globals.HandleLegacyJxOrder && err == nil { // c.legacyJdOrderStatusChanged(status) // } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 1aae1bd90..b9c45423e 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -279,7 +279,7 @@ func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode s } // 当前京东的storeCrud消息不会在门店状态改变时发送,所以意义不大,先放在这里 -func (c *PurchaseHandler) OnStoreMsg(a *jdapi.API, msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) { +func (c *PurchaseHandler) OnStoreMsg(vendorOrgCode string, msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) { var err error // if msg.StatusID == jdapi.StatusIDUpdateStore { // var storeStatus int diff --git a/business/partner/purchase/jd/waybill.go b/business/partner/purchase/jd/waybill.go index 0d3157333..5e93c3a92 100644 --- a/business/partner/purchase/jd/waybill.go +++ b/business/partner/purchase/jd/waybill.go @@ -8,14 +8,14 @@ import ( "git.rosy.net.cn/jx-callback/business/partner" ) -func (c *PurchaseHandler) OnWaybillMsg(a *jdapi.API, msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { +func (c *PurchaseHandler) OnWaybillMsg(vendorOrgCode string, msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { jxutils.CallMsgHandler(func() { - retVal = c.onWaybillMsg(a, msg) + retVal = c.onWaybillMsg(vendorOrgCode, msg) }, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDJD)) return retVal } -func (c *PurchaseHandler) onWaybillMsg(a *jdapi.API, msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { +func (c *PurchaseHandler) onWaybillMsg(vendorOrgCode string, msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) { order := c.callbackMsg2Waybill(msg) switch msg.DeliveryStatus { case jdapi.DeliveryStatusWait4Grap: @@ -63,6 +63,8 @@ func (c *PurchaseHandler) callbackMsg2Waybill(msg *jdapi.CallbackDeliveryStatusM VendorStatus: msg.DeliveryStatus, StatusTime: utils.Str2Time(msg.DeliveryStatusTime), Remark: msg.Remark, + + VendorOrgCode: appKey2OrgCode(msg.AppKey), } return retVal } diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index ca54a1110..8514b3511 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -556,7 +556,7 @@ func changeOrderStatus(vendorOrderID string, status int, remark string) (err err Remark: remark, } jxutils.CallMsgHandlerAsync(func() { - err = partner.CurOrderManager.OnOrderStatusChanged(orderStatus) + err = partner.CurOrderManager.OnOrderStatusChanged("", orderStatus) }, jxutils.ComposeUniversalOrderID(vendorOrderID, model.VendorIDJX)) return err } diff --git a/business/partner/purchase/jx/phpjx/order.go b/business/partner/purchase/jx/phpjx/order.go index fa079d957..c4dd0b068 100644 --- a/business/partner/purchase/jx/phpjx/order.go +++ b/business/partner/purchase/jx/phpjx/order.go @@ -41,7 +41,7 @@ func onOrderMsg(msg *CallbackMsg) (retVal, errCode string, err error) { } } else { status := callbackMsg2Status(msg) - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged("", status) } return retVal, errCode, err } diff --git a/business/partner/purchase/jx/phpjx/order_afs.go b/business/partner/purchase/jx/phpjx/order_afs.go index bb604c9aa..2e2fbd109 100644 --- a/business/partner/purchase/jx/phpjx/order_afs.go +++ b/business/partner/purchase/jx/phpjx/order_afs.go @@ -101,7 +101,7 @@ func onAfsOrderMsg(msg *CallbackMsg) (err error) { err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, status) } } else { - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged("", status) } return err } diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 5bd4fa3a9..9cc8fe70d 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -336,7 +336,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap } }) } - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged(msg.AppID, status) if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { utils.CallFuncAsync(func() { orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) diff --git a/business/partner/purchase/mtwm/waybill.go b/business/partner/purchase/mtwm/waybill.go index 4c44081a6..432e02db4 100644 --- a/business/partner/purchase/mtwm/waybill.go +++ b/business/partner/purchase/mtwm/waybill.go @@ -49,6 +49,8 @@ func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal Status: c.GetWaybillStatusFromVendorStatus(vendorStatus), StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))), Remark: "", + + VendorOrgCode: msg.AppID, } return retVal } diff --git a/business/partner/purchase/weimob/wsc/order.go b/business/partner/purchase/weimob/wsc/order.go index 110674c79..0e5967048 100644 --- a/business/partner/purchase/weimob/wsc/order.go +++ b/business/partner/purchase/weimob/wsc/order.go @@ -54,7 +54,7 @@ func (p *PurchaseHandler) onOrderMsg(msg *weimobapi.CallbackMsg) (response *weim order.StatusTime = msg.StatusTime err = partner.CurOrderManager.OnOrderNew(order, status) } else { - err = partner.CurOrderManager.OnOrderStatusChanged(status) + err = partner.CurOrderManager.OnOrderStatusChanged("", status) } } }