From 6bd473839c5c45d477b1830d3634b71783d085ec Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 20 Aug 2019 14:07:31 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8DGetStoresOrderSaleInfoNew?= =?UTF-8?q?=E4=B8=AD=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 96 +++++++++++--------- business/model/dao/dao_order.go | 22 +++++ 2 files changed, 74 insertions(+), 44 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 3c0c4203f..3a9d22d5a 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -791,51 +791,59 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID if err != nil { return nil, err } - - orderMap := make(map[string]*model.GoodsOrder) - orderSkuMap := make(map[string]*dao.OrderSkuWithActualPayPrice) - saleInfoMap := make(map[int64]*dao.StoresOrderSaleInfo) - for _, v := range orderSkuList { - if v.EarningPrice == 0 { - v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, v.PayPercentage) - } - - status := v.Status - if status < model.OrderStatusEndBegin { - status = 0 - } - index := jxutils.Combine2Int(v.StoreID, v.VendorID)*1000 + int64(status) - saleInfo := saleInfoMap[index] - if saleInfo == nil { - saleInfo = &dao.StoresOrderSaleInfo{ - StoreID: v.StoreID, - VendorID: v.VendorID, - Status: status, - } - saleInfoMap[index] = saleInfo - } - saleInfo.ShopPrice += v.ShopPrice * int64(v.Count) - saleInfo.VendorPrice += v.VendorPrice * int64(v.Count) - saleInfo.SalePrice += v.SalePrice * int64(v.Count) - saleInfo.EarningPrice += v.EarningPrice * int64(v.Count) - - universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID) - if orderMap[universalOrderID] == nil { - orderMap[universalOrderID] = &model.GoodsOrder{ - StoreID: v.StoreID, - VendorID: v.VendorID, - ActualPayPrice: v.ActualPayPrice, - } - saleInfo.ActualPayPrice += v.ActualPayPrice - saleInfo.Count++ - } - orderMap[universalOrderID].SkuCount += v.Count - - universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSku(&v.OrderSku)) - if orderSkuMap[universalOrderSkuID] == nil { - orderSkuMap[universalOrderSkuID] = v - } + orderSkuList4Afs, err := dao.GetStoreOrderSkuList4Afs(db, storeIDList, fromTime, toTime) + if err != nil { + return nil, err } + orderSkuHandler := func(skuList []*dao.OrderSkuWithActualPayPrice) (orderMap map[string]*model.GoodsOrder, orderSkuMap map[string]*dao.OrderSkuWithActualPayPrice, saleInfoMap map[int64]*dao.StoresOrderSaleInfo) { + orderMap = make(map[string]*model.GoodsOrder) + orderSkuMap = make(map[string]*dao.OrderSkuWithActualPayPrice) + saleInfoMap = make(map[int64]*dao.StoresOrderSaleInfo) + for _, v := range orderSkuList { + if v.EarningPrice == 0 { + v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, v.PayPercentage) + } + + status := v.Status + if status < model.OrderStatusEndBegin { + status = 0 + } + index := jxutils.Combine2Int(v.StoreID, v.VendorID)*1000 + int64(status) + saleInfo := saleInfoMap[index] + if saleInfo == nil { + saleInfo = &dao.StoresOrderSaleInfo{ + StoreID: v.StoreID, + VendorID: v.VendorID, + Status: status, + } + saleInfoMap[index] = saleInfo + } + saleInfo.ShopPrice += v.ShopPrice * int64(v.Count) + saleInfo.VendorPrice += v.VendorPrice * int64(v.Count) + saleInfo.SalePrice += v.SalePrice * int64(v.Count) + saleInfo.EarningPrice += v.EarningPrice * int64(v.Count) + + universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID) + if orderMap[universalOrderID] == nil { + orderMap[universalOrderID] = &model.GoodsOrder{ + StoreID: v.StoreID, + VendorID: v.VendorID, + ActualPayPrice: v.ActualPayPrice, + } + saleInfo.ActualPayPrice += v.ActualPayPrice + saleInfo.Count++ + } + orderMap[universalOrderID].SkuCount += v.Count + + universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSku(&v.OrderSku)) + if orderSkuMap[universalOrderSkuID] == nil { + orderSkuMap[universalOrderSkuID] = v + } + } + return orderMap, orderSkuMap, saleInfoMap + } + _, _, saleInfoMap := orderSkuHandler(orderSkuList) + orderMap, orderSkuMap, _ := orderSkuHandler(orderSkuList4Afs) afsOrderMap := make(map[string]*model.GoodsOrder) for _, v := range afsSkuList { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 45dc3c88a..3693aea78 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -248,6 +248,28 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt return skuList, err } +func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time) (skuList []*OrderSkuWithActualPayPrice, err error) { + sql := ` + SELECT t1.*, + t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, + t3.pay_percentage + FROM order_sku t1 + JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id + LEFT JOIN store t3 ON t3.id = IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) + JOIN ( + SELECT t12.* + FROM afs_order t12 + WHERE IF(t12.jx_store_id > 0, t12.jx_store_id, t12.store_id) IN (` + GenQuestionMarks(len(storeIDs)) + `) AND t12.afs_finished_at >= ? AND t12.afs_finished_at <= ? + ) t4 ON t4.vendor_order_id = t2.vendor_order_id AND t4.vendor_id = t2.vendor_id` + sqlParams := []interface{}{ + storeIDs, + finishedAtBegin, + finishedAtEnd, + } + err = GetRows(db, &skuList, sql, sqlParams...) + return skuList, err +} + func GetStoreAfsOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int) (afsSkuList []*model.OrderSkuFinancial, err error) { sql := ` SELECT t1.*