dingdanquanliucheng/backend/app/models/business.py

106 lines
6.2 KiB
Python
Raw Normal View History

2026-05-14 10:15:51 +08:00
from sqlalchemy import BigInteger, Integer, Numeric, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from backend.app.models.base import BaseModel, TimestampMixin
class CrmCustomer(TimestampMixin, BaseModel):
__tablename__ = "crm_customer"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
customer_name: Mapped[str] = mapped_column(String(64), nullable=False)
mobile: Mapped[str] = mapped_column(String(20), nullable=False)
address: Mapped[str | None] = mapped_column(String(255))
settlement_type: Mapped[str | None] = mapped_column(String(32))
settlement_days: Mapped[int | None] = mapped_column(Integer)
settlement_start_type: Mapped[str | None] = mapped_column(String(32))
customer_type: Mapped[str | None] = mapped_column(String(32))
salesman_id: Mapped[int | None] = mapped_column(BigInteger)
credit_limit: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
arrears_amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
status: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
remark: Mapped[str | None] = mapped_column(String(500))
deleted: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
class Product(TimestampMixin, BaseModel):
__tablename__ = "product"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
product_name: Mapped[str] = mapped_column(String(128), nullable=False)
specification: Mapped[str] = mapped_column(String(128), nullable=False)
unit: Mapped[str] = mapped_column(String(32), nullable=False)
category: Mapped[str] = mapped_column(String(64), nullable=False)
cost_price: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
sale_price: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
status: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
remark: Mapped[str | None] = mapped_column(String(500))
deleted: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
class BaseSupplier(TimestampMixin, BaseModel):
__tablename__ = "base_supplier"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
supplier_name: Mapped[str] = mapped_column(String(128), nullable=False)
supplier_type: Mapped[str] = mapped_column(String(32), nullable=False)
contact_name: Mapped[str | None] = mapped_column(String(64))
contact_mobile: Mapped[str | None] = mapped_column(String(20))
address: Mapped[str | None] = mapped_column(String(255))
template_type: Mapped[str | None] = mapped_column(String(64))
status: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
remark: Mapped[str | None] = mapped_column(String(500))
deleted: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
class SalesOrder(TimestampMixin, BaseModel):
__tablename__ = "sales_order"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
order_no: Mapped[str] = mapped_column(String(64), nullable=False, unique=True)
customer_id: Mapped[int | None] = mapped_column(BigInteger)
customer_name_snapshot: Mapped[str] = mapped_column(String(64), nullable=False)
customer_mobile_snapshot: Mapped[str] = mapped_column(String(20), nullable=False)
salesman_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
order_source: Mapped[str | None] = mapped_column(String(64))
order_status: Mapped[str] = mapped_column(String(32), nullable=False)
delivery_type: Mapped[str | None] = mapped_column(String(32))
factory_id: Mapped[int | None] = mapped_column(BigInteger)
sale_price_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
cost_price_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
rebate_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
freight_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
tax_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
other_fee_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
profit_total: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
profit_rate: Mapped[float] = mapped_column(Numeric(10, 4), nullable=False, default=0)
created_by: Mapped[int] = mapped_column(BigInteger, nullable=False)
submitted_at: Mapped[str | None] = mapped_column(String(32))
approved_by: Mapped[int | None] = mapped_column(BigInteger)
approved_at: Mapped[str | None] = mapped_column(String(32))
canceled_at: Mapped[str | None] = mapped_column(String(32))
completed_at: Mapped[str | None] = mapped_column(String(32))
remark: Mapped[str | None] = mapped_column(String(1000))
deleted: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
class SalesOrderItem(TimestampMixin, BaseModel):
__tablename__ = "sales_order_item"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
order_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
product_id: Mapped[int | None] = mapped_column(BigInteger)
product_name_snapshot: Mapped[str] = mapped_column(String(128), nullable=False)
specification_snapshot: Mapped[str] = mapped_column(String(128), nullable=False)
unit_snapshot: Mapped[str] = mapped_column(String(32), nullable=False)
quantity: Mapped[float] = mapped_column(Numeric(18, 4), nullable=False, default=0)
sale_price: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
cost_price: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
rebate_amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
freight_amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
tax_amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
other_fee_amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
line_profit: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False, default=0)
remark: Mapped[str | None] = mapped_column(String(500))
deleted: Mapped[int] = mapped_column(Integer, nullable=False, default=0)