fix: docs docker depoly desc
This commit is contained in:
@@ -53,6 +53,10 @@ docker-compose up -d
|
||||
|
||||
### 使用 MySQL
|
||||
|
||||
::: warning 重要
|
||||
使用 MySQL 时必须指定 `DB_TYPE=mysql` 环境变量,否则会默认使用 SQLite。
|
||||
:::
|
||||
|
||||
创建 `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
@@ -68,6 +72,7 @@ services:
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DB_TYPE=mysql
|
||||
- MYSQL_HOST=192.168.64.133
|
||||
- MYSQL_PORT=3308
|
||||
- MYSQL_USER=root
|
||||
@@ -134,6 +139,7 @@ services:
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DB_TYPE=mysql
|
||||
- MYSQL_HOST=mysql
|
||||
- MYSQL_PORT=3306
|
||||
- MYSQL_USER=root
|
||||
|
||||
@@ -114,10 +114,15 @@ docker run -d \
|
||||
|
||||
### 使用 MySQL
|
||||
|
||||
::: warning 重要
|
||||
使用 MySQL 时必须指定 `DB_TYPE=mysql` 环境变量,否则会默认使用 SQLite。
|
||||
:::
|
||||
|
||||
```bash
|
||||
# 正式运行(GHCR 镜像,推荐)
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-e DB_TYPE=mysql \
|
||||
-e MYSQL_HOST=192.168.64.133 \
|
||||
-e MYSQL_PORT=3308 \
|
||||
-e MYSQL_USER=root \
|
||||
@@ -130,6 +135,7 @@ docker run -d \
|
||||
# 或使用 Docker Hub 镜像
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-e DB_TYPE=mysql \
|
||||
-e MYSQL_HOST=192.168.64.133 \
|
||||
-e MYSQL_PORT=3308 \
|
||||
-e MYSQL_USER=root \
|
||||
|
||||
+89
-32
@@ -354,56 +354,108 @@ func GetChannelStatisticData() (ChannelStatisticData, error) {
|
||||
insTable := GetSchema(SendTasksIns{})
|
||||
waysTable := GetSchema(SendWays{})
|
||||
|
||||
// 第一步:从 send_stats 表统计每个任务的执行次数
|
||||
// 第一步:从 send_stats 表统计每个任务的执行次数(按任务类型分组)
|
||||
var taskStats []struct {
|
||||
TaskID string
|
||||
Num int64
|
||||
TaskID string
|
||||
TaskType string
|
||||
Num int64
|
||||
}
|
||||
|
||||
db.
|
||||
err := db.
|
||||
Table(statsTable).
|
||||
Select("task_id, SUM(num) AS num").
|
||||
Where("task_id != ''"). // 排除全局统计
|
||||
Group("task_id").
|
||||
Scan(&taskStats)
|
||||
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
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("[DEBUG] 查询 send_stats 表失败: %v\n", err)
|
||||
return statistic, err
|
||||
}
|
||||
|
||||
fmt.Printf("[DEBUG] send_stats 查询结果: %+v\n", taskStats)
|
||||
|
||||
// 如果没有任务统计数据,返回空数组而不是 nil
|
||||
if len(taskStats) == 0 {
|
||||
statistic.WayCateData = wayCateData
|
||||
fmt.Println("[DEBUG] send_stats 表中没有任务统计数据")
|
||||
statistic.WayCateData = []WayCateData{}
|
||||
return statistic, nil
|
||||
}
|
||||
|
||||
// 第二步:收集所有任务ID
|
||||
taskIDs := make([]string, 0, len(taskStats))
|
||||
taskNumMap := make(map[string]int64)
|
||||
// 第二步:分别收集任务ID和模板ID
|
||||
taskIDs := make([]string, 0)
|
||||
templateIDs := make([]string, 0)
|
||||
taskNumMap := make(map[string]int64) // key: task_id 或 template_id
|
||||
|
||||
for _, stat := range taskStats {
|
||||
taskIDs = append(taskIDs, stat.TaskID)
|
||||
if stat.TaskType == "template" {
|
||||
templateIDs = append(templateIDs, stat.TaskID)
|
||||
} else {
|
||||
taskIDs = append(taskIDs, stat.TaskID)
|
||||
}
|
||||
taskNumMap[stat.TaskID] = stat.Num
|
||||
}
|
||||
|
||||
// 第三步:查询这些任务关联的渠道信息
|
||||
var taskWays []struct {
|
||||
TaskID string
|
||||
WayID string
|
||||
WayName string
|
||||
}
|
||||
fmt.Printf("[DEBUG] 任务IDs: %+v, 模板IDs: %+v\n", taskIDs, templateIDs)
|
||||
|
||||
db.
|
||||
Table(insTable).
|
||||
Select(fmt.Sprintf("%s.task_id, %s.way_id, %s.name as way_name", insTable, 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).
|
||||
Group(fmt.Sprintf("%s.task_id, %s.way_id, %s.name", insTable, insTable, waysTable)).
|
||||
Scan(&taskWays)
|
||||
|
||||
// 第四步:按渠道聚合统计
|
||||
// 第三步:查询渠道信息(分别查询任务和模板)
|
||||
wayCountMap := make(map[string]int64)
|
||||
for _, tw := range taskWays {
|
||||
if num, exists := taskNumMap[tw.TaskID]; exists {
|
||||
wayCountMap[tw.WayName] += num
|
||||
|
||||
// 查询任务关联的渠道
|
||||
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 {
|
||||
fmt.Printf("[DEBUG] 查询任务渠道关联失败: %v\n", err)
|
||||
} else {
|
||||
fmt.Printf("[DEBUG] 任务渠道关联查询结果: %+v\n", taskWays)
|
||||
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 {
|
||||
fmt.Printf("[DEBUG] 查询模板渠道关联失败: %v\n", err)
|
||||
} else {
|
||||
fmt.Printf("[DEBUG] 模板渠道关联查询结果: %+v\n", templateWays)
|
||||
for _, tw := range templateWays {
|
||||
if num, exists := taskNumMap[tw.TemplateID]; exists {
|
||||
wayCountMap[tw.WayName] += num
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("[DEBUG] 渠道统计结果: %+v\n", wayCountMap)
|
||||
|
||||
// 第四步:转换为返回格式
|
||||
for wayName, count := range wayCountMap {
|
||||
wayCateData = append(wayCateData, WayCateData{
|
||||
WayName: wayName,
|
||||
@@ -411,6 +463,11 @@ func GetChannelStatisticData() (ChannelStatisticData, error) {
|
||||
})
|
||||
}
|
||||
|
||||
// 确保返回空数组而不是 nil
|
||||
if len(wayCateData) == 0 {
|
||||
wayCateData = []WayCateData{}
|
||||
}
|
||||
|
||||
statistic.WayCateData = wayCateData
|
||||
return statistic, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user