chongtu
This commit is contained in:
@@ -1617,3 +1617,9 @@ func UpdateWaybillDesiredFee(ctx *jxcontext.Context, vendorOrderID string, desir
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func AcceptOrRefuseOrder(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isAccept bool) (err error) {
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||
handler := partner.GetPurchaseOrderHandlerFromVendorID(vendorID)
|
||||
return handler.AcceptOrRefuseOrder(order, isAccept, ctx.GetUserName())
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ type BaseScheduler struct {
|
||||
|
||||
func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||
globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
|
||||
if /*order.LockStatus == model.OrderStatusUnknown && */ order.Status == model.OrderStatusNew {
|
||||
if /*order.LockStatus == model.OrderStatusUnknown && */ order.Status == model.OrderStatusNew || order.Status == model.OrderStatusWaitAccepted {
|
||||
if c.IsReallyCallPlatformAPI {
|
||||
err = utils.CallFuncLogErrorWithInfo(func() error {
|
||||
return partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt, userName)
|
||||
|
||||
@@ -226,57 +226,61 @@ func init() {
|
||||
FixedScheduler = sch
|
||||
sch.IsReallyCallPlatformAPI = globals.ReallyCallPlatformAPI
|
||||
scheduler.CurrentScheduler = sch
|
||||
statusAccept := func(time time.Duration) *StatusActionConfig {
|
||||
return &StatusActionConfig{ // 自动接单
|
||||
StatusActionParams: partner.StatusActionParams{
|
||||
TimerType: partner.TimerTypeBaseStatusTime,
|
||||
Timeout: time,
|
||||
},
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
order := savedOrderInfo.order
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID)
|
||||
if err == nil {
|
||||
savedOrderInfo.storeDetail = storeDetail
|
||||
}
|
||||
mobile := order.ConsigneeMobile
|
||||
if order.ConsigneeMobile2 != "" {
|
||||
mobile = order.ConsigneeMobile2
|
||||
}
|
||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, mobile, jxutils.GetSaleStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
||||
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自动接单失败", err.Error())
|
||||
// 为了解决京东新消息与接单消息乱序的问题
|
||||
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 {
|
||||
if order2, err2 := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).GetOrder(order.VendorOrgCode, order.VendorOrderID); err2 == nil {
|
||||
if order2.Status > order.Status {
|
||||
order.Status = order2.Status
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
sch.OnOrderStatusChanged(order, model.Order2Status(order2), false)
|
||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||
err = nil
|
||||
}
|
||||
} else {
|
||||
err = err2
|
||||
}
|
||||
}
|
||||
}
|
||||
if isAcceptIt {
|
||||
if err == nil {
|
||||
sch.notifyNewOrder(order)
|
||||
msghub.OnNewOrder(order)
|
||||
}
|
||||
} else {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
|
||||
}
|
||||
return err
|
||||
})
|
||||
return nil
|
||||
},
|
||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||
return savedOrderInfo.order.LockStatus == model.LockStatusUnlocked && (savedOrderInfo.order.Status == model.OrderStatusNew || savedOrderInfo.order.Status == model.OrderStatusWaitAccepted)
|
||||
},
|
||||
}
|
||||
}
|
||||
sch.defWorkflowConfig = []map[int]*StatusActionConfig{
|
||||
map[int]*StatusActionConfig{
|
||||
model.OrderStatusNew: &StatusActionConfig{ // 自动接单
|
||||
StatusActionParams: partner.StatusActionParams{
|
||||
TimerType: partner.TimerTypeBaseStatusTime,
|
||||
Timeout: 10 * time.Millisecond,
|
||||
},
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
order := savedOrderInfo.order
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID)
|
||||
if err == nil {
|
||||
savedOrderInfo.storeDetail = storeDetail
|
||||
}
|
||||
mobile := order.ConsigneeMobile
|
||||
if order.ConsigneeMobile2 != "" {
|
||||
mobile = order.ConsigneeMobile2
|
||||
}
|
||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, mobile, jxutils.GetSaleStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
||||
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自动接单失败", err.Error())
|
||||
// 为了解决京东新消息与接单消息乱序的问题
|
||||
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 {
|
||||
if order2, err2 := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).GetOrder(order.VendorOrgCode, order.VendorOrderID); err2 == nil {
|
||||
if order2.Status > order.Status {
|
||||
order.Status = order2.Status
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
sch.OnOrderStatusChanged(order, model.Order2Status(order2), false)
|
||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||
err = nil
|
||||
}
|
||||
} else {
|
||||
err = err2
|
||||
}
|
||||
}
|
||||
}
|
||||
if isAcceptIt {
|
||||
if err == nil {
|
||||
sch.notifyNewOrder(order)
|
||||
msghub.OnNewOrder(order)
|
||||
}
|
||||
} else {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
|
||||
}
|
||||
return err
|
||||
})
|
||||
return nil
|
||||
},
|
||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||
return savedOrderInfo.order.LockStatus == model.LockStatusUnlocked && savedOrderInfo.order.Status == model.OrderStatusNew
|
||||
},
|
||||
},
|
||||
model.OrderStatusWaitAccepted: statusAccept(4 * time.Minute), //饿百假的自动接单
|
||||
model.OrderStatusNew: statusAccept(10 * time.Millisecond),
|
||||
model.OrderStatusAccepted: &StatusActionConfig{ // 自动拣货
|
||||
StatusActionParams: partner.StatusActionParams{
|
||||
TimerType: partner.TimerTypeBaseStatusTime,
|
||||
@@ -371,6 +375,9 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err
|
||||
globals.SugarLogger.Debugf("OnOrderNew orderID:%s", order.VendorOrderID)
|
||||
savedOrderInfo := s.loadSavedOrderFromMap(model.Order2Status(order), false)
|
||||
savedOrderInfo.SetOrder(order)
|
||||
if order.Status == model.OrderStatusWaitAccepted {
|
||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||
}
|
||||
if order.Status >= model.OrderStatusNew {
|
||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||
if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序,先收到接单消息,再收到新订单消息,导致接单TIMER不动作,这里补一下
|
||||
|
||||
Reference in New Issue
Block a user