diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index ae6c67bf3..4130c76da 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -185,11 +185,13 @@ type GetPayStatisticsResult struct { SubmitCash int `json:"submitCash"` //申请提现 Cashed int `json:"cashed"` //已经体现 CashIncome int `json:"cashIncome"` //提现收益 + TotalIncome int `json:"totalIncome"` //收益总额 + MemberIncome int `json:"memberIncome"` //会员收益 } func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (getPayStatisticsResult *GetPayStatisticsResult, err error) { sqlParams := []interface{}{} - getWhereSql := func(fromTime, toTime time.Time, orderTypes []int) (sql string) { + getWhereSql := func() (sql string) { if len(orderTypes) > 0 { sql += ` AND order_type IN ` + GenQuestionMarks(len(orderTypes)) + `)` sqlParams = append(sqlParams, orderTypes) @@ -207,10 +209,10 @@ func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile sql := ` SELECT t1.total_pay, t2.submit_cash + t3.account_balance can_cash, t3.account_balance, t4.cashed, t4.cashed / 10 cash_income FROM user a - LEFT JOIN (SELECT SUM(pay_price) total_pay, user_id FROM order WHERE type = ? AND status = ? ` + getWhereSql(fromTime, toTime, orderTypes) + ` GROUP BY 2) t1 ON t1.user_id = a.user_id - LEFT JOIN (SELECT SUM(pay_price) submit_cash, user_id FROM order WHERE type = ? AND status = ?` + getWhereSql(fromTime, toTime, orderTypes) + ` GROUP BY 2) t2 ON t2.user_id = a.user_id + LEFT JOIN (SELECT SUM(pay_price) total_pay, user_id FROM order WHERE type = ? AND status = ? ` + getWhereSql() + ` GROUP BY 2) t1 ON t1.user_id = a.user_id + LEFT JOIN (SELECT SUM(pay_price) submit_cash, user_id FROM order WHERE type = ? AND status = ?` + getWhereSql() + ` GROUP BY 2) t2 ON t2.user_id = a.user_id LEFT JOIN user_bill t3 ON t3.user_id = a.user_id - LEFT JOIN (SELECT SUM(pay_price) cashed, user_id FROM order WHERE type = ? AND status = ?` + getWhereSql(fromTime, toTime, orderTypes) + ` GROUP BY 2) t4 ON t4.user_id = a.user_id + LEFT JOIN (SELECT SUM(pay_price) cashed, user_id FROM order WHERE type = ? AND status = ?` + getWhereSql() + ` GROUP BY 2) t4 ON t4.user_id = a.user_id ` sqlParams = append(sqlParams, model.OrderTypePay, model.OrderStatusFinished) sqlParams = append(sqlParams, model.OrderTypeCash, model.OrderStatusWait4Pay) @@ -244,49 +246,69 @@ func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile sqlParams = append(sqlParams, cityCodes) } err = GetRow(db, &getPayStatisticsResult, sql, sqlParams) - return getPayStatisticsResult, err -} -type GetIncomeStatisticsResult struct { - TotalIncome int `json:"totalIncome"` //收益总额 - MemberIncome int `json:"memberIncome"` //会员收益 -} - -func GetIncomeStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time) (getIncomeStatisticsResult *GetIncomeStatisticsResult, err error) { - sqlParams := []interface{}{} - sql := ` - SELECT - FROM user a - JOIN - ` + sqlParams2 := []interface{}{} + getWhereSql2 := func() (sql string) { + sql += ` AND order_type = ?` + sqlParams = append(sqlParams, model.OrderTpyeMember) + if fromTime != utils.ZeroTimeValue { + sql += ` AND created_at > ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql += ` AND created_at < ?` + sqlParams = append(sqlParams, toTime) + } + return sql + } + sql2 := ` + SELECT t2.member_income1 + t3.member_income2 member_income + FROM (SELECT DISTINCT a.user_id FROM user a` if mobile != "" { if pop == 1 { - sql += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id" + sql2 += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id" sqlParams = append(sqlParams, mobile) - } - } - sql += ` - WHERE 1 = 1 - ` - if userID != "" { - if pop == 1 { - sql += " AND a.pop_user = ?" - sqlParams = append(sqlParams, userID) } else { - sql += " AND a.user_id = ?" - sqlParams = append(sqlParams, userID) - } - } - if mobile != "" { - if pop == 0 { - sql += " AND a.mobile = ?" + sql2 += " AND a.mobile = ?" sqlParams = append(sqlParams, mobile) } } if len(cityCodes) > 0 { - sql += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)` + sql2 += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)` sqlParams = append(sqlParams, cityCodes) } - err = GetRow(db, &getIncomeStatisticsResult, sql, sqlParams) + if userID != "" { + if pop == 1 { + sql2 += " AND a.pop_user = ?" + sqlParams = append(sqlParams, userID) + } else { + sql2 += " AND a.user_id = ?" + sqlParams = append(sqlParams, userID) + } + } + sql2 += `) t1 + LEFT JOIN (SELECT SUM(pay_price) member_income1, user_id FROM order WHERE type = ? AND status = ? ` + getWhereSql2() + ` AND user_id = t1.user_id GROUP BY 2) t2 + LEFT JOIN (SELECT SUM(b.expend_price) member_income2 + FROM user_bill b + LEFT JOIN bill_expend c ON c.bill_id = b.bill_id AND c.type = ? + ` + sqlParams = append(sqlParams, model.OrderTypePay, model.OrderStatusFinished, model.BillTypeMember) + if fromTime != utils.ZeroTimeValue { + sql2 += ` AND c.created_at > ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql2 += ` AND c.created_at < ?` + sqlParams = append(sqlParams, toTime) + } + sql2 += ` + WHERE b.user_id = t1.user_id) t3 + ` + err = GetRow(db, &getPayStatisticsResult, sql2, sqlParams2) + return getPayStatisticsResult, err +} + +func GetIncomeStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time) (getIncomeStatisticsResult *GetIncomeStatisticsResult, err error) { + return getIncomeStatisticsResult, err }