147 lines
5.2 KiB
Go
147 lines
5.2 KiB
Go
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
|
|
}
|