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 }