diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index ba1ca74a3..2159aee2c 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -7,6 +7,7 @@ import ( "math" "math/rand" "regexp" + "sort" "strings" "sync" "time" @@ -31,6 +32,25 @@ type SyncMapWithTimeout struct { timers sync.Map } +type OrderSkuList []*model.OrderSku + +func (l OrderSkuList) Len() int { + return len(l) +} + +// Less reports whether the element with +// index i should sort before the element with index j. +func (l OrderSkuList) Less(i, j int) bool { + return l[i].SalePrice < l[j].SalePrice +} + +// Swap swaps the elements with indexes i and j. +func (l OrderSkuList) Swap(i, j int) { + tmp := l[i] + l[i] = l[j] + l[j] = tmp +} + func init() { rand.Seed(time.Now().Unix()) routinePool = routinepool.New(1000, 1000) @@ -489,6 +509,7 @@ func RemoveSkuFromOrder(order *model.GoodsOrder, removedSkuList []*model.OrderSk } } var skuList []*model.OrderSku + sort.Sort(sort.Reverse(OrderSkuList(order.Skus))) for _, sku := range order.Skus { var removedSku *model.OrderSku if skuID := GetSkuIDFromOrderSku(sku); skuID > 0 { diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index ac7936c00..9698c85a5 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -99,6 +99,7 @@ func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *mode order = p.Map2Order(result1) if err2 == nil { order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["order_detail"]) + order.ActualPayPrice = utils.MustInterface2Int64(result2["user_fee"]) jxutils.RefreshOrderSkuRelated(order) } else if err2Ext, ok := err2.(*utils.ErrorWithCode); !ok || err2Ext.IntCode() != ebaiapi.ErrOrderIsNotPartRefund { err = err2 diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 64cf9d492..341333a6f 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -261,12 +261,14 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap if err = err2; err == nil { var removedSkuList []*model.OrderSku for _, mtwmSku := range skuList { + order.ActualPayPrice -= jxutils.StandardPrice2Int(mtwmSku.RefundPrice) * int64(mtwmSku.Count) removedSkuList = append(removedSkuList, &model.OrderSku{ SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)), Count: mtwmSku.Count, }) } order = jxutils.RemoveSkuFromOrder(order, removedSkuList) + jxutils.RefreshOrderSkuRelated(order) err = partner.CurOrderManager.OnOrderAdjust(order, status) } }