From 7df7ba6242dd681b7bc79846a9b5fee790dddb99 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 17:31:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=94=AE=E5=90=8E=E5=8D=95=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + business/jxstore/report/report.go | 12 +++++ business/model/dao/report.go | 80 ++++++++++++++++++++++++++++++- controllers/jx_report.go | 4 ++ 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 093f63d3f..14f76dcee 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ param_parser.go *.o *.exe *.exe~ +.vscode diff --git a/business/jxstore/report/report.go b/business/jxstore/report/report.go index 94a5bd5ff..0538ea1ab 100644 --- a/business/jxstore/report/report.go +++ b/business/jxstore/report/report.go @@ -21,3 +21,15 @@ func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDa statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, fromDateParm, toDateParm) return statisticsReportForOrdersList, err } + +func GetStatisticsReportForAfsOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) { + 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.GetGetStatisticsReportForAfsOrders(db, storeIDs, fromDateParm, toDateParm) + return statisticsReportForOrdersList, err +} diff --git a/business/model/dao/report.go b/business/model/dao/report.go index 2fe33a08f..1fdf80e60 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -85,12 +85,88 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, ` sqlParams := []interface{}{} if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) { - sql += `AND a.order_created_at BETWEEN ? and ? + sql += `AND a.order_created_at BETWEEN ? AND ? ` sqlParams = append(sqlParams, fromDate, toDate) } if len(storeIDs) > 0 { - sql += `AND a.store_id in(` + GenQuestionMarks(len(storeIDs)) + `) + sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `) + ` + sqlParams = append(sqlParams, storeIDs) + } + sql += ` + GROUP BY a.store_id + )s + ON s.storeID = c.id + ` + if len(storeIDs) > 0 { + sql += `WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `) + ` + sqlParams = append(sqlParams, storeIDs) + } + if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil { + return statisticsReportForOrdersList, nil + } + return nil, err +} + +//查询统计售后单信息 +func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) { + //排除已取消的订单 + status := strconv.Itoa(model.OrderStatusCanceled) + sql := ` + SELECT + c.id store_id, + c.name store_name, + s.orderCounts order_counts, + s.salePrice sale_price, + s.actualPayPrice actual_pay_price, + s.shopPrice shop_price, + s.discountMoney discount_money, + s.desiredFee desired_fee, + s.distanceFreightMoney distance_freight_money, + s.waybillTipMoney waybill_tip_money, + s.totalShopMoney total_shop_money, + s.pmSubsidyMoney pm_subsidy_money, + s.EarningPrice earning_price, + s.totalGrossProfit total_gross_profit, + IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) com_grossProfit, + IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) city_manager_gross_profit, + IF(mm.name <> '', mm.name, mm.user_id2) market_man_name, + IF(om.name <> '', om.name, om.user_id2) operator_name, + IF(om2.name <> '', om2.name, om2.user_id2) operator_name2 + FROM store c + LEFT JOIN user mm ON mm.mobile <> '' AND mm.mobile = c.market_man_phone + LEFT JOIN user om ON om.mobile <> '' AND om.mobile = c.operator_phone + LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = c.operator_phone2 + LEFT JOIN + ( + SELECT + a.store_id storeID, + COUNT(*) orderCounts, + SUM(sale_price) salePrice, + SUM(actual_pay_price) actualPayPrice, + SUM(shop_price) shopPrice, + SUM(discount_money) discountMoney, + SUM(afs_freight_money) desiredFee, + SUM(distance_freight_money) distanceFreightMoney, + SUM(waybill_tip_money) waybillTipMoney, + SUM(total_shop_money) totalShopMoney, + SUM(b.pm_subsidy_money) pmSubsidyMoney, + SUM(earning_price) EarningPrice, + SUM(total_shop_money-earning_price-afs_freight_money-distance_freight_money-waybill_tip_money-80) totalGrossProfit + FROM goods_order a,afs_order b + WHERE a.vendor_order_id = b.vendor_order_id + AND a.status != ` + status + ` + ` + sqlParams := []interface{}{} + if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) { + sql += `AND a.order_created_at BETWEEN ? AND ? + ` + sqlParams = append(sqlParams, fromDate, toDate) + } + if len(storeIDs) > 0 { + sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `) ` sqlParams = append(sqlParams, storeIDs) } diff --git a/controllers/jx_report.go b/controllers/jx_report.go index db0886210..f839a14cc 100644 --- a/controllers/jx_report.go +++ b/controllers/jx_report.go @@ -41,6 +41,10 @@ func (c *ReportController) StatisticsReportForOrders() { // @router /StatisticsReportForAfsOrders [post] func (c *ReportController) StatisticsReportForAfsOrders() { c.callStatisticsReportForAfsOrders(func(params *tReportStatisticsReportForAfsOrdersParams) (retVal interface{}, errCode string, err error) { + var storeIDList []int + if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil { + retVal, err = report.GetStatisticsReportForAfsOrders(params.Ctx, storeIDList, params.FromDate, params.ToDate) + } return retVal, "", err }) }