147 lines
7.5 KiB
Go
147 lines
7.5 KiB
Go
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 { // 如果是正向单
|
|
orderData, err2 := api.JdAPI.QuerySingleOrder(msg.BillID)
|
|
if err = err2; err == nil {
|
|
err = orderman.SaveOrderFinancialInfo(curPurchaseHandler.OrderDetail2Financial(orderData))
|
|
}
|
|
} 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{}) (orderDetail *model.OrderFinancial) {
|
|
orderDetail = &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"]), // 京东包装(塑料袋)由京东提供,相应钱款也归京东,不记录/记录之后优化算法
|
|
}
|
|
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("jd OnJdOrderinfo, orderID:%s is not found from partner.CurOrderManager.LoadOrder", orderDetail.VendorOrderID)
|
|
}
|
|
if orderData["product"] != nil {
|
|
product := orderData["product"].([]interface{})
|
|
for _, x := range product {
|
|
xMap := x.(map[string]interface{})
|
|
orderDetail.SalePriceMoney += utils.MustInterface2Int64(xMap["skuJdPrice"]) * utils.MustInterface2Int64(xMap["skuCount"])
|
|
}
|
|
}
|
|
orderDetail.DeliveryConfirmTime = utils.Str2TimeWithDefault(utils.Interface2String(orderData["deliveryConfirmTime"]), utils.DefaultTimeValue)
|
|
if utils.Interface2String(orderData["deliveryCarrierNo"]) == jdapi.SelfDeliveryCarrierNo {
|
|
orderDetail.SelfDeliveryDiscountMoney = utils.MustInterface2Int64(orderData["orderReceivableFreight"])
|
|
orderDetail.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 {
|
|
orderDetail.FreightDiscountMoney = discountPrice
|
|
}
|
|
if discountType == jdapi.FreightDiscountTypeByVip || discountType == jdapi.FreightDiscountTypeByActivity || discountType == jdapi.FreightDiscountTypeByCoupons {
|
|
orderDetail.VendorFreightDiscountMoney = discountPrice
|
|
}
|
|
orderDetail.TotalDiscountMoney += discountPrice
|
|
}
|
|
}
|
|
order1, err2 := api.JdAPI.OrderShoudSettlementService(orderDetail.VendorOrderID)
|
|
if err2 == nil {
|
|
orderDetail.ShopMoney = utils.Interface2Int64WithDefault(order1["settlementAmount"], 0)
|
|
orderDetail.PmMoney += utils.Interface2Int64WithDefault(order1["goodsCommission"], 0)
|
|
orderDetail.PmMoney += utils.Interface2Int64WithDefault(order1["freightCommission"], 0)
|
|
orderDetail.PmMoney += utils.Interface2Int64WithDefault(order1["packageCommission"], 0)
|
|
orderDetail.PmMoney += utils.Interface2Int64WithDefault(order1["guaranteedCommission"], 0)
|
|
orderDetail.PmSubsidyMoney += utils.Interface2Int64WithDefault(order1["platOrderGoodsDiscountMoney"], 0)
|
|
orderDetail.PmSubsidyMoney += utils.Interface2Int64WithDefault(order1["platSkuGoodsDiscountMoney"], 0)
|
|
}
|
|
return orderDetail
|
|
}
|
|
|
|
// 处理京东售后订单结账信息
|
|
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"])),
|
|
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 OnFinancialMsg, 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("ebai OnFinancialMsg, orderID:%s have no refund_detail", afsOrder.VendorOrderID)
|
|
}
|
|
} else {
|
|
globals.SugarLogger.Warnf("ebai OnFinancialMsg, orderID:% refund_detail is nil", afsOrder.VendorOrderID)
|
|
}
|
|
return afsOrder
|
|
}
|