package mtwm import ( "net/url" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "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" ) // 存储美团退款订单结账信息 func OnFinancialMsg(msg *mtwmapi.CallbackMsg) (err error) { if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { // 部分退款处理 orderData := msg.Data if orderData.Get("notify_type") == mtwmapi.NotifyTypeSuccess { err = orderman.SaveAfsOrderFinancialInfo(curPurchaseHandler.AfsOrderDetail2Financial(orderData)) } } if msg.Cmd == mtwmapi.MsgTypeOrderRefund { // todo 全额退款处理 orderData := msg.Data if orderData.Get("notify_type") == mtwmapi.NotifyTypeSuccess { globals.SugarLogger.Debug(orderData.Get("order_id")) // 获得退款订单ID,去本地数据库拿?饿百消息推送只给了订单号,也没有通过订单号查询退款信息的接口 } } return err } func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrder *model.AfterSalesOrder) { afsOrder = &model.AfterSalesOrder{ VendorID: model.VendorIDMTWM, AfterSalesOrderID: orderData.Get("order_id"), VendorOrderID: orderData.Get("order_id"), ConfirmTime: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))), RefundMoney: jxutils.StandardPrice2Int(utils.Str2Float64(orderData.Get("money"))), } order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID) if err == nil { afsOrder.JxStoreID = order.JxStoreID } else { globals.SugarLogger.Warnf("mtwm AfsOrderDetail2Financial, afsOrderID:%s is not found from partner.CurOrderManager.LoadOrder", afsOrder.VendorOrderID) err = nil } food := orderData.Get("food") var refundDetail []map[string]interface{} utils.UnmarshalUseNumber([]byte(food), &refundDetail) for _, xMap := range refundDetail { orderSku := &model.AfterSalesOrderSku{ VendorID: model.VendorIDMTWM, AfterSalesOrderID: afsOrder.AfterSalesOrderID, VendorOrderID: afsOrder.VendorOrderID, ConfirmTime: afsOrder.ConfirmTime, VendorSkuID: utils.Interface2String(xMap["app_food_code"]), SkuID: int(utils.Str2Int64(utils.Interface2String(xMap["sku_id"]))), Name: utils.Interface2String(xMap["food_name"]), SkuUserMoney: jxutils.StandardPrice2Int(utils.MustInterface2Float64(xMap["refund_price"]))*utils.MustInterface2Int64(xMap["count"]) + jxutils.StandardPrice2Int(utils.MustInterface2Float64(xMap["box_price"]))*int64(utils.MustInterface2Float64(xMap["box_num"])), } afsOrder.Skus = append(afsOrder.Skus, orderSku) } if len(refundDetail) <= 0 { globals.SugarLogger.Warnf("mtwm AfsOrderDetail2Financial, orderID:%s have no refund_detail", 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.VendorIDMTWM, VendorOrderID: utils.Int64ToStr(utils.MustInterface2Int64(result["order_id"])), } orderDetail.DeliveryConfirmTime = utils.Str2TimeWithDefault(utils.Interface2String(result["order_completed_time"]), utils.DefaultTimeValue) order, err := partner.CurOrderManager.LoadOrder(orderDetail.VendorOrderID, orderDetail.VendorID) if err == nil { if order.Skus != nil { for _, x := range order.Skus { orderDetail.ShopPriceMoney += x.ShopPrice } } } else { globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s is not found from partner.CurOrderManager.LoadOrder", orderDetail.VendorOrderID) err = nil } detail := result["detail"] if detail != nil { var data []map[string]interface{} utils.UnmarshalUseNumber([]byte(utils.Interface2String(detail)), &data) for _, x := range data { orderDetail.SalePriceMoney += jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["price"])) * utils.MustInterface2Int64(x["quantity"]) orderDetail.BoxMoney += jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["box_price"])) * utils.MustInterface2Int64(x["box_num"]) } } else { globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no detail", orderDetail.VendorOrderID) } poiReceiveDetail := result["poi_receive_detail"] if poiReceiveDetail != nil { var data map[string]interface{} utils.UnmarshalUseNumber([]byte(utils.Interface2String(poiReceiveDetail)), &data) orderDetail.ReceivableFreight = utils.MustInterface2Int64(data["logisticsFee"]) orderDetail.FreightMoney = utils.MustInterface2Int64(data["logisticsFee"]) orderDetail.ActualPayMoney = utils.MustInterface2Int64(data["onlinePayment"]) orderDetail.PmMoney = utils.MustInterface2Int64(data["foodShareFeeChargeByPoi"]) orderDetail.ShopMoney = utils.MustInterface2Int64(data["wmPoiReceiveCent"]) for _, x := range data["actOrderChargeByMt"].([]interface{}) { orderDetail.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"]) orderDetail.PmSubsidyMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"]) } for _, x := range data["actOrderChargeByPoi"].([]interface{}) { orderDetail.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"]) } } else { globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no poi_receive_detail", orderDetail.VendorOrderID) } return orderDetail }