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").
|
||||
// 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{}).
|
||||
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.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,
|
||||
IFNULL(submission_count.submission_count, 0) 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(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,
|
||||
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,
|
||||
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),
|
||||
ROUND(COUNT(*) * 100.0 / NULLIF(submission_count.submission_count, 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).
|
||||
) 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).
|
||||
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")
|
||||
|
||||
|
@ -797,6 +839,68 @@ func (e MiGuDeployService) processTimeRange(startTime, endTime, minDate, maxDate
|
|||
// 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) {
|
||||
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,
|
||||
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,
|
||||
IFNULL(submission_count.submission_count, 0) 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,
|
||||
|
@ -821,12 +919,7 @@ func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req
|
|||
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),
|
||||
ROUND(COUNT(*) * 100.0 / NULLIF(submission_count.submission_count, 0), 2),
|
||||
100.00
|
||||
),
|
||||
'%'
|
||||
|
@ -834,22 +927,39 @@ func (e MiGuDeployService) queryHistoricalSummary(startTime, endTime string, req
|
|||
'0.00%'
|
||||
) 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).
|
||||
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)
|
||||
qs = qs.Where("mg_order.product_id = ?", req.SkuCode)
|
||||
}
|
||||
if req.Channel != "" {
|
||||
qs = qs.Where("channel_code = ?", req.Channel)
|
||||
qs = qs.Where("mg_order.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 {
|
||||
|
@ -2683,7 +2793,7 @@ func (e MiGuDeployService) queryHistoricalDataByHour(startTime, endTime string,
|
|||
|
||||
// 如果转换失败,按原样比较;否则按数字顺序排序
|
||||
if errI != nil && errJ != nil {
|
||||
return filteredData[i].Hour < filteredData[j].Hour
|
||||
return filteredData[i].Hour > filteredData[j].Hour
|
||||
}
|
||||
if errI != nil {
|
||||
// 如果 i 的 hour 无法转换为数字,则认为它大于 j
|
||||
|
@ -2693,7 +2803,7 @@ func (e MiGuDeployService) queryHistoricalDataByHour(startTime, endTime string,
|
|||
// 如果 j 的 hour 无法转换为数字,则认为它大于 i
|
||||
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("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("realtime_summary/list", apiMiGu.RealtimeSummaryList) // 当日实时汇总
|
||||
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/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_update", apiMiGu.ImportExcelToMgOrderHandlerUpdate) // 通过excel导入订单退订数据
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user