diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index 61fc0211b..1cabb54f1 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -102,6 +102,17 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db *dao.DaoDB) (isDuplic return isDuplicated, err } +func (c *OrderManager) GetStatusDuplicatedCount(status *model.OrderStatus) (duplicatedCount int) { + if status == nil { + return 0 + } + db := dao.GetDB() + if err := dao.GetEntity(db, status, "VendorOrderID", "VendorID", "OrderType", "VendorStatus", "StatusTime"); err == nil { + return status.DuplicatedCount + } + return 0 +} + // todo 最好还是改成全事件回放算了 func LoadPendingOrders() { orders := FixedOrderManager.LoadPendingOrders() diff --git a/business/partner/partner.go b/business/partner/partner.go index 792474d61..9e3579cdc 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -159,6 +159,8 @@ type IOrderManager interface { OnAfsOrderStatusChanged(orderStatus *model.OrderStatus) (err error) LoadAfsOrder(vendorAfsOrderID string, vendorID int) (afsOrder *model.AfsOrder, err error) UpdateAfsOrderFields(afsOrder *model.AfsOrder, fieldList []string) (err error) + + GetStatusDuplicatedCount(status *model.OrderStatus) (duplicatedCount int) } type IStoreManager interface { diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index e70d8c564..f717feb96 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -298,11 +298,14 @@ func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi. if c.isAfsMsg(msg) { retVal = c.OnAfsOrderMsg(msg) } else { + status := c.callbackMsg2Status(msg) + if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 { + return nil + } if ebaiapi.CmdOrderCreate == msg.Cmd { retVal = c.onOrderNew(msg) } else { var err error - status := c.callbackMsg2Status(msg) if status != nil { if status.Status == model.OrderStatusAdjust { var order *model.GoodsOrder diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index d694313e6..ffeebc92e 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -42,6 +42,10 @@ func (c *PurchaseHandler) OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi } func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { + status := c.callbackMsg2Status(msg) + if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 { + return nil + } if msg.MsgURL == jdapi.CallbackMsgOrderAccounting { retVal = c.OnFinancialMsg(msg) } else if msg.MsgURL == jdapi.CallbackMsgAfterSaleBillStatus { @@ -53,7 +57,6 @@ func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi } else if jdapi.OrderStatusAdjust == msg.StatusID { retVal = c.onOrderAdjust(msg) } else { - status := c.callbackMsg2Status(msg) if msg.StatusID == jdapi.OrderStatusAddComment || msg.StatusID == jdapi.OrderStatusModifyComment { utils.CallFuncAsync(func() { c.onOrderComment2(msg) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 125db6fba..54ca42174 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -184,6 +184,10 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap if c.isAfsMsg(msg) { response = c.OnAfsOrderMsg(msg) } else { + status := c.callbackMsg2Status(msg) + if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 { + return nil + } if msg.Cmd == mtwmapi.MsgTypeNewOrder { order, orderMap, err2 := c.getOrder(GetOrderIDFromMsg(msg)) if err = err2; err == nil { @@ -199,7 +203,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap } } } else { - if status := c.callbackMsg2Status(msg); status != nil { + if status != nil { if status.Status == model.OrderStatusAdjust { var order *model.GoodsOrder if order, err = c.GetOrder(GetOrderIDFromMsg(msg)); err == nil {