"""数据模型""" from datetime import datetime from sqlalchemy import Column, String, DateTime, Integer, Boolean, Text, Numeric, PrimaryKeyConstraint from sqlalchemy.orm import relationship from app.core.database import Base import enum class UserRole(str, enum.Enum): """用户角色""" ADMIN = "admin" # 运营人员 SUPPLIER = "supplier" # 供应商 CLIENT = "client" # 客户 DELIVER = "deliver" # 配送人员 # ========================================= # 系统模块 # ========================================= class SysUser(Base): """用户表""" __tablename__ = "sys_user" id = Column(String(32), primary_key=True, comment="主键ID") username = Column(String(50), unique=True, nullable=False, comment="用户名") password_hash = Column(String(255), nullable=False, comment="密码哈希") real_name = Column(String(100), nullable=True, comment="真实姓名") phone = Column(String(20), nullable=True, comment="联系电话") avatar_url = Column(String(512), nullable=True, comment="头像URL") wx_mini_openid = Column(String(64), nullable=True, unique=True, comment="微信小程序openid") role = Column(String(20), nullable=False, comment="角色") region_id = Column(String(32), nullable=True, comment="所属区域ID") is_active = Column(Boolean, default=True, comment="是否激活") is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysUserHis(Base): """用户历史表""" __tablename__ = "sys_user_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") username = Column(String(50), nullable=False, comment="用户名") password_hash = Column(String(255), nullable=False, comment="密码哈希") real_name = Column(String(100), nullable=True, comment="真实姓名") phone = Column(String(20), nullable=True, comment="联系电话") avatar_url = Column(String(512), nullable=True, comment="头像URL") wx_mini_openid = Column(String(64), nullable=True, comment="微信小程序openid") role = Column(String(20), nullable=False, comment="角色") region_id = Column(String(32), nullable=True, comment="所属区域ID") is_active = Column(Boolean, default=True, comment="是否激活") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysRegion(Base): """区域表""" __tablename__ = "sys_region" id = Column(String(32), primary_key=True, comment="主键ID") name = Column(String(100), nullable=False, comment="区域名称") code = Column(String(50), unique=True, nullable=False, comment="区域编码") description = Column(String(500), nullable=True, comment="区域描述") sort_order = Column(Integer, default=0, comment="排序") expected_delivery_minutes = Column(Integer, nullable=True, comment="预计配送时长(分钟)") delivery_warn_advance_minutes = Column( Integer, nullable=True, comment="计划到货前未送达时预警提前时间(分钟)" ) is_active = Column(Boolean, default=True, comment="是否启用") is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysRegionHis(Base): """区域历史表""" __tablename__ = "sys_region_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") name = Column(String(100), nullable=False, comment="区域名称") code = Column(String(50), nullable=False, comment="区域编码") description = Column(String(500), nullable=True, comment="区域描述") sort_order = Column(Integer, default=0, comment="排序") expected_delivery_minutes = Column(Integer, nullable=True, comment="预计配送时长(分钟)") delivery_warn_advance_minutes = Column( Integer, nullable=True, comment="计划到货前未送达时预警提前时间(分钟)" ) is_active = Column(Boolean, default=True, comment="是否启用") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BasChinaRegion(Base): """中国行政区划(GB/T 2260),见 docs/sql/bas_china_region.sql""" __tablename__ = "bas_china_region" id = Column(String(32), primary_key=True, comment="主键,与 region_code 一致") parent_id = Column(String(32), nullable=True, comment="父级 region_code,省级为 NULL") region_code = Column(String(6), nullable=False, comment="六位行政区划码") region_name = Column(String(100), nullable=False, comment="区划名称") level = Column(Integer, nullable=False, comment="层级:1省 2市 3区县") sort_order = Column(Integer, nullable=False, default=0, comment="排序") is_del = Column(Integer, default=0, nullable=False, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysApiRequestLog(Base): """API 请求日志(统一记录请求/响应出入参)""" __tablename__ = "sys_api_request_log" id = Column(String(32), primary_key=True, comment="主键ID") http_method = Column(String(10), nullable=False, comment="HTTP 方法") path = Column(String(500), nullable=False, comment="请求路径") query_string = Column(String(2000), nullable=True, comment="Query 字符串") request_body = Column(Text, nullable=True, comment="请求体(截断)") response_body = Column(Text, nullable=True, comment="响应体(截断)") status_code = Column(Integer, nullable=False, comment="HTTP 状态码") duration_ms = Column(Integer, nullable=False, comment="耗时(ms)") user_id = Column(String(32), nullable=True, comment="用户ID(JWT 解析)") username = Column(String(100), nullable=True, comment="用户名") role = Column(String(20), nullable=True, comment="角色") ip_address = Column(String(50), nullable=True, comment="IP地址") user_agent = Column(String(500), nullable=True, comment="User-Agent") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysMenu(Base): """菜单表""" __tablename__ = "sys_menu" id = Column(String(32), primary_key=True, comment="主键ID") name = Column(String(100), nullable=False, comment="菜单名称") code = Column(String(100), nullable=False, comment="菜单编码(唯一标识)") path = Column(String(500), nullable=False, comment="路由路径") component = Column(String(500), nullable=True, comment="组件路径") icon = Column(String(100), nullable=True, comment="菜单图标") parent_id = Column(String(32), nullable=True, comment="父菜单ID") sort_order = Column(Integer, default=0, comment="排序(数字越小越靠前)") redirect = Column(String(500), nullable=True, comment="重定向路径") menu_type = Column(String(20), default="menu", comment="菜单类型: menu-菜单, button-按钮") is_visible = Column(Integer, default=1, comment="是否显示: 0-隐藏, 1-显示") is_cache = Column(Integer, default=0, comment="是否缓存: 0-不缓存, 1-缓存") is_active = Column(Integer, default=1, comment="是否启用: 0-禁用, 1-启用") is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") remark = Column(String(500), nullable=True, comment="备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysUserRegionScope(Base): """用户区域权限表""" __tablename__ = "sys_user_region_scope" id = Column(String(32), primary_key=True, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") region_id = Column(String(32), nullable=False, comment="区域ID") is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysUserRegionScopeHis(Base): """用户区域权限历史表""" __tablename__ = "sys_user_region_scope_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") region_id = Column(String(32), nullable=False, comment="区域ID") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysUserMenuScope(Base): """用户菜单权限表(按菜单 code 授权)""" __tablename__ = "sys_user_menu_scope" id = Column(String(32), primary_key=True, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") menu_code = Column(String(100), nullable=False, comment="菜单编码") is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysUserMenuScopeHis(Base): """用户菜单权限历史表""" __tablename__ = "sys_user_menu_scope_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") menu_code = Column(String(100), nullable=False, comment="菜单编码") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysPasswordHistory(Base): """密码修改历史表""" __tablename__ = "sys_password_history" id = Column(String(32), primary_key=True, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") operation_type = Column(String(20), nullable=False, comment="操作类型") operator_id = Column(String(32), nullable=True, comment="操作人ID") operator_name = Column(String(100), nullable=True, comment="操作人姓名") ip_address = Column(String(50), nullable=True, comment="IP地址") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") # ========================================= # 基础模块 # ========================================= class BasProductCategory(Base): """商品分类表""" __tablename__ = "bas_product_category" id = Column(String(32), primary_key=True, comment="主键ID") name = Column(String(100), nullable=False, comment="分类名称") image_url = Column(String(500), nullable=True, comment="图片URL") parent_id = Column(String(32), nullable=True, comment="父分类ID") sort_order = Column(Integer, default=0, comment="排序") price_coefficient = Column( Numeric(6, 2), default=0, nullable=False, comment="价格系数(百分比点数,5表示5%)" ) is_active = Column(Boolean, default=True, comment="是否启用") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BasProductCategoryHis(Base): """商品分类历史表""" __tablename__ = "bas_product_category_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") name = Column(String(100), nullable=False, comment="分类名称") image_url = Column(String(500), nullable=True, comment="图片URL") parent_id = Column(String(32), nullable=True, comment="父分类ID") sort_order = Column(Integer, default=0, comment="排序") price_coefficient = Column( Numeric(6, 2), default=0, nullable=False, comment="价格系数(百分比点数,5表示5%)" ) is_active = Column(Boolean, default=True, comment="是否启用") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BasProductUnit(Base): """商品单位码表""" __tablename__ = "bas_product_unit" id = Column(String(32), primary_key=True, comment="主键ID") name = Column(String(50), nullable=False, comment="单位名称") code = Column(String(20), unique=True, nullable=False, comment="单位编码") is_active = Column(Boolean, default=True, comment="是否启用") sort_order = Column(Integer, default=0, comment="排序字段,数值越小越靠前") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BasProductUnitHis(Base): """商品单位历史表""" __tablename__ = "bas_product_unit_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") name = Column(String(50), nullable=False, comment="单位名称") code = Column(String(20), nullable=False, comment="单位编码") is_active = Column(Boolean, default=True, comment="是否启用") sort_order = Column(Integer, default=0, comment="排序字段,数值越小越靠前") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BasProduct(Base): """商品表""" __tablename__ = "bas_product" id = Column(String(32), primary_key=True, comment="主键ID") name = Column(String(200), nullable=False, comment="商品名称") sku_code = Column(String(50), nullable=True, unique=True, comment="商品SKU编码") category_id = Column(String(32), nullable=True, comment="分类ID") unit_id = Column(String(32), nullable=True, comment="单位ID") measure_value = Column(Numeric(12, 3), nullable=True, comment="计量数量(与单位组合表示售卖规格,如500克、1个)") description = Column(String(1000), nullable=True, comment="商品描述") detail_content = Column(Text, nullable=True, comment="商品详情富文本内容") image_url = Column(String(500), nullable=True, comment="图片URL") price_coefficient = Column( Numeric(6, 2), default=0, nullable=False, comment="调价系数(百分比点数,5表示5%)" ) is_active = Column(Boolean, default=True, comment="是否启用") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") category = relationship( "BasProductCategory", foreign_keys=[category_id], primaryjoin="BasProduct.category_id==BasProductCategory.id", lazy="select", ) unit = relationship( "BasProductUnit", foreign_keys=[unit_id], primaryjoin="BasProduct.unit_id==BasProductUnit.id", lazy="select", ) class BasProductHis(Base): """商品历史表""" __tablename__ = "bas_product_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") name = Column(String(200), nullable=False, comment="商品名称") sku_code = Column(String(50), nullable=True, comment="商品SKU编码") category_id = Column(String(32), nullable=True, comment="分类ID") unit_id = Column(String(32), nullable=True, comment="单位ID") measure_value = Column(Numeric(12, 3), nullable=True, comment="计量数量(与单位组合表示售卖规格,如500克、1个)") description = Column(String(1000), nullable=True, comment="商品描述") detail_content = Column(Text, nullable=True, comment="商品详情富文本内容") image_url = Column(String(500), nullable=True, comment="图片URL") price_coefficient = Column( Numeric(6, 2), default=0, nullable=False, comment="调价系数(百分比点数,5表示5%)" ) is_active = Column(Boolean, default=True, comment="是否启用") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BasAddress(Base): """地址表""" __tablename__ = "bas_address" id = Column(String(32), primary_key=True, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") address_type = Column(String(20), nullable=False, comment="地址类型") contact_person = Column(String(100), nullable=False, comment="联系人") contact_phone = Column(String(20), nullable=False, comment="联系电话") province = Column(String(50), nullable=True, comment="省份") city = Column(String(50), nullable=True, comment="城市") district = Column(String(50), nullable=True, comment="区县") detail_address = Column(String(500), nullable=False, comment="详细地址") is_default = Column(Boolean, default=False, comment="是否默认地址") latitude = Column(String(20), nullable=True, comment="纬度") longitude = Column(String(20), nullable=True, comment="经度") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BasAddressHis(Base): """地址历史表""" __tablename__ = "bas_address_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") address_type = Column(String(20), nullable=False, comment="地址类型") contact_person = Column(String(100), nullable=False, comment="联系人") contact_phone = Column(String(20), nullable=False, comment="联系电话") province = Column(String(50), nullable=True, comment="省份") city = Column(String(50), nullable=True, comment="城市") district = Column(String(50), nullable=True, comment="区县") detail_address = Column(String(500), nullable=False, comment="详细地址") is_default = Column(Boolean, default=False, comment="是否默认地址") latitude = Column(String(20), nullable=True, comment="纬度") longitude = Column(String(20), nullable=True, comment="经度") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") # ========================================= # 业务模块 # ========================================= class BizInquiry(Base): """询价单表""" __tablename__ = "biz_inquiry" id = Column(String(32), primary_key=True, comment="主键ID") region_id = Column(String(32), nullable=False, comment="区域ID") title = Column(String(200), nullable=False, comment="询价单标题") status = Column(String(20), default="draft", comment="状态") publish_time = Column(DateTime, nullable=True, comment="发布时间") close_time = Column(DateTime, nullable=True, comment="关闭时间") remark = Column(String(1000), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizInquiryItem(Base): """询价单项表""" __tablename__ = "biz_inquiry_item" id = Column(String(32), primary_key=True, comment="主键ID") inquiry_id = Column(String(32), nullable=False, comment="询价单ID") product_id = Column(String(32), nullable=False, comment="商品ID") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizInquiryHis(Base): """询价单历史表""" __tablename__ = "biz_inquiry_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") region_id = Column(String(32), nullable=False, comment="区域ID") title = Column(String(200), nullable=False, comment="询价单标题") status = Column(String(20), default="draft", comment="状态") publish_time = Column(DateTime, nullable=True, comment="发布时间") close_time = Column(DateTime, nullable=True, comment="关闭时间") remark = Column(String(1000), nullable=True, comment="备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizInquiryItemHis(Base): """询价单项历史表""" __tablename__ = "biz_inquiry_item_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") inquiry_id = Column(String(32), nullable=False, comment="询价单ID") product_id = Column(String(32), nullable=False, comment="商品ID") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizQuotation(Base): """报价单表""" __tablename__ = "biz_quotation" id = Column(String(32), primary_key=True, comment="主键ID") inquiry_id = Column(String(32), nullable=False, comment="询价单ID") supplier_id = Column(String(32), nullable=False, comment="供应商ID") region_id = Column(String(32), nullable=False, comment="区域ID") # 报价无需审核:仅使用 submitted / selected status = Column(String(20), default="submitted", comment="状态") total_amount = Column(Numeric(12, 2), default=0, comment="报价总金额") submit_time = Column(DateTime, nullable=True, comment="提交时间") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizQuotationItem(Base): """报价单项表""" __tablename__ = "biz_quotation_item" id = Column(String(32), primary_key=True, comment="主键ID") quotation_id = Column(String(32), nullable=False, comment="报价单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") price = Column(Numeric(10, 2), nullable=False, comment="单价") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizQuotationHis(Base): """报价单历史表""" __tablename__ = "biz_quotation_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") inquiry_id = Column(String(32), nullable=False, comment="询价单ID") supplier_id = Column(String(32), nullable=False, comment="供应商ID") region_id = Column(String(32), nullable=False, comment="区域ID") status = Column(String(20), default="submitted", comment="状态") total_amount = Column(Numeric(12, 2), default=0, comment="报价总金额") submit_time = Column(DateTime, nullable=True, comment="提交时间") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizQuotationItemHis(Base): """报价单项历史表""" __tablename__ = "biz_quotation_item_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") quotation_id = Column(String(32), nullable=False, comment="报价单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") price = Column(Numeric(10, 2), nullable=False, comment="单价") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizPriceList(Base): """价格清单表""" __tablename__ = "biz_price_list" id = Column(String(32), primary_key=True, comment="主键ID") region_id = Column(String(32), nullable=False, comment="区域ID") supplier_id = Column(String(32), nullable=False, comment="选用供应商ID") inquiry_id = Column(String(32), nullable=True, comment="来源询价单ID") quotation_id = Column(String(32), nullable=True, comment="来源报价单ID") source_type = Column(String(20), nullable=True, comment="来源类型") version = Column(Integer, default=1, comment="版本号") status = Column(String(20), default="draft", comment="状态") effective_time = Column(DateTime, nullable=True, comment="生效时间") published_by = Column(String(32), nullable=True, comment="发布人ID") published_time = Column(DateTime, nullable=True, comment="发布时间") remark = Column(String(500), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizPriceListHis(Base): """价格清单历史表""" __tablename__ = "biz_price_list_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") region_id = Column(String(32), nullable=False, comment="区域ID") supplier_id = Column(String(32), nullable=False, comment="选用供应商ID") inquiry_id = Column(String(32), nullable=True, comment="来源询价单ID") quotation_id = Column(String(32), nullable=True, comment="来源报价单ID") source_type = Column(String(20), nullable=True, comment="来源类型") version = Column(Integer, default=1, comment="版本号") status = Column(String(20), default="draft", comment="状态") effective_time = Column(DateTime, nullable=True, comment="生效时间") published_by = Column(String(32), nullable=True, comment="发布人ID") published_time = Column(DateTime, nullable=True, comment="发布时间") remark = Column(String(500), nullable=True, comment="备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizPriceListItem(Base): """价格清单项表""" __tablename__ = "biz_price_list_item" id = Column(String(32), primary_key=True, comment="主键ID") price_list_id = Column(String(32), nullable=False, comment="价格清单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") price = Column(Numeric(10, 2), nullable=False, comment="单价") pricing_coefficient = Column(Numeric(8, 2), nullable=True, comment="本次发布使用的调价系数(%)") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizOrder(Base): """订单主表""" __tablename__ = "biz_order" id = Column(String(32), primary_key=True, comment="主键ID") order_no = Column(String(50), unique=True, nullable=False, comment="订单编号") region_id = Column(String(32), nullable=False, comment="区域ID") client_id = Column(String(32), nullable=False, comment="客户ID") price_list_id = Column(String(32), nullable=False, comment="价格清单ID") price_version = Column(Integer, nullable=False, comment="价格版本号") status = Column(String(30), nullable=False, default="pending_payment", comment="订单状态") # 三字段状态(已统一为新模型) order_status = Column(String(20), nullable=False, default="pending_payment", comment="订单主状态: pending_payment/pending_confirm/completed/cancelled") delivery_status = Column(String(20), nullable=False, default="pending_dispatch", comment="配送状态: pending_dispatch/delivering/delivered") pay_status = Column(String(20), nullable=False, default="pending_payment", comment="支付状态: pending_payment/paid/refunding/refunded") cancel_status = Column(String(20), nullable=False, default="none", comment="取消审核状态: none/pending_review/approved/rejected") payment_method = Column(String(20), nullable=True, comment="支付渠道: online=线上(微信等), offline=线下结算(与 pay_status 独立)") client_settlement_status = Column(String(20), nullable=False, default="pending", comment="客户结算状态: pending/settled") supplier_settlement_status = Column(String(20), nullable=False, default="pending", comment="供应商结算状态: pending/settled") client_settlement_at = Column(DateTime, nullable=True, comment="客户结算时间") supplier_settlement_at = Column(DateTime, nullable=True, comment="供应商结算时间") total_amount = Column(Numeric(12, 2), default=0, comment="订单总金额") paid_amount = Column(Numeric(12, 2), default=0, comment="已付金额") receivable_amount = Column(Numeric(12, 2), default=0, comment="应收金额") refund_amount = Column(Numeric(12, 2), default=0, comment="退款金额") contact_person = Column(String(100), nullable=True, comment="联系人") contact_phone = Column(String(20), nullable=True, comment="联系电话") delivery_address = Column(String(500), nullable=True, comment="配送地址") cancel_reason = Column(String(500), nullable=True, comment="取消原因") cancel_review_time = Column(DateTime, nullable=True, comment="取消审核时间") cancel_reviewed_by = Column(String(32), nullable=True, comment="取消审核人ID") cancel_review_note = Column(String(500), nullable=True, comment="取消审核备注") completed_time = Column(DateTime, nullable=True, comment="完结时间") completed_by = Column(String(32), nullable=True, comment="完结人ID") remark = Column(Text, nullable=True, comment="订单备注") payment_time = Column(DateTime, nullable=True, comment="支付时间") delivery_assign_time = Column(DateTime, nullable=True, comment="配送分配时间") delivered_time = Column(DateTime, nullable=True, comment="配送完成时间(待客户确认收货起算点)") lock_operator_id = Column(String(32), nullable=True, comment="锁定操作人ID") lock_time = Column(DateTime, nullable=True, comment="锁定时间") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizOrderItem(Base): """订单项表""" __tablename__ = "biz_order_item" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") quantity = Column(Numeric(12, 4), default=0, comment="数量") unit_price = Column(Numeric(10, 2), nullable=False, comment="单价") amount = Column(Numeric(12, 2), default=0, comment="金额") delivered_quantity = Column(Numeric(12, 4), default=0, comment="已配送数量") status = Column(String(20), default="normal", comment="项状态") note = Column(String(500), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizOrderHis(Base): """订单主表历史表""" __tablename__ = "biz_order_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_no = Column(String(50), nullable=False, comment="订单编号") region_id = Column(String(32), nullable=False, comment="区域ID") client_id = Column(String(32), nullable=False, comment="客户ID") price_list_id = Column(String(32), nullable=False, comment="价格清单ID") price_version = Column(Integer, nullable=False, comment="价格版本号") status = Column(String(30), nullable=False, default="pending_payment", comment="订单状态") # 三字段状态(历史表同步保留新模型) order_status = Column(String(20), nullable=False, default="pending_payment", comment="订单主状态: pending_payment/pending_confirm/completed/cancelled") delivery_status = Column(String(20), nullable=False, default="pending_dispatch", comment="配送状态: pending_dispatch/delivering/delivered") pay_status = Column(String(20), nullable=False, default="pending_payment", comment="支付状态: pending_payment/paid/refunding/refunded") cancel_status = Column(String(20), nullable=False, default="none", comment="取消审核状态: none/pending_review/approved/rejected") payment_method = Column(String(20), nullable=True, comment="支付渠道: online=线上(微信等), offline=线下结算(与 pay_status 独立)") client_settlement_status = Column(String(20), nullable=False, default="pending", comment="客户结算状态: pending/settled") supplier_settlement_status = Column(String(20), nullable=False, default="pending", comment="供应商结算状态: pending/settled") client_settlement_at = Column(DateTime, nullable=True, comment="客户结算时间") supplier_settlement_at = Column(DateTime, nullable=True, comment="供应商结算时间") total_amount = Column(Numeric(12, 2), default=0, comment="订单总金额") paid_amount = Column(Numeric(12, 2), default=0, comment="已付金额") receivable_amount = Column(Numeric(12, 2), default=0, comment="应收金额") refund_amount = Column(Numeric(12, 2), default=0, comment="退款金额") contact_person = Column(String(100), nullable=True, comment="联系人") contact_phone = Column(String(20), nullable=True, comment="联系电话") delivery_address = Column(String(500), nullable=True, comment="配送地址") cancel_reason = Column(String(500), nullable=True, comment="取消原因") cancel_review_time = Column(DateTime, nullable=True, comment="取消审核时间") cancel_reviewed_by = Column(String(32), nullable=True, comment="取消审核人ID") cancel_review_note = Column(String(500), nullable=True, comment="取消审核备注") completed_time = Column(DateTime, nullable=True, comment="完结时间") completed_by = Column(String(32), nullable=True, comment="完结人ID") remark = Column(Text, nullable=True, comment="订单备注") payment_time = Column(DateTime, nullable=True, comment="支付时间") delivery_assign_time = Column(DateTime, nullable=True, comment="配送分配时间") delivered_time = Column(DateTime, nullable=True, comment="配送完成时间(待客户确认收货起算点)") lock_operator_id = Column(String(32), nullable=True, comment="锁定操作人ID") lock_time = Column(DateTime, nullable=True, comment="锁定时间") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizOrderStatusLog(Base): """订单状态变更日志表""" __tablename__ = "biz_order_status_log" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") from_status = Column(String(30), nullable=True, comment="变更前状态") to_status = Column(String(30), nullable=False, comment="变更后状态") operator_id = Column(String(32), nullable=False, comment="操作人ID") operator_role = Column(String(20), nullable=False, comment="操作人角色") reason = Column(String(500), nullable=True, comment="变更原因") note = Column(String(1000), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizDeliveryTask(Base): """配送任务表""" __tablename__ = "biz_delivery_task" id = Column(String(32), primary_key=True, comment="主键ID") task_no = Column(String(50), unique=True, nullable=False, comment="配送单编号") order_id = Column(String(32), nullable=False, comment="订单ID") region_id = Column(String(32), nullable=False, comment="区域ID") supplier_id = Column(String(32), nullable=False, comment="供应商ID") deliver_id = Column(String(32), nullable=True, comment="配送员ID") status = Column(String(20), default="pending", comment="状态") deliverer_status = Column(String(20), default="pending_pickup", comment="配送员状态: pending_pickup/delivering/delivered") supplier_prepare_status = Column(String(20), default="pending_prepare", comment="供应商备货状态: pending_prepare/prepared/picked_up") pickup_time = Column(DateTime, nullable=True, comment="取货时间") pickup_remark = Column(String(500), nullable=True, comment="取货备注") pickup_image_url = Column(String(500), nullable=True, comment="取货凭证图片") delivery_time = Column(DateTime, nullable=True, comment="送达时间") delivery_remark = Column(String(500), nullable=True, comment="送达备注") delivery_image_url = Column(String(500), nullable=True, comment="送达凭证图片") expire_warning_sent = Column(Boolean, default=False, comment="是否已发送过期预警") effective_time = Column(DateTime, nullable=True, comment="生效时间") dispatch_remark = Column(String(500), nullable=True, comment="运营分配配送备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizDeliveryTaskItem(Base): """配送任务明细表""" __tablename__ = "biz_delivery_task_item" id = Column(String(32), primary_key=True, comment="主键ID") task_id = Column(String(32), nullable=False, comment="配送任务ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_item_id = Column(String(32), nullable=False, comment="订单项ID") product_id = Column(String(32), nullable=False, comment="商品ID") client_id = Column(String(32), nullable=False, comment="客户ID") delivery_address = Column(String(500), nullable=False, comment="配送地址") contact_person = Column(String(100), nullable=False, comment="联系人") contact_phone = Column(String(20), nullable=False, comment="联系电话") quantity = Column(Numeric(12, 4), default=0, comment="配送数量") delivered_quantity = Column(Numeric(12, 4), default=0, comment="已送达数量") status = Column(String(20), default="pending", comment="状态") pickup_time = Column(DateTime, nullable=True, comment="取货时间") delivery_time = Column(DateTime, nullable=True, comment="送达时间") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizDeliveryTaskHis(Base): """配送任务历史表""" __tablename__ = "biz_delivery_task_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") task_no = Column(String(50), nullable=False, comment="配送单编号") order_id = Column(String(32), nullable=False, comment="订单ID") region_id = Column(String(32), nullable=False, comment="区域ID") supplier_id = Column(String(32), nullable=False, comment="供应商ID") deliver_id = Column(String(32), nullable=True, comment="配送员ID") status = Column(String(20), default="pending", comment="状态") deliverer_status = Column(String(20), default="pending_pickup", comment="配送员状态: pending_pickup/delivering/delivered") supplier_prepare_status = Column(String(20), default="pending_prepare", comment="供应商备货状态: pending_prepare/prepared/picked_up") pickup_time = Column(DateTime, nullable=True, comment="取货时间") pickup_remark = Column(String(500), nullable=True, comment="取货备注") pickup_image_url = Column(String(500), nullable=True, comment="取货凭证图片") delivery_time = Column(DateTime, nullable=True, comment="送达时间") delivery_remark = Column(String(500), nullable=True, comment="送达备注") delivery_image_url = Column(String(500), nullable=True, comment="送达凭证图片") expire_warning_sent = Column(Boolean, default=False, comment="是否已发送过期预警") effective_time = Column(DateTime, nullable=True, comment="生效时间") dispatch_remark = Column(String(500), nullable=True, comment="运营分配配送备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizSettlement(Base): """结算记录表""" __tablename__ = "biz_settlement" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") client_id = Column(String(32), nullable=False, comment="客户ID") region_id = Column(String(32), nullable=False, comment="区域ID") amount = Column(Numeric(12, 2), nullable=False, comment="结算金额") settlement_method = Column(String(20), nullable=False, comment="结算方式") settlement_time = Column(DateTime, nullable=True, comment="结算时间") settlement_file_url = Column(String(500), nullable=True, comment="结算凭证文件URL") settlement_note = Column(String(500), nullable=True, comment="结算备注") status = Column(String(20), default="pending", comment="状态") reviewed_by = Column(String(32), nullable=True, comment="审核人ID") reviewed_time = Column(DateTime, nullable=True, comment="审核时间") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class OrdClientSettlement(Base): """客户结算主表""" __tablename__ = "ord_client_settlement" id = Column(String(32), primary_key=True, comment="主键ID") settlement_no = Column(String(50), nullable=False, unique=True, comment="结算单号") client_id = Column(String(32), nullable=False, comment="客户ID") client_name = Column(String(100), nullable=True, comment="客户名称快照") order_count = Column(Integer, nullable=False, default=0, comment="订单数量") total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额") voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)") remark = Column(String(500), nullable=True, comment="结算备注") settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间") status = Column(String(20), nullable=False, default="done", comment="结算单状态") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class OrdClientSettlementHis(Base): """客户结算主表历史""" __tablename__ = "ord_client_settlement_his" __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_client_settlement_his"),) id = Column(String(32), nullable=False, comment="主键ID") settlement_no = Column(String(50), nullable=False, comment="结算单号") client_id = Column(String(32), nullable=False, comment="客户ID") client_name = Column(String(100), nullable=True, comment="客户名称快照") order_count = Column(Integer, nullable=False, default=0, comment="订单数量") total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额") voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)") remark = Column(String(500), nullable=True, comment="结算备注") settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间") status = Column(String(20), nullable=False, default="done", comment="结算单状态") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class OrdClientSettlementItem(Base): """客户结算明细表""" __tablename__ = "ord_client_settlement_item" id = Column(String(32), primary_key=True, comment="主键ID") settlement_id = Column(String(32), nullable=False, comment="结算主表ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_no = Column(String(50), nullable=False, comment="订单号") client_id = Column(String(32), nullable=False, comment="客户ID") order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class OrdClientSettlementItemHis(Base): """客户结算明细历史表""" __tablename__ = "ord_client_settlement_item_his" __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_client_settlement_item_his"),) id = Column(String(32), nullable=False, comment="主键ID") settlement_id = Column(String(32), nullable=False, comment="结算主表ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_no = Column(String(50), nullable=False, comment="订单号") client_id = Column(String(32), nullable=False, comment="客户ID") order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class OrdSupplierSettlement(Base): """供应商结算主表""" __tablename__ = "ord_supplier_settlement" id = Column(String(32), primary_key=True, comment="主键ID") settlement_no = Column(String(50), nullable=False, unique=True, comment="结算单号") supplier_id = Column(String(32), nullable=False, comment="供应商ID") supplier_name = Column(String(100), nullable=True, comment="供应商名称快照") order_count = Column(Integer, nullable=False, default=0, comment="订单数量") total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额") voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)") remark = Column(String(500), nullable=True, comment="结算备注") settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间") status = Column(String(20), nullable=False, default="done", comment="结算单状态") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class OrdSupplierSettlementHis(Base): """供应商结算主表历史""" __tablename__ = "ord_supplier_settlement_his" __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_supplier_settlement_his"),) id = Column(String(32), nullable=False, comment="主键ID") settlement_no = Column(String(50), nullable=False, comment="结算单号") supplier_id = Column(String(32), nullable=False, comment="供应商ID") supplier_name = Column(String(100), nullable=True, comment="供应商名称快照") order_count = Column(Integer, nullable=False, default=0, comment="订单数量") total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额") voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)") remark = Column(String(500), nullable=True, comment="结算备注") settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间") status = Column(String(20), nullable=False, default="done", comment="结算单状态") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class OrdSupplierSettlementItem(Base): """供应商结算明细表""" __tablename__ = "ord_supplier_settlement_item" id = Column(String(32), primary_key=True, comment="主键ID") settlement_id = Column(String(32), nullable=False, comment="结算主表ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_no = Column(String(50), nullable=False, comment="订单号") supplier_id = Column(String(32), nullable=False, comment="供应商ID") order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class OrdSupplierSettlementItemHis(Base): """供应商结算明细历史表""" __tablename__ = "ord_supplier_settlement_item_his" __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_supplier_settlement_item_his"),) id = Column(String(32), nullable=False, comment="主键ID") settlement_id = Column(String(32), nullable=False, comment="结算主表ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_no = Column(String(50), nullable=False, comment="订单号") supplier_id = Column(String(32), nullable=False, comment="供应商ID") order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizRefund(Base): """退款记录表""" __tablename__ = "biz_refund" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") refund_no = Column(String(50), unique=True, nullable=False, comment="退款单编号") refund_amount = Column(Numeric(12, 2), nullable=False, comment="退款金额") refund_method = Column(String(20), nullable=False, comment="退款方式") refund_no_wechat = Column(String(100), nullable=True, comment="微信退款单号") refund_time = Column(DateTime, nullable=True, comment="退款时间") refund_result = Column(String(20), default="success", comment="退款结果") refund_fail_reason = Column(String(500), nullable=True, comment="退款失败原因") status = Column(String(20), default="pending", comment="状态") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizSettlementHis(Base): """结算记录历史表""" __tablename__ = "biz_settlement_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") client_id = Column(String(32), nullable=False, comment="客户ID") region_id = Column(String(32), nullable=False, comment="区域ID") amount = Column(Numeric(12, 2), nullable=False, comment="结算金额") settlement_method = Column(String(20), nullable=False, comment="结算方式") settlement_time = Column(DateTime, nullable=True, comment="结算时间") settlement_file_url = Column(String(500), nullable=True, comment="结算凭证文件URL") settlement_note = Column(String(500), nullable=True, comment="结算备注") status = Column(String(20), default="pending", comment="状态") reviewed_by = Column(String(32), nullable=True, comment="审核人ID") reviewed_time = Column(DateTime, nullable=True, comment="审核时间") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizRefundHis(Base): """退款记录历史表""" __tablename__ = "biz_refund_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") refund_no = Column(String(50), nullable=False, comment="退款单编号") refund_amount = Column(Numeric(12, 2), nullable=False, comment="退款金额") refund_method = Column(String(20), nullable=False, comment="退款方式") refund_no_wechat = Column(String(100), nullable=True, comment="微信退款单号") refund_time = Column(DateTime, nullable=True, comment="退款时间") refund_result = Column(String(20), default="success", comment="退款结果") refund_fail_reason = Column(String(500), nullable=True, comment="退款失败原因") status = Column(String(20), default="pending", comment="状态") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizWechatPay(Base): """微信支付订单表""" __tablename__ = "biz_wechat_pay" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") out_trade_no = Column(String(64), unique=True, nullable=False, comment="商户订单号") transaction_id = Column(String(64), nullable=True, comment="微信支付订单号") total_fee = Column(Integer, nullable=False, comment="支付金额(分)") cash_fee = Column(Integer, nullable=True, comment="现金支付金额(分)") pay_time = Column(DateTime, nullable=True, comment="支付时间") trade_state = Column(String(20), nullable=True, comment="交易状态") trade_state_desc = Column(String(200), nullable=True, comment="交易状态描述") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizAttachment(Base): """附件表""" __tablename__ = "biz_attachment" id = Column(String(32), primary_key=True, comment="主键ID") business_type = Column(String(50), nullable=False, comment="业务类型") business_id = Column(String(32), nullable=False, comment="业务ID") file_name = Column(String(200), nullable=False, comment="文件名称") file_url = Column(String(500), nullable=False, comment="文件URL") file_size = Column(Integer, nullable=True, comment="文件大小") file_type = Column(String(50), nullable=True, comment="文件类型") upload_by = Column(String(32), nullable=True, comment="上传人ID") upload_by_name = Column(String(100), nullable=True, comment="上传人姓名") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizOrderAdjust(Base): """订单调整记录表""" __tablename__ = "biz_order_adjust" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_item_id = Column(String(32), nullable=True, comment="订单项ID") adjust_type = Column(String(20), nullable=False, comment="调整类型") before_quantity = Column(Numeric(12, 4), nullable=True, comment="调整前数量") after_quantity = Column(Numeric(12, 4), nullable=True, comment="调整后数量") before_amount = Column(Numeric(12, 2), nullable=True, comment="调整前金额") after_amount = Column(Numeric(12, 2), nullable=True, comment="调整后金额") difference_amount = Column(Numeric(12, 2), default=0, comment="差异金额") reason = Column(String(500), nullable=False, comment="调整原因") snapshot_items_json = Column(Text, nullable=True, comment="调整后订单商品快照(JSON)") substitute_product_id = Column(String(32), nullable=True, comment="替代商品ID") operator_id = Column(String(32), nullable=False, comment="操作人ID") operator_name = Column(String(100), nullable=False, comment="操作人姓名") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizOrderAdjustHis(Base): """订单调整记录历史表""" __tablename__ = "biz_order_adjust_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") order_item_id = Column(String(32), nullable=True, comment="订单项ID") adjust_type = Column(String(20), nullable=False, comment="调整类型") before_quantity = Column(Numeric(12, 4), nullable=True, comment="调整前数量") after_quantity = Column(Numeric(12, 4), nullable=True, comment="调整后数量") before_amount = Column(Numeric(12, 2), nullable=True, comment="调整前金额") after_amount = Column(Numeric(12, 2), nullable=True, comment="调整后金额") difference_amount = Column(Numeric(12, 2), default=0, comment="差异金额") reason = Column(String(500), nullable=False, comment="调整原因") snapshot_items_json = Column(Text, nullable=True, comment="调整后订单商品快照(JSON)") substitute_product_id = Column(String(32), nullable=True, comment="替代商品ID") operator_id = Column(String(32), nullable=False, comment="操作人ID") operator_name = Column(String(100), nullable=False, comment="操作人姓名") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizInvoice(Base): """发票表""" __tablename__ = "biz_invoice" id = Column(String(32), primary_key=True, comment="主键ID") invoice_no = Column(String(50), nullable=False, unique=True, comment="发票号") order_id = Column(String(32), nullable=False, comment="订单ID") order_no = Column(String(50), nullable=False, comment="订单号") client_id = Column(String(32), nullable=False, comment="客户ID") client_name = Column(String(100), nullable=False, comment="客户名称") invoice_type = Column(String(20), nullable=False, comment="发票类型: normal-普通发票, vat-增值税发票") invoice_amount = Column(Numeric(12, 2), nullable=False, comment="发票金额") tax_rate = Column(Numeric(5, 2), default=0, comment="税率") tax_amount = Column(Numeric(12, 2), default=0, comment="税额") title = Column(String(200), nullable=False, comment="发票抬头") tax_no = Column(String(50), nullable=True, comment="税号") address = Column(String(500), nullable=True, comment="开票地址") phone = Column(String(20), nullable=True, comment="电话") bank = Column(String(100), nullable=True, comment="开户银行") bank_account = Column(String(50), nullable=True, comment="银行账号") status = Column(String(20), nullable=False, default="pending", comment="状态: pending-待开票, issued-已开票, void-已作废") invoice_url = Column(String(500), nullable=True, comment="发票文件URL") issued_at = Column(DateTime, nullable=True, comment="开票时间") issued_by = Column(String(32), nullable=True, comment="开票人ID") issued_by_name = Column(String(100), nullable=True, comment="开票人姓名") remark = Column(String(500), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizSystemConfig(Base): """系统配置表""" __tablename__ = "biz_system_config" id = Column(String(32), primary_key=True, comment="主键ID") config_key = Column(String(100), nullable=False, unique=True, comment="配置键") config_value = Column(Text, nullable=True, comment="配置值") config_type = Column(String(50), default="string", comment="配置类型: string, number, boolean, json") config_name = Column(String(100), nullable=False, comment="配置名称") config_group = Column(String(50), nullable=True, comment="配置分组") description = Column(String(500), nullable=True, comment="描述") is_active = Column(Integer, default=1, comment="是否启用") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizDelivererReview(Base): """配送员评价表""" __tablename__ = "biz_deliverer_review" id = Column(String(32), primary_key=True, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") task_id = Column(String(32), nullable=True, comment="配送任务ID") client_id = Column(String(32), nullable=False, comment="客户ID") deliverer_id = Column(String(32), nullable=False, comment="配送员ID") score = Column(Integer, nullable=False, comment="评分(1-5)") tags = Column(String(500), nullable=True, comment="评价标签,逗号分隔") content = Column(String(1000), nullable=True, comment="评价内容") is_anonymous = Column(Boolean, default=False, comment="是否匿名") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizDelivererReviewHis(Base): """配送员评价历史表""" __tablename__ = "biz_deliverer_review_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") task_id = Column(String(32), nullable=True, comment="配送任务ID") client_id = Column(String(32), nullable=False, comment="客户ID") deliverer_id = Column(String(32), nullable=False, comment="配送员ID") score = Column(Integer, nullable=False, comment="评分(1-5)") tags = Column(String(500), nullable=True, comment="评价标签,逗号分隔") content = Column(String(1000), nullable=True, comment="评价内容") is_anonymous = Column(Boolean, default=False, comment="是否匿名") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizDeliveryWarning(Base): """配送时效预警表""" __tablename__ = "biz_delivery_warning" id = Column(String(32), primary_key=True, comment="主键ID") task_id = Column(String(32), nullable=False, comment="配送任务ID") order_id = Column(String(32), nullable=True, comment="订单ID") warning_type = Column(String(20), nullable=False, comment="预警类型") urgency_level = Column(String(20), nullable=False, comment="紧急程度") remaining_minutes = Column(Integer, nullable=True, comment="剩余分钟数") message = Column(String(500), nullable=True, comment="预警消息") is_sent = Column(Integer, default=0, comment="是否已发送通知") sent_time = Column(DateTime, nullable=True, comment="发送时间") is_resolved = Column(Integer, default=0, comment="是否已解决") resolved_time = Column(DateTime, nullable=True, comment="解决时间") resolved_by = Column(String(32), nullable=True, comment="解决人ID") resolved_note = Column(String(500), nullable=True, comment="解决备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") is_del = Column(Integer, default=0, comment="是否删除") class BizDeliveryWarningHis(Base): """配送时效预警历史表""" __tablename__ = "biz_delivery_warning_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") task_id = Column(String(32), nullable=False, comment="配送任务ID") order_id = Column(String(32), nullable=True, comment="订单ID") warning_type = Column(String(20), nullable=False, comment="预警类型") urgency_level = Column(String(20), nullable=False, comment="紧急程度") remaining_minutes = Column(Integer, nullable=True, comment="剩余分钟数") message = Column(String(500), nullable=True, comment="预警消息") is_sent = Column(Integer, default=0, comment="是否已发送通知") sent_time = Column(DateTime, nullable=True, comment="发送时间") is_resolved = Column(Integer, default=0, comment="是否已解决") resolved_time = Column(DateTime, nullable=True, comment="解决时间") resolved_by = Column(String(32), nullable=True, comment="解决人ID") resolved_note = Column(String(500), nullable=True, comment="解决备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class BizOrderStatusLogHis(Base): """订单状态变更日志历史表""" __tablename__ = "biz_order_status_log_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") order_id = Column(String(32), nullable=False, comment="订单ID") from_status = Column(String(30), nullable=True, comment="变更前状态") to_status = Column(String(30), nullable=False, comment="变更后状态") operator_id = Column(String(32), nullable=False, comment="操作人ID") operator_role = Column(String(20), nullable=False, comment="操作人角色") reason = Column(String(500), nullable=True, comment="变更原因") note = Column(String(1000), nullable=True, comment="备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysApiRequestLogHis(Base): """API 请求日志历史表""" __tablename__ = "sys_api_request_log_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") http_method = Column(String(10), nullable=False, comment="HTTP 方法") path = Column(String(500), nullable=False, comment="请求路径") query_string = Column(String(2000), nullable=True, comment="Query 字符串") request_body = Column(Text, nullable=True, comment="请求体(截断)") response_body = Column(Text, nullable=True, comment="响应体(截断)") status_code = Column(Integer, nullable=False, comment="HTTP 状态码") duration_ms = Column(Integer, nullable=False, comment="耗时(ms)") user_id = Column(String(32), nullable=True, comment="用户ID") username = Column(String(100), nullable=True, comment="用户名") role = Column(String(20), nullable=True, comment="角色") ip_address = Column(String(50), nullable=True, comment="IP地址") user_agent = Column(String(500), nullable=True, comment="User-Agent") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysPasswordHistoryHis(Base): """密码修改历史表(历史)""" __tablename__ = "sys_password_history_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") user_id = Column(String(32), nullable=False, comment="用户ID") operation_type = Column(String(20), nullable=False, comment="操作类型") operator_id = Column(String(32), nullable=True, comment="操作人ID(重置时)") operator_name = Column(String(100), nullable=True, comment="操作人姓名") ip_address = Column(String(50), nullable=True, comment="IP地址") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") # ========================================= # 扩展模块 # ========================================= class SysUpgradeLog(Base): """系统更新日志表""" __tablename__ = "sys_upgrade_log" id = Column(String(32), primary_key=True, comment="主键ID") version = Column(String(50), nullable=False, comment="版本号") title = Column(String(200), nullable=False, comment="更新标题") date = Column(DateTime, nullable=False, comment="更新日期") detail = Column(Text, nullable=True, comment="更新详情(JSON数组)") require_re_login = Column(Integer, default=0, comment="是否需要重新登录: 0-否, 1-是") remark = Column(String(500), nullable=True, comment="备注") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class SysUpgradeLogHis(Base): """系统更新日志历史表""" __tablename__ = "sys_upgrade_log_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") version = Column(String(50), nullable=False, comment="版本号") title = Column(String(200), nullable=False, comment="更新标题") date = Column(DateTime, nullable=False, comment="更新日期") detail = Column(Text, nullable=True, comment="更新详情(JSON数组)") require_re_login = Column(Integer, default=0, comment="是否需要重新登录: 0-否, 1-是") remark = Column(String(500), nullable=True, comment="备注") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间") class SysComment(Base): """系统评论表""" __tablename__ = "sys_comment" id = Column(String(32), primary_key=True, comment="主键ID") parent_id = Column(String(32), nullable=True, comment="父评论ID") author = Column(String(100), nullable=False, comment="评论者") author_id = Column(String(32), nullable=True, comment="评论者ID") content = Column(String(1000), nullable=False, comment="评论内容") target_type = Column(String(50), nullable=True, comment="目标类型") target_id = Column(String(32), nullable=True, comment="目标ID") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizClientCart(Base): """客户购物车""" __tablename__ = "biz_client_cart" id = Column(String(32), primary_key=True, comment="主键ID") client_id = Column(String(32), nullable=False, comment="客户用户ID") price_list_id = Column(String(32), nullable=False, comment="价格清单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") quantity = Column(Numeric(12, 4), nullable=False, default=0, comment="数量") unit_price = Column(Numeric(12, 2), nullable=False, default=0, comment="单价(元)") amount = Column(Numeric(12, 2), nullable=False, default=0, comment="行金额(元)") product_name = Column(String(200), nullable=True, comment="商品名称快照") unit_name = Column(String(50), nullable=True, comment="单位名称快照") category_name = Column(String(100), nullable=True, comment="分类名称快照") image_url = Column(String(500), nullable=True, comment="图片") is_del = Column(Integer, default=0, comment="是否删除") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") class BizClientCartHis(Base): """客户购物车历史""" __tablename__ = "biz_client_cart_his" id = Column(String(32), primary_key=True, nullable=False, comment="主键ID") client_id = Column(String(32), nullable=False, comment="客户用户ID") price_list_id = Column(String(32), nullable=False, comment="价格清单ID") product_id = Column(String(32), nullable=False, comment="商品ID") unit_id = Column(String(32), nullable=False, comment="单位ID") quantity = Column(Numeric(12, 4), nullable=False, default=0, comment="数量") unit_price = Column(Numeric(12, 2), nullable=False, default=0, comment="单价(元)") amount = Column(Numeric(12, 2), nullable=False, default=0, comment="行金额(元)") product_name = Column(String(200), nullable=True, comment="商品名称快照") unit_name = Column(String(50), nullable=True, comment="单位名称快照") category_name = Column(String(100), nullable=True, comment="分类名称快照") image_url = Column(String(500), nullable=True, comment="图片") create_at = Column(DateTime, default=datetime.now, comment="创建时间") create_by = Column(String(32), nullable=True, comment="创建人ID") create_name = Column(String(100), nullable=True, comment="创建人姓名") update_at = Column(DateTime, nullable=True, comment="修改时间") update_by = Column(String(32), nullable=True, comment="修改人ID") his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")