This commit is contained in:
邹宗楠
2024-08-01 15:22:55 +08:00
parent e19d3ed472
commit 60c8e31cc6
6 changed files with 184 additions and 90 deletions

View File

@@ -25,6 +25,17 @@ var (
ebaiapi.OrderPartRefundFailed: model.AfsOrderStatusFailed,
ebaiapi.OrderPartRefundMerchantRefused: model.AfsOrderStatusFailed, // 是否是中间状态
}
AfsVendorStatus2Status4ReverseRefundMap = map[int]int{
//ebaiapi.OrderReversePushApplyInit: model.AfsOrderStatusWait4Approve, // 初始化售后
ebaiapi.OrderReversePushApply: model.AfsOrderStatusWait4Approve, // 申请售后
ebaiapi.OrderReversePushApplyRefuse: model.AfsOrderStatusFailed, // 售后失败
ebaiapi.OrderReversePushApplyArbitration: model.AfsOrderStatusReceivedArbitration, // 仲裁
ebaiapi.OrderReversePushApplyClose: model.AfsOrderStatusFinished, // 售后结束
ebaiapi.OrderReversePushApplySuccess: model.AfsOrderStatusFinished, // 售后成功
ebaiapi.OrderReversePushApplyFail: model.AfsOrderStatusFailed, // 售后失败
}
AfsVendorStatus2Status4UserCancel = map[int]int{
ebaiapi.OrderUserCancelApply: model.AfsOrderStatusWait4Approve,
ebaiapi.OrderUserCancelCSIntervene: model.OrderStatusUnknown,
@@ -44,8 +55,9 @@ func (c *PurchaseHandler) isAfsMsg(msg *ebaiapi.CallbackMsg) bool {
case ebaiapi.CmdOrderUserCancel:
// 1表示订单完成前用户全单取消申请流程 2表示订单完成后用户全单退款申请流程
cancelType := int(utils.MustInterface2Int64(msg.Body["cancel_type"]))
return cancelType == ebaiapi.OrderUserCancelTypeAfterSale || cancelType == ebaiapi.OrderUserCancelTypeBeforeSale
case ebaiapi.CmdOrderReversePush: // 订单逆向消息推送
return true
}
return false
@@ -64,54 +76,15 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew {
var afsOrder *model.AfsOrder
if msg.Cmd == ebaiapi.CmdOrderPartRefund {
partRefundData := msg.Data.(*ebaiapi.CBPartRefundInfo)
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),
RefundType: model.AfsTypePartRefund,
VendorOrgCode: msg.Source,
// 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,
// AfsOrderID: afsOrder.AfsOrderID,
// VendorOrderID: afsOrder.VendorOrderID,
// VendorStoreID: afsOrder.VendorStoreID,
// StoreID: afsOrder.StoreID,
// IsAfsOrder: 1,
Count: sku.Number,
// ConfirmTime: afsOrder.AfsCreateAt,
VendorSkuID: sku.SkuID,
SkuID: int(utils.Str2Int64WithDefault(sku.CustomSkuID, 0)),
Name: sku.Name,
UserMoney: sku.TotalRefund,
PmSkuSubsidyMoney: sku.ShopEleRefund,
}
afsOrder.SkuUserMoney += orderSku.UserMoney
afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
globals.SugarLogger.Debug("====order.partrefund.push :- %s", utils.Format4Output(msg, false))
afsOrder = c.makeAfsOrderInfoPartRefund(msg, orderStatus)
} else if msg.Cmd == ebaiapi.CmdOrderReversePush {
afsOrder, err = c.makeAfsOrderInfoReverseRefund(msg, orderStatus)
if err != nil {
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
}
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
if afsOrder = c.createAfsOrder(msg); afsOrder != nil {
// if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDEBAI); err2 == nil {
// afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg)
cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo)
afsOrder.AfsOrderID = orderStatus.VendorOrderID
afsOrder.RefundType = model.AfsTypeFullRefund
@@ -127,37 +100,13 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
}
} else {
afsOrder2, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID)
if afsOrder2 == nil && err == nil {
partRefundData := msg.Data.(*ebaiapi.CBPartRefundInfo)
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),
RefundType: model.AfsTypePartRefund,
VendorOrgCode: msg.Source,
}
for _, sku := range partRefundData.RefundProducts {
orderSku := &model.OrderSkuFinancial{
Count: sku.Number,
VendorSkuID: sku.SkuID,
SkuID: int(utils.Str2Int64WithDefault(sku.CustomSkuID, 0)),
Name: sku.Name,
UserMoney: sku.TotalRefund,
PmSkuSubsidyMoney: sku.ShopEleRefund,
}
afsOrder.SkuUserMoney += orderSku.UserMoney
afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
if afsOrder2 == nil && err == nil && msg.Cmd == ebaiapi.CmdOrderPartRefund {
afsOrder := c.makeAfsOrderInfoPartRefund(msg, orderStatus)
if afsOrder != nil {
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
} else if afsOrder2 == nil && err == nil && msg.Cmd == ebaiapi.CmdOrderReversePush {
afsOrder, _ := c.makeAfsOrderInfoReverseRefund(msg, orderStatus)
if afsOrder != nil {
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
@@ -168,7 +117,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
// 只有有售后订单就更新此订单的结算信息
var db = dao.GetDB()
if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess {
if (msg.Cmd == ebaiapi.CmdOrderPartRefund && utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess) || (msg.Cmd == ebaiapi.CmdOrderReversePush && utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderReversePushApplySuccess) {
orderData, err2 := api.EbaiAPI.OrderPartRefundGet(orderStatus.RefVendorOrderID)
if err2 == nil && utils.MustInterface2Int64(orderData["merchant_income"]) != model.NO {
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
@@ -202,16 +151,35 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
dao.UpdateEntity(dao.GetDB(), goodsOrder, "TotalShopMoney", "EarningPrice")
}
}
if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderUserCancelMerchantAgreed {
afs, _ := partner.CurOrderManager.LoadAfsOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
if afs != nil {
afs, _ := partner.CurOrderManager.LoadAfsOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
if msg.Cmd == ebaiapi.CmdOrderPartRefund {
switch utils.Str2Int(orderStatus.VendorStatus) {
case ebaiapi.OrderUserCancelMerchantAgreed, ebaiapi.OrderUserCancelCSAgreed:
afs.Status = orderStatus.Status
afs.VendorStatus = orderStatus.VendorStatus
afs.Flag = model.YES
dao.UpdateEntity(dao.GetDB(), afs, "Status", "VendorStatus", "Flag")
case ebaiapi.OrderUserCancelCSRefused, ebaiapi.OrderUserCancelMerchantRefused, ebaiapi.OrderUserCancelInvalid:
afs.Status = orderStatus.Status
afs.VendorStatus = orderStatus.VendorStatus
afs.Flag = 3
}
} else if msg.Cmd == ebaiapi.CmdOrderReversePush {
switch utils.Str2Int(orderStatus.VendorStatus) {
case ebaiapi.OrderReversePushApplySuccess:
afs.Status = orderStatus.Status
afs.VendorStatus = orderStatus.VendorStatus
afs.Flag = model.YES
case ebaiapi.OrderReversePushApplyRefuse, ebaiapi.OrderReversePushApplyFail:
afs.Status = orderStatus.Status
afs.VendorStatus = orderStatus.VendorStatus
afs.Flag = 3
}
}
if afs != nil {
dao.UpdateEntity(db, afs, "Status", "VendorStatus", "Flag")
}
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
}
return retVal
@@ -237,6 +205,10 @@ func (c *PurchaseHandler) GetAfsStatusFromVendorStatus4PartRefund(vendorStatus i
return AfsVendorStatus2Status4PartRefundMap[vendorStatus]
}
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus4ReverseRefund(vendorStatus int) int {
return AfsVendorStatus2Status4ReverseRefundMap[vendorStatus]
}
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus4UserCancel(vendorStatus int) int {
return AfsVendorStatus2Status4UserCancel[vendorStatus]
}
@@ -258,6 +230,19 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msg *ebaiapi.CallbackMsg) (order
if orderStatus.Status == model.AfsOrderStatusWait4Approve && partRefundData.Type != ebaiapi.OrderPartRefuncTypeCustomer {
orderStatus.Status = model.AfsOrderStatusNew
}
} else if msg.Cmd == ebaiapi.CmdOrderReversePush {
partRefundData := msg.Data.(*ebaiapi.CBOrderReversePush)
orderStatus = &model.OrderStatus{
VendorOrderID: utils.Int64ToStr(partRefundData.RefundOrderId), // 是售后单ID不是订单ID订单ID在RefVendorOrderID中
VendorID: model.VendorIDEBAI,
OrderType: model.OrderTypeAfsOrder,
RefVendorOrderID: partRefundData.OrderId,
RefVendorID: model.VendorIDEBAI,
VendorStatus: utils.Int2Str(partRefundData.CurReverseEvent.RefundStatus),
Status: c.GetAfsStatusFromVendorStatus4ReverseRefund(partRefundData.CurReverseEvent.RefundStatus),
StatusTime: utils.Timestamp2Time(msg.Timestamp),
Remark: partRefundData.CurReverseEvent.RefundReasonDesc,
}
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo)
orderStatus = &model.OrderStatus{