订单有活动商品earningprice拆分sec

This commit is contained in:
苏尹岚
2020-05-07 14:35:28 +08:00
parent 6e57313017
commit 7b98010c7b
2 changed files with 167 additions and 118 deletions

View File

@@ -24,6 +24,11 @@ import (
func init() {
}
type tSkuCountPrice struct {
Count int `json:"count"`
SalePrice int64 `json:"salePrice"`
}
// msgVendorStatus的意思是事件本身的类型类似有时收到NewOrder事件去取订单状态不一定就是New的
// OnOrderAdjust也类似而OrderStatus要记录的是消息所以添加这个
func (c *OrderManager) OnOrderNew(order *model.GoodsOrder, orderStatus *model.OrderStatus) (err error) {
@@ -336,6 +341,7 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
return err
}
skumapper := storeSkuPriceAndWeight2Map(l)
var skuMultiCountMap = make(map[int][]*tSkuCountPrice)
for _, v := range orderSkus {
v.VendorOrderID = order.VendorOrderID
v.VendorID = order.VendorID
@@ -364,34 +370,42 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
salePrice = 0
}
v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, salePrice, storePayPercentage)
//TODO 重复购买有结算价的商品需要拆分第一个商品按结算价后面的商品按shopprice 或者 saleprice, 2020-05-06
// if v.Count > 1 {
// storeID := 0
// if order.StoreID == 0 {
// storeID = order.JxStoreID
// } else {
// storeID = order.StoreID
// }
// result, _ := dao.GetEffectiveActStoreSkuInfo(db, 0, nil, 0, []int{storeID}, []int{v.SkuID}, order.OrderCreatedAt, order.OrderCreatedAt)
// if len(result) > 0 {
// if result[0].EarningPrice != 0 {
// sku := v
// sku.Count = v.Count - 1
// v.Count = 1
// if v.ShopPrice < v.SalePrice {
// sku.EarningPrice = v.ShopPrice
// } else {
// sku.EarningPrice = v.SalePrice
// }
// orderSkus = append(orderSkus, sku)
// }
// }
// }
skuMultiCountMap[v.SkuID] = append(skuMultiCountMap[v.SkuID], &tSkuCountPrice{
Count: v.Count,
SalePrice: v.SalePrice,
})
}
// 直营店始终按比例结算,不考虑活动与结算表
if changePriceType != model.StoreChangePriceTypeManagedStore {
updateSingleOrderEarningPrice(order, db)
}
globals.SugarLogger.Debugf("skuMultiCountMap", utils.Format4Output(skuMultiCountMap, false))
//TODO 重复购买有活动且结算价大于0的商品需要拆分第一个商品按结算价后面的商品按shopprice 或者 saleprice, 2020-05-06
//TODO 京东美团的订单,做活动的商品之前就会拆分出来,所以只做更新,饿百暂时不管, 2020-05-07
if order.VendorID == model.VendorIDJD || order.VendorID == model.VendorIDMTWM {
for _, v := range orderSkus {
if v.EarningPrice > 0 {
if len(skuMultiCountMap[v.SkuID]) > 1 {
var price = 0
for _, vv := range skuMultiCountMap[v.SkuID] {
if int(vv.SalePrice) > price {
price = int(vv.SalePrice)
}
}
if price == int(v.SalePrice) {
var earningPrice = 0
if v.ShopPrice < v.SalePrice {
earningPrice = int(v.ShopPrice) * storePayPercentage
} else {
earningPrice = int(v.ShopPrice) * storePayPercentage
}
v.EarningPrice = int64(earningPrice)
globals.SugarLogger.Debugf("TestearningPrice", earningPrice)
}
}
}
}
}
}
return nil
}
@@ -738,26 +752,35 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
}
}()
for _, value := range order.Skus {
storeID := 0
if order.StoreID == 0 {
storeID = order.JxStoreID
} else {
storeID = order.StoreID
}
result, _ := dao.GetEffectiveActStoreSkuInfo(db, 0, nil, 0, []int{storeID}, []int{value.SkuID}, order.OrderCreatedAt, order.OrderCreatedAt)
if len(result) > 0 {
if result[0].EarningPrice != 0 {
sku := value
sku.Count = value.Count - 1
value.Count = 1
if value.ShopPrice < value.SalePrice {
sku.EarningPrice = value.ShopPrice
} else {
sku.EarningPrice = value.SalePrice
}
order.Skus = append(order.Skus, sku)
}
}
// storeID := 0
// if order.StoreID == 0 {
// storeID = order.JxStoreID
// } else {
// storeID = order.StoreID
// }
// result, _ := dao.GetEffectiveActStoreSkuInfo(db, 0, nil, 0, []int{storeID}, []int{value.SkuID}, order.OrderCreatedAt, order.OrderCreatedAt)
// if len(result) > 0 {
// if result[0].EarningPrice != 0 {
// var (
// storePayPercentage int
// )
// stores, _ := dao.GetStoreList(db, []int{order.StoreID}, nil, nil, nil, "")
// if len(stores) > 0 {
// storePayPercentage = stores[0].PayPercentage
// } else {
// storePayPercentage = 70
// }
// sku := value
// sku.Count = value.Count - 1
// value.Count = 1
// if value.ShopPrice < value.SalePrice {
// sku.EarningPrice = value.ShopPrice * int64(storePayPercentage)
// } else {
// sku.EarningPrice = value.SalePrice * int64(storePayPercentage)
// }
// order.Skus = append(order.Skus, sku)
// }
// }
if _, err = dao.UpdateEntity(db, value, "EarningPrice", "StoreSubID"); err != nil {
return nil, err
}

View File

@@ -312,8 +312,105 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
afsInfo[v.SkuID].Count -= minus
}
}
if v.SkuCount2 == 1 {
skuStr1 := strings.Join([]string{
// if v.SkuCount2 == 1 {
// skuStr1 := strings.Join([]string{
// utils.Int2Str(v.SkuID),
// utils.Int2Str(v.SkuCount2),
// utils.Int2Str(v.SkuShopPrice),
// utils.Int2Str(v.SkuSalePrice),
// utils.Int2Str(v.SkuEarningPrice),
// }, ",")
// if order == nil || v.ID != order.ID {
// order = v
// v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
// v.Status2 = model.OrderStatusName[v.Status]
// v.SkuInfo = skuStr1
// v.SkuInfo2 = skuStr1
// orders2 = append(orders2, v)
// } else {
// order.SkuInfo += ";" + skuStr1
// order.SkuInfo2 += ";" + skuStr1
// }
// } else if v.SkuCount2 > 1 {
// storeID := 0
// if v.StoreID == 0 {
// storeID = v.JxStoreID
// } else {
// storeID = v.StoreID
// }
// result, _ := dao.GetEffectiveActStoreSkuInfo(dao.GetDB(), 0, nil, 0, []int{storeID}, []int{v.SkuID}, v.OrderCreatedAt, v.OrderCreatedAt)
// if len(result) > 0 {
// if result[0].EarningPrice != 0 {
// var (
// storePayPercentage, price int
// )
// stores, _ := dao.GetStoreList(dao.GetDB(), []int{v.StoreID}, nil, nil, nil, "")
// if len(stores) > 0 {
// storePayPercentage = stores[0].PayPercentage
// } else {
// storePayPercentage = 70
// }
// skuStr1 := strings.Join([]string{
// utils.Int2Str(v.SkuID),
// utils.Int2Str(v.SkuCount2),
// utils.Int2Str(v.SkuShopPrice),
// utils.Int2Str(v.SkuSalePrice),
// utils.Int2Str(v.SkuEarningPrice),
// }, ",")
// skuStr2 := strings.Join([]string{
// utils.Int2Str(v.SkuID),
// utils.Int2Str(1),
// utils.Int2Str(v.SkuShopPrice),
// utils.Int2Str(v.SkuSalePrice),
// utils.Int2Str(v.SkuEarningPrice),
// }, ",")
// if v.SkuShopPrice < v.SkuSalePrice {
// price = v.SkuShopPrice * storePayPercentage
// } else {
// price = v.SkuSalePrice * storePayPercentage
// }
// skuStr3 := strings.Join([]string{
// utils.Int2Str(v.SkuID),
// utils.Int2Str(v.SkuCount2 - 1),
// utils.Int2Str(v.SkuShopPrice),
// utils.Int2Str(v.SkuSalePrice),
// utils.Int2Str(price),
// }, ",")
// if order == nil || v.ID != order.ID {
// order = v
// v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
// v.Status2 = model.OrderStatusName[v.Status]
// v.SkuInfo2 = skuStr1
// v.SkuInfo = skuStr2 + ";" + skuStr3
// orders2 = append(orders2, v)
// } else {
// order.SkuInfo2 += ";" + skuStr1
// order.SkuInfo += ";" + skuStr2 + ";" + skuStr3
// }
// }
// } else {
// skuStr1 := strings.Join([]string{
// utils.Int2Str(v.SkuID),
// utils.Int2Str(v.SkuCount2),
// utils.Int2Str(v.SkuShopPrice),
// utils.Int2Str(v.SkuSalePrice),
// utils.Int2Str(v.SkuEarningPrice),
// }, ",")
// if order == nil || v.ID != order.ID {
// order = v
// v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
// v.Status2 = model.OrderStatusName[v.Status]
// v.SkuInfo = skuStr1
// v.SkuInfo2 = skuStr1
// orders2 = append(orders2, v)
// } else {
// order.SkuInfo += ";" + skuStr1
// order.SkuInfo2 += ";" + skuStr1
// }
// }
// }
if v.SkuCount2 > 0 {
skuStr := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2),
utils.Int2Str(v.SkuShopPrice),
@@ -324,81 +421,10 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
order = v
v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
v.Status2 = model.OrderStatusName[v.Status]
v.SkuInfo = skuStr1
v.SkuInfo2 = skuStr1
v.SkuInfo = skuStr
orders2 = append(orders2, v)
} else {
order.SkuInfo += ";" + skuStr1
order.SkuInfo2 += ";" + skuStr1
}
} else if v.SkuCount2 > 1 {
storeID := 0
if v.StoreID == 0 {
storeID = v.JxStoreID
} else {
storeID = v.StoreID
}
result, _ := dao.GetEffectiveActStoreSkuInfo(dao.GetDB(), 0, nil, 0, []int{storeID}, []int{v.SkuID}, v.OrderCreatedAt, v.OrderCreatedAt)
if len(result) > 0 {
if result[0].EarningPrice != 0 {
skuStr1 := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(v.SkuEarningPrice),
}, ",")
skuStr2 := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(1),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(v.SkuEarningPrice),
}, ",")
price := 0
if v.SkuShopPrice < v.SkuSalePrice {
price = v.SkuShopPrice
} else {
price = v.SkuSalePrice
}
skuStr3 := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2 - 1),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(price),
}, ",")
if order == nil || v.ID != order.ID {
order = v
v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
v.Status2 = model.OrderStatusName[v.Status]
v.SkuInfo2 = skuStr1
v.SkuInfo = skuStr2 + ";" + skuStr3
orders2 = append(orders2, v)
} else {
order.SkuInfo2 += ";" + skuStr1
order.SkuInfo += ";" + skuStr2 + ";" + skuStr3
}
}
} else {
skuStr1 := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(v.SkuEarningPrice),
}, ",")
if order == nil || v.ID != order.ID {
order = v
v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
v.Status2 = model.OrderStatusName[v.Status]
v.SkuInfo = skuStr1
v.SkuInfo2 = skuStr1
orders2 = append(orders2, v)
} else {
order.SkuInfo += ";" + skuStr1
order.SkuInfo2 += ";" + skuStr1
}
order.SkuInfo += ";" + skuStr
}
}
}