"""银行账户与定时任务 Revision ID: 20260813_bank_scheduled Revises: 20260813_split_device_type Create Date: 2026-08-13 16:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '20260813_bank_scheduled' down_revision = '20260813_split_device_type' branch_labels = None depends_on = None def upgrade(): # 创建银行账户表 op.create_table( 'bank_accounts', sa.Column('id', sa.String(32), primary_key=True), sa.Column('account_name', sa.String(128), nullable=False, comment='账户名称'), sa.Column('bank_name', sa.String(128), nullable=False, comment='开户银行'), sa.Column('account_no', sa.String(64), unique=True, nullable=False, comment='银行账号'), sa.Column('is_active', sa.Boolean, default=True, comment='是否启用'), sa.Column('is_default', sa.Boolean, default=False, comment='是否默认账户'), sa.Column('description', sa.String(256), nullable=True, comment='备注'), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), comment='创建时间'), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.func.now(), onupdate=sa.func.now(), comment='更新时间'), ) # 创建定时任务表 op.create_table( 'scheduled_tasks', sa.Column('id', sa.String(32), primary_key=True), sa.Column('name', sa.String(128), nullable=False, comment='任务名称'), sa.Column('task_type', sa.String(32), nullable=False, comment='类型: external_api / internal_method'), sa.Column('schedule', sa.String(128), nullable=False, comment='Cron 表达式或间隔秒数'), sa.Column('config', sa.Text, nullable=True, comment='任务配置 JSON'), sa.Column('is_active', sa.Boolean, default=True, comment='是否启用'), sa.Column('last_run_at', sa.String(64), nullable=True, comment='最后执行时间 ISO'), sa.Column('last_status', sa.String(16), nullable=True, comment='最后执行状态'), sa.Column('last_error', sa.Text, nullable=True, comment='最后执行错误信息'), sa.Column('created_by', sa.String(32), nullable=True, comment='创建者管理员 ID'), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), comment='创建时间'), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.func.now(), onupdate=sa.func.now(), comment='更新时间'), ) def downgrade(): # 删除新表 op.drop_table('scheduled_tasks') op.drop_table('bank_accounts')