148 lines
5.4 KiB
Python
148 lines
5.4 KiB
Python
"""新增基金产品推介材料独立业务表。"""
|
|
|
|
from alembic import op
|
|
|
|
revision = "20260910_promotion_material"
|
|
down_revision = "20260910_offsite_worker"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
TABLES = [
|
|
"""
|
|
CREATE TABLE promotion_material_task (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
product_code VARCHAR(32) NULL,
|
|
product_name VARCHAR(128) NOT NULL,
|
|
material_title VARCHAR(200) NOT NULL,
|
|
style_code VARCHAR(32) NOT NULL,
|
|
output_formats JSON NOT NULL,
|
|
template_version VARCHAR(64) NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
updated_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_promotion_task_no (task_no),
|
|
KEY idx_promotion_task_status (status, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_input_snapshot (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
version_no INT UNSIGNED NOT NULL,
|
|
product_info JSON NOT NULL,
|
|
manager_info JSON NOT NULL,
|
|
team_info JSON NOT NULL,
|
|
strategy_info JSON NOT NULL,
|
|
fee_structure JSON NOT NULL,
|
|
performance_info JSON NOT NULL,
|
|
risk_disclosure JSON NOT NULL,
|
|
source_notes JSON NOT NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_promotion_input_version (task_no, version_no),
|
|
KEY idx_promotion_input_task (task_no, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_attachment (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
attachment_type VARCHAR(32) NOT NULL,
|
|
filename VARCHAR(255) NOT NULL,
|
|
media_type VARCHAR(128) NOT NULL,
|
|
file_hash VARCHAR(128) NOT NULL,
|
|
size_bytes BIGINT UNSIGNED NOT NULL,
|
|
file_path VARCHAR(500) NOT NULL,
|
|
parsed_metadata JSON NOT NULL,
|
|
uploaded_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_promotion_attachment_hash (task_no, file_hash),
|
|
KEY idx_promotion_attachment_task_type (task_no, attachment_type)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_material_version (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
input_snapshot_id BIGINT UNSIGNED NOT NULL,
|
|
version_no INT UNSIGNED NOT NULL,
|
|
style_code VARCHAR(32) NOT NULL,
|
|
template_version VARCHAR(64) NULL,
|
|
prompt_version VARCHAR(64) NOT NULL,
|
|
draft_json JSON NOT NULL,
|
|
pptx_path VARCHAR(500) NULL,
|
|
pdf_path VARCHAR(500) NULL,
|
|
chart_paths JSON NOT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
error_message VARCHAR(500) NULL,
|
|
generated_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_promotion_material_version (task_no, version_no),
|
|
KEY idx_promotion_material_status (task_no, status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_compliance_check (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
material_version_id BIGINT UNSIGNED NULL,
|
|
rule_code VARCHAR(64) NOT NULL,
|
|
rule_name VARCHAR(128) NOT NULL,
|
|
scope VARCHAR(32) NOT NULL,
|
|
severity VARCHAR(16) NOT NULL,
|
|
hit_text TEXT NULL,
|
|
suggestion VARCHAR(500) NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY idx_promotion_compliance_task (task_no, created_at),
|
|
KEY idx_promotion_compliance_version (material_version_id, severity)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_review_record (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
material_version_id BIGINT UNSIGNED NOT NULL,
|
|
reviewer_id BIGINT UNSIGNED NOT NULL,
|
|
decision VARCHAR(32) NOT NULL,
|
|
comment VARCHAR(1000) NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY idx_promotion_review_version (material_version_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
"""
|
|
CREATE TABLE promotion_delivery_record (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_no VARCHAR(32) NOT NULL,
|
|
material_version_id BIGINT UNSIGNED NOT NULL,
|
|
advisor_id BIGINT UNSIGNED NOT NULL,
|
|
delivery_channel VARCHAR(32) NOT NULL,
|
|
status VARCHAR(16) NOT NULL,
|
|
failure_reason VARCHAR(500) NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(6) NOT NULL,
|
|
sent_at DATETIME(6) NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_promotion_delivery_version_advisor (material_version_id, advisor_id),
|
|
KEY idx_promotion_delivery_advisor (advisor_id, status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
""",
|
|
]
|
|
|
|
|
|
def upgrade() -> None:
|
|
for statement in TABLES:
|
|
op.execute(statement)
|
|
|
|
|
|
def downgrade() -> None:
|
|
raise RuntimeError("产品推介材料业务数据禁止自动删除,请使用前向兼容迁移")
|