302 lines
10 KiB
Go
302 lines
10 KiB
Go
package queries
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// StatisticsQuery 统计查询对象
|
|
type StatisticsQuery struct {
|
|
// 基础查询条件
|
|
MetricType string `json:"metric_type" form:"metric_type"` // 指标类型
|
|
MetricName string `json:"metric_name" form:"metric_name"` // 指标名称
|
|
Dimension string `json:"dimension" form:"dimension"` // 统计维度
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
|
|
// 分页参数
|
|
Limit int `json:"limit" form:"limit"` // 限制数量
|
|
Offset int `json:"offset" form:"offset"` // 偏移量
|
|
|
|
// 排序参数
|
|
SortBy string `json:"sort_by" form:"sort_by"` // 排序字段
|
|
SortOrder string `json:"sort_order" form:"sort_order"` // 排序顺序 (asc/desc)
|
|
|
|
// 过滤条件
|
|
MinValue float64 `json:"min_value" form:"min_value"` // 最小值
|
|
MaxValue float64 `json:"max_value" form:"max_value"` // 最大值
|
|
|
|
// 聚合参数
|
|
AggregateBy string `json:"aggregate_by" form:"aggregate_by"` // 聚合维度 (hour/day/week/month)
|
|
GroupBy string `json:"group_by" form:"group_by"` // 分组维度
|
|
}
|
|
|
|
// StatisticsReportQuery 统计报告查询对象
|
|
type StatisticsReportQuery struct {
|
|
// 基础查询条件
|
|
ReportType string `json:"report_type" form:"report_type"` // 报告类型
|
|
UserRole string `json:"user_role" form:"user_role"` // 用户角色
|
|
Status string `json:"status" form:"status"` // 报告状态
|
|
Period string `json:"period" form:"period"` // 统计周期
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
|
|
// 分页参数
|
|
Limit int `json:"limit" form:"limit"` // 限制数量
|
|
Offset int `json:"offset" form:"offset"` // 偏移量
|
|
|
|
// 排序参数
|
|
SortBy string `json:"sort_by" form:"sort_by"` // 排序字段
|
|
SortOrder string `json:"sort_order" form:"sort_order"` // 排序顺序 (asc/desc)
|
|
|
|
// 过滤条件
|
|
GeneratedBy string `json:"generated_by" form:"generated_by"` // 生成者ID
|
|
AccessLevel string `json:"access_level" form:"access_level"` // 访问级别
|
|
}
|
|
|
|
// StatisticsDashboardQuery 统计仪表板查询对象
|
|
type StatisticsDashboardQuery struct {
|
|
// 基础查询条件
|
|
UserRole string `json:"user_role" form:"user_role"` // 用户角色
|
|
IsDefault *bool `json:"is_default" form:"is_default"` // 是否默认
|
|
IsActive *bool `json:"is_active" form:"is_active"` // 是否激活
|
|
AccessLevel string `json:"access_level" form:"access_level"` // 访问级别
|
|
|
|
// 分页参数
|
|
Limit int `json:"limit" form:"limit"` // 限制数量
|
|
Offset int `json:"offset" form:"offset"` // 偏移量
|
|
|
|
// 排序参数
|
|
SortBy string `json:"sort_by" form:"sort_by"` // 排序字段
|
|
SortOrder string `json:"sort_order" form:"sort_order"` // 排序顺序 (asc/desc)
|
|
|
|
// 过滤条件
|
|
CreatedBy string `json:"created_by" form:"created_by"` // 创建者ID
|
|
Name string `json:"name" form:"name"` // 仪表板名称
|
|
}
|
|
|
|
// RealtimeStatisticsQuery 实时统计查询对象
|
|
type RealtimeStatisticsQuery struct {
|
|
// 查询条件
|
|
MetricType string `json:"metric_type" form:"metric_type"` // 指标类型
|
|
TimeRange string `json:"time_range" form:"time_range"` // 时间范围 (last_hour/last_day/last_week)
|
|
|
|
// 过滤条件
|
|
Dimension string `json:"dimension" form:"dimension"` // 统计维度
|
|
}
|
|
|
|
// HistoricalStatisticsQuery 历史统计查询对象
|
|
type HistoricalStatisticsQuery struct {
|
|
// 查询条件
|
|
MetricType string `json:"metric_type" form:"metric_type"` // 指标类型
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
Period string `json:"period" form:"period"` // 统计周期
|
|
|
|
// 分页参数
|
|
Limit int `json:"limit" form:"limit"` // 限制数量
|
|
Offset int `json:"offset" form:"offset"` // 偏移量
|
|
|
|
// 聚合参数
|
|
AggregateBy string `json:"aggregate_by" form:"aggregate_by"` // 聚合维度
|
|
GroupBy string `json:"group_by" form:"group_by"` // 分组维度
|
|
|
|
// 过滤条件
|
|
Dimension string `json:"dimension" form:"dimension"` // 统计维度
|
|
MinValue float64 `json:"min_value" form:"min_value"` // 最小值
|
|
MaxValue float64 `json:"max_value" form:"max_value"` // 最大值
|
|
}
|
|
|
|
// DashboardDataQuery 仪表板数据查询对象
|
|
type DashboardDataQuery struct {
|
|
// 查询条件
|
|
UserRole string `json:"user_role" form:"user_role"` // 用户角色
|
|
Period string `json:"period" form:"period"` // 统计周期
|
|
|
|
// 时间范围
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
|
|
// 过滤条件
|
|
MetricTypes []string `json:"metric_types" form:"metric_types"` // 指标类型列表
|
|
Dimensions []string `json:"dimensions" form:"dimensions"` // 统计维度列表
|
|
}
|
|
|
|
// ReportGenerationQuery 报告生成查询对象
|
|
type ReportGenerationQuery struct {
|
|
// 报告配置
|
|
ReportType string `json:"report_type" form:"report_type"` // 报告类型
|
|
Title string `json:"title" form:"title"` // 报告标题
|
|
Period string `json:"period" form:"period"` // 统计周期
|
|
UserRole string `json:"user_role" form:"user_role"` // 用户角色
|
|
|
|
// 时间范围
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
|
|
// 过滤条件
|
|
Filters map[string]interface{} `json:"filters" form:"filters"` // 过滤条件
|
|
|
|
// 生成配置
|
|
GeneratedBy string `json:"generated_by" form:"generated_by"` // 生成者ID
|
|
Format string `json:"format" form:"format"` // 输出格式 (json/pdf/excel)
|
|
}
|
|
|
|
// ExportQuery 导出查询对象
|
|
type ExportQuery struct {
|
|
// 导出配置
|
|
Format string `json:"format" form:"format"` // 导出格式 (excel/csv/pdf)
|
|
MetricType string `json:"metric_type" form:"metric_type"` // 指标类型
|
|
|
|
// 时间范围
|
|
StartDate time.Time `json:"start_date" form:"start_date"` // 开始日期
|
|
EndDate time.Time `json:"end_date" form:"end_date"` // 结束日期
|
|
|
|
// 过滤条件
|
|
Dimension string `json:"dimension" form:"dimension"` // 统计维度
|
|
GroupBy string `json:"group_by" form:"group_by"` // 分组维度
|
|
|
|
// 导出配置
|
|
IncludeCharts bool `json:"include_charts" form:"include_charts"` // 是否包含图表
|
|
Columns []string `json:"columns" form:"columns"` // 导出列
|
|
}
|
|
|
|
// Validate 验证统计查询对象
|
|
func (q *StatisticsQuery) Validate() error {
|
|
if q.MetricType == "" {
|
|
return fmt.Errorf("指标类型不能为空")
|
|
}
|
|
if q.StartDate.IsZero() || q.EndDate.IsZero() {
|
|
return fmt.Errorf("开始日期和结束日期不能为空")
|
|
}
|
|
if q.StartDate.After(q.EndDate) {
|
|
return fmt.Errorf("开始日期不能晚于结束日期")
|
|
}
|
|
if q.Limit <= 0 {
|
|
q.Limit = 20 // 默认限制
|
|
}
|
|
if q.Limit > 1000 {
|
|
q.Limit = 1000 // 最大限制
|
|
}
|
|
if q.SortOrder != "" && q.SortOrder != "asc" && q.SortOrder != "desc" {
|
|
q.SortOrder = "desc" // 默认降序
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证统计报告查询对象
|
|
func (q *StatisticsReportQuery) Validate() error {
|
|
if q.Limit <= 0 {
|
|
q.Limit = 20 // 默认限制
|
|
}
|
|
if q.Limit > 1000 {
|
|
q.Limit = 1000 // 最大限制
|
|
}
|
|
if q.SortOrder != "" && q.SortOrder != "asc" && q.SortOrder != "desc" {
|
|
q.SortOrder = "desc" // 默认降序
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证统计仪表板查询对象
|
|
func (q *StatisticsDashboardQuery) Validate() error {
|
|
if q.Limit <= 0 {
|
|
q.Limit = 20 // 默认限制
|
|
}
|
|
if q.Limit > 1000 {
|
|
q.Limit = 1000 // 最大限制
|
|
}
|
|
if q.SortOrder != "" && q.SortOrder != "asc" && q.SortOrder != "desc" {
|
|
q.SortOrder = "desc" // 默认降序
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证实时统计查询对象
|
|
func (q *RealtimeStatisticsQuery) Validate() error {
|
|
if q.MetricType == "" {
|
|
return fmt.Errorf("指标类型不能为空")
|
|
}
|
|
if q.TimeRange == "" {
|
|
q.TimeRange = "last_hour" // 默认最近1小时
|
|
}
|
|
validTimeRanges := []string{"last_hour", "last_day", "last_week"}
|
|
for _, validRange := range validTimeRanges {
|
|
if q.TimeRange == validRange {
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("无效的时间范围: %s", q.TimeRange)
|
|
}
|
|
|
|
// Validate 验证历史统计查询对象
|
|
func (q *HistoricalStatisticsQuery) Validate() error {
|
|
if q.MetricType == "" {
|
|
return fmt.Errorf("指标类型不能为空")
|
|
}
|
|
if q.StartDate.IsZero() || q.EndDate.IsZero() {
|
|
return fmt.Errorf("开始日期和结束日期不能为空")
|
|
}
|
|
if q.StartDate.After(q.EndDate) {
|
|
return fmt.Errorf("开始日期不能晚于结束日期")
|
|
}
|
|
if q.Limit <= 0 {
|
|
q.Limit = 20 // 默认限制
|
|
}
|
|
if q.Limit > 1000 {
|
|
q.Limit = 1000 // 最大限制
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证仪表板数据查询对象
|
|
func (q *DashboardDataQuery) Validate() error {
|
|
if q.UserRole == "" {
|
|
return fmt.Errorf("用户角色不能为空")
|
|
}
|
|
if q.Period == "" {
|
|
q.Period = "today" // 默认今天
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证报告生成查询对象
|
|
func (q *ReportGenerationQuery) Validate() error {
|
|
if q.ReportType == "" {
|
|
return fmt.Errorf("报告类型不能为空")
|
|
}
|
|
if q.Title == "" {
|
|
return fmt.Errorf("报告标题不能为空")
|
|
}
|
|
if q.Period == "" {
|
|
return fmt.Errorf("统计周期不能为空")
|
|
}
|
|
if q.UserRole == "" {
|
|
return fmt.Errorf("用户角色不能为空")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate 验证导出查询对象
|
|
func (q *ExportQuery) Validate() error {
|
|
if q.Format == "" {
|
|
return fmt.Errorf("导出格式不能为空")
|
|
}
|
|
if q.MetricType == "" {
|
|
return fmt.Errorf("指标类型不能为空")
|
|
}
|
|
if q.StartDate.IsZero() || q.EndDate.IsZero() {
|
|
return fmt.Errorf("开始日期和结束日期不能为空")
|
|
}
|
|
if q.StartDate.After(q.EndDate) {
|
|
return fmt.Errorf("开始日期不能晚于结束日期")
|
|
}
|
|
validFormats := []string{"excel", "csv", "pdf"}
|
|
for _, validFormat := range validFormats {
|
|
if q.Format == validFormat {
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("无效的导出格式: %s", q.Format)
|
|
}
|