- 新增OrderStatusUndoApplyCancel

This commit is contained in:
gazebo
2019-04-19 17:29:37 +08:00
parent b065c79ec3
commit 892cbd365a
5 changed files with 65 additions and 43 deletions

View File

@@ -350,36 +350,34 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da
db = dao.GetDB() db = dao.GetDB()
} }
isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db) isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db)
if err == nil && !isDuplicated && if err == nil && !isDuplicated && model.IsOrderImportantStatus(orderStatus.Status) {
(orderStatus.Status > model.OrderStatusUnknown ||
(orderStatus.Status == model.OrderStatusUnlocked || orderStatus.Status == model.OrderStatusLocked || orderStatus.Status == model.OrderStatusApplyCancel)) {
order := &model.GoodsOrder{ order := &model.GoodsOrder{
VendorOrderID: orderStatus.VendorOrderID, VendorOrderID: orderStatus.VendorOrderID,
VendorID: orderStatus.VendorID, VendorID: orderStatus.VendorID,
} }
if err = db.Db.ReadForUpdate(order, "VendorOrderID", "VendorID"); err == nil { if err = db.Db.ReadForUpdate(order, "VendorOrderID", "VendorID"); err == nil {
if (orderStatus.Status == model.OrderStatusUnlocked || orderStatus.Status == model.OrderStatusLocked || orderStatus.Status == model.OrderStatusApplyCancel) || if (model.IsOrderLockStatus(orderStatus.Status) || model.IsOrderUnlockStatus(orderStatus.Status)) ||
(orderStatus.Status > model.OrderStatusUnknown && orderStatus.Status >= order.Status) { // todo 要求status不能回绕 (model.IsOrderMainStatus(orderStatus.Status) && orderStatus.Status >= order.Status) { // todo 要求status不能回绕
order.VendorStatus = orderStatus.VendorStatus order.VendorStatus = orderStatus.VendorStatus
order.StatusTime = orderStatus.StatusTime order.StatusTime = orderStatus.StatusTime
updateFields := []string{ updateFields := []string{
"VendorStatus", "StatusTime", "VendorStatus", "StatusTime",
} }
if orderStatus.Status > model.OrderStatusUnknown { if model.IsOrderMainStatus(orderStatus.Status) {
order.LockStatus = model.OrderStatusUnknown order.LockStatus = model.OrderStatusUnknown
order.Status = orderStatus.Status order.Status = orderStatus.Status
updateFields = append(updateFields, "Status", "LockStatus") updateFields = append(updateFields, "Status", "LockStatus")
} else { } else {
if orderStatus.Status == model.OrderStatusUnlocked { if model.IsOrderUnlockStatus(orderStatus.Status) {
order.LockStatus = model.OrderStatusUnknown order.LockStatus = model.OrderStatusUnknown
updateFields = append(updateFields, "LockStatus") updateFields = append(updateFields, "LockStatus")
} else if orderStatus.Status == model.OrderStatusLocked || orderStatus.Status == model.OrderStatusApplyCancel { } else if model.IsOrderLockStatus(orderStatus.Status) {
order.LockStatus = orderStatus.Status order.LockStatus = orderStatus.Status
updateFields = append(updateFields, "LockStatus") updateFields = append(updateFields, "LockStatus")
} }
} }
orderStatus.LockStatus = order.LockStatus orderStatus.LockStatus = order.LockStatus
if orderStatus.Status >= model.OrderStatusEndBegin { if model.IsOrderFinalStatus(orderStatus.Status) {
order.OrderFinishedAt = orderStatus.StatusTime order.OrderFinishedAt = orderStatus.StatusTime
updateFields = append(updateFields, "OrderFinishedAt") updateFields = append(updateFields, "OrderFinishedAt")
} }

View File

@@ -73,8 +73,8 @@ var (
OrderStatusUnlocked: "解锁", OrderStatusUnlocked: "解锁",
OrderStatusLocked: "锁定", OrderStatusLocked: "锁定",
OrderStatusApplyUrgeOrder: "催单", OrderStatusApplyUrgeOrder: "催单",
OrderStatusApplyRefund: "申请退款", // OrderStatusApplyRefund: "申请退款",
OrderStatusApplyCancel: "申请取消", OrderStatusApplyCancel: "申请取消",
OrderStatusUnknown: "一般事件", OrderStatusUnknown: "一般事件",
@@ -159,13 +159,15 @@ const (
const ( const (
OrderStatusMsg = -100 OrderStatusMsg = -100
OrderStatusAdjust = -35 // 订单调整完成 OrderStatusAdjust = -65 // 原值-35 订单调整完成
OrderStatusWait4Pay = -30 // 下单待支付,微盟在这个时间发新订单事件 OrderStatusWait4Pay = -60 // 原值-30 下单待支付,微盟在这个时间发新订单事件
OrderStatusUnlocked = -25 OrderStatusApplyUrgeOrder = -55 // 原值-15
OrderStatusLocked = -20
OrderStatusApplyUrgeOrder = -15 OrderStatusUnlocked = -25
OrderStatusApplyRefund = -10 OrderStatusLocked = -20
OrderStatusApplyCancel = -5 // OrderStatusApplyRefund = -10
OrderStatusUndoApplyCancel = -10
OrderStatusApplyCancel = -5
OrderStatusUnknown = 0 OrderStatusUnknown = 0
@@ -239,3 +241,23 @@ func IsPrinterVendorExist(vendorID int) bool {
_, ok := VendorNames[vendorID] _, ok := VendorNames[vendorID]
return ok && vendorID >= VendorIDPrinterBegin && vendorID <= VendorIDPrinterEnd return ok && vendorID >= VendorIDPrinterBegin && vendorID <= VendorIDPrinterEnd
} }
func IsOrderLockStatus(status int) bool {
return status == OrderStatusLocked || status == OrderStatusApplyCancel
}
func IsOrderUnlockStatus(status int) bool {
return status == OrderStatusUnlocked || status == OrderStatusUndoApplyCancel
}
func IsOrderMainStatus(status int) bool {
return status > OrderStatusUnknown
}
func IsOrderFinalStatus(status int) bool {
return status >= OrderStatusEndBegin
}
func IsOrderImportantStatus(status int) bool {
return IsOrderMainStatus(status) || IsOrderLockStatus(status) || IsOrderUnlockStatus(status)
}

View File

@@ -25,6 +25,7 @@ const (
callDeliveryDelayGap = 30 callDeliveryDelayGap = 30
fakeUserApplyCancel = "fake_user_apply_cancel" fakeUserApplyCancel = "fake_user_apply_cancel"
fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel"
fakeAcceptOrder = "fake_accept_order" fakeAcceptOrder = "fake_accept_order"
fakeOrderAdjustFinished = "fake_order_adjust_finished" fakeOrderAdjustFinished = "fake_order_adjust_finished"
) )
@@ -43,6 +44,7 @@ var (
fakeOrderAdjustFinished: model.OrderStatusAdjust, fakeOrderAdjustFinished: model.OrderStatusAdjust,
fakeUserApplyCancel: model.OrderStatusApplyCancel, fakeUserApplyCancel: model.OrderStatusApplyCancel,
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
} }
) )
@@ -262,30 +264,31 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
RefVendorOrderID: orderID, RefVendorOrderID: orderID,
RefVendorID: model.VendorIDEBAI, RefVendorID: model.VendorIDEBAI,
StatusTime: utils.Timestamp2Time(msg.Timestamp), StatusTime: utils.Timestamp2Time(msg.Timestamp),
VendorStatus: msg.Cmd,
} }
if msg.Cmd == ebaiapi.CmdOrderUserCancel { if msg.Cmd == ebaiapi.CmdOrderUserCancel {
msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
cancelType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) cancelType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"]))
if msgType == ebaiapi.OrderUserCancelApply && cancelType == ebaiapi.OrderUserCancelTypeBeforeSale { orderStatus.Remark = utils.Interface2String(msg.Body["cancel_reason"])
orderStatus.VendorStatus = fakeUserApplyCancel if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" {
orderStatus.Remark = utils.Interface2String(msg.Body["cancel_reason"]) orderStatus.Remark += ",额外原因:" + additionReason
if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" { }
orderStatus.Remark += ",额外原因:" + additionReason if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
if msgType == ebaiapi.OrderUserCancelApply {
orderStatus.VendorStatus = fakeUserApplyCancel
} else if msgType == ebaiapi.OrderUserCancelInvalid {
orderStatus.VendorStatus = fakeUserUndoApplyCancel
} }
} else {
orderStatus = nil
} }
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund { } else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
status := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"])) status := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"]))
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" {
orderStatus.Remark += ",额外原因:" + additionReason
}
if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess { if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess {
orderStatus.VendorStatus = fakeOrderAdjustFinished orderStatus.VendorStatus = fakeOrderAdjustFinished
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" {
orderStatus.Remark += ",额外原因:" + additionReason
}
} else {
orderStatus = nil
} }
} else if status, ok := msg.Body["status"]; ok { } else if status, ok := msg.Body["status"]; ok {
if vendorStatus, ok := status.(string); ok { if vendorStatus, ok := status.(string); ok {
@@ -294,13 +297,8 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
orderStatus.VendorStatus = utils.Int64ToStr(utils.MustInterface2Int64(status)) orderStatus.VendorStatus = utils.Int64ToStr(utils.MustInterface2Int64(status))
} }
orderStatus.Remark = utils.Interface2String(msg.Body["reason"]) orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
} else {
orderStatus = nil
globals.SugarLogger.Infof("ebai callbackMsg2Status can not find status field in msg:%s", utils.Format4Output(msg, false))
}
if orderStatus != nil {
orderStatus.Status = c.GetStatusFromVendorStatus(orderStatus.VendorStatus)
} }
orderStatus.Status = c.GetStatusFromVendorStatus(orderStatus.VendorStatus)
return orderStatus return orderStatus
} }

