package report import ( "context" "gitea.redpowerfuture.com/red-future/common/db/gfdb" ) // initTables 初始化系统表 func initTables(ctx context.Context) error { ddls := []string{ // 业务配置表 `CREATE TABLE IF NOT EXISTS report_business_config ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, business_code VARCHAR(64) NOT NULL, business_name VARCHAR(128) NOT NULL, description TEXT DEFAULT '', status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', config JSONB DEFAULT '{}', creator VARCHAR(64) DEFAULT '', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updater VARCHAR(64) DEFAULT '', updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), deleted_at TIMESTAMP WITH TIME ZONE )`, // 报表配置表 `CREATE TABLE IF NOT EXISTS report_report_config ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, business_code VARCHAR(64) NOT NULL, report_code VARCHAR(64) NOT NULL, report_name VARCHAR(128) NOT NULL, description TEXT DEFAULT '', status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', stat_table_name VARCHAR(128) NOT NULL, stat_table_comment VARCHAR(256) DEFAULT '', date_field VARCHAR(64) DEFAULT 'stat_date', primary_keys JSONB DEFAULT '["id"]'::jsonb, conflict_keys JSONB DEFAULT '["stat_date"]'::jsonb, config JSONB DEFAULT '{}', creator VARCHAR(64) DEFAULT '', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updater VARCHAR(64) DEFAULT '', updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), deleted_at TIMESTAMP WITH TIME ZONE, CONSTRAINT uk_business_report_code UNIQUE (tenant_id, business_code, report_code) )`, // 字段配置表 `CREATE TABLE IF NOT EXISTS report_field_config ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, business_code VARCHAR(64) NOT NULL, report_code VARCHAR(64) NOT NULL, field_code VARCHAR(64) NOT NULL, field_name VARCHAR(128) NOT NULL, field_type VARCHAR(32) NOT NULL, data_type VARCHAR(32) NOT NULL DEFAULT 'STRING', field_role VARCHAR(32) NOT NULL, is_aggregatable BOOLEAN DEFAULT FALSE, is_filterable BOOLEAN DEFAULT TRUE, is_queryable BOOLEAN DEFAULT TRUE, is_sortable BOOLEAN DEFAULT TRUE, default_aggregate VARCHAR(32) DEFAULT '', valid_aggregates JSONB DEFAULT '[]'::jsonb, filter_operators JSONB DEFAULT '["=","!=",">","<",">=","<=","IN","LIKE","BETWEEN"]'::jsonb, expression VARCHAR(512) DEFAULT '', expression_type VARCHAR(32) DEFAULT '', format_pattern VARCHAR(64) DEFAULT '', unit VARCHAR(32) DEFAULT '', dict_code VARCHAR(64) DEFAULT '', sort_order INT DEFAULT 0, group_name VARCHAR(64) DEFAULT '', status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', creator VARCHAR(64) DEFAULT '', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updater VARCHAR(64) DEFAULT '', updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), deleted_at TIMESTAMP WITH TIME ZONE, CONSTRAINT uk_business_report_field_code UNIQUE (tenant_id, business_code, report_code, field_code) )`, // 抽取配置表 `CREATE TABLE IF NOT EXISTS report_extract_config ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, business_code VARCHAR(64) NOT NULL, report_code VARCHAR(64) NOT NULL, extract_code VARCHAR(64) NOT NULL, extract_name VARCHAR(128) NOT NULL, source_table_name VARCHAR(128) NOT NULL, source_table_alias VARCHAR(64) DEFAULT '', target_table_name VARCHAR(128) NOT NULL, is_enabled BOOLEAN DEFAULT TRUE, extract_type VARCHAR(32) NOT NULL DEFAULT 'FULL', extract_mode VARCHAR(32) NOT NULL DEFAULT 'DIRECT', extract_key_field VARCHAR(64) DEFAULT '', extract_key_format VARCHAR(64) DEFAULT '', group_by_fields JSONB DEFAULT '[]'::jsonb, filter_expression TEXT DEFAULT '', join_configs JSONB DEFAULT '[]'::jsonb, field_mappings JSONB DEFAULT '[]'::jsonb, transform_rules JSONB DEFAULT '[]'::jsonb, batch_size INT DEFAULT 1000, status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', creator VARCHAR(64) DEFAULT '', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updater VARCHAR(64) DEFAULT '', updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), deleted_at TIMESTAMP WITH TIME ZONE, CONSTRAINT uk_business_report_extract_code UNIQUE (tenant_id, business_code, report_code, extract_code) )`, // 抽取记录表 `CREATE TABLE IF NOT EXISTS report_extract_log ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, business_code VARCHAR(64) NOT NULL, report_code VARCHAR(64) NOT NULL, extract_code VARCHAR(64) NOT NULL, stat_date VARCHAR(16) NOT NULL, extract_type VARCHAR(32) NOT NULL, status VARCHAR(16) NOT NULL DEFAULT 'RUNNING', total_count INT DEFAULT 0, success_count INT DEFAULT 0, fail_count INT DEFAULT 0, start_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(), end_time TIMESTAMP WITH TIME ZONE, error_message TEXT DEFAULT '', executor VARCHAR(64) DEFAULT '', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), CONSTRAINT uk_extract_keys UNIQUE (tenant_id, business_code, report_code, extract_code, stat_date) )`, } for _, ddl := range ddls { if _, err := gfdb.DB(ctx).Exec(ctx, ddl); err != nil { return err } } return nil }