- 修复饿百调整单消息没有正确更新订单信息的BUG

This commit is contained in:
gazebo
2019-05-01 10:13:45 +08:00
parent 877109aee0
commit fa97e0b038
8 changed files with 110 additions and 28 deletions

View File

@@ -4,6 +4,8 @@ import (
"math"
"time"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/baseapi/platformapi/autonavi"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/baseapi/utils"
@@ -68,6 +70,63 @@ func (p *PurchaseHandler) getOrder(vendorOrderID string) (order *model.GoodsOrde
return order, result, err
}
func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *model.GoodsOrder, err error) {
taskIDs := []int{1, 2}
var (
err1, err2 error
result1, result2 map[string]interface{}
)
task := tasksch.NewParallelTask("GetOrder4PartRefund", nil, jxcontext.AdminCtx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
taskID := batchItemList[0].(int)
if taskID == 1 {
result1, err1 = api.EbaiAPI.OrderGet(vendorOrderID)
} else if taskID == 2 {
result2, err2 = api.EbaiAPI.OrderPartrefundGet(vendorOrderID)
}
return nil, nil
}, taskIDs)
task.Run()
task.GetResult(0)
if err1 == nil {
order = p.Map2Order(result1)
if err2 == nil {
order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["order_detail"])
jxutils.RefreshOrderSkuRelated(order)
} else if err2Ext, ok := err2.(*utils.ErrorWithCode); !ok || err2Ext.IntCode() != ebaiapi.ErrOrderIsNotPartRefund {
err = err2
}
} else {
err = err1
}
return order, err
}
func (p *PurchaseHandler) partRefund2OrderDetailSkuList(orderID string, orderDetail2 interface{}) (skuList []*model.OrderSku) {
orderDetail := orderDetail2.([]interface{})
for _, product2 := range orderDetail {
product := product2.(map[string]interface{})
skuName := product["name"].(string)
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
number := int(utils.MustInterface2Int64(product["number"]))
sku := &model.OrderSku{
VendorOrderID: orderID,
VendorID: model.VendorIDEBAI,
Count: number,
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
VendorSkuID: utils.Interface2String(product[ebaiapi.KeySkuID]),
SkuName: skuName,
// Weight: int(utils.Interface2Int64WithDefault(product["total_weight"], 0)) / number, // 退单这里的total_weight有BUG这里的total_weight还是没有退单时的值
SalePrice: utils.MustInterface2Int64(product["product_price"]),
}
if sku.Weight == 0 {
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
}
skuList = append(skuList, sku)
}
return skuList
}
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
result := orderData
shopMap := result["shop"].(map[string]interface{})
@@ -134,29 +193,27 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
product := product2.(map[string]interface{})
skuName := product["product_name"].(string)
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
productAmount := int(utils.MustInterface2Int64(product["product_amount"]))
sku := &model.OrderSku{
VendorOrderID: order.VendorOrderID,
VendorID: model.VendorIDEBAI,
Count: int(utils.MustInterface2Int64(product["product_amount"])),
Count: productAmount,
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
VendorSkuID: utils.Interface2String(product["baidu_product_id"]),
SkuName: skuName,
Weight: jxutils.FormatSkuWeight(specQuality, specUnit), // 订单信息里没有重量,只有名字里尝试找
Weight: int(utils.Interface2Int64WithDefault(product["total_weight"], 0)) / productAmount,
SalePrice: utils.MustInterface2Int64(product["product_price"]),
// PromotionType: int(utils.MustInterface2Int64(product["promotionType"])),
}
if sku.Weight == 0 {
sku.Weight = 222 // 如果名字里找不到缺省给半斤左右的一个特别值
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
}
// if product["isGift"].(bool) {
// sku.SkuType = 1
// }
order.Skus = append(order.Skus, sku)
order.SkuCount++
order.GoodsCount += sku.Count
order.SalePrice += sku.SalePrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count
}
jxutils.RefreshOrderSkuRelated(order)
// setOrederDetailFee(result, order)
return order
}
@@ -245,7 +302,14 @@ func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.
status := c.callbackMsg2Status(msg)
var err error
if status != nil {
err = partner.CurOrderManager.OnOrderStatusChanged(status)
if status.Status == model.OrderStatusAdjust {
var order *model.GoodsOrder
if order, err = c.GetOrder4PartRefund(GetOrderIDFromMsg(msg)); err == nil {
err = partner.CurOrderManager.OnOrderAdjust(order, status.VendorStatus)
}
} else {
err = partner.CurOrderManager.OnOrderStatusChanged(status)
}
}
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
}

View File

@@ -0,0 +1,16 @@
package ebai
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
)
func TestGetOrder4PartRefund(t *testing.T) {
order, err := new(PurchaseHandler).GetOrder4PartRefund("1556530656022029520")
if err != nil {
t.Fatal(err.Error())
} else {
t.Log(utils.Format4Output(order, false))
}
}

View File

@@ -190,12 +190,9 @@ func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
sku.VendorSkuID = utils.Int64ToStr(utils.MustInterface2Int64(product["id"])) // 2018-09-28日饿了么迁移到饿百后这个字段发生了变化
}
order.Skus = append(order.Skus, sku)
order.SkuCount++
order.GoodsCount += sku.Count
order.SalePrice += sku.SalePrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count
}
}
jxutils.RefreshOrderSkuRelated(order)
setOrederDetailFee(result, order)
return order
}

View File

@@ -153,11 +153,8 @@ func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
sku.SkuType = 1
}
order.Skus = append(order.Skus, sku)
order.SkuCount++
order.GoodsCount += sku.Count
order.SalePrice += sku.SalePrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count
}
jxutils.RefreshOrderSkuRelated(order)
setOrederDetailFee(result, order)
return order
}

View File

@@ -146,11 +146,8 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
// sku.SkuType = 1
// }
order.Skus = append(order.Skus, sku)
order.SkuCount++
order.GoodsCount += sku.Count
order.SalePrice += sku.SalePrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count
}
jxutils.RefreshOrderSkuRelated(order)
// setOrederDetailFee(result, order)
return order
}

View File

@@ -158,11 +158,8 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
SalePrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(item["price"])),
}
order.Skus = append(order.Skus, sku)
order.SkuCount++
order.GoodsCount += sku.Count
order.SalePrice += sku.SalePrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count
}
jxutils.RefreshOrderSkuRelated(order)
p.arrangeSaleStore(order, utils.Interface2String(logisticsDeliveryDetail["receiverCity"]), utils.Interface2String(logisticsDeliveryDetail["receiverProvince"]))
p.setStoreOrderSeq(order)
return order