View File

@@ -29,9 +29,9 @@ var (
elmapi.OrderStatusUnprocessed: model.OrderStatusNew, elmapi.OrderStatusUnprocessed: model.OrderStatusNew,
elmapi.OrderStatusValid: model.OrderStatusAccepted, elmapi.OrderStatusValid: model.OrderStatusAccepted,
elmapi.OrderStatusPending: model.OrderStatusNew, elmapi.OrderStatusPending: model.OrderStatusNew,
elmapi.OrderStatusRefunding: model.OrderStatusApplyRefund, // elmapi.OrderStatusRefunding: model.OrderStatusApplyRefund,
elmapi.OrderStatusInvalid: model.OrderStatusCanceled, elmapi.OrderStatusInvalid: model.OrderStatusCanceled,
elmapi.OrderStatusSettled: model.OrderStatusFinished, elmapi.OrderStatusSettled: model.OrderStatusFinished,
} }
) )
@@ -115,7 +115,7 @@ func (c *PurchaseHandler) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancel
case elmapi.MsgTypeUserApplyCancel: case elmapi.MsgTypeUserApplyCancel:
status.Status = model.OrderStatusApplyCancel status.Status = model.OrderStatusApplyCancel
case elmapi.MsgTypeUserApplyRefund: case elmapi.MsgTypeUserApplyRefund:
status.Status = model.OrderStatusApplyRefund // status.Status = model.OrderStatusApplyRefund
default: default:
status.Status = model.OrderStatusUnknown status.Status = model.OrderStatusUnknown
} }

