From d066a13b65bc2534a874620d8cb91eb994219ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 31 Oct 2019 13:33:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E8=AE=A2=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/report/report.go | 51 ++++++++++++++++++++++++++++++- business/model/dao/report.go | 42 +++++++++++++++++++++++-- 2 files changed, 90 insertions(+), 3 deletions(-) diff --git a/business/jxstore/report/report.go b/business/jxstore/report/report.go index 324bd7320..1258a6f21 100644 --- a/business/jxstore/report/report.go +++ b/business/jxstore/report/report.go @@ -10,13 +10,62 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" ) +var ( + storeIDsExist []int + storeIDsNotExist []int + StatisticsForOrdersExists *dao.StatisticsForOrdersExists + StatisticsForOrdersExistsStore *dao.StatisticsForOrdersExists +) + func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) { + storeIDsExist = storeIDsExist[0:0] + storeIDsNotExist = storeIDsNotExist[0:0] db := dao.GetDB() fromDateParm := utils.Str2Time(fromDate) toDateParm := utils.Str2Time(toDate) + //若时间间隔大于3个月则不允许查询 if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 { return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate)) } - statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, fromDateParm, toDateParm) + //若入参中,不存在的店则不显示,存在的店但无订单的显示0 + for _, id := range storeIDs { + StatisticsForOrdersExistsStore, err = dao.IsStoreExist(db, id) + if StatisticsForOrdersExistsStore == nil { + continue + } + StatisticsForOrdersExists, err = dao.GetStatisticsForOrdersExist(db, id) + //若该门店存在此查询条件范围内的订单 + if StatisticsForOrdersExists != nil { + storeIDsExist = append(storeIDsExist, id) + } else { + storeIDsNotExist = append(storeIDsNotExist, id) + } + } + statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDsExist, fromDateParm, toDateParm) + if storeIDsNotExist != nil { + for _, v := range storeIDsNotExist { + tempStruct1 := &dao.StatisticsForOrdersExists{ + StoreID: v, + } + tempStruct2 := &dao.StatisticsReportForOrdersList{ + StatisticsForOrdersExists: *tempStruct1, + OrderCounts: 0, + SalePrice: 0, + ActualPayPrice: 0, + ShopPrice: 0, + DiscountMoney: 0, + DesiredFee: 0, + DistanceFreightMoney: 0, + WaybillTipMoney: 0, + TotalShopMoney: 0, + PmSubsidyMoney: 0, + EarningPrice: 0, + TotalGrossProfit: 0, + ComGrossProfit: 0, + CityManagerGrossProfit: 0, + } + statisticsReportForOrdersList = append(statisticsReportForOrdersList, tempStruct2) + } + } return statisticsReportForOrdersList, err } diff --git a/business/model/dao/report.go b/business/model/dao/report.go index 22386fcdf..17617df38 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -8,9 +8,13 @@ import ( "git.rosy.net.cn/jx-callback/business/model" ) +type StatisticsForOrdersExists struct { + StoreID int `orm:"column(storeID)" json:"storeID"` +} + type StatisticsReportForOrdersList struct { - StoreID int `orm:"column(storeID)" json:"storeID"` - OrderCounts int `orm:"column(orderCounts)" json:"orderCounts"` //定单数 + StatisticsForOrdersExists + OrderCounts int `orm:"column(orderCounts)" json:"orderCounts"` //订单数 SalePrice int `orm:"column(salePrice)" json:"salePrice"` //GMV(售卖价) ActualPayPrice int `orm:"column(actualPayPrice)" json:"actualPayPrice"` //实付 ShopPrice int `orm:"column(shopPrice)" json:"shopPrice"` //京西 @@ -26,6 +30,40 @@ type StatisticsReportForOrdersList struct { CityManagerGrossProfit float32 `orm:"column(cityManagerGrossProfit)" json:"cityManagerGrossProfit"` } +//是否存在这个门店 +func IsStoreExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) { + sql := ` + SELECT * + FROM store + WHERE id = ? + ` + sqlParams := []interface{}{} + sqlParams = append(sqlParams, storeID) + + if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil { + return StatisticsForOrdersExists, nil + } + return nil, err +} + +//查询条件内是否存在订单 +func GetStatisticsForOrdersExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) { + sql := ` + SELECT store_id + FROM goods_order a LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id + WHERE a.store_id = ? + GROUP BY a.store_id + ` + sqlParams := []interface{}{} + sqlParams = append(sqlParams, storeID) + + if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil { + return StatisticsForOrdersExists, nil + } + return nil, err +} + +//查询统计订单信息 func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) { //排除已取消的订单 status := strconv.Itoa(model.OrderStatusCanceled)