157 lines
3.7 KiB
Go
157 lines
3.7 KiB
Go
// Package constants 定义系统常量、阈值和配置
|
|
package constants
|
|
|
|
import "time"
|
|
|
|
// ==================== 导出任务状态 ====================
|
|
|
|
// JobStatus 导出任务状态枚举
|
|
type JobStatus string
|
|
|
|
const (
|
|
JobStatusQueued JobStatus = "queued" // 排队中
|
|
JobStatusRunning JobStatus = "running" // 执行中
|
|
JobStatusCompleted JobStatus = "completed" // 已完成
|
|
JobStatusFailed JobStatus = "failed" // 失败
|
|
JobStatusCanceled JobStatus = "canceled" // 已取消
|
|
)
|
|
|
|
// ==================== 数据源类型 ====================
|
|
|
|
// Datasource 数据源类型
|
|
type Datasource string
|
|
|
|
const (
|
|
DatasourceMarketing Datasource = "marketing" // 营销系统
|
|
DatasourceYMT Datasource = "ymt" // 易码通
|
|
)
|
|
|
|
// ==================== 主表类型 ====================
|
|
|
|
// MainTable 主表类型
|
|
type MainTable string
|
|
|
|
const (
|
|
MainTableOrder MainTable = "order" // 订单表
|
|
MainTableOrderInfo MainTable = "order_info" // 订单信息表(YMT)
|
|
)
|
|
|
|
// ==================== 导出格式 ====================
|
|
|
|
// FileFormat 导出文件格式
|
|
type FileFormat string
|
|
|
|
const (
|
|
FileFormatCSV FileFormat = "csv"
|
|
FileFormatXLSX FileFormat = "xlsx"
|
|
)
|
|
|
|
// ==================== 导出阈值配置 ====================
|
|
|
|
// ExportThresholds 导出相关阈值
|
|
var ExportThresholds = struct {
|
|
// MaxRowsPerFile 单文件最大行数
|
|
MaxRowsPerFile int64
|
|
// PassScoreThreshold EXPLAIN评分通过阈值
|
|
PassScoreThreshold int
|
|
// ChunkDays 分块导出的天数步长
|
|
ChunkDays int
|
|
// ChunkThreshold 启用分块导出的行数阈值
|
|
ChunkThreshold int64
|
|
// ProgressUpdateInterval 进度更新间隔(行数)
|
|
ProgressUpdateInterval int64
|
|
}{
|
|
MaxRowsPerFile: 300000,
|
|
PassScoreThreshold: 60,
|
|
ChunkDays: 10,
|
|
ChunkThreshold: 50000,
|
|
ProgressUpdateInterval: 1000,
|
|
}
|
|
|
|
// BatchSizes 批量处理大小配置
|
|
var BatchSizes = struct {
|
|
// CSVDefault CSV默认批次大小
|
|
CSVDefault int
|
|
// XLSXDefault XLSX默认批次大小
|
|
XLSXDefault int
|
|
// SmallDataset 小数据集批次
|
|
SmallDataset int
|
|
// MediumDataset 中等数据集批次
|
|
MediumDataset int
|
|
// LargeDataset 大数据集批次
|
|
LargeDataset int
|
|
// HugeDataset 超大数据集批次
|
|
HugeDataset int
|
|
}{
|
|
CSVDefault: 10000,
|
|
XLSXDefault: 5000,
|
|
SmallDataset: 10000,
|
|
MediumDataset: 20000,
|
|
LargeDataset: 50000,
|
|
HugeDataset: 100000,
|
|
}
|
|
|
|
// ChooseBatchSize 根据估算行数和格式选择合适的批次大小
|
|
func ChooseBatchSize(estimate int64, format FileFormat) int {
|
|
if format == FileFormatXLSX {
|
|
return BatchSizes.XLSXDefault
|
|
}
|
|
if estimate <= 0 {
|
|
return BatchSizes.CSVDefault
|
|
}
|
|
if estimate < 50000 {
|
|
return BatchSizes.SmallDataset
|
|
}
|
|
if estimate < 200000 {
|
|
return BatchSizes.MediumDataset
|
|
}
|
|
if estimate < 500000 {
|
|
return BatchSizes.LargeDataset
|
|
}
|
|
if estimate >= 2000000 {
|
|
return BatchSizes.HugeDataset
|
|
}
|
|
return BatchSizes.LargeDataset
|
|
}
|
|
|
|
// ==================== HTTP服务器配置 ====================
|
|
|
|
// ServerConfig HTTP服务器配置
|
|
var ServerConfig = struct {
|
|
DefaultPort string
|
|
ReadTimeout time.Duration
|
|
WriteTimeout time.Duration
|
|
}{
|
|
DefaultPort: "8077",
|
|
ReadTimeout: 15 * time.Second,
|
|
WriteTimeout: 60 * time.Second,
|
|
}
|
|
|
|
// ==================== 分页配置 ====================
|
|
|
|
// PaginationConfig 分页配置
|
|
var PaginationConfig = struct {
|
|
DefaultPageSize int
|
|
MaxPageSize int
|
|
}{
|
|
DefaultPageSize: 15,
|
|
MaxPageSize: 100,
|
|
}
|
|
|
|
// ==================== 存储配置 ====================
|
|
|
|
// StorageConfig 存储配置
|
|
var StorageConfig = struct {
|
|
Directory string
|
|
FilePrefix string
|
|
ZipSuffix string
|
|
CSVSuffix string
|
|
XLSXSuffix string
|
|
}{
|
|
Directory: "storage",
|
|
FilePrefix: "export_job_",
|
|
ZipSuffix: ".zip",
|
|
CSVSuffix: ".csv",
|
|
XLSXSuffix: ".xlsx",
|
|
}
|