签入版本

This commit is contained in:
2026-09-16 12:24:11 +08:00
commit ffceabfa8a
830 changed files with 105014 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
Generic single-database configuration.
+117
View File
@@ -0,0 +1,117 @@
# +======================================================================
# | 模块: Alembic 迁移环境
# | 说明: 配置数据库连接与模型 metadata,支持离线/在线两种迁移模式
# +======================================================================
"""Alembic 迁移环境。
- 数据库 URL 取自 src.config.database.DATABASE_URL
- 自动聚合 src.modules.*.models 中注册的模型 metadata,支持 autogenerate
"""
# ----------------------------------------------------------------------
# 导入依赖
# 涵盖:模块搜索路径、日志配置、路径处理、SQLAlchemy 引擎与连接池、
# Alembic 上下文
# ----------------------------------------------------------------------
import sys
from logging.config import fileConfig
from pathlib import Path
from sqlalchemy import create_engine, pool
from alembic import context
# ============================================================
# 将 src 目录加入 sys.path
# ============================================================
# 将 src 目录加入 sys.path,确保可直接 import 项目代码
ROOT = Path(__file__).resolve().parent.parent
SRC = ROOT / "src"
if str(SRC) not in sys.path:
sys.path.insert(0, str(SRC))
from config.database import DATABASE_URL
# ============================================================
# 聚合全部模型 metadata
# ============================================================
# 聚合全部模型 metadata(导入各模块 models 即完成注册)
from extensions.sqlalchemy import Base
import modules.auth.models
import modules.user.models
import modules.user_role.models
import modules.role.models
import modules.role_menu.models
import modules.menu.models
import modules.dept.models
import modules.category.models
import modules.article.models
import modules.param.models
import modules.file_template.models
import modules.job.models
import modules.dictionary.dict.models
import modules.dictionary.dict_item.models
import modules.configuration.config.models
import modules.configuration.config_item.models
import modules.level.models
import modules.position.models
import modules.city.models
import modules.notice.models
import modules.link.models
import modules.operation_log.models
import modules.login_log.models
import modules.job_log.models
import modules.example.models
# ============================================================
# 读取 Alembic 配置
# ============================================================
# 读取 alembic.ini 中的配置
config = context.config
# 存在配置文件时加载其日志配置
if config.config_file_name is not None:
fileConfig(config.config_file_name)
# 目标 metadata(autogenerate 依据)
target_metadata = Base.metadata
# 数据库 URL
database_url = DATABASE_URL
# ======================================================================
# 离线模式:仅生成 SQL 脚本
# ======================================================================
def run_migrations_offline() -> None:
"""离线模式:仅生成 SQL 脚本。"""
context.configure(
url=database_url,
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
)
with context.begin_transaction():
context.run_migrations()
# ======================================================================
# 在线模式:直接执行迁移
# ======================================================================
def run_migrations_online() -> None:
"""在线模式:直接执行迁移。"""
# NullPool:迁移结束后即释放连接,无需连接池
connectable = create_engine(database_url, poolclass=pool.NullPool)
with connectable.connect() as connection:
context.configure(connection=connection, target_metadata=target_metadata)
with context.begin_transaction():
context.run_migrations()
# ============================================================
# 入口:按模式执行
# ============================================================
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
+28
View File
@@ -0,0 +1,28 @@
"""${message}
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}
# revision identifiers, used by Alembic.
revision: str = ${repr(up_revision)}
down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
def upgrade() -> None:
"""Upgrade schema."""
${upgrades if upgrades else "pass"}
def downgrade() -> None:
"""Downgrade schema."""
${downgrades if downgrades else "pass"}
+635
View File
@@ -0,0 +1,635 @@
"""初始化
Revision ID: d6e1fac26659
Revises:
Create Date: 2026-09-15 17:51:25.310996
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'd6e1fac26659'
down_revision: Union[str, Sequence[str], None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('tornado_article',
sa.Column('category_id', sa.Integer(), nullable=True, comment='分类ID'),
sa.Column('title', sa.String(length=150), nullable=True, comment='文章标题'),
sa.Column('cover', sa.String(length=255), nullable=True, comment='文章封面'),
sa.Column('images', sa.Text(), nullable=True, comment='文章图集'),
sa.Column('intro', sa.String(length=255), nullable=True, comment='文章导读'),
sa.Column('content', sa.Text(), nullable=True, comment='文章内容'),
sa.Column('author', sa.String(length=100), nullable=True, comment='文章作者'),
sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章状态:0-正常 1-下架'),
sa.Column('click', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章点击率'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章排序'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='文章表'
)
op.create_index(op.f('ix_tornado_article_category_id'), 'tornado_article', ['category_id'], unique=False)
op.create_index(op.f('ix_tornado_article_is_delete'), 'tornado_article', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_article_status'), 'tornado_article', ['status'], unique=False)
op.create_index(op.f('ix_tornado_article_title'), 'tornado_article', ['title'], unique=False)
op.create_table('tornado_category',
sa.Column('category_name', sa.String(length=100), nullable=False, comment='分类名称'),
sa.Column('category_code', sa.String(length=100), nullable=True, comment='分类编码'),
sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级ID'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'),
sa.Column('note', sa.String(length=100), nullable=True, comment='分类备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='文章分类表'
)
op.create_index(op.f('ix_tornado_category_category_name'), 'tornado_category', ['category_name'], unique=False)
op.create_index(op.f('ix_tornado_category_is_delete'), 'tornado_category', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_category_parent_id'), 'tornado_category', ['parent_id'], unique=False)
op.create_table('tornado_city',
sa.Column('city_code', sa.String(length=6), nullable=False, comment='城市区号'),
sa.Column('area_code', sa.String(length=20), nullable=False, comment='行政编码'),
sa.Column('parent_code', sa.String(length=20), nullable=True, comment='上级行政编码'),
sa.Column('zip_code', sa.String(length=6), nullable=False, comment='邮政编码'),
sa.Column('level', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='城市级别:1-省份 2-城市 3-县区 4-街道'),
sa.Column('pid', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级城市ID'),
sa.Column('name', sa.String(length=150), nullable=False, comment='城市名称'),
sa.Column('short_name', sa.String(length=150), nullable=False, comment='城市简称'),
sa.Column('full_name', sa.String(length=150), nullable=True, comment='城市全称'),
sa.Column('pinyin', sa.String(length=150), nullable=True, comment='城市拼音'),
sa.Column('lng', sa.String(length=150), nullable=True, comment='城市经度'),
sa.Column('lat', sa.String(length=150), nullable=True, comment='城市纬度'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='城市行政区划表'
)
op.create_index(op.f('ix_tornado_city_area_code'), 'tornado_city', ['area_code'], unique=False)
op.create_index(op.f('ix_tornado_city_city_code'), 'tornado_city', ['city_code'], unique=False)
op.create_index(op.f('ix_tornado_city_is_delete'), 'tornado_city', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_city_level'), 'tornado_city', ['level'], unique=False)
op.create_index(op.f('ix_tornado_city_name'), 'tornado_city', ['name'], unique=False)
op.create_index(op.f('ix_tornado_city_parent_code'), 'tornado_city', ['parent_code'], unique=False)
op.create_index(op.f('ix_tornado_city_pid'), 'tornado_city', ['pid'], unique=False)
op.create_table('tornado_config',
sa.Column('name', sa.String(length=150), nullable=False, comment='配置名称'),
sa.Column('code', sa.String(length=150), nullable=False, comment='配置编码'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='配置排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='配置备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='系统配置表'
)
op.create_index(op.f('ix_tornado_config_code'), 'tornado_config', ['code'], unique=False)
op.create_index(op.f('ix_tornado_config_is_delete'), 'tornado_config', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_config_name'), 'tornado_config', ['name'], unique=False)
op.create_table('tornado_config_item',
sa.Column('name', sa.String(length=100), nullable=False, comment='配置项名称'),
sa.Column('code', sa.String(length=100), nullable=False, comment='配置项编码'),
sa.Column('value', sa.String(length=1000), nullable=False, comment='配置项值'),
sa.Column('options', sa.String(length=255), nullable=False, comment='配置选项'),
sa.Column('config_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='配置ID'),
sa.Column('type', sa.String(length=100), nullable=False, comment='配置类型'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='配置状态:1-正常 2-停用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='配置项排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='配置项备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='配置项表'
)
op.create_index(op.f('ix_tornado_config_item_config_id'), 'tornado_config_item', ['config_id'], unique=False)
op.create_index(op.f('ix_tornado_config_item_is_delete'), 'tornado_config_item', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_config_item_name'), 'tornado_config_item', ['name'], unique=False)
op.create_index(op.f('ix_tornado_config_item_status'), 'tornado_config_item', ['status'], unique=False)
op.create_table('tornado_dept',
sa.Column('name', sa.String(length=150), nullable=False, comment='部门名称'),
sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门类型:1-公司 2-子公司 3-部门 4-小组'),
sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级部门ID'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='部门表'
)
op.create_index(op.f('ix_tornado_dept_is_delete'), 'tornado_dept', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_dept_name'), 'tornado_dept', ['name'], unique=False)
op.create_index(op.f('ix_tornado_dept_parent_id'), 'tornado_dept', ['parent_id'], unique=False)
op.create_table('tornado_dict',
sa.Column('name', sa.String(length=150), nullable=False, comment='字典名称'),
sa.Column('code', sa.String(length=150), nullable=False, comment='字典编码'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='字典备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='数据字典表'
)
op.create_index(op.f('ix_tornado_dict_code'), 'tornado_dict', ['code'], unique=False)
op.create_index(op.f('ix_tornado_dict_is_delete'), 'tornado_dict', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_dict_name'), 'tornado_dict', ['name'], unique=False)
op.create_table('tornado_dict_item',
sa.Column('name', sa.String(length=150), nullable=False, comment='字典项名称'),
sa.Column('value', sa.String(length=150), nullable=False, comment='字典项值'),
sa.Column('dict_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典ID'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典项顺序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='字典项备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='字典项表'
)
op.create_index(op.f('ix_tornado_dict_item_dict_id'), 'tornado_dict_item', ['dict_id'], unique=False)
op.create_index(op.f('ix_tornado_dict_item_is_delete'), 'tornado_dict_item', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_dict_item_name'), 'tornado_dict_item', ['name'], unique=False)
op.create_table('tornado_file_template',
sa.Column('name', sa.String(length=100), nullable=True, comment='模板名称'),
sa.Column('code', sa.String(length=50), nullable=True, comment='模板编码'),
sa.Column('file_name', sa.String(length=255), nullable=True, comment='文件名称'),
sa.Column('file_path', sa.String(length=255), nullable=True, comment='文件路径'),
sa.Column('note', sa.String(length=255), nullable=True, comment='文件模板备注'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文件模板顺序'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='文件模板表'
)
op.create_index(op.f('ix_tornado_file_template_code'), 'tornado_file_template', ['code'], unique=False)
op.create_index(op.f('ix_tornado_file_template_is_delete'), 'tornado_file_template', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_file_template_name'), 'tornado_file_template', ['name'], unique=False)
op.create_table('tornado_job',
sa.Column('job_name', sa.String(length=255), nullable=False, comment='任务名称'),
sa.Column('job_alias', sa.String(length=255), nullable=True, comment='任务别名'),
sa.Column('job_group', sa.String(length=255), nullable=True, comment='任务分组'),
sa.Column('job_trigger', sa.String(length=255), nullable=True, comment='任务触发器'),
sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='任务状态:0-未发布 1-运行中 2-暂停 3-删除'),
sa.Column('cron_expression', sa.String(length=255), nullable=True, comment='Cron表达式'),
sa.Column('execute_policy', sa.SmallInteger(), server_default=sa.text('1'), nullable=False, comment='执行策略:1-立即执行 2-执行一次 3-放弃执行'),
sa.Column('is_sync', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='是否同步任务:0-否 1-是'),
sa.Column('url', sa.String(length=255), nullable=True, comment='任务URL'),
sa.Column('params', sa.Text(), nullable=True, comment='任务参数'),
sa.Column('note', sa.String(length=255), nullable=True, comment='任务备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='定时任务表'
)
op.create_index(op.f('ix_tornado_job_is_delete'), 'tornado_job', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_job_job_name'), 'tornado_job', ['job_name'], unique=False)
op.create_index(op.f('ix_tornado_job_status'), 'tornado_job', ['status'], unique=False)
op.create_table('tornado_job_log',
sa.Column('job_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='任务ID'),
sa.Column('job_name', sa.String(length=255), nullable=False, comment='任务名称'),
sa.Column('job_group', sa.String(length=255), nullable=True, comment='任务分组'),
sa.Column('job_trigger', sa.String(length=255), nullable=True, comment='任务触发器'),
sa.Column('job_message', sa.String(length=500), nullable=True, comment='任务日志信息'),
sa.Column('cron_expression', sa.String(length=255), nullable=True, comment='Cron表达式'),
sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='执行状态:0-正常 1-失败'),
sa.Column('start_time', sa.DateTime(), nullable=True, comment='执行开始时间'),
sa.Column('end_time', sa.DateTime(), nullable=True, comment='执行结束时间'),
sa.Column('consume_time', sa.BigInteger(), server_default=sa.text('0'), nullable=False, comment='执行耗时(毫秒)'),
sa.Column('exception_info', sa.Text(), nullable=True, comment='异常信息'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='定时任务日志表'
)
op.create_index(op.f('ix_tornado_job_log_is_delete'), 'tornado_job_log', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_job_log_job_id'), 'tornado_job_log', ['job_id'], unique=False)
op.create_index(op.f('ix_tornado_job_log_status'), 'tornado_job_log', ['status'], unique=False)
op.create_table('tornado_level',
sa.Column('name', sa.String(length=255), nullable=False, comment='职级名称'),
sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级状态:1-在用 2-停用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级排序'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='职级表'
)
op.create_index(op.f('ix_tornado_level_is_delete'), 'tornado_level', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_level_name'), 'tornado_level', ['name'], unique=False)
op.create_index(op.f('ix_tornado_level_status'), 'tornado_level', ['status'], unique=False)
op.create_table('tornado_link',
sa.Column('name', sa.String(length=255), nullable=False, comment='友链名称'),
sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链类型:1-友情链接 2-合作伙伴'),
sa.Column('url', sa.String(length=255), nullable=True, comment='友链URL'),
sa.Column('form', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链形式:1-文字链接 2-图片链接'),
sa.Column('image', sa.String(length=255), nullable=True, comment='友链图片'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链状态:1-正常 2-停用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='友链顺序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='友链备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='友链表'
)
op.create_index(op.f('ix_tornado_link_is_delete'), 'tornado_link', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_link_name'), 'tornado_link', ['name'], unique=False)
op.create_index(op.f('ix_tornado_link_status'), 'tornado_link', ['status'], unique=False)
op.create_table('tornado_login_log',
sa.Column('username', sa.String(length=50), nullable=False, comment='登录账号'),
sa.Column('log_type', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='日志类型:1-登录 2-退出'),
sa.Column('source', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='登录来源:0-后台 1-前台'),
sa.Column('method', sa.String(length=10), nullable=False, comment='请求方法'),
sa.Column('request_method', sa.String(length=10), nullable=False, comment='请求方式'),
sa.Column('url', sa.String(length=500), nullable=False, comment='请求URL'),
sa.Column('param', sa.Text(), nullable=True, comment='请求参数'),
sa.Column('result', sa.Text(), nullable=False, comment='返回结果'),
sa.Column('ip', sa.String(length=50), nullable=False, comment='IP地址'),
sa.Column('location', sa.String(length=100), nullable=False, comment='IP归属地'),
sa.Column('os', sa.String(length=100), nullable=False, comment='操作系统'),
sa.Column('browser', sa.String(length=100), nullable=False, comment='浏览器'),
sa.Column('consume_time', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='请求耗时(毫秒)'),
sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='操作状态:0-正常 1-异常'),
sa.Column('error', sa.Text(), nullable=True, comment='错误信息'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='登录日志表'
)
op.create_index(op.f('ix_tornado_login_log_is_delete'), 'tornado_login_log', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_login_log_log_type'), 'tornado_login_log', ['log_type'], unique=False)
op.create_index(op.f('ix_tornado_login_log_username'), 'tornado_login_log', ['username'], unique=False)
op.create_table('tornado_menu',
sa.Column('name', sa.String(length=150), nullable=False, comment='菜单名称'),
sa.Column('icon', sa.String(length=50), nullable=True, comment='菜单图标'),
sa.Column('icon2', sa.String(length=50), nullable=True, comment='菜单图标'),
sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级ID'),
sa.Column('path', sa.String(length=255), nullable=True, comment='菜单路径'),
sa.Column('component', sa.String(length=255), nullable=True, comment='菜单组件'),
sa.Column('permission', sa.String(length=150), nullable=True, comment='权限节点'),
sa.Column('target', sa.String(length=30), nullable=True, comment='打开方式:1-内部打开 2-外部打开'),
sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='菜单类型:0-菜单 1-节点'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='菜单状态:1-正常 2-停用'),
sa.Column('hide', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='是否可见:0-可见 1-不可见'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='菜单表'
)
op.create_index(op.f('ix_tornado_menu_is_delete'), 'tornado_menu', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_menu_name'), 'tornado_menu', ['name'], unique=False)
op.create_index(op.f('ix_tornado_menu_parent_id'), 'tornado_menu', ['parent_id'], unique=False)
op.create_index(op.f('ix_tornado_menu_permission'), 'tornado_menu', ['permission'], unique=False)
op.create_index(op.f('ix_tornado_menu_status'), 'tornado_menu', ['status'], unique=False)
op.create_index(op.f('ix_tornado_menu_type'), 'tornado_menu', ['type'], unique=False)
op.create_table('tornado_notice',
sa.Column('title', sa.String(length=255), nullable=False, comment='通知标题'),
sa.Column('cover', sa.String(length=255), nullable=True, comment='通知封面'),
sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='通知类型:1-通知 2-公告'),
sa.Column('click_num', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='点击率'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='通知状态:1-正常 2-停用'),
sa.Column('content', sa.Text(), nullable=True, comment='通知公告内容'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='通知公告表'
)
op.create_index(op.f('ix_tornado_notice_is_delete'), 'tornado_notice', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_notice_status'), 'tornado_notice', ['status'], unique=False)
op.create_index(op.f('ix_tornado_notice_title'), 'tornado_notice', ['title'], unique=False)
op.create_index(op.f('ix_tornado_notice_type'), 'tornado_notice', ['type'], unique=False)
op.create_table('tornado_operation_log',
sa.Column('title', sa.String(length=150), nullable=False, comment='请求标题'),
sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='请求类型:1-新增 2-修改 3-删除'),
sa.Column('source', sa.SmallInteger(), server_default=sa.text('1'), nullable=False, comment='请求来源:1-PC端 2-移动端'),
sa.Column('method', sa.String(length=100), nullable=False, comment='请求方法(操作)'),
sa.Column('request_method', sa.String(length=100), nullable=False, comment='请求方式(HTTP)'),
sa.Column('url', sa.String(length=1000), nullable=False, comment='请求URL'),
sa.Column('param', sa.Text(), nullable=True, comment='请求参数'),
sa.Column('result', sa.Text(), nullable=True, comment='请求结果'),
sa.Column('ip', sa.String(length=100), nullable=False, comment='请求IP'),
sa.Column('location', sa.String(length=255), nullable=False, comment='请求所在区域'),
sa.Column('os', sa.String(length=100), nullable=False, comment='操作系统'),
sa.Column('browser', sa.String(length=100), nullable=False, comment='浏览器'),
sa.Column('consume_time', sa.BigInteger(), server_default=sa.text('0'), nullable=False, comment='请求耗时(毫秒)'),
sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='请求状态:0-成功 1-失败'),
sa.Column('error', sa.Text(), nullable=True, comment='错误描述'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='操作日志表'
)
op.create_index(op.f('ix_tornado_operation_log_is_delete'), 'tornado_operation_log', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_operation_log_title'), 'tornado_operation_log', ['title'], unique=False)
op.create_index(op.f('ix_tornado_operation_log_type'), 'tornado_operation_log', ['type'], unique=False)
op.create_table('tornado_param',
sa.Column('name', sa.String(length=100), nullable=False, comment='参数名称'),
sa.Column('code', sa.String(length=100), nullable=False, comment='参数编码'),
sa.Column('value', sa.String(length=255), nullable=False, comment='参数值'),
sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='参数类型:0-系统 1-业务'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='参数状态:1-正常 2-禁用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='参数排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='参数备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='系统参数表'
)
op.create_index(op.f('ix_tornado_param_code'), 'tornado_param', ['code'], unique=False)
op.create_index(op.f('ix_tornado_param_is_delete'), 'tornado_param', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_param_name'), 'tornado_param', ['name'], unique=False)
op.create_index(op.f('ix_tornado_param_status'), 'tornado_param', ['status'], unique=False)
op.create_table('tornado_position',
sa.Column('name', sa.String(length=255), nullable=False, comment='岗位名称'),
sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位状态:1-在用 2-停用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位排序'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='岗位表'
)
op.create_index(op.f('ix_tornado_position_is_delete'), 'tornado_position', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_position_name'), 'tornado_position', ['name'], unique=False)
op.create_index(op.f('ix_tornado_position_status'), 'tornado_position', ['status'], unique=False)
op.create_table('tornado_role',
sa.Column('name', sa.String(length=150), nullable=False, comment='角色名称'),
sa.Column('code', sa.String(length=30), nullable=False, comment='角色编码'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='角色排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='角色备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='角色表'
)
op.create_index(op.f('ix_tornado_role_code'), 'tornado_role', ['code'], unique=False)
op.create_index(op.f('ix_tornado_role_is_delete'), 'tornado_role', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_role_name'), 'tornado_role', ['name'], unique=False)
op.create_table('tornado_role_menu',
sa.Column('role_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='角色ID'),
sa.Column('menu_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='菜单ID'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='角色菜单关联表'
)
op.create_index(op.f('ix_tornado_role_menu_is_delete'), 'tornado_role_menu', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_role_menu_menu_id'), 'tornado_role_menu', ['menu_id'], unique=False)
op.create_index(op.f('ix_tornado_role_menu_role_id'), 'tornado_role_menu', ['role_id'], unique=False)
op.create_table('tornado_user',
sa.Column('code', sa.String(length=100), server_default=sa.text("''"), nullable=False, comment='用户编码'),
sa.Column('realname', sa.String(length=150), nullable=False, comment='用户姓名'),
sa.Column('gender', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='性别:1-男 2-女 3-保密'),
sa.Column('avatar', sa.String(length=255), nullable=False, comment='用户头像'),
sa.Column('mobile', sa.String(length=30), nullable=False, comment='手机号'),
sa.Column('email', sa.String(length=30), nullable=False, comment='邮箱'),
sa.Column('dept_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门ID'),
sa.Column('level_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级ID'),
sa.Column('position_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位ID'),
sa.Column('province_code', sa.String(length=30), nullable=False, comment='省份编码'),
sa.Column('city_code', sa.String(length=30), nullable=False, comment='城市编码'),
sa.Column('district_code', sa.String(length=30), nullable=False, comment='县区编码'),
sa.Column('street_code', sa.String(length=30), nullable=False, comment='街道编码'),
sa.Column('city_info', sa.String(length=255), nullable=True, comment='省市区信息'),
sa.Column('address', sa.String(length=255), nullable=False, comment='详细地址'),
sa.Column('username', sa.String(length=30), nullable=True, comment='用户名'),
sa.Column('password', sa.String(length=255), nullable=True, comment='密码'),
sa.Column('salt', sa.String(length=30), nullable=True, comment='加密盐'),
sa.Column('intro', sa.String(length=255), nullable=True, comment='个人简介'),
sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='状态:1-正常 2-禁用'),
sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'),
sa.Column('note', sa.String(length=255), nullable=True, comment='个人备注'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='用户表'
)
op.create_index(op.f('ix_tornado_user_code'), 'tornado_user', ['code'], unique=False)
op.create_index(op.f('ix_tornado_user_dept_id'), 'tornado_user', ['dept_id'], unique=False)
op.create_index(op.f('ix_tornado_user_email'), 'tornado_user', ['email'], unique=False)
op.create_index(op.f('ix_tornado_user_is_delete'), 'tornado_user', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_user_mobile'), 'tornado_user', ['mobile'], unique=False)
op.create_index(op.f('ix_tornado_user_realname'), 'tornado_user', ['realname'], unique=False)
op.create_index(op.f('ix_tornado_user_status'), 'tornado_user', ['status'], unique=False)
op.create_index(op.f('ix_tornado_user_username'), 'tornado_user', ['username'], unique=False)
op.create_table('tornado_user_role',
sa.Column('user_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='用户ID'),
sa.Column('role_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='角色ID'),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'),
sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'),
sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'),
sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'),
sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'),
sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'),
sa.PrimaryKeyConstraint('id'),
comment='用户角色关联表'
)
op.create_index(op.f('ix_tornado_user_role_is_delete'), 'tornado_user_role', ['is_delete'], unique=False)
op.create_index(op.f('ix_tornado_user_role_role_id'), 'tornado_user_role', ['role_id'], unique=False)
op.create_index(op.f('ix_tornado_user_role_user_id'), 'tornado_user_role', ['user_id'], unique=False)
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_tornado_user_role_user_id'), table_name='tornado_user_role')
op.drop_index(op.f('ix_tornado_user_role_role_id'), table_name='tornado_user_role')
op.drop_index(op.f('ix_tornado_user_role_is_delete'), table_name='tornado_user_role')
op.drop_table('tornado_user_role')
op.drop_index(op.f('ix_tornado_user_username'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_status'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_realname'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_mobile'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_is_delete'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_email'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_dept_id'), table_name='tornado_user')
op.drop_index(op.f('ix_tornado_user_code'), table_name='tornado_user')
op.drop_table('tornado_user')
op.drop_index(op.f('ix_tornado_role_menu_role_id'), table_name='tornado_role_menu')
op.drop_index(op.f('ix_tornado_role_menu_menu_id'), table_name='tornado_role_menu')
op.drop_index(op.f('ix_tornado_role_menu_is_delete'), table_name='tornado_role_menu')
op.drop_table('tornado_role_menu')
op.drop_index(op.f('ix_tornado_role_name'), table_name='tornado_role')
op.drop_index(op.f('ix_tornado_role_is_delete'), table_name='tornado_role')
op.drop_index(op.f('ix_tornado_role_code'), table_name='tornado_role')
op.drop_table('tornado_role')
op.drop_index(op.f('ix_tornado_position_status'), table_name='tornado_position')
op.drop_index(op.f('ix_tornado_position_name'), table_name='tornado_position')
op.drop_index(op.f('ix_tornado_position_is_delete'), table_name='tornado_position')
op.drop_table('tornado_position')
op.drop_index(op.f('ix_tornado_param_status'), table_name='tornado_param')
op.drop_index(op.f('ix_tornado_param_name'), table_name='tornado_param')
op.drop_index(op.f('ix_tornado_param_is_delete'), table_name='tornado_param')
op.drop_index(op.f('ix_tornado_param_code'), table_name='tornado_param')
op.drop_table('tornado_param')
op.drop_index(op.f('ix_tornado_operation_log_type'), table_name='tornado_operation_log')
op.drop_index(op.f('ix_tornado_operation_log_title'), table_name='tornado_operation_log')
op.drop_index(op.f('ix_tornado_operation_log_is_delete'), table_name='tornado_operation_log')
op.drop_table('tornado_operation_log')
op.drop_index(op.f('ix_tornado_notice_type'), table_name='tornado_notice')
op.drop_index(op.f('ix_tornado_notice_title'), table_name='tornado_notice')
op.drop_index(op.f('ix_tornado_notice_status'), table_name='tornado_notice')
op.drop_index(op.f('ix_tornado_notice_is_delete'), table_name='tornado_notice')
op.drop_table('tornado_notice')
op.drop_index(op.f('ix_tornado_menu_type'), table_name='tornado_menu')
op.drop_index(op.f('ix_tornado_menu_status'), table_name='tornado_menu')
op.drop_index(op.f('ix_tornado_menu_permission'), table_name='tornado_menu')
op.drop_index(op.f('ix_tornado_menu_parent_id'), table_name='tornado_menu')
op.drop_index(op.f('ix_tornado_menu_name'), table_name='tornado_menu')
op.drop_index(op.f('ix_tornado_menu_is_delete'), table_name='tornado_menu')
op.drop_table('tornado_menu')
op.drop_index(op.f('ix_tornado_login_log_username'), table_name='tornado_login_log')
op.drop_index(op.f('ix_tornado_login_log_log_type'), table_name='tornado_login_log')
op.drop_index(op.f('ix_tornado_login_log_is_delete'), table_name='tornado_login_log')
op.drop_table('tornado_login_log')
op.drop_index(op.f('ix_tornado_link_status'), table_name='tornado_link')
op.drop_index(op.f('ix_tornado_link_name'), table_name='tornado_link')
op.drop_index(op.f('ix_tornado_link_is_delete'), table_name='tornado_link')
op.drop_table('tornado_link')
op.drop_index(op.f('ix_tornado_level_status'), table_name='tornado_level')
op.drop_index(op.f('ix_tornado_level_name'), table_name='tornado_level')
op.drop_index(op.f('ix_tornado_level_is_delete'), table_name='tornado_level')
op.drop_table('tornado_level')
op.drop_index(op.f('ix_tornado_job_log_status'), table_name='tornado_job_log')
op.drop_index(op.f('ix_tornado_job_log_job_id'), table_name='tornado_job_log')
op.drop_index(op.f('ix_tornado_job_log_is_delete'), table_name='tornado_job_log')
op.drop_table('tornado_job_log')
op.drop_index(op.f('ix_tornado_job_status'), table_name='tornado_job')
op.drop_index(op.f('ix_tornado_job_job_name'), table_name='tornado_job')
op.drop_index(op.f('ix_tornado_job_is_delete'), table_name='tornado_job')
op.drop_table('tornado_job')
op.drop_index(op.f('ix_tornado_file_template_name'), table_name='tornado_file_template')
op.drop_index(op.f('ix_tornado_file_template_is_delete'), table_name='tornado_file_template')
op.drop_index(op.f('ix_tornado_file_template_code'), table_name='tornado_file_template')
op.drop_table('tornado_file_template')
op.drop_index(op.f('ix_tornado_dict_item_name'), table_name='tornado_dict_item')
op.drop_index(op.f('ix_tornado_dict_item_is_delete'), table_name='tornado_dict_item')
op.drop_index(op.f('ix_tornado_dict_item_dict_id'), table_name='tornado_dict_item')
op.drop_table('tornado_dict_item')
op.drop_index(op.f('ix_tornado_dict_name'), table_name='tornado_dict')
op.drop_index(op.f('ix_tornado_dict_is_delete'), table_name='tornado_dict')
op.drop_index(op.f('ix_tornado_dict_code'), table_name='tornado_dict')
op.drop_table('tornado_dict')
op.drop_index(op.f('ix_tornado_dept_parent_id'), table_name='tornado_dept')
op.drop_index(op.f('ix_tornado_dept_name'), table_name='tornado_dept')
op.drop_index(op.f('ix_tornado_dept_is_delete'), table_name='tornado_dept')
op.drop_table('tornado_dept')
op.drop_index(op.f('ix_tornado_config_item_status'), table_name='tornado_config_item')
op.drop_index(op.f('ix_tornado_config_item_name'), table_name='tornado_config_item')
op.drop_index(op.f('ix_tornado_config_item_is_delete'), table_name='tornado_config_item')
op.drop_index(op.f('ix_tornado_config_item_config_id'), table_name='tornado_config_item')
op.drop_table('tornado_config_item')
op.drop_index(op.f('ix_tornado_config_name'), table_name='tornado_config')
op.drop_index(op.f('ix_tornado_config_is_delete'), table_name='tornado_config')
op.drop_index(op.f('ix_tornado_config_code'), table_name='tornado_config')
op.drop_table('tornado_config')
op.drop_index(op.f('ix_tornado_city_pid'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_parent_code'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_name'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_level'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_is_delete'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_city_code'), table_name='tornado_city')
op.drop_index(op.f('ix_tornado_city_area_code'), table_name='tornado_city')
op.drop_table('tornado_city')
op.drop_index(op.f('ix_tornado_category_parent_id'), table_name='tornado_category')
op.drop_index(op.f('ix_tornado_category_is_delete'), table_name='tornado_category')
op.drop_index(op.f('ix_tornado_category_category_name'), table_name='tornado_category')
op.drop_table('tornado_category')
op.drop_index(op.f('ix_tornado_article_title'), table_name='tornado_article')
op.drop_index(op.f('ix_tornado_article_status'), table_name='tornado_article')
op.drop_index(op.f('ix_tornado_article_is_delete'), table_name='tornado_article')
op.drop_index(op.f('ix_tornado_article_category_id'), table_name='tornado_article')
op.drop_table('tornado_article')
# ### end Alembic commands ###