76 lines
3.9 KiB
Python
76 lines
3.9 KiB
Python
"""银行账户与定时任务
|
|
|
|
Revision ID: 20260813_bank_account_scheduled_task
|
|
Revises: 20260813_bank_api_log
|
|
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_account_scheduled_task'
|
|
down_revision = '20260813_bank_api_log'
|
|
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='更新时间'),
|
|
)
|
|
|
|
# 删除旧的银行接口请求记录表(日志改为文件存储)
|
|
op.drop_index('ix_bank_api_logs_created_at', table_name='bank_api_logs')
|
|
op.drop_index('ix_bank_api_logs_admin_id', table_name='bank_api_logs')
|
|
op.drop_table('bank_api_logs')
|
|
|
|
|
|
def downgrade():
|
|
# 恢复 bank_api_logs 表
|
|
op.create_table(
|
|
'bank_api_logs',
|
|
sa.Column('id', sa.String(32), primary_key=True),
|
|
sa.Column('request_type', sa.String(32), nullable=False, comment='请求类型'),
|
|
sa.Column('request_params', sa.Text, nullable=True, comment='请求参数 JSON'),
|
|
sa.Column('response_data', sa.Text, nullable=True, comment='响应数据 JSON'),
|
|
sa.Column('status_code', sa.Integer, nullable=True, comment='HTTP 状态码'),
|
|
sa.Column('is_success', sa.Boolean, default=True, comment='是否成功'),
|
|
sa.Column('error_msg', sa.Text, nullable=True, comment='错误信息'),
|
|
sa.Column('admin_id', sa.String(32), nullable=True, comment='操作管理员 ID'),
|
|
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
|
)
|
|
op.create_index('ix_bank_api_logs_admin_id', 'bank_api_logs', ['admin_id'])
|
|
op.create_index('ix_bank_api_logs_created_at', 'bank_api_logs', ['created_at'])
|
|
|
|
# 删除新表
|
|
op.drop_table('scheduled_tasks')
|
|
op.drop_table('bank_accounts')
|