dingdanquanliucheng/backend/migrations/versions/20260514_0001_init_models.py

419 lines
24 KiB
Python

"""init models"""
from alembic import op
import sqlalchemy as sa
revision = "20260514_0001"
down_revision = None
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
"sys_role",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("role_name", sa.String(length=64), nullable=False),
sa.Column("role_code", sa.String(length=64), nullable=False),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_sys_role_role_code", "sys_role", ["role_code"], unique=True)
op.create_table(
"sys_user",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("username", sa.String(length=64), nullable=False),
sa.Column("password_hash", sa.String(length=255), nullable=False),
sa.Column("real_name", sa.String(length=64), nullable=False),
sa.Column("mobile", sa.String(length=32), nullable=False, server_default=""),
sa.Column("role_id", sa.Integer(), nullable=False),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_sys_user_username", "sys_user", ["username"], unique=True)
op.create_index("ix_sys_user_role_id", "sys_user", ["role_id"], unique=False)
op.create_table(
"sys_menu",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("parent_id", sa.Integer(), nullable=False, server_default="0"),
sa.Column("menu_name", sa.String(length=64), nullable=False),
sa.Column("menu_path", sa.String(length=128), nullable=False, server_default=""),
sa.Column("menu_type", sa.String(length=32), nullable=False, server_default="page"),
sa.Column("permission_code", sa.String(length=128), nullable=False),
sa.Column("icon", sa.String(length=64), nullable=True),
sa.Column("sort_no", sa.Integer(), nullable=False, server_default="0"),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_sys_menu_permission_code", "sys_menu", ["permission_code"], unique=True)
op.create_table(
"sys_role_menu",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("role_id", sa.Integer(), nullable=False),
sa.Column("menu_id", sa.Integer(), nullable=False),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_sys_role_menu_role_id", "sys_role_menu", ["role_id"], unique=False)
op.create_index("ix_sys_role_menu_menu_id", "sys_role_menu", ["menu_id"], unique=False)
op.create_table(
"system_config",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("config_key", sa.String(length=128), nullable=False),
sa.Column("config_value", sa.String(length=2000), nullable=False, server_default=""),
sa.Column("config_name", sa.String(length=128), nullable=False),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_system_config_config_key", "system_config", ["config_key"], unique=True)
op.create_table(
"audit_log",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("operator_id", sa.Integer(), nullable=True),
sa.Column("operator_name", sa.String(length=64), nullable=True),
sa.Column("operate_time", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("operate_type", sa.String(length=64), nullable=False),
sa.Column("biz_type", sa.String(length=64), nullable=False),
sa.Column("biz_id", sa.Integer(), nullable=False),
sa.Column("before_value", sa.String(length=4000), nullable=True),
sa.Column("after_value", sa.String(length=4000), nullable=True),
sa.Column("result", sa.String(length=32), nullable=False, server_default="success"),
sa.Column("remark", sa.String(length=1000), nullable=True),
)
op.create_index("ix_audit_log_operator_id", "audit_log", ["operator_id"], unique=False)
op.create_index("ix_audit_log_operate_time", "audit_log", ["operate_time"], unique=False)
op.create_index("ix_audit_log_biz_type", "audit_log", ["biz_type"], unique=False)
op.create_index("ix_audit_log_biz_id", "audit_log", ["biz_id"], unique=False)
op.create_table(
"product_category",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("category_name", sa.String(length=64), nullable=False),
sa.Column("category_code", sa.String(length=64), nullable=False),
sa.Column("sort_no", sa.Integer(), nullable=False, server_default="0"),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_product_category_category_code", "product_category", ["category_code"], unique=True)
op.create_table(
"product",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("product_name", sa.String(length=64), nullable=False),
sa.Column("specification", sa.String(length=64), nullable=False, server_default=""),
sa.Column("unit", sa.String(length=32), nullable=False, server_default=""),
sa.Column("category", sa.String(length=64), nullable=True),
sa.Column("category_id", sa.Integer(), nullable=True),
sa.Column("cost_price", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("sale_price", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_product_product_name", "product", ["product_name"], unique=False)
op.create_table(
"customer",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("customer_name", sa.String(length=64), nullable=False),
sa.Column("mobile", sa.String(length=32), nullable=False),
sa.Column("address", sa.String(length=255), nullable=True),
sa.Column("settlement_type", sa.String(length=32), nullable=True),
sa.Column("settlement_days", sa.Integer(), nullable=False, server_default="0"),
sa.Column("customer_type", sa.String(length=32), nullable=True),
sa.Column("salesman_id", sa.Integer(), nullable=True),
sa.Column("credit_limit", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_customer_customer_name", "customer", ["customer_name"], unique=False)
op.create_index("ix_customer_mobile", "customer", ["mobile"], unique=False)
op.create_table(
"supplier",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("supplier_name", sa.String(length=64), nullable=False),
sa.Column("supplier_type", sa.String(length=32), nullable=False, server_default="factory"),
sa.Column("contact_name", sa.String(length=64), nullable=True),
sa.Column("contact_mobile", sa.String(length=32), nullable=True),
sa.Column("address", sa.String(length=255), nullable=True),
sa.Column("template_type", sa.String(length=64), nullable=True),
sa.Column("status", sa.Integer(), nullable=False, server_default="1"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_supplier_supplier_name", "supplier", ["supplier_name"], unique=False)
op.create_table(
"sales_order",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("order_no", sa.String(length=64), nullable=False),
sa.Column("customer_id", sa.Integer(), nullable=True),
sa.Column("customer_name", sa.String(length=64), nullable=False),
sa.Column("customer_mobile", sa.String(length=32), nullable=False),
sa.Column("customer_address", sa.String(length=255), nullable=True),
sa.Column("salesman_id", sa.Integer(), nullable=True),
sa.Column("order_status", sa.String(length=32), nullable=False, server_default="draft"),
sa.Column("order_source", sa.String(length=64), nullable=True),
sa.Column("delivery_type", sa.String(length=64), nullable=True),
sa.Column("factory_id", sa.Integer(), nullable=True),
sa.Column("sale_price_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("cost_price_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("rebate_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("freight_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("tax_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("other_fee_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("profit_total", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("profit_rate", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("commission_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("cancel_requested_by", sa.Integer(), nullable=True),
sa.Column("cancel_requested_at", sa.DateTime(), nullable=True),
sa.Column("cancel_reason", sa.String(length=255), nullable=True),
sa.Column("cancel_opinion", sa.Text(), nullable=True),
sa.Column("cancel_previous_status", sa.String(length=32), nullable=True),
sa.Column("supplier_text_confirmed_at", sa.DateTime(), nullable=True),
sa.Column("supplier_text_confirmed_by", sa.Integer(), nullable=True),
sa.Column("remark", sa.Text(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_sales_order_order_no", "sales_order", ["order_no"], unique=True)
op.create_index("ix_sales_order_order_status", "sales_order", ["order_status"], unique=False)
op.create_table(
"sales_order_item",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("product_id", sa.Integer(), nullable=True),
sa.Column("product_name", sa.String(length=64), nullable=False),
sa.Column("specification", sa.String(length=64), nullable=False, server_default=""),
sa.Column("unit", sa.String(length=32), nullable=False, server_default=""),
sa.Column("quantity", sa.Numeric(18, 4), nullable=False, server_default="0"),
sa.Column("sale_price", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("cost_price", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("rebate_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("freight_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("tax_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("other_fee_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_sales_order_item_order_id", "sales_order_item", ["order_id"], unique=False)
op.create_table(
"sales_order_approve_log",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("approve_type", sa.String(length=32), nullable=False, server_default="order"),
sa.Column("approve_result", sa.String(length=32), nullable=False),
sa.Column("before_status", sa.String(length=32), nullable=True),
sa.Column("after_status", sa.String(length=32), nullable=True),
sa.Column("approve_opinion", sa.Text(), nullable=True),
sa.Column("operator_id", sa.Integer(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_table(
"logistics_task",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("driver_id", sa.Integer(), nullable=False),
sa.Column("factory_id", sa.Integer(), nullable=True),
sa.Column("pickup_address", sa.String(length=255), nullable=False),
sa.Column("delivery_address", sa.String(length=255), nullable=False),
sa.Column("pickup_content", sa.String(length=255), nullable=False),
sa.Column("quantity", sa.Numeric(18, 4), nullable=False, server_default="0"),
sa.Column("status", sa.String(length=32), nullable=False, server_default="pending"),
sa.Column("created_by", sa.Integer(), nullable=True),
sa.Column("canceled_by", sa.Integer(), nullable=True),
sa.Column("cancel_reason", sa.String(length=255), nullable=True),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("deleted", sa.Integer(), nullable=False, server_default="0"),
)
op.create_index("ix_logistics_task_order_id", "logistics_task", ["order_id"], unique=False)
op.create_index("ix_logistics_task_driver_id", "logistics_task", ["driver_id"], unique=False)
op.create_table(
"logistics_trace",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("task_id", sa.Integer(), nullable=True),
sa.Column("node_time", sa.DateTime(), nullable=False),
sa.Column("node_desc", sa.String(length=500), nullable=False),
sa.Column("node_type", sa.String(length=64), nullable=True),
sa.Column("source_platform", sa.String(length=64), nullable=True),
sa.Column("remark", sa.String(length=255), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_logistics_trace_order_id", "logistics_trace", ["order_id"], unique=False)
op.create_index("ix_logistics_trace_task_id", "logistics_trace", ["task_id"], unique=False)
op.create_table(
"file_attachment",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("biz_type", sa.String(length=64), nullable=False),
sa.Column("biz_id", sa.Integer(), nullable=False),
sa.Column("file_name", sa.String(length=255), nullable=False),
sa.Column("file_url", sa.String(length=1000), nullable=False),
sa.Column("file_type", sa.String(length=64), nullable=True),
sa.Column("file_size", sa.Integer(), nullable=True),
sa.Column("created_by", sa.Integer(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
sa.Column("storage_provider", sa.String(length=32), nullable=True, server_default="aliyun_oss"),
sa.Column("bucket_name", sa.String(length=128), nullable=True),
sa.Column("object_key", sa.String(length=1000), nullable=True),
sa.Column("content_type", sa.String(length=128), nullable=True),
sa.Column("file_ext", sa.String(length=32), nullable=True),
sa.Column("file_category", sa.String(length=32), nullable=True),
)
op.create_index("ix_file_attachment_biz_type", "file_attachment", ["biz_type"], unique=False)
op.create_index("ix_file_attachment_biz_id", "file_attachment", ["biz_id"], unique=False)
op.create_table(
"customer_arrears",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("customer_id", sa.Integer(), nullable=False),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("arrears_amount", sa.Numeric(18, 2), nullable=False, server_default="0"),
sa.Column("settlement_start_date", sa.Date(), nullable=True),
sa.Column("due_date", sa.Date(), nullable=True),
sa.Column("status", sa.String(length=32), nullable=False, server_default="pending"),
sa.Column("reminded_at", sa.DateTime(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_customer_arrears_customer_id", "customer_arrears", ["customer_id"], unique=False)
op.create_index("ix_customer_arrears_order_id", "customer_arrears", ["order_id"], unique=False)
op.create_table(
"system_reminder",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("reminder_type", sa.String(length=64), nullable=False),
sa.Column("biz_type", sa.String(length=64), nullable=False),
sa.Column("biz_id", sa.Integer(), nullable=False),
sa.Column("receiver_user_id", sa.Integer(), nullable=False),
sa.Column("reminder_title", sa.String(length=255), nullable=False),
sa.Column("reminder_content", sa.String(length=2000), nullable=False),
sa.Column("status", sa.String(length=32), nullable=False, server_default="pending"),
sa.Column("sent_at", sa.DateTime(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_system_reminder_reminder_type", "system_reminder", ["reminder_type"], unique=False)
op.create_index("ix_system_reminder_biz_type", "system_reminder", ["biz_type"], unique=False)
op.create_index("ix_system_reminder_biz_id", "system_reminder", ["biz_id"], unique=False)
op.create_index("ix_system_reminder_receiver_user_id", "system_reminder", ["receiver_user_id"], unique=False)
op.create_table(
"ai_recognition_log",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("biz_type", sa.String(length=64), nullable=False),
sa.Column("biz_id", sa.Integer(), nullable=False),
sa.Column("image_url", sa.String(length=1000), nullable=False),
sa.Column("raw_result", sa.Text(), nullable=True),
sa.Column("confidence", sa.Numeric(10, 4), nullable=True),
sa.Column("corrected_result", sa.Text(), nullable=True),
sa.Column("created_by", sa.Integer(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
)
op.create_index("ix_ai_recognition_log_biz_type", "ai_recognition_log", ["biz_type"], unique=False)
op.create_index("ix_ai_recognition_log_biz_id", "ai_recognition_log", ["biz_id"], unique=False)
def downgrade() -> None:
op.drop_index("ix_ai_recognition_log_biz_id", table_name="ai_recognition_log")
op.drop_index("ix_ai_recognition_log_biz_type", table_name="ai_recognition_log")
op.drop_table("ai_recognition_log")
op.drop_index("ix_system_reminder_receiver_user_id", table_name="system_reminder")
op.drop_index("ix_system_reminder_biz_id", table_name="system_reminder")
op.drop_index("ix_system_reminder_biz_type", table_name="system_reminder")
op.drop_index("ix_system_reminder_reminder_type", table_name="system_reminder")
op.drop_table("system_reminder")
op.drop_index("ix_customer_arrears_order_id", table_name="customer_arrears")
op.drop_index("ix_customer_arrears_customer_id", table_name="customer_arrears")
op.drop_table("customer_arrears")
op.drop_index("ix_file_attachment_biz_id", table_name="file_attachment")
op.drop_index("ix_file_attachment_biz_type", table_name="file_attachment")
op.drop_table("file_attachment")
op.drop_index("ix_logistics_trace_task_id", table_name="logistics_trace")
op.drop_index("ix_logistics_trace_order_id", table_name="logistics_trace")
op.drop_table("logistics_trace")
op.drop_index("ix_logistics_task_driver_id", table_name="logistics_task")
op.drop_index("ix_logistics_task_order_id", table_name="logistics_task")
op.drop_table("logistics_task")
op.drop_table("sales_order_approve_log")
op.drop_index("ix_sales_order_item_order_id", table_name="sales_order_item")
op.drop_table("sales_order_item")
op.drop_index("ix_sales_order_order_status", table_name="sales_order")
op.drop_index("ix_sales_order_order_no", table_name="sales_order")
op.drop_table("sales_order")
op.drop_index("ix_supplier_supplier_name", table_name="supplier")
op.drop_table("supplier")
op.drop_index("ix_customer_mobile", table_name="customer")
op.drop_index("ix_customer_customer_name", table_name="customer")
op.drop_table("customer")
op.drop_index("ix_product_product_name", table_name="product")
op.drop_table("product")
op.drop_index("ix_product_category_category_code", table_name="product_category")
op.drop_table("product_category")
op.drop_index("ix_audit_log_biz_id", table_name="audit_log")
op.drop_index("ix_audit_log_biz_type", table_name="audit_log")
op.drop_index("ix_audit_log_operate_time", table_name="audit_log")
op.drop_index("ix_audit_log_operator_id", table_name="audit_log")
op.drop_table("audit_log")
op.drop_index("ix_system_config_config_key", table_name="system_config")
op.drop_table("system_config")
op.drop_index("ix_sys_role_menu_menu_id", table_name="sys_role_menu")
op.drop_index("ix_sys_role_menu_role_id", table_name="sys_role_menu")
op.drop_table("sys_role_menu")
op.drop_index("ix_sys_menu_permission_code", table_name="sys_menu")
op.drop_table("sys_menu")
op.drop_index("ix_sys_user_role_id", table_name="sys_user")
op.drop_index("ix_sys_user_username", table_name="sys_user")
op.drop_table("sys_user")
op.drop_index("ix_sys_role_role_code", table_name="sys_role")
op.drop_table("sys_role")