149 lines
3.5 KiB
Go
149 lines
3.5 KiB
Go
package controller
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
|
||
"cid/model/dto"
|
||
"cid/service"
|
||
)
|
||
|
||
var StatReport = new(statReport)
|
||
|
||
type statReport struct{}
|
||
|
||
// GenerateReport 生成报表
|
||
func (c *statReport) GenerateReport(ctx context.Context, req *dto.ReportGenerateReq) (res *dto.ReportGenerateRes, err error) {
|
||
var resp *dto.ReportGenerateResp
|
||
|
||
switch req.ReportType {
|
||
case "daily":
|
||
resp, err = service.StatReport.GenerateDailyReport(ctx, req)
|
||
case "weekly":
|
||
resp, err = service.StatReport.GenerateWeeklyReport(ctx, req)
|
||
case "monthly":
|
||
resp, err = service.StatReport.GenerateMonthlyReport(ctx, req)
|
||
case "quarterly":
|
||
resp, err = service.StatReport.GenerateQuarterlyReport(ctx, req)
|
||
case "yearly":
|
||
resp, err = service.StatReport.GenerateYearlyReport(ctx, req)
|
||
default:
|
||
return nil, fmt.Errorf("不支持的报表类型: %s", req.ReportType)
|
||
}
|
||
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return &dto.ReportGenerateRes{
|
||
Data: resp,
|
||
}, nil
|
||
}
|
||
|
||
// GetReportList 获取报表列表
|
||
func (c *statReport) GetReportList(ctx context.Context, req *dto.ReportListReq) (res *dto.ReportListRes, err error) {
|
||
resp, err := service.StatReport.GetReportList(ctx, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return &dto.ReportListRes{
|
||
Data: resp,
|
||
}, nil
|
||
}
|
||
|
||
// GetReportDetail 获取报表详情
|
||
func (c *statReport) GetReportDetail(ctx context.Context, req *dto.ReportDetailReq) (res *dto.ReportDetailRes, err error) {
|
||
resp, err := service.StatReport.GetReportDetail(ctx, req.ReportID)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return &dto.ReportDetailRes{
|
||
Data: resp,
|
||
}, nil
|
||
}
|
||
|
||
// QueryStats 统计查询
|
||
func (c *statReport) QueryStats(ctx context.Context, req *dto.StatQueryReq) (res *dto.StatQueryRes, err error) {
|
||
// 这里调用统计查询服务
|
||
// resp, err := service.StatReport.QueryStats(ctx, req)
|
||
// 暂时返回示例数据
|
||
resp := &dto.StatQueryResp{
|
||
Data: []*dto.StatDataPoint{
|
||
{
|
||
Date: "2024-01-01",
|
||
Impressions: 1000,
|
||
Clicks: 50,
|
||
Revenue: 500.0,
|
||
CTR: 5.0,
|
||
AvgDuration: 30.5,
|
||
},
|
||
},
|
||
Summary: &dto.StatSummary{
|
||
TotalImpressions: 1000,
|
||
TotalClicks: 50,
|
||
TotalRevenue: 500.0,
|
||
AvgCTR: 5.0,
|
||
AvgDuration: 30.5,
|
||
GrowthRate: &dto.GrowthRate{
|
||
Impressions: 10.5,
|
||
Clicks: 8.2,
|
||
Revenue: 12.3,
|
||
CTR: -1.2,
|
||
},
|
||
},
|
||
}
|
||
|
||
return &dto.StatQueryRes{
|
||
Data: resp,
|
||
}, nil
|
||
}
|
||
|
||
// RealTimeStats 实时统计
|
||
func (c *statReport) RealTimeStats(ctx context.Context, req *dto.RealTimeStatReq) (res *dto.RealTimeStatRes, err error) {
|
||
// 这里调用实时统计服务
|
||
// resp, err := service.StatReport.GetRealTimeStats(ctx, req)
|
||
// 暂时返回示例数据
|
||
resp := &dto.RealTimeStatResp{
|
||
CurrentHour: &dto.HourlyStat{
|
||
Hour: "14:00",
|
||
Impressions: 120,
|
||
Clicks: 6,
|
||
Revenue: 60.0,
|
||
},
|
||
Last24Hours: []*dto.HourlyStat{
|
||
{
|
||
Hour: "13:00",
|
||
Impressions: 110,
|
||
Clicks: 5,
|
||
Revenue: 55.0,
|
||
},
|
||
{
|
||
Hour: "12:00",
|
||
Impressions: 100,
|
||
Clicks: 4,
|
||
Revenue: 50.0,
|
||
},
|
||
},
|
||
}
|
||
|
||
return &dto.RealTimeStatRes{
|
||
Data: resp,
|
||
}, nil
|
||
}
|
||
|
||
// ExportReport 导出报表
|
||
func (c *statReport) ExportReport(ctx context.Context, req *dto.ExportReportReq) (res *dto.ExportReportRes, err error) {
|
||
// 获取报表详情
|
||
resp, err := service.StatReport.GetReportDetail(ctx, req.ReportID)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 返回导出数据,由上层处理HTTP响应
|
||
return &dto.ExportReportRes{
|
||
ReportData: resp,
|
||
}, nil
|
||
}
|