"""数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表)""" from datetime import datetime import enum from sqlalchemy import Column, String, DateTime, Integer, Text, CHAR, SmallInteger, Numeric 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) # ============================================================================= # ============================================================================= # 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="头像") wx_openid = Column(String(64), nullable=True, comment="微信小程序 openid") wx_unionid = Column(String(64), nullable=True, comment="微信 unionid") 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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="shanxia2.0", 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 SysUserMenuFavorite(Base): """用户菜单收藏 sys_user_menu_favorite""" __tablename__ = "sys_user_menu_favorite" id = Column(String(64), primary_key=True, comment="主键ID") user_id = Column(String(64), nullable=False, comment="用户ID") menu_path = Column(String(512), nullable=False, comment="菜单路由 path") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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="shanxia2.0", 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 SysEthnic(Base): """民族码表 sys_ethnic(国标 GB/T 3304,全局)""" __tablename__ = "sys_ethnic" id = Column(String(64), primary_key=True, comment="主键ID") ethnic_name = Column(String(64), nullable=False, default="", comment="民族名称") ethnic_code = Column(String(16), nullable=False, default="", comment="民族编码") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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="字典键值") tag_type = Column(String(20), nullable=False, default="", comment="标签类型") dict_type = Column(String(100), nullable=False, default="", comment="字典类型") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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) # ============================================================================= # ============================================================================= # 可选: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") tenant_no = Column(String(64), nullable=True, comment="租户编号") business_title = Column(String(100), nullable=True, comment="操作模块") business_type = Column(Integer, nullable=True, comment="操作类型") business_id = Column(String(64), nullable=True, comment="业务主键") oper_summary = 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 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") tenant_no = Column(String(64), nullable=True, comment="租户编号") business_title = Column(String(100), nullable=True, comment="操作模块") business_type = Column(Integer, nullable=True, comment="操作类型") business_id = Column(String(64), nullable=True, comment="业务主键") oper_summary = 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="历史记录创建时间") # ============================================================================= # 业务表(biz_leave_request) # ============================================================================= # ============================================================================= # 业务表(biz_leave_request) # ============================================================================= class BizLeaveRequest(Base): """请假申请 biz_leave_request""" __tablename__ = "biz_leave_request" id = Column(String(64), primary_key=True, comment="主键ID") leave_type = Column(String(32), nullable=False, default="personal", comment="请假类型: personal/sick/annual/other") start_date = Column(String(20), nullable=False, comment="开始日期") end_date = Column(String(20), nullable=False, comment="结束日期") days = Column(Integer, nullable=False, default=1, comment="请假天数") reason = Column(String(500), nullable=True, comment="请假原因") wf_instance_id = Column(String(64), nullable=True, comment="流程实例ID") status = Column(String(32), nullable=False, default="draft", comment="状态: draft/pending/approved/rejected/cancelled") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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-已删除") # ============================================================================= # 工作流(wf_process_def / wf_process_version / wf_node / wf_transition / wf_process_instance / wf_task) # ============================================================================= class BizAttachment(Base): """业务附件 biz_attachment""" __tablename__ = "biz_attachment" id = Column(String(64), primary_key=True, comment="主键ID") business_type = Column(String(50), nullable=True, comment="业务类型") business_id = Column(String(64), nullable=True, comment="业务主键ID") original_name = Column(String(200), nullable=False, comment="原始文件名") file_ext = Column(String(20), nullable=True, comment="文件后缀名") file_url = Column(String(500), nullable=False, comment="MinIO路径后缀") file_size = Column(Integer, nullable=True, comment="文件大小(字节)") file_type = Column(String(50), nullable=True, comment="MIME类型") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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="删除标记") # ============================================================================= # 工作流(wf_process_def / wf_process_version / wf_node / wf_transition / wf_process_instance / wf_task) # ============================================================================= class WfProcessDef(Base): """流程定义 wf_process_def""" __tablename__ = "wf_process_def" id = Column(String(64), primary_key=True, comment="主键ID") process_code = Column(String(64), nullable=False, comment="流程编码") process_name = Column(String(200), nullable=False, comment="流程名称") status = Column(CHAR(1), nullable=False, default="1", comment="1启用 0停用") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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 WfProcessVersion(Base): """流程定义版本 wf_process_version""" __tablename__ = "wf_process_version" id = Column(String(64), primary_key=True, comment="主键ID") process_def_id = Column(String(64), nullable=False, comment="流程定义ID") version_no = Column(Integer, nullable=False, comment="版本号,递增") graph_json = Column(Text, nullable=True, comment="节点与连线等配置(JSON 字符串)") is_latest = Column(CHAR(1), nullable=True, default="0", comment="是否最新版本(1是 0否)") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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 WfNode(Base): """流程节点 wf_node""" __tablename__ = "wf_node" id = Column(String(64), primary_key=True, comment="主键ID") process_version_id = Column(String(64), nullable=False, comment="流程版本ID") node_key = Column(String(64), nullable=False, comment="节点唯一键(画布内)") node_type = Column(String(32), nullable=False, comment="start/end/approval/condition 等") node_name = Column(String(200), nullable=True, comment="节点名称") config_json = Column(Text, nullable=True, comment="审批人/SQL/会签策略等配置") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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 WfTransition(Base): """流程连线/转移 wf_transition""" __tablename__ = "wf_transition" id = Column(String(64), primary_key=True, comment="主键ID") process_version_id = Column(String(64), nullable=False, comment="流程版本ID") from_node_key = Column(String(64), nullable=False, comment="起始节点key") to_node_key = Column(String(64), nullable=False, comment="目标节点key") condition_expr = Column(String(512), nullable=True, comment="条件表达式或分支说明") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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 WfProcessInstance(Base): """流程实例 wf_process_instance""" __tablename__ = "wf_process_instance" id = Column(String(64), primary_key=True, comment="主键ID") process_version_id = Column(String(64), nullable=False, comment="发起时锁定的流程版本ID") business_type = Column(String(64), nullable=True, comment="业务类型") business_id = Column(String(64), nullable=True, comment="业务主键") starter_user_id = Column(String(64), nullable=True, comment="发起人") variables_json = Column(Text, nullable=True, comment="流程变量 JSON") status = Column(String(32), nullable=True, comment="running/completed/rejected 等") callback_url = Column(String(512), nullable=True, comment="业务回调地址") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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 WfTask(Base): """流程任务/待办 wf_task""" __tablename__ = "wf_task" id = Column(String(64), primary_key=True, comment="主键ID") instance_id = Column(String(64), nullable=False, comment="流程实例ID") node_key = Column(String(64), nullable=True, comment="当前节点key") assignee_user_id = Column(String(64), nullable=True, comment="待办人") status = Column(String(32), nullable=True, comment="pending/approved/rejected 等") comment_text = Column(String(512), nullable=True, comment="审批意见") tenant_no = Column(String(64), nullable=False, default="shanxia2.0", 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-已删除") # ============================================================================= # 细胞存储 — 采集协议单(biz_collection_protocol / audit / payment) # =============================================================================