diff --git a/business/model/const.go b/business/model/const.go index 8158af64f..75d9f372f 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -345,6 +345,12 @@ const ( AfsReasonNotOthers = 0 // 其它 ) +const ( + AfsTypeUnknown = 0 // 未知 + AfsTypePartRefund = 1 // 部分退款 + AfsTypeFullRefund = 2 // 全额退款 +) + func IsPurchaseVendorExist(vendorID int) bool { _, ok := VendorNames[vendorID] return ok && vendorID >= VendorIDPurchaseBegin && vendorID <= VendorIDPurchaseEnd diff --git a/business/model/order_financial.go b/business/model/order_financial.go index a57a08dee..19f219037 100644 --- a/business/model/order_financial.go +++ b/business/model/order_financial.go @@ -90,6 +90,7 @@ type AfsOrder struct { AppealType int8 `json:"appealType"` // 售后方式 VendorAppealType string `orm:"size(255)" json:"vendorAppealType"` Flag int `json:"flag"` + RefundType int8 `json:"refundType"` SkuUserMoney int64 `json:"skuUserMoney"` // 用户支付菜品金额 FreightUserMoney int64 `json:"freightUserMoney"` // 用户支付运费金额 diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index 9e6796b08..0ee077dd0 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -73,6 +73,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia ReasonType: c.convertAfsReasonType(partRefundData.ReasonType), ReasonDesc: utils.LimitUTF8StringLen(buildFullReason(partRefundData.Reason, partRefundData.AdditionReason), 1024), ReasonImgList: utils.LimitUTF8StringLen(strings.Join(partRefundData.Photos, ","), 1024), + RefundType: model.AfsTypePartRefund, // FreightUserMoney: afsInfo.OrderFreightMoney, // AfsFreightMoney: afsInfo.AfsFreight, @@ -100,9 +101,10 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia afsOrder.Skus = append(afsOrder.Skus, orderSku) } } else if msg.Cmd == ebaiapi.CmdOrderUserCancel { - if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { + if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDEBAI); err2 == nil { afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg) cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo) + afsOrder.RefundType = model.AfsTypeFullRefund afsOrder.AppealType = model.AfsAppealTypeRefund afsOrder.VendorReasonType = "" afsOrder.ReasonType = model.AfsReasonNotOthers diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index ebeadcf03..30ee014b1 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -220,11 +220,13 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta case mtwmapi.MsgTypeOrderRefund, mtwmapi.MsgTypeOrderPartialRefund: notifyType := msg.FormData.Get("notify_type") vendorStatus = msg.Cmd + "-" + notifyType - if true /*!c.isOrderFinished(utils.Str2Int64(orderID))*/ { // 已经提前判断了,到这里的都是售中 + if true { // 已经提前判断了,到这里的都是售中 remark = msg.FormData.Get("reason") if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { if notifyType == mtwmapi.NotifyTypePartyApply { - api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "bu") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单 + if globals.EnableMtwmStoreWrite { + api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "bu") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单 + } } else if notifyType == mtwmapi.NotifyTypeSuccess { vendorStatus = fakeOrderAdjustFinished } @@ -280,7 +282,9 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI c.postFakeMsg(order.VendorOrderID, FakeMsgTypeOrderReceived, mtwmapi.OrderStatusReceived) } } else { - err = c.CancelOrder(jxcontext.AdminCtx, order, "bu") + if globals.EnableMtwmStoreWrite { + err = c.CancelOrder(jxcontext.AdminCtx, order, "bu") + } } return err } @@ -407,12 +411,3 @@ func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.Goods } return err } - -func (c *PurchaseHandler) isOrderFinished(vendorOrderID int64) bool { - if status, err := api.MtwmAPI.OrderViewStatus(vendorOrderID); err == nil { - strStatus := utils.Int2Str(status) - return strStatus == mtwmapi.OrderStatusFinished || - strStatus == mtwmapi.OrderStatusCanceled - } - return false -} diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index b731e7a28..f93664908 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -2,6 +2,7 @@ package mtwm import ( "fmt" + "strings" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" @@ -29,7 +30,13 @@ var ( func (c *PurchaseHandler) isAfsMsg(msg *mtwmapi.CallbackMsg) bool { if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { - return c.isOrderFinished(utils.Str2Int64(GetOrderIDFromMsg(msg))) + refundData := msg.Data.(*mtwmapi.CallbackRefundInfo) + orderID := utils.Str2Int64(GetOrderIDFromMsg(msg)) + orderInfo, err := api.MtwmAPI.OrderGetOrderDetail2(orderID, false) + if err == nil { + return orderInfo.Status >= int(utils.Str2Int64(mtwmapi.OrderStatusFinished)) && refundData.Timestamp > orderInfo.Utime + } + globals.SugarLogger.Warnf("mtwm isAfsMsg OrderGetOrderDetail2 orderID:%d failed with error:%v", orderID, err) } return false } @@ -62,7 +69,8 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma VendorReasonType: "", ReasonType: model.AfsReasonNotOthers, ReasonDesc: utils.LimitUTF8StringLen(refundData.Reason, 1024), - ReasonImgList: utils.LimitUTF8StringLen(refundData.Pictures, 1024), + ReasonImgList: utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024), + RefundType: model.AfsTypePartRefund, // FreightUserMoney: afsInfo.OrderFreightMoney, // AfsFreightMoney: afsInfo.AfsFreight, @@ -90,13 +98,14 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma } afsOrder.PmSubsidyMoney += afsOrder.RefundMoney - afsOrder.SkuUserMoney } else { - if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { + if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDMTWM); err2 == nil { afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg.FormData) + afsOrder.RefundType = model.AfsTypeFullRefund afsOrder.AppealType = model.AfsAppealTypeRefund afsOrder.VendorReasonType = "" afsOrder.ReasonType = model.AfsReasonNotOthers afsOrder.ReasonDesc = utils.LimitUTF8StringLen(refundData.Reason, 1024) - afsOrder.ReasonImgList = utils.LimitUTF8StringLen(refundData.Pictures, 1024) + afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024) } } if afsOrder != nil {