Files
group_fqcd_jr/alembic/versions/20260916_advisor_service_request.py
T
张胜宇 9675df8453 chore(sync): zsy_developcc 全量同步至 qyqy_develop(W26 口径)
- 分支内容对齐 qyqy_develop b6ec3aa,树完全一致(同步后 git diff 为空)
- 覆盖本轮全部交付:客服 Agent 重构(安全路由 / 五出口 / 记忆与画像 / RAG 全链路)
  + 开发文档 62 份编号体系(D1.1 v1.17 索引)
  + 新增 D2.10-客服Agent端到端答辩文档-2026-09-21.html
- 基线:e239eb7(2026-09-17 品牌口径统一快照),本提交为其直接后继
2026-09-21 21:26:30 +08:00

69 lines
2.4 KiB
Python

"""create advisor_service_request (客户申报 → 投顾受理)
新增一张表:客户在「我的投顾方案」页主动申报,投顾在工作台受理/驳回。
表内**新列全部可空或有业务默认**,不改动任何既有表,因此与基线完全兼容。
⚠️ 本表的 `id` 是 `AUTO_INCREMENT`:既有 `fin_*` 表缺自增(`20260914_baseline_auto_increment`
那次修复之后才补齐),新表直接按现代写法建,不再重复那个坑。
幂等:先查 `information_schema` 再建表 —— 本仓库的 alembic 版本指针与实际结构
历史上就对不上(指针停在 `20260911_adv_profile_tags`),该表可能已被 DDL 手工建过;
无条件 `CREATE TABLE` 会在这种环境直接失败。
"""
from sqlalchemy import text
from alembic import op
revision = "20260916_advisor_service_request"
down_revision = "20260914_baseline_auto_increment"
branch_labels = None
depends_on = None
CREATE_TABLE = """
CREATE TABLE `advisor_service_request` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`request_no` VARCHAR(32) NOT NULL,
`customer_id` BIGINT UNSIGNED NOT NULL,
`amount_wan` DECIMAL(14,2) NOT NULL,
`horizon` VARCHAR(16) NOT NULL,
`risk_preference` VARCHAR(16) NOT NULL,
`note` VARCHAR(500) NULL,
`status` VARCHAR(24) NOT NULL,
`handled_by` BIGINT UNSIGNED NULL,
`handled_at` DATETIME NULL,
`advisor_note` VARCHAR(500) NULL,
`result_content_id` BIGINT UNSIGNED NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_advisor_service_request_no` (`request_no`),
KEY `idx_advisor_service_request_customer` (`customer_id`, `status`),
KEY `idx_advisor_service_request_advisor` (`status`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='客户主动申报的投顾服务申请单'
"""
def _exists() -> bool:
bind = op.get_bind()
return bool(
bind.execute(
text(
"SELECT COUNT(*) FROM information_schema.TABLES "
"WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'advisor_service_request'"
)
).scalar()
)
def upgrade() -> None:
if _exists():
return
op.execute(CREATE_TABLE)
def downgrade() -> None:
# 表里是客户主动提交的申请,**不做自动删表**:需要回退请人工确认后执行。
raise RuntimeError("advisor_service_request must not be dropped automatically")