Files
group_fqcd_jr/alembic/versions/20260910_promotion_material.py
T
张胜宇 e239eb778b docs: 品牌全量口径统一为「南方基金」+ 作废文档清理
1) 客服 Agent 四份交付文档 + 构建脚手架:品牌由包装占位 XX科技 / 旧名 南方财富
   统一为南方基金(热线 400-889-8899 / 官网 nffund.com),系统名改为「智能服务系统」;
   同步追加 §0.4 修订记录行,工程记录行保留原占位字面以支撑硬编码扫描验收。
2) 开发文档:清理 28 份已作废/残留文档(14 份移出归档 + 14 份仓库副本),
   新增《文档规整方案与开发前待决事项-2026-09-17》。
3) 客服agent 四份交付文档首次纳入本分支。
2026-09-17 15:15:22 +08:00

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("产品推介材料业务数据禁止自动删除,请使用前向兼容迁移")