fix: send channels static

This commit is contained in:
Your Name
2026-01-08 08:46:39 +08:00
parent b92622590a
commit 1d13bc69ab
+13 -84
View File
@@ -350,102 +350,31 @@ func GetTrendStatisticData() (TrendStatisticData, error) {
func GetChannelStatisticData() (ChannelStatisticData, error) {
var statistic ChannelStatisticData
var wayCateData []WayCateData
statsTable := GetSchema(SendStats{})
insTable := GetSchema(SendTasksIns{})
waysTable := GetSchema(SendWays{})
// 第一步:从 send_stats 表统计每个任务的执行次数(按任务类型分组)
var taskStats []struct {
TaskID string
TaskType string
Num int64
// 统计所有任务和模板中关联的实例的渠道数据
var wayStats []struct {
WayName string
CountNum int
}
err := db.
Table(statsTable).
Select("task_id, task_type, SUM(num) AS num").
Where("task_id != '' AND task_id IS NOT NULL"). // 排除全局统计和空值
Group("task_id, task_type").
Scan(&taskStats).Error
Table(insTable).
Select(fmt.Sprintf("%s.name as way_name, COUNT(*) as count_num", waysTable)).
Joins(fmt.Sprintf("JOIN %s ON %s.way_id = %s.id", waysTable, insTable, waysTable)).
Group(fmt.Sprintf("%s.name", waysTable)).
Scan(&wayStats).Error
if err != nil {
return statistic, err
}
// 如果没有任务统计数据,返回空数组而不是 nil
if len(taskStats) == 0 {
statistic.WayCateData = []WayCateData{}
return statistic, nil
}
// 第二步:分别收集任务ID和模板ID
taskIDs := make([]string, 0)
templateIDs := make([]string, 0)
taskNumMap := make(map[string]int64) // key: task_id 或 template_id
for _, stat := range taskStats {
if stat.TaskType == "template" {
templateIDs = append(templateIDs, stat.TaskID)
} else {
taskIDs = append(taskIDs, stat.TaskID)
}
taskNumMap[stat.TaskID] = stat.Num
}
// 第三步:查询渠道信息(分别查询任务和模板)
wayCountMap := make(map[string]int64)
// 查询任务关联的渠道
if len(taskIDs) > 0 {
var taskWays []struct {
TaskID string
WayName string
}
err = db.
Table(insTable).
Select(fmt.Sprintf("%s.task_id, %s.name as way_name", insTable, waysTable)).
Joins(fmt.Sprintf("JOIN %s ON %s.way_id = %s.id", waysTable, insTable, waysTable)).
Where(fmt.Sprintf("%s.task_id IN ?", insTable), taskIDs).
Scan(&taskWays).Error
if err == nil {
for _, tw := range taskWays {
if num, exists := taskNumMap[tw.TaskID]; exists {
wayCountMap[tw.WayName] += num
}
}
}
}
// 查询模板关联的渠道
if len(templateIDs) > 0 {
var templateWays []struct {
TemplateID string
WayName string
}
err = db.
Table(insTable).
Select(fmt.Sprintf("%s.template_id, %s.name as way_name", insTable, waysTable)).
Joins(fmt.Sprintf("JOIN %s ON %s.way_id = %s.id", waysTable, insTable, waysTable)).
Where(fmt.Sprintf("%s.template_id IN ?", insTable), templateIDs).
Scan(&templateWays).Error
if err == nil {
for _, tw := range templateWays {
if num, exists := taskNumMap[tw.TemplateID]; exists {
wayCountMap[tw.WayName] += num
}
}
}
}
// 第四步:转换为返回格式
for wayName, count := range wayCountMap {
// 转换为返回格式
for _, stat := range wayStats {
wayCateData = append(wayCateData, WayCateData{
WayName: wayName,
CountNum: int(count),
WayName: stat.WayName,
CountNum: stat.CountNum,
})
}