- 京东售后单第一版

This commit is contained in:
gazebo
2019-05-09 17:22:30 +08:00
parent 664eaf22d8
commit d4351282cc
7 changed files with 431 additions and 19 deletions

View File

@@ -9,8 +9,14 @@ import (
func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
if curPurchaseHandler != nil {
if retVal = curPurchaseHandler.OnOrderMsg(msg); retVal == nil {
retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "")
if msg.MsgURL == jdapi.CallbackMsgAfterSaleBillStatus {
utils.CallFuncAsync(func() {
retVal = OnAfsOrderMsg(msg)
})
} else {
if retVal = curPurchaseHandler.OnOrderMsg(msg); retVal == nil {
retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "")
}
}
}
return retVal
@@ -25,6 +31,15 @@ func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackR
return retVal
}
func OnAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
if curPurchaseHandler != nil {
if retVal = curPurchaseHandler.OnAfsOrderMsg(msg); retVal == nil {
retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "")
}
}
return retVal
}
func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
if curPurchaseHandler != nil {
retVal = curPurchaseHandler.onStoreMsg(msg)

View File

@@ -0,0 +1,122 @@
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
}