- 饿百售后单
- 售后单重构一下下
This commit is contained in:
@@ -245,13 +245,26 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, order *model.AfsOrder) (err error) {
|
func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.AfsOrder) (err error) {
|
||||||
globals.SugarLogger.Debugf("updateAfsOrderOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID)
|
globals.SugarLogger.Debugf("updateAfsOrderOtherInfo orderID:%s, VendorStoreID:%s", afsOrder.VendorOrderID, afsOrder.VendorStoreID)
|
||||||
if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, 0); err == nil {
|
if afsOrder.VendorStoreID != "" {
|
||||||
order.JxStoreID = storeDetail.Store.ID
|
if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, afsOrder.VendorStoreID, 0); err == nil {
|
||||||
|
afsOrder.JxStoreID = storeDetail.Store.ID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if afsOrder.StoreID == 0 && afsOrder.JxStoreID == 0 {
|
||||||
|
if order, err2 := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil {
|
||||||
|
afsOrder.JxStoreID = order.JxStoreID
|
||||||
|
if afsOrder.StoreID == 0 {
|
||||||
|
afsOrder.StoreID = order.StoreID
|
||||||
|
}
|
||||||
|
if afsOrder.VendorStoreID == "" {
|
||||||
|
afsOrder.VendorStoreID = order.VendorStoreID
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if err = c.updateAfsOrderSkuOtherInfo(db, order); err == nil {
|
if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ type OrderSkuFinancial struct {
|
|||||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id
|
||||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
||||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有
|
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有
|
||||||
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后单ID
|
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后单ID
|
||||||
IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单
|
IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单
|
||||||
|
|
||||||
// ConfirmTime time.Time `orm:"type(datetime)" json:"confirmTime"` // 订单生成/完成时间
|
// ConfirmTime time.Time `orm:"type(datetime)" json:"confirmTime"` // 订单生成/完成时间
|
||||||
|
|||||||
@@ -19,10 +19,8 @@ func OnCallbackMsg(msg *ebaiapi.CallbackMsg) (response *ebaiapi.CallbackResponse
|
|||||||
}
|
}
|
||||||
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDEBAI))
|
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDEBAI))
|
||||||
}
|
}
|
||||||
if msg.Cmd == ebaiapi.CmdOrderPartRefund || msg.Cmd == ebaiapi.CmdOrderUserCancel || msg.Cmd == ebaiapi.CmdOrderDeliveryStatus {
|
if /*msg.Cmd == ebaiapi.CmdOrderPartRefund || msg.Cmd == ebaiapi.CmdOrderUserCancel || */ msg.Cmd == ebaiapi.CmdOrderDeliveryStatus {
|
||||||
utils.CallFuncAsync(func() {
|
response = CurPurchaseHandler.OnFinancialMsg(msg)
|
||||||
OnFinancialMsg(msg)
|
|
||||||
})
|
|
||||||
} else if msg.Cmd == ebaiapi.CmdShopMsgPush {
|
} else if msg.Cmd == ebaiapi.CmdShopMsgPush {
|
||||||
response = CurPurchaseHandler.onShopMsgPush(msg)
|
response = CurPurchaseHandler.onShopMsgPush(msg)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,22 +9,30 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) OnFinancialMsg(msg *ebaiapi.CallbackMsg) (response *ebaiapi.CallbackResponse) {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
response = p.onFinancialMsg(msg)
|
||||||
|
})
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
// 存储饿百退款订单结账信息
|
// 存储饿百退款订单结账信息
|
||||||
func OnFinancialMsg(msg *ebaiapi.CallbackMsg) (err error) {
|
func (p *PurchaseHandler) onFinancialMsg(msg *ebaiapi.CallbackMsg) (response *ebaiapi.CallbackResponse) {
|
||||||
|
var err error
|
||||||
if msg.Cmd == ebaiapi.CmdOrderPartRefund { // 部分退款处理
|
if msg.Cmd == ebaiapi.CmdOrderPartRefund { // 部分退款处理
|
||||||
if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"])) == ebaiapi.OrderPartRefundSuccess {
|
if int(utils.MustInterface2Int64(msg.Body["status"])) == ebaiapi.OrderPartRefundSuccess {
|
||||||
// 获取到部分退款订单id
|
// 获取到部分退款订单id
|
||||||
afsOrderID := GetOrderIDFromMsg(msg)
|
afsOrderID := GetOrderIDFromMsg(msg)
|
||||||
// 处理部分退款信息
|
// 处理部分退款信息
|
||||||
orderData, err2 := api.EbaiAPI.OrderPartrefundGet(afsOrderID)
|
orderData, err2 := api.EbaiAPI.OrderPartRefundGet(afsOrderID)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
afsOrder := CurPurchaseHandler.AfsOrderDetail2Financial(orderData)
|
afsOrder := CurPurchaseHandler.AfsOrderDetail2Financial(orderData)
|
||||||
err = partner.CurOrderManager.SaveAfsOrderFinancialInfo(afsOrder)
|
err = partner.CurOrderManager.SaveAfsOrderFinancialInfo(afsOrder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel { // 全额退款处理
|
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel { // 全额退款处理
|
||||||
messageType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
|
messageType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||||
if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) == ebaiapi.OrderUserCancelTypeAfterSale &&
|
if int(utils.MustInterface2Int64(msg.Body["cancel_type"])) == ebaiapi.OrderUserCancelTypeAfterSale &&
|
||||||
(messageType == ebaiapi.OrderUserCancelCSAgreed || messageType == ebaiapi.OrderUserCancelMerchantAgreed) {
|
(messageType == ebaiapi.OrderUserCancelCSAgreed || messageType == ebaiapi.OrderUserCancelMerchantAgreed) {
|
||||||
afsOrderID := GetOrderIDFromMsg(msg)
|
afsOrderID := GetOrderIDFromMsg(msg)
|
||||||
// 获得退款订单ID,去本地数据库拿?饿百消息推送只给了订单号,但是没有查询全额退款的接口,只有部分退款才可以查询
|
// 获得退款订单ID,去本地数据库拿?饿百消息推送只给了订单号,但是没有查询全额退款的接口,只有部分退款才可以查询
|
||||||
@@ -45,7 +53,7 @@ func OnFinancialMsg(msg *ebaiapi.CallbackMsg) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, msg.Cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.OrderFinancial, msg *ebaiapi.CallbackMsg) (afsOrder *model.AfsOrder) {
|
func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.OrderFinancial, msg *ebaiapi.CallbackMsg) (afsOrder *model.AfsOrder) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func TestOnFinancialMsg(t *testing.T) {
|
|||||||
// msg.Body["type"] = json.Number("40")
|
// msg.Body["type"] = json.Number("40")
|
||||||
// msg.Body["cancel_type"] = json.Number("2")
|
// msg.Body["cancel_type"] = json.Number("2")
|
||||||
|
|
||||||
res := OnFinancialMsg(msg)
|
res := CurPurchaseHandler.OnFinancialMsg(msg)
|
||||||
fmt.Println(res)
|
fmt.Println(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *mode
|
|||||||
if taskID == 1 {
|
if taskID == 1 {
|
||||||
result1, err1 = api.EbaiAPI.OrderGet(vendorOrderID)
|
result1, err1 = api.EbaiAPI.OrderGet(vendorOrderID)
|
||||||
} else if taskID == 2 {
|
} else if taskID == 2 {
|
||||||
result2, err2 = api.EbaiAPI.OrderPartrefundGet(vendorOrderID)
|
result2, err2 = api.EbaiAPI.OrderPartRefundGet(vendorOrderID)
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}, taskIDs)
|
}, taskIDs)
|
||||||
@@ -295,22 +295,26 @@ func (p *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName
|
|||||||
|
|
||||||
//
|
//
|
||||||
func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
||||||
if ebaiapi.CmdOrderCreate == msg.Cmd {
|
if c.isAfsMsg(msg) {
|
||||||
retVal = c.onOrderNew(msg)
|
retVal = c.OnAfsOrderMsg(msg)
|
||||||
} else {
|
} else {
|
||||||
status := c.callbackMsg2Status(msg)
|
if ebaiapi.CmdOrderCreate == msg.Cmd {
|
||||||
var err error
|
retVal = c.onOrderNew(msg)
|
||||||
if status != nil {
|
} else {
|
||||||
if status.Status == model.OrderStatusAdjust {
|
var err error
|
||||||
var order *model.GoodsOrder
|
status := c.callbackMsg2Status(msg)
|
||||||
if order, err = c.GetOrder4PartRefund(GetOrderIDFromMsg(msg)); err == nil {
|
if status != nil {
|
||||||
err = partner.CurOrderManager.OnOrderAdjust(order, status)
|
if status.Status == model.OrderStatusAdjust {
|
||||||
|
var order *model.GoodsOrder
|
||||||
|
if order, err = c.GetOrder4PartRefund(GetOrderIDFromMsg(msg)); err == nil {
|
||||||
|
err = partner.CurOrderManager.OnOrderAdjust(order, status)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = partner.CurOrderManager.OnOrderStatusChanged(status)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err = partner.CurOrderManager.OnOrderStatusChanged(status)
|
|
||||||
}
|
}
|
||||||
|
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
|
||||||
}
|
}
|
||||||
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
|
|
||||||
}
|
}
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
@@ -342,13 +346,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
|
|||||||
VendorStatus: msg.Cmd,
|
VendorStatus: msg.Cmd,
|
||||||
}
|
}
|
||||||
if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
||||||
msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
|
msgType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||||
cancelType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"]))
|
cancelType := int(utils.MustInterface2Int64(msg.Body["cancel_type"]))
|
||||||
orderStatus.Remark = utils.Interface2String(msg.Body["cancel_reason"])
|
orderStatus.Remark = buildFullReason(utils.Interface2String(msg.Body["cancel_reason"]), utils.Interface2String(msg.Body["addition_reason"]))
|
||||||
orderStatus.VendorStatus = msg.Cmd + "-" + msgType
|
orderStatus.VendorStatus = msg.Cmd + "-" + utils.Int2Str(msgType)
|
||||||
if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" {
|
|
||||||
orderStatus.Remark += ",额外原因:" + additionReason
|
|
||||||
}
|
|
||||||
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
|
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
|
||||||
if msgType == ebaiapi.OrderUserCancelApply ||
|
if msgType == ebaiapi.OrderUserCancelApply ||
|
||||||
msgType == ebaiapi.OrderUserCancelCSIntervene {
|
msgType == ebaiapi.OrderUserCancelCSIntervene {
|
||||||
@@ -360,12 +361,9 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
||||||
msgType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
|
msgType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||||
status := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"]))
|
status := int(utils.MustInterface2Int64(msg.Body["status"]))
|
||||||
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
|
orderStatus.Remark = buildFullReason(utils.Interface2String(msg.Body["reason"]), utils.Interface2String(msg.Body["addition_reason"]))
|
||||||
if additionReason := utils.Interface2String(msg.Body["addition_reason"]); additionReason != "" {
|
|
||||||
orderStatus.Remark += ",额外原因:" + additionReason
|
|
||||||
}
|
|
||||||
if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess {
|
if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess {
|
||||||
orderStatus.VendorStatus = fakeOrderAdjustFinished
|
orderStatus.VendorStatus = fakeOrderAdjustFinished
|
||||||
}
|
}
|
||||||
@@ -381,6 +379,14 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
|
|||||||
return orderStatus
|
return orderStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func buildFullReason(reason, addReason string) (fullReason string) {
|
||||||
|
fullReason = reason
|
||||||
|
if addReason != "" {
|
||||||
|
fullReason += ",额外原因:" + addReason
|
||||||
|
}
|
||||||
|
return fullReason
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) GetStatusActionTimeout(order *model.GoodsOrder, statusType, status int) (params *partner.StatusActionParams) {
|
func (c *PurchaseHandler) GetStatusActionTimeout(order *model.GoodsOrder, statusType, status int) (params *partner.StatusActionParams) {
|
||||||
if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusAccepted {
|
if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusAccepted {
|
||||||
params = &partner.StatusActionParams{ // PickDeadline没有设置时才有效,饿百要求在5分钟内拣货,不然订单会被取消
|
params = &partner.StatusActionParams{ // PickDeadline没有设置时才有效,饿百要求在5分钟内拣货,不然订单会被取消
|
||||||
|
|||||||
@@ -1,16 +1,183 @@
|
|||||||
package ebai
|
package ebai
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
AfsVendorStatus2Status4PartRefundMap = map[int]int{
|
||||||
|
ebaiapi.OrderPartRefundApply: model.AfsOrderStatusWait4Approve,
|
||||||
|
ebaiapi.OrderPartRefundSuccess: model.AfsOrderStatusFinished,
|
||||||
|
ebaiapi.OrderPartRefundUserApplyArbitration: model.OrderStatusUnknown, // 是否是中间状态
|
||||||
|
ebaiapi.OrderPartRefundFailed: model.AfsOrderStatusFailed,
|
||||||
|
ebaiapi.OrderPartRefundMerchantRefused: model.OrderStatusUnknown, // 是否是中间状态
|
||||||
|
}
|
||||||
|
AfsVendorStatus2Status4UserCancel = map[int]int{
|
||||||
|
ebaiapi.OrderUserCancelApply: model.AfsOrderStatusWait4Approve,
|
||||||
|
ebaiapi.OrderUserCancelCSIntervene: model.OrderStatusUnknown,
|
||||||
|
ebaiapi.OrderUserCancelCSRefused: model.AfsOrderStatusFailed,
|
||||||
|
ebaiapi.OrderUserCancelCSAgreed: model.AfsOrderStatusFinished,
|
||||||
|
ebaiapi.OrderUserCancelMerchantRefused: model.AfsOrderStatusFailed,
|
||||||
|
ebaiapi.OrderUserCancelMerchantAgreed: model.AfsOrderStatusFinished,
|
||||||
|
ebaiapi.OrderUserCancelInvalid: model.AfsOrderStatusFailed,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) isAfsMsg(msg *ebaiapi.CallbackMsg) bool {
|
||||||
|
if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
||||||
|
msgType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||||
|
return msgType == ebaiapi.OrderPartRefuncTypeCustomer
|
||||||
|
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
||||||
|
cancelType := int(utils.MustInterface2Int64(msg.Body["cancel_type"]))
|
||||||
|
return cancelType == ebaiapi.OrderUserCancelTypeAfterSale
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) OnAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
retVal = c.onAfsOrderMsg(msg)
|
||||||
|
})
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
AfsCreateAt: 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.AfsOrderStatusNew {
|
||||||
|
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)
|
||||||
|
for _, sku := range partRefundData.RefundProducts {
|
||||||
|
orderSku := &model.OrderSkuFinancial{
|
||||||
|
VendorID: model.VendorIDEBAI,
|
||||||
|
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.Name,
|
||||||
|
UserMoney: sku.TotalRefund,
|
||||||
|
PmSkuSubsidyMoney: sku.ShopEleRefund,
|
||||||
|
IsAfsOrder: 1,
|
||||||
|
}
|
||||||
|
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||||||
|
afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney
|
||||||
|
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
||||||
|
if orderStatus.Status <= model.AfsOrderStatusNew {
|
||||||
|
if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil {
|
||||||
|
afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg)
|
||||||
|
cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo)
|
||||||
|
afsOrder.AppealType = model.AfsAppealTypeRefund
|
||||||
|
afsOrder.VendorReasonType = ""
|
||||||
|
afsOrder.ReasonType = model.AfsReasonNotOthers
|
||||||
|
afsOrder.ReasonDesc = utils.LimitUTF8StringLen(buildFullReason(cancelData.CancelReason, cancelData.AdditionReason), 1024)
|
||||||
|
afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(cancelData.Pictures, ","), 1024)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
if orderStatus.Status <= model.AfsOrderStatusNew {
|
||||||
|
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
||||||
|
} else {
|
||||||
|
err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
|
||||||
|
}
|
||||||
|
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
|
||||||
|
}
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) convertAfsReasonType(vendorReasonType string) int8 {
|
||||||
|
return model.AfsReasonNotOthers
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus4PartRefund(vendorStatus int) int {
|
||||||
|
return AfsVendorStatus2Status4PartRefundMap[vendorStatus]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus4UserCancel(vendorStatus int) int {
|
||||||
|
return AfsVendorStatus2Status4UserCancel[vendorStatus]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) callbackAfsMsg2Status(msg *ebaiapi.CallbackMsg) (orderStatus *model.OrderStatus) {
|
||||||
|
if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
||||||
|
partRefundData := msg.Data.(*ebaiapi.CBPartRefundInfo)
|
||||||
|
orderStatus = &model.OrderStatus{
|
||||||
|
VendorOrderID: partRefundData.RefundID, // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||||||
|
VendorID: model.VendorIDEBAI,
|
||||||
|
OrderType: model.OrderTypeAfsOrder,
|
||||||
|
RefVendorOrderID: utils.Int64ToStr(partRefundData.OrderID),
|
||||||
|
RefVendorID: model.VendorIDEBAI,
|
||||||
|
VendorStatus: utils.Int2Str(partRefundData.Status),
|
||||||
|
Status: c.GetAfsStatusFromVendorStatus4PartRefund(partRefundData.Status),
|
||||||
|
StatusTime: utils.Timestamp2Time(msg.Timestamp),
|
||||||
|
Remark: buildFullReason(partRefundData.Reason, partRefundData.AdditionReason),
|
||||||
|
}
|
||||||
|
if orderStatus.Status == model.AfsOrderStatusWait4Approve && partRefundData.Type != ebaiapi.OrderPartRefuncTypeCustomer {
|
||||||
|
orderStatus.Status = model.AfsOrderStatusNew
|
||||||
|
}
|
||||||
|
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
||||||
|
cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo)
|
||||||
|
orderStatus = &model.OrderStatus{
|
||||||
|
VendorOrderID: utils.Int64ToStr(cancelData.OrderID), // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||||||
|
VendorID: model.VendorIDEBAI,
|
||||||
|
OrderType: model.OrderTypeAfsOrder,
|
||||||
|
RefVendorOrderID: utils.Int64ToStr(cancelData.OrderID),
|
||||||
|
RefVendorID: model.VendorIDEBAI,
|
||||||
|
VendorStatus: utils.Int2Str(cancelData.Type),
|
||||||
|
Status: c.GetAfsStatusFromVendorStatus4UserCancel(cancelData.Type),
|
||||||
|
StatusTime: utils.Timestamp2Time(msg.Timestamp),
|
||||||
|
Remark: buildFullReason(cancelData.CancelReason, cancelData.AdditionReason),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return orderStatus
|
||||||
|
}
|
||||||
|
|
||||||
// 审核售后单申请
|
// 审核售后单申请
|
||||||
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
||||||
|
if globals.EnableEbaiStoreWrite {
|
||||||
|
if approveType == partner.AfsApproveTypeRefused {
|
||||||
|
err = api.EbaiAPI.OrderDisagreeRefund(order.VendorOrderID, reason)
|
||||||
|
} else {
|
||||||
|
err = api.EbaiAPI.OrderAgreeRefund(order.VendorOrderID)
|
||||||
|
}
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 确认收到退货
|
// 确认收到退货
|
||||||
func (c *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error) {
|
func (c *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error) {
|
||||||
|
err = fmt.Errorf("内部错误,饿百平台不支持确认收到退货操作")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,42 +1,26 @@
|
|||||||
package jd
|
package jd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
if curPurchaseHandler != nil {
|
if curPurchaseHandler != nil {
|
||||||
if retVal = curPurchaseHandler.OnOrderMsg(msg); retVal == nil {
|
retVal = curPurchaseHandler.OnOrderMsg(msg)
|
||||||
retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
if curPurchaseHandler != nil {
|
if curPurchaseHandler != nil {
|
||||||
if retVal = curPurchaseHandler.OnWaybillMsg(msg); retVal == nil {
|
retVal = curPurchaseHandler.OnWaybillMsg(msg)
|
||||||
retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
if curPurchaseHandler != nil {
|
if curPurchaseHandler != nil {
|
||||||
retVal = curPurchaseHandler.onStoreMsg(msg)
|
retVal = curPurchaseHandler.OnStoreMsg(msg)
|
||||||
}
|
|
||||||
return retVal
|
|
||||||
}
|
|
||||||
|
|
||||||
func OnFinancialMsg2(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
|
||||||
if curPurchaseHandler != nil {
|
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
OnFinancialMsg(msg)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,15 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) OnFinancialMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
retVal = p.onFinancialMsg(msg)
|
||||||
|
})
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
|
||||||
// 京东正向/退款订单类型处理--存储
|
// 京东正向/退款订单类型处理--存储
|
||||||
func OnFinancialMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
func (p *PurchaseHandler) onFinancialMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
var err error
|
var err error
|
||||||
// if msg.StatusID == jdapi.OrderStatusPayFinishedSettle || msg.StatusID == jdapi.OrderStatusTipChanged || msg.StatusID == jdapi.OrderStatusSwitch2SelfSettle { // 如果是正向单
|
// if msg.StatusID == jdapi.OrderStatusPayFinishedSettle || msg.StatusID == jdapi.OrderStatusTipChanged || msg.StatusID == jdapi.OrderStatusSwitch2SelfSettle { // 如果是正向单
|
||||||
if msg.StatusID == jdapi.OrderStatusPayFinishedSettle || msg.StatusID == jdapi.OrderStatusTipChanged || msg.StatusID == jdapi.OrderStatusAdjustSettle || msg.StatusID == jdapi.OrderStatusSwitch2SelfSettle { // 如果是正向单
|
if msg.StatusID == jdapi.OrderStatusPayFinishedSettle || msg.StatusID == jdapi.OrderStatusTipChanged || msg.StatusID == jdapi.OrderStatusAdjustSettle || msg.StatusID == jdapi.OrderStatusSwitch2SelfSettle { // 如果是正向单
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ func (c *PurchaseHandler) OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
if msg.MsgURL == jdapi.CallbackMsgAfterSaleBillStatus {
|
if msg.MsgURL == jdapi.CallbackMsgOrderAccounting {
|
||||||
|
retVal = c.OnFinancialMsg(msg)
|
||||||
|
} else if msg.MsgURL == jdapi.CallbackMsgAfterSaleBillStatus {
|
||||||
retVal = c.OnAfsOrderMsg(msg)
|
retVal = c.OnAfsOrderMsg(msg)
|
||||||
} else {
|
} else {
|
||||||
if jdapi.OrderStatusNew == msg.StatusID {
|
if jdapi.OrderStatusNew == msg.StatusID {
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorStoreID s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 当前京东的storeCrud消息不会在门店状态改变时发送,所以意义不大,先放在这里
|
// 当前京东的storeCrud消息不会在门店状态改变时发送,所以意义不大,先放在这里
|
||||||
func (c *PurchaseHandler) onStoreMsg(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
func (c *PurchaseHandler) OnStoreMsg(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
||||||
var err error
|
var err error
|
||||||
if msg.StatusID == jdapi.StatusIDUpdateStore {
|
if msg.StatusID == jdapi.StatusIDUpdateStore {
|
||||||
var storeStatus int
|
var storeStatus int
|
||||||
|
|||||||
@@ -184,18 +184,10 @@ func (c *DjswController) NewAfterSaleBill() {
|
|||||||
|
|
||||||
func (c *DjswController) AfterSaleBillStatus() {
|
func (c *DjswController) AfterSaleBillStatus() {
|
||||||
c.orderStatus(false)
|
c.orderStatus(false)
|
||||||
// c.OrderAccounting()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DjswController) OrderAccounting() {
|
func (c *DjswController) OrderAccounting() {
|
||||||
var obj *jdapi.CallbackOrderMsg
|
c.orderStatus(false)
|
||||||
var callbackResponse *jdapi.CallbackResponse
|
|
||||||
obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx))
|
|
||||||
if callbackResponse == nil {
|
|
||||||
callbackResponse = jd.OnFinancialMsg2(obj)
|
|
||||||
}
|
|
||||||
c.Data["json"] = c.transferResponse(callbackResponse)
|
|
||||||
c.ServeJSON()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getUsefulRequest(ctx *context.Context) *http.Request {
|
func getUsefulRequest(ctx *context.Context) *http.Request {
|
||||||
|
|||||||
Reference in New Issue
Block a user