package dao import ( "context" "cid/model/entity" "gitee.com/red-future---jilin-g/common/mongo" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // statReportDao 统计报表DAO type statReportDao struct{} var StatReport = &statReportDao{} // Create 创建统计报表 func (d *statReportDao) Create(ctx context.Context, report *entity.StatReport) (err error) { _, err = mongo.Insert(ctx, []interface{}{report}, "stat_report") return } // GetByID 根据ID获取统计报表 func (d *statReportDao) GetByID(ctx context.Context, id string) (report *entity.StatReport, err error) { filter := bson.M{"_id": id} report = &entity.StatReport{} err = mongo.FindOne(ctx, filter, report, "stat_report") return } // GetByTenantAndDate 根据租户和日期获取统计报表 func (d *statReportDao) GetByTenantAndDate(ctx context.Context, tenantID, reportType, date string) (report *entity.StatReport, err error) { filter := bson.M{"tenantId": tenantID, "reportType": reportType, "reportDate": date} report = &entity.StatReport{} err = mongo.FindOne(ctx, filter, report, "stat_report") return } // Update 更新统计报表 func (d *statReportDao) Update(ctx context.Context, report *entity.StatReport) (err error) { filter := bson.M{"_id": report.Id} update := bson.M{"$set": report} _, err = mongo.Update(ctx, filter, update, "stat_report") return } // Delete 删除统计报表 func (d *statReportDao) Delete(ctx context.Context, id string) (err error) { filter := bson.M{"_id": id} _, err = mongo.Delete(ctx, filter, "stat_report") return } // List 统计报表列表 func (d *statReportDao) List(ctx context.Context, tenantID, appID, reportType, startDate, endDate string, page, pageSize int) (reports []*entity.StatReport, total int, err error) { filter := bson.M{} if tenantID != "" { filter["tenantId"] = tenantID } if appID != "" { filter["appId"] = appID } if reportType != "" { filter["reportType"] = reportType } if startDate != "" && endDate != "" { filter["reportDate"] = bson.M{"$gte": startDate, "$lte": endDate} } // 获取总数 total64, err := mongo.Count(ctx, filter, "stat_report") if err != nil { return nil, 0, err } total = int(total64) // 分页参数处理 limit := int64(pageSize) skip := int64((page - 1) * pageSize) // 排序处理 opts := options.Find().SetLimit(limit).SetSkip(skip).SetSort(bson.M{"generatedAt": -1}) err = mongo.Find(ctx, filter, &reports, "stat_report", opts) return }