diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 857a59ab1..d8ad1d4e4 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -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 } diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 173928cde..1063a2c90 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -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 } } }