1、历史汇总查询优化,改用老接口,优化了sql;
This commit is contained in:
parent
1b2dbab38d
commit
cb6b269185
|
@ -428,39 +428,81 @@ func (e MiGuDeployService) HistoricalSummaryListOld(c *gin.Context) {
|
||||||
// Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
// Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||||
// Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time")
|
// Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time")
|
||||||
|
|
||||||
|
//qs := e.Orm.Model(&models.MgOrder{}).
|
||||||
|
// Select(`DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
||||||
|
// mg_order.product_id,
|
||||||
|
// mg_order.channel_code,
|
||||||
|
// (SELECT COUNT(*)
|
||||||
|
// FROM mg_transaction_log
|
||||||
|
// WHERE verification_code != ''
|
||||||
|
// AND channel_code = mg_order.channel_code
|
||||||
|
// AND DATE(created_at) = DATE(mg_order.subscribe_time)) AS submission_count,
|
||||||
|
// COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||||
|
// COUNT(CASE WHEN mg_order.state = 2 AND mg_order.unsubscribe_time >= ? AND mg_order.unsubscribe_time <= ? THEN 1 END) AS new_user_unsub_on_day,
|
||||||
|
// COUNT(*) AS new_user_count,
|
||||||
|
// CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 /
|
||||||
|
// NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
||||||
|
// CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 AND mg_order.unsubscribe_time >= ? AND mg_order.unsubscribe_time <= ? THEN 1 END) * 100.0 /
|
||||||
|
// NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_on_day_rate,
|
||||||
|
// IFNULL(
|
||||||
|
// CONCAT(
|
||||||
|
// LEAST(
|
||||||
|
// ROUND(COUNT(*) * 100.0 / NULLIF(
|
||||||
|
// (SELECT COUNT(*)
|
||||||
|
// FROM mg_transaction_log
|
||||||
|
// WHERE verification_code != ''
|
||||||
|
// AND channel_code = mg_order.channel_code
|
||||||
|
// AND DATE(created_at) = DATE(mg_order.subscribe_time)), 0), 2),
|
||||||
|
// 100.00
|
||||||
|
// ),
|
||||||
|
// '%'
|
||||||
|
// ),
|
||||||
|
// '0.00%'
|
||||||
|
// ) AS submission_success_rate`,
|
||||||
|
// startTime, endTime, startTime, endTime).
|
||||||
|
// Where("mg_order.subscribe_time >= ? AND mg_order.subscribe_time <= ?", startTime, endTime).
|
||||||
|
// Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||||
|
// Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
||||||
|
|
||||||
qs := e.Orm.Model(&models.MgOrder{}).
|
qs := e.Orm.Model(&models.MgOrder{}).
|
||||||
Select(`DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
Select(`
|
||||||
|
DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
||||||
mg_order.product_id,
|
mg_order.product_id,
|
||||||
mg_order.channel_code,
|
mg_order.channel_code,
|
||||||
(SELECT COUNT(*)
|
IFNULL(submission_count.submission_count, 0) AS submission_count,
|
||||||
FROM mg_transaction_log
|
|
||||||
WHERE verification_code != ''
|
|
||||||
AND channel_code = mg_order.channel_code
|
|
||||||
AND DATE(created_at) = DATE(mg_order.subscribe_time)) AS submission_count,
|
|
||||||
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||||
COUNT(CASE WHEN mg_order.state = 2 AND mg_order.unsubscribe_time >= ? AND mg_order.unsubscribe_time <= ? THEN 1 END) AS new_user_unsub_on_day,
|
COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) AS new_user_unsub_on_day,
|
||||||
COUNT(*) AS new_user_count,
|
COUNT(*) AS new_user_count,
|
||||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 /
|
SUM(CASE WHEN mg_order.state = 2 THEN 1 ELSE 0 END) AS total_new_user_unsub,
|
||||||
NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
||||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 AND mg_order.unsubscribe_time >= ? AND mg_order.unsubscribe_time <= ? THEN 1 END) * 100.0 /
|
CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_on_day_rate,
|
||||||
NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_on_day_rate,
|
CONCAT(ROUND(SUM(CASE WHEN mg_order.state = 2 THEN 1 ELSE 0 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS total_new_user_unsub_rate,
|
||||||
IFNULL(
|
IFNULL(
|
||||||
CONCAT(
|
CONCAT(
|
||||||
LEAST(
|
LEAST(
|
||||||
ROUND(COUNT(*) * 100.0 / NULLIF(
|
ROUND(COUNT(*) * 100.0 / NULLIF(submission_count.submission_count, 0), 2),
|
||||||
(SELECT COUNT(*)
|
|
||||||
FROM mg_transaction_log
|
|
||||||
WHERE verification_code != ''
|
|
||||||
AND channel_code = mg_order.channel_code
|
|
||||||
AND DATE(created_at) = DATE(mg_order.subscribe_time)), 0), 2),
|
|
||||||
100.00
|
100.00
|
||||||
),
|
),
|
||||||
'%'
|
'%'
|
||||||
),
|
),
|
||||||
'0.00%'
|
'0.00%'
|
||||||
) AS submission_success_rate`,
|
) AS submission_success_rate
|
||||||
startTime, endTime, startTime, endTime).
|
`).
|
||||||
Where("mg_order.subscribe_time >= ? AND mg_order.subscribe_time <= ?", startTime, endTime).
|
// 使用 Joins 来替代 LeftJoin 进行左连接
|
||||||
|
Joins(`
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
channel_code,
|
||||||
|
DATE(created_at) AS created_date,
|
||||||
|
COUNT(*) AS submission_count
|
||||||
|
FROM mg_transaction_log
|
||||||
|
WHERE verification_code != ''
|
||||||
|
GROUP BY channel_code, created_date
|
||||||
|
) AS submission_count
|
||||||
|
ON submission_count.channel_code = mg_order.channel_code
|
||||||
|
AND submission_count.created_date = DATE(mg_order.subscribe_time)
|
||||||
|
`).
|
||||||
|
Where("mg_order.subscribe_time BETWEEN ? AND ?", startTime, endTime).
|
||||||
Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||||
Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
||||||
|
|
||||||
|
@ -797,6 +839,68 @@ func (e MiGuDeployService) processTimeRange(startTime, endTime, minDate, maxDate
|
||||||
// return data, nil
|
// return data, nil
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
//// 查询历史数据
|
||||||
|
//func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req *models.HistoricalSummaryListReq) ([]models.MgHistoricalSummary, error) {
|
||||||
|
// qs := e.Orm.Model(&models.MgOrder{}).
|
||||||
|
// Select(`
|
||||||
|
// DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
||||||
|
// mg_order.product_id,
|
||||||
|
// mg_order.channel_code,
|
||||||
|
// (
|
||||||
|
// SELECT COUNT(*)
|
||||||
|
// FROM mg_transaction_log
|
||||||
|
// WHERE verification_code != ''
|
||||||
|
// AND channel_code = mg_order.channel_code
|
||||||
|
// AND DATE(created_at) = DATE(mg_order.subscribe_time)
|
||||||
|
// ) AS submission_count,
|
||||||
|
// COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||||
|
// COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) AS new_user_unsub_on_day,
|
||||||
|
// COUNT(*) AS new_user_count,
|
||||||
|
// SUM(CASE WHEN mg_order.state = 2 THEN 1 ELSE 0 END) AS total_new_user_unsub,
|
||||||
|
// CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
||||||
|
// CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_on_day_rate,
|
||||||
|
// CONCAT(ROUND(SUM(CASE WHEN mg_order.state = 2 THEN 1 ELSE 0 END) * 100.0 / NULLIF(COUNT(*), 0), 2), '%') AS total_new_user_unsub_rate,
|
||||||
|
// IFNULL(
|
||||||
|
// CONCAT(
|
||||||
|
// LEAST(
|
||||||
|
// ROUND(COUNT(*) * 100.0 / NULLIF(
|
||||||
|
// (SELECT COUNT(*)
|
||||||
|
// FROM mg_transaction_log
|
||||||
|
// WHERE verification_code != ''
|
||||||
|
// AND channel_code = mg_order.channel_code
|
||||||
|
// AND DATE(created_at) = DATE(mg_order.subscribe_time)), 0), 2),
|
||||||
|
// 100.00
|
||||||
|
// ),
|
||||||
|
// '%'
|
||||||
|
// ),
|
||||||
|
// '0.00%'
|
||||||
|
// ) AS submission_success_rate
|
||||||
|
// `).
|
||||||
|
// Where("mg_order.subscribe_time BETWEEN ? AND ?", startTime, endTime).
|
||||||
|
// Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||||
|
// Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
||||||
|
//
|
||||||
|
// if req.SkuCode != 0 {
|
||||||
|
// qs = qs.Where("product_id = ?", req.SkuCode)
|
||||||
|
// }
|
||||||
|
// if req.Channel != "" {
|
||||||
|
// qs = qs.Where("channel_code = ?", req.Channel)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var data []models.MgHistoricalSummary
|
||||||
|
// var err error
|
||||||
|
// if req.IsExport == 1 {
|
||||||
|
// err = qs.Find(&data).Error
|
||||||
|
// } else {
|
||||||
|
// err = qs.Limit(req.PageSize).Find(&data).Error
|
||||||
|
// }
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return data, nil
|
||||||
|
//}
|
||||||
|
|
||||||
// 查询历史数据
|
// 查询历史数据
|
||||||
func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req *models.HistoricalSummaryListReq) ([]models.MgHistoricalSummary, error) {
|
func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req *models.HistoricalSummaryListReq) ([]models.MgHistoricalSummary, error) {
|
||||||
qs := e.Orm.Model(&models.MgOrder{}).
|
qs := e.Orm.Model(&models.MgOrder{}).
|
||||||
|
@ -804,13 +908,7 @@ func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req
|
||||||
DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
DATE_FORMAT(mg_order.subscribe_time, '%Y-%m-%d') AS date,
|
||||||
mg_order.product_id,
|
mg_order.product_id,
|
||||||
mg_order.channel_code,
|
mg_order.channel_code,
|
||||||
(
|
IFNULL(submission_count.submission_count, 0) AS submission_count,
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM mg_transaction_log
|
|
||||||
WHERE verification_code != ''
|
|
||||||
AND channel_code = mg_order.channel_code
|
|
||||||
AND DATE(created_at) = DATE(mg_order.subscribe_time)
|
|
||||||
) AS submission_count,
|
|
||||||
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||||
COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) AS new_user_unsub_on_day,
|
COUNT(CASE WHEN mg_order.state = 2 AND DATE(mg_order.unsubscribe_time) = DATE(mg_order.subscribe_time) THEN 1 END) AS new_user_unsub_on_day,
|
||||||
COUNT(*) AS new_user_count,
|
COUNT(*) AS new_user_count,
|
||||||
|
@ -821,12 +919,7 @@ func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req
|
||||||
IFNULL(
|
IFNULL(
|
||||||
CONCAT(
|
CONCAT(
|
||||||
LEAST(
|
LEAST(
|
||||||
ROUND(COUNT(*) * 100.0 / NULLIF(
|
ROUND(COUNT(*) * 100.0 / NULLIF(submission_count.submission_count, 0), 2),
|
||||||
(SELECT COUNT(*)
|
|
||||||
FROM mg_transaction_log
|
|
||||||
WHERE verification_code != ''
|
|
||||||
AND channel_code = mg_order.channel_code
|
|
||||||
AND DATE(created_at) = DATE(mg_order.subscribe_time)), 0), 2),
|
|
||||||
100.00
|
100.00
|
||||||
),
|
),
|
||||||
'%'
|
'%'
|
||||||
|
@ -834,22 +927,39 @@ func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req
|
||||||
'0.00%'
|
'0.00%'
|
||||||
) AS submission_success_rate
|
) AS submission_success_rate
|
||||||
`).
|
`).
|
||||||
|
// 使用 Joins 来替代 LeftJoin 进行左连接
|
||||||
|
Joins(`
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
channel_code,
|
||||||
|
DATE(created_at) AS created_date,
|
||||||
|
COUNT(*) AS submission_count
|
||||||
|
FROM mg_transaction_log
|
||||||
|
WHERE verification_code != ''
|
||||||
|
GROUP BY channel_code, created_date
|
||||||
|
) AS submission_count
|
||||||
|
ON submission_count.channel_code = mg_order.channel_code
|
||||||
|
AND submission_count.created_date = DATE(mg_order.subscribe_time)
|
||||||
|
`).
|
||||||
Where("mg_order.subscribe_time BETWEEN ? AND ?", startTime, endTime).
|
Where("mg_order.subscribe_time BETWEEN ? AND ?", startTime, endTime).
|
||||||
Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||||
Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time DESC")
|
||||||
|
|
||||||
|
// 根据请求条件过滤
|
||||||
if req.SkuCode != 0 {
|
if req.SkuCode != 0 {
|
||||||
qs = qs.Where("product_id = ?", req.SkuCode)
|
qs = qs.Where("mg_order.product_id = ?", req.SkuCode)
|
||||||
}
|
}
|
||||||
if req.Channel != "" {
|
if req.Channel != "" {
|
||||||
qs = qs.Where("channel_code = ?", req.Channel)
|
qs = qs.Where("mg_order.channel_code = ?", req.Channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
var data []models.MgHistoricalSummary
|
var data []models.MgHistoricalSummary
|
||||||
var err error
|
var err error
|
||||||
if req.IsExport == 1 {
|
if req.IsExport == 1 {
|
||||||
|
// 导出数据不限制分页
|
||||||
err = qs.Find(&data).Error
|
err = qs.Find(&data).Error
|
||||||
} else {
|
} else {
|
||||||
|
// 非导出时进行分页查询
|
||||||
err = qs.Limit(req.PageSize).Find(&data).Error
|
err = qs.Limit(req.PageSize).Find(&data).Error
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2683,7 +2793,7 @@ func (e MiGuDeployService) queryHistoricalDataByHour(startTime, endTime string,
|
||||||
|
|
||||||
// 如果转换失败,按原样比较;否则按数字顺序排序
|
// 如果转换失败,按原样比较;否则按数字顺序排序
|
||||||
if errI != nil && errJ != nil {
|
if errI != nil && errJ != nil {
|
||||||
return filteredData[i].Hour < filteredData[j].Hour
|
return filteredData[i].Hour > filteredData[j].Hour
|
||||||
}
|
}
|
||||||
if errI != nil {
|
if errI != nil {
|
||||||
// 如果 i 的 hour 无法转换为数字,则认为它大于 j
|
// 如果 i 的 hour 无法转换为数字,则认为它大于 j
|
||||||
|
@ -2693,7 +2803,7 @@ func (e MiGuDeployService) queryHistoricalDataByHour(startTime, endTime string,
|
||||||
// 如果 j 的 hour 无法转换为数字,则认为它大于 i
|
// 如果 j 的 hour 无法转换为数字,则认为它大于 i
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return hourI < hourJ
|
return hourI > hourJ
|
||||||
})
|
})
|
||||||
|
|
||||||
// 如果是导出数据,直接返回所有数据
|
// 如果是导出数据,直接返回所有数据
|
||||||
|
|
|
@ -23,7 +23,7 @@ func registerMiGuControlManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi
|
||||||
|
|
||||||
api.POST("transaction/list", apiMiGu.TransactionList) // 查询交易流水记录
|
api.POST("transaction/list", apiMiGu.TransactionList) // 查询交易流水记录
|
||||||
api.POST("order/list", apiMiGu.OrderList) // 查询订单列表
|
api.POST("order/list", apiMiGu.OrderList) // 查询订单列表
|
||||||
api.POST("historical_summary/list", apiMiGu.HistoricalSummaryListNew) // 历史汇总查询
|
//api.POST("historical_summary/list", apiMiGu.HistoricalSummaryListNew) // 历史汇总查询
|
||||||
api.POST("hour_summary/list", apiMiGu.HourSummaryList) // 历史汇总查询(按小时)
|
api.POST("hour_summary/list", apiMiGu.HourSummaryList) // 历史汇总查询(按小时)
|
||||||
api.POST("realtime_summary/list", apiMiGu.RealtimeSummaryList) // 当日实时汇总
|
api.POST("realtime_summary/list", apiMiGu.RealtimeSummaryList) // 当日实时汇总
|
||||||
api.POST("user_retention/list", apiMiGu.UserRetentionList) // 用户留存记录
|
api.POST("user_retention/list", apiMiGu.UserRetentionList) // 用户留存记录
|
||||||
|
@ -32,7 +32,7 @@ func registerMiGuControlManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi
|
||||||
api.POST("home/data", apiMiGu.HomepageDataSummary) // 查询首页汇总数据
|
api.POST("home/data", apiMiGu.HomepageDataSummary) // 查询首页汇总数据
|
||||||
api.POST("home/revenue_analysis", apiMiGu.CalculateRevenueAnalysis) // 查询不同日期的留存月份
|
api.POST("home/revenue_analysis", apiMiGu.CalculateRevenueAnalysis) // 查询不同日期的留存月份
|
||||||
|
|
||||||
//api.POST("historical_summary/list_old", apiMiGu.HistoricalSummaryListOld) // 历史汇总查询
|
api.POST("historical_summary/list", apiMiGu.HistoricalSummaryListOld) // 历史汇总查询
|
||||||
//api.POST("order/import", apiMiGu.ImportExcelToMgOrderHandler) // 通过excel导入订单数据
|
//api.POST("order/import", apiMiGu.ImportExcelToMgOrderHandler) // 通过excel导入订单数据
|
||||||
//api.POST("order/import_update", apiMiGu.ImportExcelToMgOrderHandlerUpdate) // 通过excel导入订单退订数据
|
//api.POST("order/import_update", apiMiGu.ImportExcelToMgOrderHandlerUpdate) // 通过excel导入订单退订数据
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user