From 5a0b2dae29f54c8e578bd61e0e68cb5c9c78dafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Tue, 15 Aug 2023 13:34:00 +0800 Subject: [PATCH] 1 --- business/jxcallback/orderman/orderman_ext.go | 220 ++----------------- business/model/dao/store.go | 48 +++- controllers/jx_order.go | 7 +- 3 files changed, 64 insertions(+), 211 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 74a2f0293..5c6c73fed 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -867,217 +867,35 @@ func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDLis return c.GetStoresOrderSaleInfoNew(ctx, storeIDList, fromTime, toTime, statusList) } -func (c *OrderManager) GetStoresOrderSaleInfo2(ctx *jxcontext.Context, fromTime time.Time, toTime time.Time, statusList []int) (map[string]interface{}, error) { - storeStatus, err := dao.StatisticsStoreInfo() - if err != nil { - return nil, err +func (c *OrderManager) GetStoresOrderSaleInfo2(ctx *jxcontext.Context, fromTime time.Time, toTime time.Time, storeId int) (map[string]interface{}, error) { + year, month, day := time.Now().Date() + if fromTime.IsZero() { + fromTime = time.Date(year, month, day, 0, 0, 0, 0, time.Local) + } + if toTime.IsZero() { + toTime = time.Date(year, month, day, 23, 59, 59, 0, time.Local) } - orderStatus, err := c.GetOrderStatistics(ctx, nil, fromTime, toTime, statusList) - return map[string]interface{}{"storeStatus": storeStatus, "orderStatus": orderStatus}, nil -} - -func (c *OrderManager) GetOrderStatistics(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) { db := dao.GetDB() - var isLongTime = false - if toTime.Sub(fromTime).Hours() > 24 { - isLongTime = true - } - - orderIDMap := make(map[string]struct{}) - var vendorOrderIDs []string - orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, nil, true, 0) // 所有订单 + // 门店统计 + storeStatus, err := dao.StatisticsStoreInfo(db) if err != nil { return nil, err } - for _, v := range orderSkuList { - orderIDMap[v.VendorOrderID] = struct{}{} - } - for k, _ := range orderIDMap { - vendorOrderIDs = append(vendorOrderIDs, k) - } - var afsSkuList []*model.OrderSkuFinancial - var orderSkuList4Afs []*dao.OrderSkuWithActualPayPrice - if len(vendorOrderIDs) > 0 { - afsSkuList, err = dao.GetStoreAfsOrderSkuList2(db, vendorOrderIDs) - orderSkuList4Afs, err = dao.GetStoreOrderSkuList4Afs2(db, vendorOrderIDs) + + // 订单统计 + orderStatus, err := dao.StatisticsOrderInfo(db, fromTime, toTime, storeId) + 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) - var flagVendorOrderID string - if len(skuList) > 0 { - flagVendorOrderID = skuList[0].VendorOrderID - } - for k, v := range skuList { - storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID, "") - 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 - } - //成都菜市 - if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" { - if v.EarningType == model.EarningTypeQuote { - saleInfo.RealEarningPrice += v.EarningPrice * int64(v.Count) - } - } else { - if v.OrderPayPercentage == 100 { - saleInfo.RealEarningPrice += v.ShopPrice * int64(v.Count) - } - } - 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) - if v.VendorOrderID == flagVendorOrderID { - if k == 0 { - saleInfo.EarningPrice = v.NewEarningPrice - if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" { - if v.EarningType == model.EarningTypePoints { - if storeDetail.VendorPayPercentage != 0 && !isLongTime { - saleInfo.RealEarningPrice += 0 - } else { - saleInfo.RealEarningPrice += v.NewEarningPrice - } - } - } else { - if v.OrderPayPercentage < 100 { - saleInfo.RealEarningPrice += v.NewEarningPrice - } - } - } - } else { - flagVendorOrderID = v.VendorOrderID - saleInfo.EarningPrice += v.NewEarningPrice - if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" { - if v.EarningType == model.EarningTypePoints { - if storeDetail.VendorPayPercentage != 0 && !isLongTime { - saleInfo.RealEarningPrice += 0 - } else { - // && v.VendorID != model.VendorIDJD && v.CityCode != 510100 - saleInfo.RealEarningPrice += v.NewEarningPrice - } - } - } else { - if v.OrderPayPercentage < 100 { - saleInfo.RealEarningPrice += v.NewEarningPrice - } - } - } - - 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++ - - saleInfo.DistanceFreightMoney += v.DistanceFreightMoney - saleInfo.WaybillTipMoney += v.WaybillTipMoney - } - orderMap[universalOrderID].SkuCount += v.Count - - universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSku(&v.OrderSku)) - if orderSkuMap[universalOrderSkuID] == nil { - orderSkuMap[universalOrderSkuID] = v - } - } - return orderMap, orderSkuMap, saleInfoMap + // 售后单统计 + afsOrderStatus, err := dao.StatisticsAfsOrderInfo(db, fromTime, toTime, storeId) + if err != nil { + return nil, err } - _, _, saleInfoMap := orderSkuHandler(orderSkuList) // 所有订单的支付金额 - orderMap, orderSkuMap, _ := orderSkuHandler(orderSkuList4Afs) - afsOrderMap := make(map[string]*model.GoodsOrder) - for _, v := range afsSkuList { - universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID) - universalOrderSkuID := universalOrderID + "/" + utils.Int2Str(jxutils.GetSkuIDFromOrderSkuFinancial(v)) - order := afsOrderMap[universalOrderID] - if order == nil { - order = &model.GoodsOrder{ - StoreID: v.JxStoreID, - VendorID: v.VendorID, - } - if order.StoreID == 0 { - order.StoreID = v.StoreID - } - if orderSku := orderSkuMap[universalOrderSkuID]; orderSku != nil { - order.ActualPayPrice = orderSku.ActualPayPrice - } - afsOrderMap[universalOrderID] = order - } - order.SkuCount += v.Count - - if orderSku := orderSkuMap[universalOrderSkuID]; orderSku != nil { - order.ShopPrice += orderSku.ShopPrice * int64(v.Count) - order.VendorPrice += orderSku.VendorPrice * int64(v.Count) - order.SalePrice += orderSku.SalePrice * int64(v.Count) - order.EarningPrice += orderSku.EarningPrice * int64(v.Count) - } else { - // globals.SugarLogger.Debug(utils.Format4Output(v, true)) - } - } - for universalOrderID, v := range afsOrderMap { - if orderMap[universalOrderID] != nil && orderMap[universalOrderID].SkuCount == v.SkuCount { - v.EarningPrice = orderMap[universalOrderID].ActualPayPrice - } - status := -1 - 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.ActualPayPrice += v.ActualPayPrice - saleInfo.ShopPrice += v.ShopPrice - saleInfo.VendorPrice += v.VendorPrice - saleInfo.SalePrice += v.SalePrice - saleInfo.EarningPrice += v.EarningPrice - saleInfo.Count++ - } - for _, v := range saleInfoMap { - if v.Status == model.OrderStatusFinished { - // 计算平台计算 - settle, _ := dao.GetPlatformSettlement(db, storeIDList, fromTime, toTime) - for _, s := range settle { - if v.VendorID == s.VendorID { - v.PlatformSettlement = s.TotalShopMoney - } - } - - // 计算三方配送 - fee, _ := dao.GetPlatformDesiredFee(db, storeIDList, fromTime, toTime) - for _, f := range fee { - if v.VendorID == f.VendorID { - v.ActualFee = f.ActualFee - } - } - } - saleInfoList = append(saleInfoList, v) - } - return saleInfoList, err + return map[string]interface{}{"storeStatus": storeStatus, "orderStatus": orderStatus, "afsOrderStatus": afsOrderStatus}, nil } func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) { diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 78eae67bd..bfe07e46d 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -1693,17 +1693,55 @@ func GetStoreBaseByVendorStoreID(vendorStoreID string, vendorID int) (storeDetai } type StatisticsStore struct { - Count int64 `json:"count"` // 条数 - Status int `json:"status"` // 状态 + Count int `json:"count"` // 条数 + Status int `json:"status"` // 状态 } // StatisticsStoreInfo 统计所有的门店信息 -func StatisticsStoreInfo() ([]*StatisticsStore, error) { +func StatisticsStoreInfo(db *DaoDB) ([]*StatisticsStore, error) { statistics := make([]*StatisticsStore, 0, 0) - sql := ` select count(s.status) , s.status from store s GROUP BY s.status ` - if err := GetRows(GetDB(), &statistics, sql, nil); err != nil { + sql := ` SELECT count(s.status) count, s.status FROM store s GROUP BY s.status ` + if err := GetRows(db, &statistics, sql, nil); err != nil { return nil, err } return statistics, nil } + +type StatisticsOrder struct { + Count int `json:"count"` // 条数 + Status int `json:"status"` // 状态 + TotalShopMoney int `json:"total_shop_money"` // 订单金额 +} + +// StatisticsOrderInfo 统计订单信息 +func StatisticsOrderInfo(db *DaoDB, startTime, endTime time.Time, storeId int) ([]*StatisticsOrder, error) { + sql := ` SELECT count(g.vendor_order_id) count,g.status status ,sum(g.total_shop_money) total_shop_money FROM goods_order g WHERE g.order_created_at >= ? AND g.order_created_at <= ? ` + parma := []interface{}{startTime, endTime} + if storeId != model.NO { + sql += ` AND IF(g.store_id <> 0,g.store_id,g.jx_store_id) = ?` + parma = append(parma, storeId) + } + sql += ` GROUP BY g.status ` + orderStatistics := make([]*StatisticsOrder, 0, 0) + if err := GetRows(GetDB(), &orderStatistics, sql, parma...); err != nil { + return nil, err + } + return orderStatistics, nil +} + +// StatisticsAfsOrderInfo 售后单信息统计 +func StatisticsAfsOrderInfo(db *DaoDB, startTime, endTime time.Time, storeId int) ([]*StatisticsOrder, error) { + sql := `SELECT count(a.vendor_order_id) count,a.status status ,sum(a.afs_total_shop_money) total_shop_money FROM afs_order a WHERE a.afs_created_at >= ? AND a.afs_created_at <= ? ` + parma := []interface{}{startTime, endTime} + if storeId != model.NO { + sql += ` AND IF(a.store_id <> 0,a.store_id,a.jx_store_id) = 100743` + parma = append(parma, storeId) + } + sql += ` GROUP BY a.status` + orderStatistics := make([]*StatisticsOrder, 0, 0) + if err := GetRows(GetDB(), &orderStatistics, sql, parma...); err != nil { + return nil, err + } + return orderStatistics, nil +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index f6f7a4f2c..9ff3adfa3 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -484,7 +484,7 @@ func (c *OrderController) GetStoresOrderSaleInfo() { // @Param token header string true "认证token" // @Param fromTime query string true "起始时间" // @Param toTime query string true "结束时间" -// @Param statuss query string false "订单状态列表[1,2,3],缺省不限制" +// @Param storeIDs query int false "门店id" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /StaleIndexInfo [get] @@ -492,10 +492,7 @@ func (c *OrderController) StaleIndexInfo() { c.callStaleIndexInfo(func(params *tOrderStaleIndexInfoParams) (retVal interface{}, code string, err error) { timeList, err := jxutils.BatchStr2Time(params.FromTime, params.ToTime) if err == nil { - var statusList []int - if err = jxutils.Strings2Objs(params.Statuss, &statusList); err == nil { - retVal, err = orderman.FixedOrderManager.GetStoresOrderSaleInfo2(params.Ctx, timeList[0], timeList[1], statusList) - } + retVal, err = orderman.FixedOrderManager.GetStoresOrderSaleInfo2(params.Ctx, timeList[0], timeList[1], params.StoreIDs) } return retVal, "", err })