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 }