package jd import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "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 *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { var err error if msg.StatusID == jdapi.OrderStatusPayFinishedSettle || msg.StatusID == jdapi.OrderStatusAdjustSettle || msg.StatusID == jdapi.OrderStatusSwitch2SelfSettle { // 如果是正向单 order, err2 := partner.CurOrderManager.LoadOrder(msg.BillID, model.VendorIDJD) if err = err2; err == nil { orderData, err2 := api.JdAPI.QuerySingleOrder(msg.BillID) if err = err2; err == nil { orderFinancial, err2 := curPurchaseHandler.OrderDetail2Financial(orderData, false, order) if err = err2; err == nil { err = orderman.SaveOrderFinancialInfo(orderFinancial) } } } else { err = nil } } else if msg.StatusID == jdapi.SaleBillStatusRefundSuccess || msg.StatusID == jdapi.SaleBillStatusSaleReturnSuccess { // 如果是退款单 orderData, err2 := api.JdAPI.GetAfsService(msg.BillID) if err = err2; err == nil { err = orderman.SaveAfsOrderFinancialInfo(curPurchaseHandler.AfsOrderDetail2Financial(orderData)) } } return jdapi.Err2CallbackResponse(err, "jd OnFinancialMsg") } // 处理京东正向订单信息 func (p *PurchaseHandler) OrderDetail2Financial(orderData map[string]interface{}, isFromOrderDetail bool, order *model.GoodsOrder) (orderFinancial *model.OrderFinancial, err error) { orderFinancial = &model.OrderFinancial{ VendorID: model.VendorIDJD, VendorOrderID: utils.Int64ToStr(utils.MustInterface2Int64(orderData["orderId"])), ReceivableFreight: utils.MustInterface2Int64(orderData["orderReceivableFreight"]), FreightMoney: utils.MustInterface2Int64(orderData["orderFreightMoney"]), ActualPayMoney: utils.MustInterface2Int64(orderData["orderBuyerPayableMoney"]), DiscountMoney: utils.MustInterface2Int64(orderData["orderDiscountMoney"]), DistanceFreightMoney: utils.MustInterface2Int64(orderData["merchantPaymentDistanceFreightMoney"]), FreightTipsMoney: utils.MustInterface2Int64(orderData["tips"]), // BoxFee: utils.MustInterface2Int64(orderData["packagingMoney"]), // 京东包装(塑料袋)由京东提供,相应钱款也归京东,不记录/记录之后优化算法 } skus := order.Skus if skus != nil { for _, x := range skus { orderFinancial.ShopPriceMoney += x.ShopPrice } } if orderData["product"] != nil { product := orderData["product"].([]interface{}) for _, x := range product { xMap := x.(map[string]interface{}) orderFinancial.SalePriceMoney += utils.MustInterface2Int64(xMap["skuJdPrice"]) * utils.MustInterface2Int64(xMap["skuCount"]) } } orderFinancial.DeliveryConfirmTime = utils.Str2TimeWithDefault(utils.Interface2String(orderData["deliveryConfirmTime"]), utils.DefaultTimeValue) if utils.Interface2String(orderData["deliveryCarrierNo"]) == jdapi.SelfDeliveryCarrierNo { orderFinancial.SelfDeliveryDiscountMoney = utils.MustInterface2Int64(orderData["orderReceivableFreight"]) orderFinancial.DistanceFreightMoney = 0 } if orderData["discount"] != nil { discount := orderData["discount"].([]interface{}) for _, x := range discount { xMap := x.(map[string]interface{}) discountPrice := utils.MustInterface2Int64(xMap["discountPrice"]) discountType := int(utils.MustInterface2Int64(xMap["discountType"])) if discountType == jdapi.FreightDiscountTypeByShop { orderFinancial.FreightDiscountMoney = discountPrice } if discountType == jdapi.FreightDiscountTypeByVip || discountType == jdapi.FreightDiscountTypeByActivity || discountType == jdapi.FreightDiscountTypeByCoupons { orderFinancial.VendorFreightDiscountMoney = discountPrice } orderFinancial.TotalDiscountMoney += discountPrice } } order1, err2 := api.JdAPI.OrderShoudSettlementService(orderFinancial.VendorOrderID) if err = err2; err == nil { orderFinancial.ShopMoney = utils.Interface2Int64WithDefault(order1["settlementAmount"], 0) orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["goodsCommission"], 0) orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["freightCommission"], 0) orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["packageCommission"], 0) orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["guaranteedCommission"], 0) orderFinancial.PmSubsidyMoney += utils.Interface2Int64WithDefault(order1["platOrderGoodsDiscountMoney"], 0) orderFinancial.PmSubsidyMoney += utils.Interface2Int64WithDefault(order1["platSkuGoodsDiscountMoney"], 0) } else { if !isFromOrderDetail { globals.SugarLogger.Warnf("jd OrderDetail2Financial, orderID:%s is not found from api.JdAPI.OrderShoudSettlementService", orderFinancial.VendorOrderID) } } return orderFinancial, err } // 处理京东售后订单结账信息 func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interface{}) (afsOrder *model.AfterSalesOrder) { afsOrder = &model.AfterSalesOrder{ VendorID: model.VendorIDJD, AfterSalesOrderID: utils.Interface2String(orderData["afsServiceOrder"]), VendorOrderID: utils.Interface2String(orderData["orderId"]), VendorStoreID: utils.Interface2String(orderData["stationId"]), StoreID: int(utils.Str2Int64(utils.Interface2String(orderData["stationNumOutSystem"]))), ConfirmTime: utils.Timestamp2Time(utils.MustInterface2Int64(orderData["updateTime"].(map[string]interface{})["time"]) / 1000), FreightUserMoney: utils.MustInterface2Int64(orderData["orderFreightMoney"]), AfsFreightMoney: utils.MustInterface2Int64(orderData["afsFreight"]), BoxMoney: utils.MustInterface2Int64(orderData["packagingMoney"]), TongchengFreightMoney: utils.MustInterface2Int64(orderData["tongchengFreightMoney"]), MealBoxMoney: utils.MustInterface2Int64(orderData["mealBoxMoney"]), } order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID) if err == nil { afsOrder.JxStoreID = order.JxStoreID } else { globals.SugarLogger.Warnf("jd AfsOrderDetail2Financial, afsOrderID:%s is not found from partner.CurOrderManager.LoadOrder", afsOrder.VendorOrderID) } if orderData["afsDetailList"] != nil { refundDetail := orderData["afsDetailList"].([]interface{}) for _, x := range refundDetail { xMap := x.(map[string]interface{}) orderSku := &model.AfterSalesOrderSku{ VendorID: model.VendorIDJD, AfterSalesOrderID: afsOrder.AfterSalesOrderID, VendorOrderID: afsOrder.VendorOrderID, VendorStoreID: afsOrder.VendorStoreID, StoreID: afsOrder.StoreID, ConfirmTime: afsOrder.ConfirmTime, VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(xMap["wareId"])), SkuID: int(utils.Str2Int64(utils.Interface2String(xMap["skuIdIsv"]))), Name: utils.Interface2String(xMap["wareName"]), SkuUserMoney: utils.MustInterface2Int64(xMap["afsMoney"]), } if xMap["afsSkuDiscountList"] != nil { afsSkuDiscountList := xMap["afsSkuDiscountList"].([]interface{}) for _, y := range afsSkuDiscountList { orderSku.SkuVendorMoney += utils.MustInterface2Int64(y.(map[string]interface{})["platPayMoney"]) } } afsOrder.Skus = append(afsOrder.Skus, orderSku) } if len(refundDetail) <= 0 { globals.SugarLogger.Warnf("jd AfsOrderDetail2Financial, orderID:%s have no refund_detail", afsOrder.VendorOrderID) } } else { globals.SugarLogger.Warnf("jd AfsOrderDetail2Financial, orderID:% refund_detail is nil", afsOrder.VendorOrderID) } return afsOrder } func (p *PurchaseHandler) OnOrderDetail(orderDetail map[string]interface{}) (err error) { order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(utils.MustInterface2Int64(orderDetail["orderId"])), model.VendorIDJD) if err == nil { orderFinancial, err2 := curPurchaseHandler.OrderDetail2Financial(orderDetail, true, order) if err = err2; err == nil { err = orderman.SaveOrderFinancialInfo(orderFinancial) } } return err }