- 美团外卖售后单初始版本
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user