View File

@@ -22,6 +22,7 @@ const (
FakeMsgTypeOrderDelivering = "orderDelivering" FakeMsgTypeOrderDelivering = "orderDelivering"
fakeUserApplyCancel = "fake_user_apply_cancel" fakeUserApplyCancel = "fake_user_apply_cancel"
fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel"
fakeOrderAdjustFinished = "fake_order_adjust_finished" fakeOrderAdjustFinished = "fake_order_adjust_finished"
) )
@@ -49,6 +50,7 @@ var (
fakeOrderAdjustFinished: model.OrderStatusAdjust, fakeOrderAdjustFinished: model.OrderStatusAdjust,
fakeUserApplyCancel: model.OrderStatusApplyCancel, fakeUserApplyCancel: model.OrderStatusApplyCancel,
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
} }
) )
@@ -187,7 +189,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) { func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) {
orderID := GetOrderIDFromMsg(msg) orderID := GetOrderIDFromMsg(msg)
vendorStatus := "" vendorStatus := msg.Cmd
remark := "" remark := ""
statusTime := utils.Str2Int64(msg.Data.Get("timestamp")) statusTime := utils.Str2Int64(msg.Data.Get("timestamp"))
switch msg.Cmd { switch msg.Cmd {
@@ -206,13 +208,15 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta
remark = msg.Data.Get("reason") remark = msg.Data.Get("reason")
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
if notifyType == mtwmapi.NotifyTypePartyApply { if notifyType == mtwmapi.NotifyTypePartyApply {
api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "bu") // todo 自动同意调整单 api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "bu") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
} else if notifyType == mtwmapi.NotifyTypeSuccess { } else if notifyType == mtwmapi.NotifyTypeSuccess {
vendorStatus = fakeOrderAdjustFinished vendorStatus = fakeOrderAdjustFinished
} }
} else if msg.Cmd == mtwmapi.MsgTypeOrderRefund { } else if msg.Cmd == mtwmapi.MsgTypeOrderRefund {
if notifyType == mtwmapi.NotifyTypeApply { if notifyType == mtwmapi.NotifyTypeApply {
vendorStatus = fakeUserApplyCancel vendorStatus = fakeUserApplyCancel
} else if notifyType == mtwmapi.NotifyTypeCancelRefund {
vendorStatus = fakeUserUndoApplyCancel
} }
} }
} }