- GetStatusDuplicatedCount

- 提前判断消息是否重复,防止一些事件在判断是否重复前已经超时
This commit is contained in:
gazebo
2019-05-27 11:34:02 +08:00
parent b509e76b6e
commit e81f195032
5 changed files with 26 additions and 3 deletions

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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

View File

@@ -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)

View File

@@ -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 {