128 lines
5.7 KiB
Go
128 lines
5.7 KiB
Go
package ebai
|
||
|
||
import (
|
||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||
"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"
|
||
)
|
||
|
||
// 存储饿百退款订单结账信息
|
||
func OnFinancialMsg(msg *ebaiapi.CallbackMsg) (err error) {
|
||
if msg.Cmd == ebaiapi.CmdOrderPartRefund { // 部分退款处理
|
||
if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["status"])) == ebaiapi.OrderPartRefundSuccess {
|
||
orderData, err2 := api.EbaiAPI.OrderPartrefundGet(utils.Interface2String(msg.Body["refund_id"]))
|
||
if err = err2; err == nil {
|
||
afsOrder := CurPurchaseHandler.AfsOrderDetail2Financial(orderData)
|
||
err = orderman.SaveAfsOrderFinancialInfo(afsOrder)
|
||
}
|
||
}
|
||
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel { // 全额退款处理
|
||
messageType := utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["type"]))
|
||
if utils.Int64ToStr(utils.MustInterface2Int64(msg.Body["cancel_type"])) == ebaiapi.AfterOrderFinishedCancelType &&
|
||
(messageType == ebaiapi.OrderUserCancelSuccessA || messageType == ebaiapi.OrderUserCancelSuccessB) {
|
||
globals.SugarLogger.Debug(utils.Interface2String(msg.Body["refund_id"])) // 获得退款订单ID,去本地数据库拿?饿百消息推送只给了订单号,但是没有查询全额退款的接口,只有部分退款才可以查询
|
||
}
|
||
}
|
||
return err
|
||
}
|
||
|
||
func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interface{}) (afsOrder *model.AfterSalesOrder) {
|
||
afsOrder = &model.AfterSalesOrder{
|
||
VendorID: model.VendorIDEBAI,
|
||
AfterSalesOrderID: utils.Interface2String(orderData["order_id"]),
|
||
VendorOrderID: utils.Interface2String(orderData["order_id"]),
|
||
}
|
||
order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID)
|
||
if err == nil {
|
||
afsOrder.JxStoreID = order.JxStoreID
|
||
} else {
|
||
globals.SugarLogger.Warnf("ebai AfsOrderDetail2Financial, afsOrderID:%s is not found from partner.CurOrderManager.LoadOrder", afsOrder.VendorOrderID)
|
||
err = nil
|
||
}
|
||
if orderData["refund_detail"] != nil {
|
||
refundDetail := orderData["refund_detail"].([]interface{})
|
||
for _, refundInfo := range refundDetail {
|
||
xMap := refundInfo.(map[string]interface{})
|
||
orderSku := &model.AfterSalesOrderSku{
|
||
VendorID: model.VendorIDEBAI,
|
||
AfterSalesOrderID: afsOrder.AfterSalesOrderID,
|
||
VendorOrderID: afsOrder.VendorOrderID,
|
||
ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
|
||
VendorSkuID: utils.Interface2String(xMap["sku_id"]),
|
||
SkuID: int(utils.Str2Int64(utils.Interface2String(xMap["custom_sku_id"]))),
|
||
Name: utils.Interface2String(xMap["name"]),
|
||
SkuUserMoney: utils.MustInterface2Int64(xMap["total_refund"]),
|
||
SkuVendorMoney: utils.MustInterface2Int64(xMap["shop_ele_refund"]),
|
||
}
|
||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||
}
|
||
if len(refundDetail) > 0 {
|
||
afsOrder.ConfirmTime = afsOrder.Skus[0].ConfirmTime
|
||
} else {
|
||
globals.SugarLogger.Warnf("ebai AfsOrderDetail2Financial, orderID:%s have no refund_detail", afsOrder.VendorOrderID)
|
||
}
|
||
} else {
|
||
globals.SugarLogger.Warnf("ebai AfsOrderDetail2Financial, orderID:% refund_detail is nil", afsOrder.VendorOrderID)
|
||
}
|
||
return afsOrder
|
||
}
|
||
|
||
// 存储饿百正向订单结账信息
|
||
func (p *PurchaseHandler) OnOrderDetail(result map[string]interface{}) (err error) {
|
||
err = orderman.SaveOrderFinancialInfo(p.OrderDetail2Financial(result))
|
||
return err
|
||
}
|
||
|
||
func (p *PurchaseHandler) OrderDetail2Financial(result map[string]interface{}) (orderDetail *model.OrderFinancial) {
|
||
orderDetail = &model.OrderFinancial{
|
||
VendorID: model.VendorIDEBAI,
|
||
}
|
||
order1 := result["order"].(map[string]interface{})
|
||
orderDetail.VendorOrderID = utils.Interface2String(order1["order_id"])
|
||
orderDetail.VendorOrderID2 = utils.Interface2String(order1["eleme_order_id"])
|
||
orderDetail.DeliveryConfirmTime = getTimeFromInterface(order1["finished_time"])
|
||
orderDetail.TotalDiscountMoney = utils.MustInterface2Int64(order1["discount_fee"])
|
||
orderDetail.ReceivableFreight = utils.MustInterface2Int64(order1["send_fee"])
|
||
if int(utils.MustInterface2Int64(order1["send_immediately"])) == ebaiapi.SendImmediatelySelf {
|
||
orderDetail.SelfDeliveryDiscountMoney = orderDetail.ReceivableFreight
|
||
}
|
||
orderDetail.BoxMoney = utils.MustInterface2Int64(order1["package_fee"])
|
||
orderDetail.ActualPayMoney = utils.MustInterface2Int64(order1["user_fee"])
|
||
orderDetail.PmMoney = utils.MustInterface2Int64(order1["commission"])
|
||
orderDetail.ShopMoney = utils.MustInterface2Int64(order1["shop_fee"])
|
||
order, err := partner.CurOrderManager.LoadOrder(orderDetail.VendorOrderID, orderDetail.VendorID)
|
||
if err == nil {
|
||
skus := order.Skus
|
||
if skus != nil {
|
||
for _, x := range skus {
|
||
orderDetail.ShopPriceMoney += x.ShopPrice
|
||
}
|
||
}
|
||
} else {
|
||
globals.SugarLogger.Warnf("ebai OrderDetail2Financial, orderID:%s is not found from partner.CurOrderManager.LoadOrder", orderDetail.VendorOrderID)
|
||
err = nil
|
||
}
|
||
if result["products"] != nil {
|
||
products := result["products"].([]interface{})
|
||
for _, x := range products {
|
||
for _, y := range x.([]interface{}) {
|
||
product := y.(map[string]interface{})
|
||
orderDetail.SalePriceMoney += utils.MustInterface2Int64(product["product_price"]) * utils.MustInterface2Int64(product["product_amount"])
|
||
}
|
||
}
|
||
}
|
||
if result["discount"] != nil {
|
||
discount := result["discount"].([]interface{})
|
||
for _, x := range discount {
|
||
xMap := x.(map[string]interface{})
|
||
orderDetail.DiscountMoney += utils.MustInterface2Int64(xMap["fee"])
|
||
orderDetail.PmSubsidyMoney += utils.MustInterface2Int64(xMap["baidu_rate"]) // 平台承担补贴
|
||
}
|
||
}
|
||
return orderDetail
|
||
}
|