修复订单调度定时器的BUG
PickupGoods失败后判断订单状态如果是已经大于拣货完成,则忽略错误
This commit is contained in:
@@ -37,8 +37,14 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool
|
|||||||
globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID)
|
||||||
if /*order.LockStatus == model.OrderStatusUnknown && */ order.Status == model.OrderStatusAccepted {
|
if /*order.LockStatus == model.OrderStatusUnknown && */ order.Status == model.OrderStatusAccepted {
|
||||||
if c.IsReallyCallPlatformAPI {
|
if c.IsReallyCallPlatformAPI {
|
||||||
err = utils.CallFuncLogErrorWithInfo(func() error {
|
handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID)
|
||||||
return partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).PickupGoods(order, isSelfDelivery, userName)
|
err = utils.CallFuncLogErrorWithInfo(func() (err error) {
|
||||||
|
if err = handler.PickupGoods(order, isSelfDelivery, userName); err != nil {
|
||||||
|
if status, err2 := handler.GetOrderStatus(order.VendorOrgCode, order.VendorOrderID); err2 == nil && status >= model.OrderStatusFinished {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
}, "PickupGoods orderID:%s", order.VendorOrderID)
|
}, "PickupGoods orderID:%s", order.VendorOrderID)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ func (w *WatchOrderInfo) StopTimer(statusType, vendorID, status int) {
|
|||||||
for _, timerInfo := range w.timerList {
|
for _, timerInfo := range w.timerList {
|
||||||
if (statusType == -1 || statusType == timerInfo.statusType) &&
|
if (statusType == -1 || statusType == timerInfo.statusType) &&
|
||||||
(vendorID == -1 || vendorID == timerInfo.vendorID) &&
|
(vendorID == -1 || vendorID == timerInfo.vendorID) &&
|
||||||
(status == -1 || status <= timerInfo.status) {
|
(status == -1 || status >= timerInfo.status) {
|
||||||
if timerInfo.timer != nil {
|
if timerInfo.timer != nil {
|
||||||
timerInfo.timer.Stop()
|
timerInfo.timer.Stop()
|
||||||
timerInfo.timer = nil
|
timerInfo.timer = nil
|
||||||
@@ -187,6 +187,10 @@ func (w *WatchOrderInfo) StopTimer(statusType, vendorID, status int) {
|
|||||||
w.timerList = newTimerList
|
w.timerList = newTimerList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *WatchOrderInfo) AddTimer(timerInfo *tTimerInfo) {
|
||||||
|
w.timerList = append(w.timerList, timerInfo)
|
||||||
|
}
|
||||||
|
|
||||||
func (w *WatchOrderInfo) GetCreateWaybillTimeout() (timeoutSecond int) {
|
func (w *WatchOrderInfo) GetCreateWaybillTimeout() (timeoutSecond int) {
|
||||||
// if w.timerStatusType == scheduler.TimerStatusTypeWaybill && w.timerStatus == model.WaybillStatusNew {
|
// if w.timerStatusType == scheduler.TimerStatusTypeWaybill && w.timerStatus == model.WaybillStatusNew {
|
||||||
// timeoutSecond = int(w.timerTime.Sub(time.Now()) / time.Second)
|
// timeoutSecond = int(w.timerTime.Sub(time.Now()) / time.Second)
|
||||||
@@ -267,7 +271,7 @@ func init() {
|
|||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||||
return savedOrderInfo.autoPickupTimeoutMinute > 0
|
return savedOrderInfo.autoPickupTimeoutMinute > 0 && savedOrderInfo.order.Status < model.OrderStatusFinishedPickup
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
model.OrderStatusFinishedPickup: &StatusActionConfig{
|
model.OrderStatusFinishedPickup: &StatusActionConfig{
|
||||||
@@ -840,6 +844,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa
|
|||||||
ts.StopTimer(statusType, vendorID, status)
|
ts.StopTimer(statusType, vendorID, status)
|
||||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||||
})
|
})
|
||||||
|
savedOrderInfo.AddTimer(timerInfo)
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("resetTimer, orderID:%s, statusType:%d, status:%d, timeout:%v", order.VendorOrderID, statusType, status, timeout)
|
globals.SugarLogger.Debugf("resetTimer, orderID:%s, statusType:%d, status:%d, timeout:%v", order.VendorOrderID, statusType, status, timeout)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ type OrderPhoneNumberInfo struct {
|
|||||||
type IPurchasePlatformOrderHandler interface {
|
type IPurchasePlatformOrderHandler interface {
|
||||||
Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder)
|
Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder)
|
||||||
GetOrder(vendorOrgCode, vendorOrderID string) (order *model.GoodsOrder, err error)
|
GetOrder(vendorOrgCode, vendorOrderID string) (order *model.GoodsOrder, err error)
|
||||||
|
GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error)
|
||||||
GetStatusActionTimeout(order *model.GoodsOrder, statusType, status int) (params *StatusActionParams)
|
GetStatusActionTimeout(order *model.GoodsOrder, statusType, status int) (params *StatusActionParams)
|
||||||
|
|
||||||
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error)
|
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error)
|
||||||
|
|||||||
@@ -79,6 +79,14 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *
|
|||||||
return order, err
|
return order, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||||
|
status, err = api.EbaiAPI.OrderStatusGet(vendorOrderID)
|
||||||
|
if err == nil {
|
||||||
|
status = p.getStatusFromVendorStatus(utils.Int2Str(status))
|
||||||
|
}
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) getOrder(vendorOrderID string) (order *model.GoodsOrder, orderMap map[string]interface{}, err error) {
|
func (p *PurchaseHandler) getOrder(vendorOrderID string) (order *model.GoodsOrder, orderMap map[string]interface{}, err error) {
|
||||||
result, err := api.EbaiAPI.OrderGet(vendorOrderID)
|
result, err := api.EbaiAPI.OrderGet(vendorOrderID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ var (
|
|||||||
jdapi.OrderStatusFinishedPickup: model.OrderStatusFinishedPickup,
|
jdapi.OrderStatusFinishedPickup: model.OrderStatusFinishedPickup,
|
||||||
jdapi.OrderStatusDelivering: model.OrderStatusDelivering,
|
jdapi.OrderStatusDelivering: model.OrderStatusDelivering,
|
||||||
jdapi.OrderStatusDelivered: model.OrderStatusFinished,
|
jdapi.OrderStatusDelivered: model.OrderStatusFinished,
|
||||||
// jdapi.OrderStatusFinished: model.OrderStatusFinished, // todo 这个状态不是真正都完成的意思
|
jdapi.OrderStatusFinished: model.OrderStatusFinished, // todo 这个状态不是真正都完成的意思?
|
||||||
jdapi.OrderStatusCanceled: model.OrderStatusCanceled,
|
jdapi.OrderStatusCanceled: model.OrderStatusCanceled,
|
||||||
|
|
||||||
jdapi.OrderStatusAdjust: model.OrderStatusAdjust,
|
jdapi.OrderStatusAdjust: model.OrderStatusAdjust,
|
||||||
@@ -147,6 +147,14 @@ func (c *PurchaseHandler) GetOrder(vendorOrgCode, orderID string) (order *model.
|
|||||||
return order, err
|
return order, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||||
|
order, err := getAPI(vendorOrgCode).QuerySingleOrder2(vendorOrderID)
|
||||||
|
if err == nil {
|
||||||
|
status = p.getStatusFromVendorStatus(utils.Int2Str(order.OrderStatus))
|
||||||
|
}
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
||||||
result := orderData
|
result := orderData
|
||||||
orderID := utils.Int64ToStr(utils.MustInterface2Int64(result["orderId"]))
|
orderID := utils.Int64ToStr(utils.MustInterface2Int64(result["orderId"]))
|
||||||
|
|||||||
@@ -32,6 +32,14 @@ func TestGetOrder(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetOrderStatus(t *testing.T) {
|
||||||
|
status, err := CurPurchaseHandler.GetOrderStatus("", "929203144000041")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
t.Log(status)
|
||||||
|
}
|
||||||
|
|
||||||
func TestListOrders(t *testing.T) {
|
func TestListOrders(t *testing.T) {
|
||||||
result, err := CurPurchaseHandler.ListOrders(jxcontext.AdminCtx, "", nil, time.Now(), "")
|
result, err := CurPurchaseHandler.ListOrders(jxcontext.AdminCtx, "", nil, time.Now(), "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -23,20 +23,6 @@ func TestCreateSku(t *testing.T) {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateSku(t *testing.T) {
|
|
||||||
// t.Log(beego.BConfig.RunMode)
|
|
||||||
db := dao.GetDB()
|
|
||||||
skuID := 21741
|
|
||||||
sku := &model.Sku{}
|
|
||||||
sku.ID = skuID
|
|
||||||
dao.GetEntity(db, sku)
|
|
||||||
|
|
||||||
err := CurPurchaseHandler.UpdateSku(db, sku, "autotest")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetAllCategories(t *testing.T) {
|
func TestGetAllCategories(t *testing.T) {
|
||||||
result, err := CurPurchaseHandler.GetAllCategories(jxcontext.AdminCtx, "")
|
result, err := CurPurchaseHandler.GetAllCategories(jxcontext.AdminCtx, "")
|
||||||
if err != nil || len(result) == 0 {
|
if err != nil || len(result) == 0 {
|
||||||
|
|||||||
@@ -16,9 +16,18 @@ func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) GetOrder(vendorOrgCode, orderID string) (order *model.GoodsOrder, err error) {
|
func (c *PurchaseHandler) GetOrder(vendorOrgCode, orderID string) (order *model.GoodsOrder, err error) {
|
||||||
|
order, err = partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJX)
|
||||||
return order, err
|
return order, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||||
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJX)
|
||||||
|
if err == nil {
|
||||||
|
status = order.Status
|
||||||
|
}
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||||
var status int
|
var status int
|
||||||
if isAcceptIt {
|
if isAcceptIt {
|
||||||
|
|||||||
@@ -99,6 +99,14 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *
|
|||||||
return order, err
|
return order, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||||
|
status, err = api.MtwmAPI.OrderViewStatus(utils.Str2Int64(vendorOrderID))
|
||||||
|
if err == nil {
|
||||||
|
status = p.getStatusFromVendorStatus(utils.Int2Str(status))
|
||||||
|
}
|
||||||
|
return status, err
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
||||||
result := orderData
|
result := orderData
|
||||||
vendorOrderID := utils.Int64ToStr(utils.MustInterface2Int64(result["order_id"]))
|
vendorOrderID := utils.Int64ToStr(utils.MustInterface2Int64(result["order_id"]))
|
||||||
|
|||||||
@@ -18,6 +18,14 @@ func TestGetOrder(t *testing.T) {
|
|||||||
t.Log(utils.Format4Output(result, false))
|
t.Log(utils.Format4Output(result, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetOrderStatus(t *testing.T) {
|
||||||
|
result, err := CurPurchaseHandler.GetOrderStatus("", "71884881906304496")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(result, false))
|
||||||
|
}
|
||||||
|
|
||||||
func TestListOrders(t *testing.T) {
|
func TestListOrders(t *testing.T) {
|
||||||
result, err := CurPurchaseHandler.ListOrders(jxcontext.AdminCtx, "", nil, time.Now(), "4626746")
|
result, err := CurPurchaseHandler.ListOrders(jxcontext.AdminCtx, "", nil, time.Now(), "4626746")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package wsc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
||||||
@@ -108,6 +109,10 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *
|
|||||||
return order, err
|
return order, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||||
|
return 0, fmt.Errorf("未实现")
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
||||||
result := orderData
|
result := orderData
|
||||||
vendorOrderID := utils.Int64ToStr(utils.MustInterface2Int64(result["orderNo"]))
|
vendorOrderID := utils.Int64ToStr(utils.MustInterface2Int64(result["orderNo"]))
|
||||||
|
|||||||
Reference in New Issue
Block a user