Files
cid/controller/stat_report_controller.go
2025-12-08 16:56:38 +08:00

146 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controller
import (
"context"
"cidservice/model/dto"
"cidservice/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 "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, err
}
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
}