Files
shanxia2.0/backend/app/models/models.py
T

396 lines
23 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""数据模型(与 docs/sql/zkxw-requirements-v0.3-schema.sql 对齐的核心系统表)"""
from datetime import datetime
import enum
from sqlalchemy import Column, String, DateTime, Integer, Text, CHAR, SmallInteger
from app.core.database import Base
class UserRole(str, enum.Enum):
"""Web 管理端约定角色(由 sys_role.role_name 映射而来,非数据库枚举)"""
ADMIN = "admin"
SUPER_ADMIN = "super_admin"
# =============================================================================
# V0.3 用户 / 角色 / 菜单(2.1.4 ~ 2.1.6)
# =============================================================================
class SysUser(Base):
"""用户表 sys_user(V0.3)"""
__tablename__ = "sys_user"
id = Column(String(64), primary_key=True, comment="主键ID")
dept_id = Column(String(64), nullable=True, comment="部门ID")
user_no = Column(String(30), nullable=False, comment="用户账号")
nick_name = Column(String(30), nullable=False, comment="用户名")
email = Column(String(50), nullable=False, default="", comment="用户邮箱")
phone_no = Column(String(11), nullable=False, default="", comment="手机号码")
sex = Column(CHAR(1), nullable=True, default="0", comment="用户性别")
avatar = Column(String(512), nullable=True, comment="头像")
password = Column("password", String(100), nullable=False, default="", comment="密码")
status = Column(CHAR(1), nullable=False, default="1", comment="帐号状态 1正常 0停用")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记 0正常 1已删除")
class SysRole(Base):
"""角色表 sys_role(V0.3)"""
__tablename__ = "sys_role"
id = Column(String(64), primary_key=True, comment="主键ID")
role_name = Column(String(30), nullable=False, comment="角色名称")
data_scope = Column(CHAR(1), nullable=True, default="1", comment="数据权限")
status = Column(CHAR(1), nullable=False, default="1", comment="角色状态")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysUserRole(Base):
"""用户-角色关联 sys_user_role(V0.3)"""
__tablename__ = "sys_user_role"
id = Column(String(64), primary_key=True, comment="主键ID")
user_id = Column(String(64), nullable=False, comment="用户ID")
role_id = Column(String(64), nullable=False, comment="角色ID")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysRoleMenu(Base):
"""角色-菜单关联 sys_role_menu(V0.3)"""
__tablename__ = "sys_role_menu"
id = Column(String(64), primary_key=True, comment="主键ID")
role_id = Column(String(64), nullable=False, comment="角色ID")
menu_id = Column(String(64), nullable=False, comment="菜单ID")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysRoleDataScopeDetail(Base):
"""角色自定义数据权限明细 sys_role_data_scope_detail"""
__tablename__ = "sys_role_data_scope_detail"
id = Column(String(64), primary_key=True, comment="主键ID")
role_id = Column(String(64), nullable=False, comment="角色ID")
scope_type = Column(String(20), nullable=False, comment="范围类型:dept/user")
scope_value = Column(String(100), nullable=False, comment="范围值:部门ID/用户ID")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysMenu(Base):
"""菜单表 sys_menu(V0.3)"""
__tablename__ = "sys_menu"
id = Column(String(64), primary_key=True, comment="主键ID")
menu_name = Column(String(50), nullable=False, comment="菜单名称")
parent_id = Column(String(64), nullable=False, default="0", comment="父菜单ID")
menu_type = Column(CHAR(1), nullable=True, default="M", comment="类型 M目录 C菜单 F按钮")
path = Column(String(200), nullable=False, default="", comment="路由路径")
component = Column(String(255), nullable=True, comment="组件路径")
perms = Column(String(100), nullable=True, comment="权限标识")
is_frame = Column(Integer, nullable=True, default=1, comment="是否外链")
visible = Column(CHAR(1), nullable=True, default="1", comment="显示状态")
status = Column(CHAR(1), nullable=False, default="1", comment="菜单状态")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysDept(Base):
"""组织/部门 sys_dept"""
__tablename__ = "sys_dept"
id = Column(String(64), primary_key=True, comment="主键ID")
parent_id = Column(String(64), nullable=False, default="0", comment="父组织id")
dept_name = Column(String(200), nullable=False, comment="组织名称")
dept_category_code = Column(String(64), nullable=True, comment="组织类别编码")
status = Column(CHAR(1), nullable=False, default="1", comment="部门状态")
leader = Column(String(100), nullable=True, comment="部门负责人")
leader_phone = Column(String(32), nullable=True, comment="部门负责人联系电话")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysTenant(Base):
"""租户表 sys_tenant(V0.3 2.1.1)"""
__tablename__ = "sys_tenant"
id = Column(String(64), primary_key=True, comment="主键ID")
tenant_no = Column(String(64), nullable=False, comment="租户编号(业务编码)")
tenant_name = Column(String(200), nullable=False, comment="租户名称")
contact_name = Column(String(100), nullable=True, comment="联系人姓名")
contact_phone = Column(String(32), nullable=True, comment="联系电话")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记:0-正常 1-已删除")
class SysSite(Base):
"""站点 sys_site"""
__tablename__ = "sys_site"
id = Column(String(64), primary_key=True, comment="主键ID")
site_name = Column(String(200), nullable=False, comment="站点名称")
site_code = Column(String(64), nullable=False, comment="站点编码")
site_type = Column(String(64), nullable=True, comment="站点类型")
status = Column(CHAR(1), nullable=False, default="1", comment="状态")
address = Column(String(512), nullable=True, comment="详细地址")
contact_name = Column(String(100), nullable=True, comment="联系人")
contact_phone = Column(String(32), nullable=True, comment="联系电话")
business_scope = Column(String(256), nullable=True, comment="业务范围")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysPost(Base):
"""职位 sys_post"""
__tablename__ = "sys_post"
id = Column(String(64), primary_key=True, comment="主键ID")
post_name = Column(String(100), nullable=False, comment="职位名称")
post_code = Column(String(64), nullable=False, comment="职位编码")
status = Column(CHAR(1), nullable=False, default="1", comment="状态")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysUserPost(Base):
"""用户-职位关联 sys_user_post"""
__tablename__ = "sys_user_post"
id = Column(String(64), primary_key=True, comment="主键ID")
user_id = Column(String(64), nullable=False, comment="用户ID")
post_id = Column(String(64), nullable=False, comment="职位ID")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BizItemUnit(Base):
"""物品单位 biz_item_unit"""
__tablename__ = "biz_item_unit"
id = Column(String(64), primary_key=True, comment="主键ID")
unit_code = Column(String(64), nullable=False, comment="单位编码")
unit_name = Column(String(100), nullable=False, comment="单位名称")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BizExpressCompany(Base):
"""快递公司 biz_express_company"""
__tablename__ = "biz_express_company"
id = Column(String(64), primary_key=True, comment="主键ID")
express_code = Column(String(64), nullable=False, comment="快递公司编码")
express_name = Column(String(200), nullable=False, comment="快递公司名称")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
# =============================================================================
# 字典管理(sys_dict_type / sys_dict_data)
# =============================================================================
class SysDictType(Base):
"""字典类型 sys_dict_type"""
__tablename__ = "sys_dict_type"
id = Column(String(64), primary_key=True, comment="主键ID")
dict_name = Column(String(100), nullable=False, default="", comment="字典名称")
dict_type = Column(String(100), nullable=False, default="", comment="字典类型编码")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class SysDictData(Base):
"""字典数据 sys_dict_data"""
__tablename__ = "sys_dict_data"
id = Column(String(64), primary_key=True, comment="主键ID")
dict_label = Column(String(100), nullable=False, default="", comment="字典标签")
dict_value = Column(String(100), nullable=False, default="", comment="字典键值")
dict_type = Column(String(100), nullable=False, default="", comment="字典类型")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人id")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建人部门ID")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人id")
update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
# =============================================================================
# 可选:API 请求日志(不在 V0.3 DDL 内;无表时中间件写入会失败并记录 warning)
# =============================================================================
class SysApiRequestLog(Base):
"""API 请求日志"""
__tablename__ = "sys_api_request_log"
id = Column(String(64), 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(64), nullable=True, comment="用户ID(JWT 解析)")
username = Column(String(100), nullable=True, comment="用户名")
role = Column(String(64), 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 SysApiRequestLogHis(Base):
"""API 请求日志历史表"""
__tablename__ = "sys_api_request_log_his"
id = Column(String(64), 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(64), nullable=True, comment="用户ID")
username = Column(String(100), nullable=True, comment="用户名")
role = Column(String(64), 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="历史记录创建时间")