diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index bb887e0ed..87af55f11 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -245,6 +245,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending if status.LockStatus != model.OrderStatusUnknown || status.Status > model.OrderStatusUnknown { globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status) savedOrderInfo := s.loadSavedOrderFromMap(status, true) + s.updateOrderByStatus(savedOrderInfo.order, status) // if status.Status == model.OrderStatusNew { // if !isPending { // utils.CallFuncAsync(func() { @@ -252,7 +253,6 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending // }) // } // } - s.updateOrderByStatus(savedOrderInfo.order, status) if status.LockStatus == model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown { // 只处理状态转换,一般消息不处理 s.resetTimer(savedOrderInfo, nil, isPending) if status.Status >= model.OrderStatusDelivering { @@ -280,9 +280,11 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending } else if status.Status == model.OrderStatusApplyCancel { globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status) savedOrderInfo := s.loadSavedOrderFromMap(status, true) + s.updateOrderByStatus(savedOrderInfo.order, status) utils.CallFuncAsync(func() { weixinmsg.NotifyUserApplyCancel(savedOrderInfo.order, status.Remark) }) + msghub.OnUserApplyCancel(savedOrderInfo.order) } return err } diff --git a/business/msghub/msghub.go b/business/msghub/msghub.go index fb603bf19..e258ac6f9 100644 --- a/business/msghub/msghub.go +++ b/business/msghub/msghub.go @@ -15,8 +15,10 @@ const ( ServerMsgRegister = "register" ServerMsgUnregister = "unregister" - ServerMsgPing = "ping" - ServerMsgNewOrder = "newOrder" + ServerMsgPing = "ping" + + ServerMsgNewOrder = "newOrder" + ServerMsgUserApplyCancel = "userApplyCancel" ) const ( @@ -162,3 +164,19 @@ func OnNewOrder(order *model.GoodsOrder) { } }) } + +func OnUserApplyCancel(order *model.GoodsOrder) { + globals.SugarLogger.Debugf("msghub OnUserApplyCancel, order:%s", utils.Format4Output(order, false)) + utils.CallFuncAsync(func() { + msgChan <- &ServerMsg{ + Type: ServerMsgUserApplyCancel, + StoreID: jxutils.GetSaleStoreIDFromOrder(order), + MsgData: 1, + // MsgData: []*model.GoodsOrderExt{ + // &model.GoodsOrderExt{ + // GoodsOrder: *order, + // }, + // }, + } + }) +} diff --git a/business/partner/purchase/ebai/financial.go b/business/partner/purchase/ebai/financial.go index 4a5bd94e8..65b6870bd 100644 --- a/business/partner/purchase/ebai/financial.go +++ b/business/partner/purchase/ebai/financial.go @@ -21,8 +21,8 @@ func OnFinancialMsg(msg *ebaiapi.CallbackMsg) (err error) { } } else if msg.Cmd == ebaiapi.CmdOrderUserCancel { // 全额退款处理 messageType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) - if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) == ebaiapi.AfterOrderFinishedCancelType && - (messageType == ebaiapi.OrderUserCancelSuccessA || messageType == ebaiapi.OrderUserCancelSuccessB) { + if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) == ebaiapi.OrderUserCancelTypeAfterSale && + (messageType == ebaiapi.OrderUserCancelCSAgreed || messageType == ebaiapi.OrderUserCancelMerchantAgreed) { globals.SugarLogger.Debug(utils.Interface2String(msg.Body["order_id"])) // 获得退款订单ID,去本地数据库拿?饿百消息推送只给了订单号,但是没有查询全额退款的接口,只有部分退款才可以查询 afsOrderID := utils.Interface2String(msg.Body["order_id"]) orderFinancial, err := partner.CurOrderManager.LoadOrderFinancial(afsOrderID, model.VendorIDEBAI) diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index a9a2a6b47..6ee8f1691 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -23,19 +23,20 @@ const ( callDeliveryDelay = 10 * time.Minute callDeliveryDelayGap = 30 - // fakePickedUp = "9527" - fakeUserApplyCancel = "fake_user_apply_cancel" - fakeAcceptOrder = "fake_accept_order" - fakePartRefundFinished = "fake_part_refund_finished" + + fakeUserApplyCancel = "fake_user_apply_cancel" + fakeAcceptOrder = "fake_accept_order" + fakeOrderAdjustFinished = "fake_order_adjust_finished" ) // 饿百的接单会直接召唤配送,为了统一将饿百的接单影射成拣货完成,然后模拟一个接单消息 var ( VendorStatus2StatusMap = map[string]int{ - ebaiapi.OrderStatusNew: model.OrderStatusNew, - fakeAcceptOrder: model.OrderStatusAccepted, - // fakePartRefundFinished: model.OrderStatusAdjust, + fakeOrderAdjustFinished: model.OrderStatusAdjust, + + ebaiapi.OrderStatusNew: model.OrderStatusNew, + fakeAcceptOrder: model.OrderStatusAccepted, ebaiapi.OrderStatusAccepted: model.OrderStatusFinishedPickup, fakeUserApplyCancel: model.OrderStatusApplyCancel, ebaiapi.OrderStatusCourierAccepted: model.OrderStatusDelivering, @@ -263,19 +264,26 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta StatusTime: utils.Timestamp2Time(msg.Timestamp), } if msg.Cmd == ebaiapi.CmdOrderUserCancel { - cancelType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) - if cancelType == ebaiapi.OrderUserApplyCancel { + msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) + cancelType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) + if msgType == ebaiapi.OrderUserCancelApply && cancelType == ebaiapi.OrderUserCancelTypeBeforeSale { orderStatus.VendorStatus = fakeUserApplyCancel - orderStatus.Status = c.GetStatusFromVendorStatus(orderStatus.VendorStatus) orderStatus.Remark = utils.Interface2String(msg.Body["cancel_reason"]) + if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" { + orderStatus.Remark += ",额外原因:" + additionReason + } } else { orderStatus = nil } } else if msg.Cmd == ebaiapi.CmdOrderPartRefund { - if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"])) == ebaiapi.OrderPartRefundSuccess { - orderStatus.VendorStatus = fakePartRefundFinished - orderStatus.Status = c.GetStatusFromVendorStatus(orderStatus.VendorStatus) + msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"])) + status := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"])) + if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess { + 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 } @@ -285,12 +293,14 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta } else { orderStatus.VendorStatus = utils.Int64ToStr(utils.MustInterface2Int64(status)) } - orderStatus.Status = c.GetStatusFromVendorStatus(orderStatus.VendorStatus) 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) + } return orderStatus }