diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index 46da75e99..9e6796b08 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -55,28 +55,31 @@ func (c *PurchaseHandler) OnAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) { if orderStatus := c.callbackAfsMsg2Status(msg); orderStatus != nil { - afsOrder := &model.AfsOrder{ - VendorID: model.VendorIDEBAI, - AfsOrderID: orderStatus.VendorOrderID, - VendorOrderID: orderStatus.RefVendorOrderID, - VendorStoreID: "", - StoreID: 0, - AfsCreatedAt: utils.Timestamp2Time(msg.Timestamp), - VendorAppealType: "", - AppealType: model.AfsAppealTypeRefund, - // FreightUserMoney: afsInfo.OrderFreightMoney, - // AfsFreightMoney: afsInfo.AfsFreight, - // BoxMoney: afsInfo.PackagingMoney, - // TongchengFreightMoney: afsInfo.TongchengFreightMoney, - // SkuBoxMoney: afsInfo.MealBoxMoney, - } - if msg.Cmd == ebaiapi.CmdOrderPartRefund { - if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { + var err error + if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { + var afsOrder *model.AfsOrder + if msg.Cmd == ebaiapi.CmdOrderPartRefund { partRefundData := msg.Data.(*ebaiapi.CBPartRefundInfo) - afsOrder.VendorReasonType = partRefundData.ReasonType - afsOrder.ReasonType = c.convertAfsReasonType(partRefundData.ReasonType) - afsOrder.ReasonDesc = utils.LimitUTF8StringLen(buildFullReason(partRefundData.Reason, partRefundData.AdditionReason), 1024) - afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(partRefundData.Photos, ","), 1024) + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDEBAI, + AfsOrderID: orderStatus.VendorOrderID, + VendorOrderID: orderStatus.RefVendorOrderID, + VendorStoreID: "", + StoreID: 0, + AfsCreatedAt: utils.Timestamp2Time(msg.Timestamp), + VendorAppealType: "", + AppealType: model.AfsAppealTypeRefund, + VendorReasonType: partRefundData.ReasonType, + ReasonType: c.convertAfsReasonType(partRefundData.ReasonType), + ReasonDesc: utils.LimitUTF8StringLen(buildFullReason(partRefundData.Reason, partRefundData.AdditionReason), 1024), + ReasonImgList: utils.LimitUTF8StringLen(strings.Join(partRefundData.Photos, ","), 1024), + + // FreightUserMoney: afsInfo.OrderFreightMoney, + // AfsFreightMoney: afsInfo.AfsFreight, + // BoxMoney: afsInfo.PackagingMoney, + // TongchengFreightMoney: afsInfo.TongchengFreightMoney, + // SkuBoxMoney: afsInfo.MealBoxMoney, + } for _, sku := range partRefundData.RefundProducts { orderSku := &model.OrderSkuFinancial{ VendorID: model.VendorIDEBAI, @@ -96,9 +99,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney afsOrder.Skus = append(afsOrder.Skus, orderSku) } - } - } else if msg.Cmd == ebaiapi.CmdOrderUserCancel { - if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { + } else if msg.Cmd == ebaiapi.CmdOrderUserCancel { if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg) cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo) @@ -109,10 +110,9 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(cancelData.Pictures, ","), 1024) } } - } - var err error - if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { - err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + if afsOrder != nil { + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + } } else { err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus) } diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index 94721e1ce..b731e7a28 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -13,6 +13,20 @@ import ( "git.rosy.net.cn/jx-callback/globals/api" ) +var ( + AfsVendorStatus2StatusMap = map[int]int{ + mtwmapi.ResTypePending: model.AfsOrderStatusWait4Approve, + mtwmapi.ResTypeMerchantRefused: model.AfsOrderStatusFailed, + mtwmapi.ResTypeMerchantAgreed: model.AfsOrderStatusFinished, + mtwmapi.ResTypeCSRefused: model.AfsOrderStatusFailed, + mtwmapi.ResTypeCSAgreed: model.AfsOrderStatusFinished, + mtwmapi.ResTypeTimeoutAutoAgreed: model.AfsOrderStatusFinished, + mtwmapi.ResTypeAutoAgreed: model.AfsOrderStatusFinished, + mtwmapi.ResTypeUserCancelApply: model.AfsOrderStatusFailed, + mtwmapi.ResTypeUserCancelComplain: model.AfsOrderStatusFailed, + } +) + func (c *PurchaseHandler) isAfsMsg(msg *mtwmapi.CallbackMsg) bool { if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { return c.isOrderFinished(utils.Str2Int64(GetOrderIDFromMsg(msg))) @@ -31,10 +45,89 @@ func (c *PurchaseHandler) OnAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) { var err error - err = OnFinancialMsg(msg) + orderStatus := c.callbackAfsMsg2Status(msg) + if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { + var afsOrder *model.AfsOrder + refundData := msg.Data.(*mtwmapi.CallbackRefundInfo) + if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDMTWM, + AfsOrderID: orderStatus.VendorOrderID, + VendorOrderID: orderStatus.RefVendorOrderID, + VendorStoreID: "", + StoreID: 0, + AfsCreatedAt: utils.Timestamp2Time(refundData.Timestamp), + VendorAppealType: "", + AppealType: model.AfsAppealTypeRefund, + VendorReasonType: "", + ReasonType: model.AfsReasonNotOthers, + ReasonDesc: utils.LimitUTF8StringLen(refundData.Reason, 1024), + ReasonImgList: utils.LimitUTF8StringLen(refundData.Pictures, 1024), + + // FreightUserMoney: afsInfo.OrderFreightMoney, + // AfsFreightMoney: afsInfo.AfsFreight, + // BoxMoney: afsInfo.PackagingMoney, + // TongchengFreightMoney: afsInfo.TongchengFreightMoney, + // SkuBoxMoney: afsInfo.MealBoxMoney, + } + for _, sku := range refundData.FoodList { + orderSku := &model.OrderSkuFinancial{ + VendorID: model.VendorIDMTWM, + AfsOrderID: afsOrder.AfsOrderID, + VendorOrderID: afsOrder.VendorOrderID, + VendorStoreID: afsOrder.VendorStoreID, + StoreID: afsOrder.StoreID, + // ConfirmTime: afsOrder.AfsCreateAt, + VendorSkuID: sku.SkuID, + SkuID: int(utils.Str2Int64WithDefault(sku.SkuID, 0)), + Name: sku.FoodName, + IsAfsOrder: 1, + + UserMoney: jxutils.StandardPrice2Int(sku.RefundPrice)*int64(sku.Count) + jxutils.StandardPrice2Int(sku.BoxPrice)*int64(sku.BoxNum), + } + afsOrder.SkuUserMoney += orderSku.UserMoney + afsOrder.Skus = append(afsOrder.Skus, orderSku) + } + afsOrder.PmSubsidyMoney += afsOrder.RefundMoney - afsOrder.SkuUserMoney + } else { + if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { + afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg.FormData) + afsOrder.AppealType = model.AfsAppealTypeRefund + afsOrder.VendorReasonType = "" + afsOrder.ReasonType = model.AfsReasonNotOthers + afsOrder.ReasonDesc = utils.LimitUTF8StringLen(refundData.Reason, 1024) + afsOrder.ReasonImgList = utils.LimitUTF8StringLen(refundData.Pictures, 1024) + } + } + if afsOrder != nil { + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + } + } else { + err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus) + } return mtwmapi.Err2CallbackResponse(err, "") } +func (c *PurchaseHandler) callbackAfsMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) { + refundData := msg.Data.(*mtwmapi.CallbackRefundInfo) + orderStatus = &model.OrderStatus{ + VendorOrderID: utils.Int64ToStr(refundData.OrderID), + VendorID: model.VendorIDMTWM, + OrderType: model.OrderTypeAfsOrder, + RefVendorOrderID: utils.Int64ToStr(refundData.OrderID), + RefVendorID: model.VendorIDMTWM, + VendorStatus: utils.Int2Str(refundData.ResType), + Status: c.GetAfsStatusFromVendorStatus(refundData.ResType), + StatusTime: utils.Timestamp2Time(refundData.Timestamp), + Remark: refundData.Reason, + } + return orderStatus +} + +func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(vendorStatus int) int { + return AfsVendorStatus2StatusMap[vendorStatus] +} + // 审核售后单申请 func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) { if globals.EnableMtwmStoreWrite {