123 lines
4.7 KiB
Go
123 lines
4.7 KiB
Go
package jd
|
||
|
||
import (
|
||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/business/partner"
|
||
"git.rosy.net.cn/jx-callback/globals/api"
|
||
)
|
||
|
||
var (
|
||
AfsVendorStatus2StatusMap = map[string]int{
|
||
jdapi.AfsServiceStateWaiting4Audit: model.AfsOrderStatusWait4Approve, // 需要审核
|
||
|
||
jdapi.AfsServiceStateRefundProcessing: model.AfsOrderStatusNew,
|
||
jdapi.AfsServiceStateWaiting4DirectCompensate: model.AfsOrderStatusNew,
|
||
jdapi.AfsServiceStateWaiting4ReturnGoods: model.AfsOrderStatusNew,
|
||
|
||
jdapi.AfsServiceStateWaiting4MerchantReceiveGoods: model.AfsOrderStatusWait4ReceiveGoods,
|
||
|
||
jdapi.AfsServiceStateRefundSuccess: model.AfsOrderStatusFinished,
|
||
jdapi.AfsServiceStateSolved: model.AfsOrderStatusFinished,
|
||
jdapi.AfsServiceStateDirectCompensateSuccess: model.AfsOrderStatusFinished,
|
||
jdapi.AfsServiceStateReturnGoodsSuccess: model.AfsOrderStatusFinished,
|
||
|
||
jdapi.AfsServiceStateRefundFailed: model.AfsOrderStatusFailed,
|
||
jdapi.AfsServiceStateAuditRefused: model.AfsOrderStatusFailed,
|
||
jdapi.AfsServiceStateUserCanceled: model.AfsOrderStatusFailed,
|
||
jdapi.AfsServiceStateMerchantFailedReceiveGoods: model.AfsOrderStatusFailed,
|
||
jdapi.AfsServiceStateDirectCompensateFailed: model.AfsOrderStatusFailed,
|
||
jdapi.AfsServiceStateReturnGoodsFailed: model.AfsOrderStatusFailed,
|
||
}
|
||
)
|
||
|
||
func (c *PurchaseHandler) OnAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||
jxutils.CallMsgHandler(func() {
|
||
retVal = c.onAfsOrderMsg(msg)
|
||
}, jxutils.ComposeUniversalOrderID(msg.BillID, model.VendorIDJD))
|
||
return retVal
|
||
}
|
||
|
||
func (c *PurchaseHandler) onAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||
afsInfo, err := api.JdAPI.GetAfsService2(msg.BillID)
|
||
if err == nil {
|
||
var err error
|
||
status := c.callbackAfsMsg2Status(msg, afsInfo)
|
||
if status.Status <= model.AfsOrderStatusNew {
|
||
afsOrder := c.buildAfsOrder(afsInfo)
|
||
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, status)
|
||
} else {
|
||
err = partner.CurOrderManager.OnAfsOrderStatusChanged(status)
|
||
}
|
||
retVal = jdapi.Err2CallbackResponse(err, status.VendorStatus)
|
||
}
|
||
return retVal
|
||
}
|
||
|
||
func (c *PurchaseHandler) callbackAfsMsg2Status(msg *jdapi.CallbackOrderMsg, afsInfo *jdapi.AfsServiceResponse) *model.OrderStatus {
|
||
orderStatus := &model.OrderStatus{
|
||
VendorOrderID: msg.BillID, // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||
VendorID: model.VendorIDJD,
|
||
OrderType: model.OrderTypeOrder,
|
||
RefVendorOrderID: afsInfo.OrderID,
|
||
RefVendorID: model.VendorIDJD,
|
||
VendorStatus: msg.StatusID,
|
||
Status: c.GetAfsStatusFromVendorStatus(msg.StatusID),
|
||
StatusTime: utils.Str2Time(msg.Timestamp),
|
||
Remark: msg.Remark,
|
||
}
|
||
return orderStatus
|
||
}
|
||
|
||
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(vendorStatus string) int {
|
||
if status, ok := AfsVendorStatus2StatusMap[vendorStatus]; ok {
|
||
return status
|
||
}
|
||
return model.OrderStatusUnknown
|
||
}
|
||
|
||
func (p *PurchaseHandler) buildAfsOrder(afsInfo *jdapi.AfsServiceResponse) (afsOrder *model.AfsOrder) {
|
||
afsOrder = &model.AfsOrder{
|
||
VendorID: model.VendorIDJD,
|
||
AfsOrderID: afsInfo.AfsServiceOrder,
|
||
VendorOrderID: afsInfo.OrderID,
|
||
VendorStoreID: afsInfo.StationID,
|
||
StoreID: int(utils.Str2Int64WithDefault(afsInfo.StationNumOutSystem, 0)),
|
||
AfsCreateAt: afsInfo.UpdateTime.GoTime(),
|
||
FreightUserMoney: afsInfo.OrderFreightMoney,
|
||
AfsFreightMoney: afsInfo.AfsFreight,
|
||
BoxMoney: afsInfo.PackagingMoney,
|
||
TongchengFreightMoney: afsInfo.TongchengFreightMoney,
|
||
SkuBoxMoney: afsInfo.MealBoxMoney,
|
||
}
|
||
for _, x := range afsInfo.AfsDetailList {
|
||
orderSku := &model.OrderSkuFinancial{
|
||
VendorID: model.VendorIDJD,
|
||
AfsOrderID: afsOrder.AfsOrderID,
|
||
VendorOrderID: afsOrder.VendorOrderID,
|
||
VendorStoreID: afsOrder.VendorStoreID,
|
||
StoreID: afsOrder.StoreID,
|
||
// ConfirmTime: afsOrder.AfsCreateAt,
|
||
VendorSkuID: utils.Int64ToStr(x.WareID),
|
||
SkuID: int(utils.Str2Int64WithDefault(x.SkuIDIsv, 0)),
|
||
Name: x.WareName,
|
||
UserMoney: x.AfsMoney,
|
||
PmSkuSubsidyMoney: x.PlatPayMoney,
|
||
IsAfsOrder: 1,
|
||
}
|
||
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||
orderSku.PmSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||
|
||
for _, y := range x.AfsSkuDiscountList {
|
||
orderSku.PmSubsidyMoney += y.PlatPayMoney
|
||
}
|
||
|
||
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||
afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney
|
||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||
}
|
||
return afsOrder
|
||
}
|