diff --git a/ruoyi-fastapi-backend/module_admin/dao/job_dao.py b/ruoyi-fastapi-backend/module_admin/dao/job_dao.py index 805d460..fc30048 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/job_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/job_dao.py @@ -104,15 +104,24 @@ class JobDao: return db_job @classmethod - async def edit_job_dao(cls, db: AsyncSession, job: dict): + async def edit_job_dao(cls, db: AsyncSession, job: dict, old_job: JobModel): """ 编辑定时任务数据库操作 :param db: orm对象 :param job: 需要更新的定时任务字典 + :param old_job: 原定时任务对象 :return: """ - await db.execute(update(SysJob), [job]) + await db.execute( + update(SysJob) + .where( + SysJob.job_id == old_job.job_id, + SysJob.job_name == old_job.job_name, + SysJob.job_group == old_job.job_group, + ) + .values(**job) + ) @classmethod async def delete_job_dao(cls, db: AsyncSession, job: JobModel): diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/config_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/config_do.py index 012d2be..8a3235d 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/config_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/config_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import CHAR, Column, DateTime, Integer, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysConfig(Base): @@ -9,14 +11,20 @@ class SysConfig(Base): """ __tablename__ = 'sys_config' + __table_args__ = {'comment': '参数配置表'} - config_id = Column(Integer, primary_key=True, autoincrement=True, comment='参数主键') - config_name = Column(String(100), nullable=True, default='', comment='参数名称') - config_key = Column(String(100), nullable=True, default='', comment='参数键名') - config_value = Column(String(500), nullable=True, default='', comment='参数键值') - config_type = Column(String(1), nullable=True, default='N', comment='系统内置(Y是 N否)') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + config_id = Column(Integer, primary_key=True, nullable=False, autoincrement=True, comment='参数主键') + config_name = Column(String(100), nullable=True, server_default="''", comment='参数名称') + config_key = Column(String(100), nullable=True, server_default="''", comment='参数键名') + config_value = Column(String(500), nullable=True, server_default="''", comment='参数键值') + config_type = Column(CHAR(1), nullable=True, server_default='N', comment='系统内置(Y是 N否)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default=None, comment='备注') + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/dept_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/dept_do.py index 44e2f02..48baf8d 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/dept_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/dept_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Integer, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysDept(Base): @@ -9,18 +11,34 @@ class SysDept(Base): """ __tablename__ = 'sys_dept' + __table_args__ = {'comment': '部门表'} - dept_id = Column(Integer, primary_key=True, autoincrement=True, comment='部门id') - parent_id = Column(Integer, default=0, comment='父部门id') - ancestors = Column(String(50), nullable=True, default='', comment='祖级列表') - dept_name = Column(String(30), nullable=True, default='', comment='部门名称') - order_num = Column(Integer, default=0, comment='显示顺序') - leader = Column(String(20), nullable=True, default=None, comment='负责人') - phone = Column(String(11), nullable=True, default=None, comment='联系电话') - email = Column(String(50), nullable=True, default=None, comment='邮箱') - status = Column(String(1), nullable=True, default='0', comment='部门状态(0正常 1停用)') - del_flag = Column(String(1), nullable=True, default='0', comment='删除标志(0代表存在 2代表删除)') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + dept_id = Column(BigInteger, primary_key=True, autoincrement=True, comment='部门id') + parent_id = Column(BigInteger, server_default='0', comment='父部门id') + ancestors = Column(String(50), nullable=True, server_default="''", comment='祖级列表') + dept_name = Column(String(30), nullable=True, server_default="''", comment='部门名称') + order_num = Column(Integer, server_default='0', comment='显示顺序') + leader = Column( + String(20), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='负责人', + ) + phone = Column( + String(11), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='联系电话', + ) + email = Column( + String(50), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='邮箱', + ) + status = Column(CHAR(1), nullable=True, server_default='0', comment='部门状态(0正常 1停用)') + del_flag = Column(CHAR(1), nullable=True, server_default='0', comment='删除标志(0代表存在 2代表删除)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/dict_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/dict_do.py index 7a155ea..de6a9c4 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/dict_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/dict_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String, UniqueConstraint +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Integer, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysDictType(Base): @@ -9,18 +11,22 @@ class SysDictType(Base): """ __tablename__ = 'sys_dict_type' + __table_args__ = {'comment': '字典类型表'} - dict_id = Column(Integer, primary_key=True, autoincrement=True, comment='字典主键') - dict_name = Column(String(100), nullable=True, default='', comment='字典名称') - dict_type = Column(String(100), nullable=True, default='', comment='字典类型') - status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1停用)') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + dict_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='字典主键') + dict_name = Column(String(100), nullable=True, server_default="''", comment='字典名称') + dict_type = Column(String(100), unique=True, nullable=True, server_default="''", comment='字典类型') + status = Column(CHAR(1), nullable=True, server_default='0', comment='状态(0正常 1停用)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default=None, comment='备注') - - __table_args__ = (UniqueConstraint('dict_type', name='uq_sys_dict_type_dict_type'),) + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) class SysDictData(Base): @@ -29,18 +35,34 @@ class SysDictData(Base): """ __tablename__ = 'sys_dict_data' + __table_args__ = {'comment': '字典数据表'} - dict_code = Column(Integer, primary_key=True, autoincrement=True, comment='字典编码') - dict_sort = Column(Integer, nullable=True, default=0, comment='字典排序') - dict_label = Column(String(100), nullable=True, default='', comment='字典标签') - dict_value = Column(String(100), nullable=True, default='', comment='字典键值') - dict_type = Column(String(100), nullable=True, default='', comment='字典类型') - css_class = Column(String(100), nullable=True, default=None, comment='样式属性(其他样式扩展)') - list_class = Column(String(100), nullable=True, default=None, comment='表格回显样式') - is_default = Column(String(1), nullable=True, default='N', comment='是否默认(Y是 N否)') - status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1停用)') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + dict_code = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='字典编码') + dict_sort = Column(Integer, nullable=True, server_default='0', comment='字典排序') + dict_label = Column(String(100), nullable=True, server_default="''", comment='字典标签') + dict_value = Column(String(100), nullable=True, server_default="''", comment='字典键值') + dict_type = Column(String(100), nullable=True, server_default="''", comment='字典类型') + css_class = Column( + String(100), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='样式属性(其他样式扩展)', + ) + list_class = Column( + String(100), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='表格回显样式', + ) + is_default = Column(CHAR(1), nullable=True, server_default='N', comment='是否默认(Y是 N否)') + status = Column(CHAR(1), nullable=True, server_default='0', comment='状态(0正常 1停用)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default=None, comment='备注') + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/job_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/job_do.py index b2cbfb8..8e941b7 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/job_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/job_do.py @@ -1,5 +1,5 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, String from config.database import Base @@ -9,28 +9,29 @@ class SysJob(Base): """ __tablename__ = 'sys_job' + __table_args__ = {'comment': '定时任务调度表'} - job_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务ID') - job_name = Column(String(64), nullable=True, default='', comment='任务名称') - job_group = Column(String(64), nullable=True, default='default', comment='任务组名') - job_executor = Column(String(64), nullable=True, default='default', comment='任务执行器') + job_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='任务ID') + job_name = Column(String(64), primary_key=True, nullable=False, server_default="''", comment='任务名称') + job_group = Column(String(64), primary_key=True, nullable=False, server_default='default', comment='任务组名') + job_executor = Column(String(64), nullable=True, server_default='default', comment='任务执行器') invoke_target = Column(String(500), nullable=False, comment='调用目标字符串') - job_args = Column(String(255), nullable=True, default='', comment='位置参数') - job_kwargs = Column(String(255), nullable=True, default='', comment='关键字参数') - cron_expression = Column(String(255), nullable=True, default='', comment='cron执行表达式') + job_args = Column(String(255), nullable=True, server_default="''", comment='位置参数') + job_kwargs = Column(String(255), nullable=True, server_default="''", comment='关键字参数') + cron_expression = Column(String(255), nullable=True, server_default="''", comment='cron执行表达式') misfire_policy = Column( String(20), nullable=True, - default='3', + server_default='3', comment='计划执行错误策略(1立即执行 2执行一次 3放弃执行)', ) - concurrent = Column(String(1), nullable=True, default='1', comment='是否并发执行(0允许 1禁止)') - status = Column(String(1), nullable=True, default='0', comment='状态(0正常 1暂停)') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + concurrent = Column(CHAR(1), nullable=True, server_default='1', comment='是否并发执行(0允许 1禁止)') + status = Column(CHAR(1), nullable=True, server_default='0', comment='状态(0正常 1暂停)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default='', comment='备注信息') + remark = Column(String(500), nullable=True, server_default="''", comment='备注信息') class SysJobLog(Base): @@ -39,16 +40,17 @@ class SysJobLog(Base): """ __tablename__ = 'sys_job_log' + __table_args__ = {'comment': '定时任务调度日志表'} - job_log_id = Column(Integer, primary_key=True, autoincrement=True, comment='任务日志ID') + job_log_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='任务日志ID') job_name = Column(String(64), nullable=False, comment='任务名称') job_group = Column(String(64), nullable=False, comment='任务组名') job_executor = Column(String(64), nullable=False, comment='任务执行器') invoke_target = Column(String(500), nullable=False, comment='调用目标字符串') - job_args = Column(String(255), nullable=True, default='', comment='位置参数') - job_kwargs = Column(String(255), nullable=True, default='', comment='关键字参数') - job_trigger = Column(String(255), nullable=True, default='', comment='任务触发器') - job_message = Column(String(500), nullable=True, default='', comment='日志信息') - status = Column(String(1), nullable=True, default='0', comment='执行状态(0正常 1失败)') - exception_info = Column(String(2000), nullable=True, default='', comment='异常信息') + job_args = Column(String(255), nullable=True, server_default="''", comment='位置参数') + job_kwargs = Column(String(255), nullable=True, server_default="''", comment='关键字参数') + job_trigger = Column(String(255), nullable=True, server_default="''", comment='任务触发器') + job_message = Column(String(500), nullable=True, comment='日志信息') + status = Column(CHAR(1), nullable=True, server_default='0', comment='执行状态(0正常 1失败)') + exception_info = Column(String(2000), nullable=True, server_default="''", comment='异常信息') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/log_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/log_do.py index f9e14ab..981b026 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/log_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/log_do.py @@ -1,5 +1,5 @@ from datetime import datetime -from sqlalchemy import BigInteger, Column, DateTime, Index, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Index, Integer, String from config.database import Base @@ -9,15 +9,16 @@ class SysLogininfor(Base): """ __tablename__ = 'sys_logininfor' + __table_args__ = {'comment': '系统访问记录'} - info_id = Column(Integer, primary_key=True, autoincrement=True, comment='访问ID') - user_name = Column(String(50), nullable=True, default='', comment='用户账号') - ipaddr = Column(String(128), nullable=True, default='', comment='登录IP地址') - login_location = Column(String(255), nullable=True, default='', comment='登录地点') - browser = Column(String(50), nullable=True, default='', comment='浏览器类型') - os = Column(String(50), nullable=True, default='', comment='操作系统') - status = Column(String(1), nullable=True, default='0', comment='登录状态(0成功 1失败)') - msg = Column(String(255), nullable=True, default='', comment='提示消息') + info_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='访问ID') + user_name = Column(String(50), nullable=True, server_default="''", comment='用户账号') + ipaddr = Column(String(128), nullable=True, server_default="''", comment='登录IP地址') + login_location = Column(String(255), nullable=True, server_default="''", comment='登录地点') + browser = Column(String(50), nullable=True, server_default="''", comment='浏览器类型') + os = Column(String(50), nullable=True, server_default="''", comment='操作系统') + status = Column(CHAR(1), nullable=True, server_default='0', comment='登录状态(0成功 1失败)') + msg = Column(String(255), nullable=True, server_default="''", comment='提示消息') login_time = Column(DateTime, nullable=True, default=datetime.now(), comment='访问时间') idx_sys_logininfor_s = Index('idx_sys_logininfor_s', status) @@ -30,24 +31,25 @@ class SysOperLog(Base): """ __tablename__ = 'sys_oper_log' + __table_args__ = {'comment': '操作日志记录'} - oper_id = Column(BigInteger, primary_key=True, autoincrement=True, comment='日志主键') - title = Column(String(50), nullable=True, default='', comment='模块标题') - business_type = Column(Integer, default=0, comment='业务类型(0其它 1新增 2修改 3删除)') - method = Column(String(100), nullable=True, default='', comment='方法名称') - request_method = Column(String(10), nullable=True, default='', comment='请求方式') - operator_type = Column(Integer, default=0, comment='操作类别(0其它 1后台用户 2手机端用户)') - oper_name = Column(String(50), nullable=True, default='', comment='操作人员') - dept_name = Column(String(50), nullable=True, default='', comment='部门名称') - oper_url = Column(String(255), nullable=True, default='', comment='请求URL') - oper_ip = Column(String(128), nullable=True, default='', comment='主机地址') - oper_location = Column(String(255), nullable=True, default='', comment='操作地点') - oper_param = Column(String(2000), nullable=True, default='', comment='请求参数') - json_result = Column(String(2000), nullable=True, default='', comment='返回参数') - status = Column(Integer, default=0, comment='操作状态(0正常 1异常)') - error_msg = Column(String(2000), nullable=True, default='', comment='错误消息') + oper_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='日志主键') + title = Column(String(50), nullable=True, server_default="''", comment='模块标题') + business_type = Column(Integer, nullable=True, server_default='0', comment='业务类型(0其它 1新增 2修改 3删除)') + method = Column(String(100), nullable=True, server_default="''", comment='方法名称') + request_method = Column(String(10), nullable=True, server_default="''", comment='请求方式') + operator_type = Column(Integer, nullable=True, server_default='0', comment='操作类别(0其它 1后台用户 2手机端用户)') + oper_name = Column(String(50), nullable=True, server_default="''", comment='操作人员') + dept_name = Column(String(50), nullable=True, server_default="''", comment='部门名称') + oper_url = Column(String(255), nullable=True, server_default="''", comment='请求URL') + oper_ip = Column(String(128), nullable=True, server_default="''", comment='主机地址') + oper_location = Column(String(255), nullable=True, server_default="''", comment='操作地点') + oper_param = Column(String(2000), nullable=True, server_default="''", comment='请求参数') + json_result = Column(String(2000), nullable=True, server_default="''", comment='返回参数') + status = Column(Integer, nullable=True, server_default='0', comment='操作状态(0正常 1异常)') + error_msg = Column(String(2000), nullable=True, server_default="''", comment='错误消息') oper_time = Column(DateTime, nullable=True, default=datetime.now(), comment='操作时间') - cost_time = Column(BigInteger, default=0, comment='消耗时间') + cost_time = Column(BigInteger, nullable=True, server_default='0', comment='消耗时间') idx_sys_oper_log_bt = Index('idx_sys_oper_log_bt', business_type) idx_sys_oper_log_s = Index('idx_sys_oper_log_s', status) diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/menu_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/menu_do.py index d3ccffa..0a8a836 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/menu_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/menu_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Integer, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysMenu(Base): @@ -9,24 +11,40 @@ class SysMenu(Base): """ __tablename__ = 'sys_menu' + __table_args__ = {'comment': '菜单权限表'} - menu_id = Column(Integer, primary_key=True, autoincrement=True, comment='菜单ID') - menu_name = Column(String(50), nullable=False, default='', comment='菜单名称') - parent_id = Column(Integer, default=0, comment='父菜单ID') - order_num = Column(Integer, default=0, comment='显示顺序') - path = Column(String(200), nullable=True, default='', comment='路由地址') - component = Column(String(255), nullable=True, default=None, comment='组件路径') - query = Column(String(255), nullable=True, default=None, comment='路由参数') - route_name = Column(String(50), nullable=True, default='', comment='路由名称') - is_frame = Column(Integer, default=1, comment='是否为外链(0是 1否)') - is_cache = Column(Integer, default=0, comment='是否缓存(0缓存 1不缓存)') - menu_type = Column(String(1), nullable=True, default='', comment='菜单类型(M目录 C菜单 F按钮)') - visible = Column(String(1), nullable=True, default='0', comment='菜单状态(0显示 1隐藏)') - status = Column(String(1), nullable=True, default='0', comment='菜单状态(0正常 1停用)') - perms = Column(String(100), nullable=True, default=None, comment='权限标识') - icon = Column(String(100), nullable=True, default='#', comment='菜单图标') - create_by = Column(String(64), nullable=True, default='', comment='创建者') + menu_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='菜单ID') + menu_name = Column(String(50), nullable=False, comment='菜单名称') + parent_id = Column(BigInteger, nullable=True, server_default='0', comment='父菜单ID') + order_num = Column(Integer, server_default='0', comment='显示顺序') + path = Column(String(200), nullable=True, server_default="''", comment='路由地址') + component = Column( + String(255), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='组件路径', + ) + query = Column( + String(255), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='路由参数', + ) + route_name = Column(String(50), nullable=True, server_default="''", comment='路由名称') + is_frame = Column(Integer, nullable=True, server_default='1', comment='是否为外链(0是 1否)') + is_cache = Column(Integer, nullable=True, server_default='0', comment='是否缓存(0缓存 1不缓存)') + menu_type = Column(CHAR(1), nullable=True, server_default="''", comment='菜单类型(M目录 C菜单 F按钮)') + visible = Column(CHAR(1), nullable=True, server_default='0', comment='菜单状态(0显示 1隐藏)') + status = Column(CHAR(1), nullable=True, server_default='0', comment='菜单状态(0正常 1停用)') + perms = Column( + String(100), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='权限标识', + ) + icon = Column(String(100), nullable=True, server_default='#', comment='菜单图标') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), nullable=True, default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default='', comment='备注') + remark = Column(String(500), nullable=True, server_default="''", comment='备注') diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/notice_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/notice_do.py index 9d1eb98..0d60854 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/notice_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/notice_do.py @@ -1,6 +1,9 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, LargeBinary, String +from sqlalchemy import CHAR, Column, DateTime, Integer, LargeBinary, String +from sqlalchemy.dialects import mysql from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysNotice(Base): @@ -9,14 +12,25 @@ class SysNotice(Base): """ __tablename__ = 'sys_notice' + __table_args__ = {'comment': '通知公告表'} - notice_id = Column(Integer, primary_key=True, autoincrement=True, comment='公告ID') + notice_id = Column(Integer, primary_key=True, nullable=False, autoincrement=True, comment='公告ID') notice_title = Column(String(50), nullable=False, comment='公告标题') - notice_type = Column(String(1), nullable=False, comment='公告类型(1通知 2公告)') - notice_content = Column(LargeBinary, comment='公告内容') - status = Column(String(1), default='0', comment='公告状态(0正常 1关闭)') - create_by = Column(String(64), default='', comment='创建者') - create_time = Column(DateTime, comment='创建时间', default=datetime.now()) - update_by = Column(String(64), default='', comment='更新者') - update_time = Column(DateTime, comment='更新时间', default=datetime.now()) - remark = Column(String(255), comment='备注') + notice_type = Column(CHAR(1), nullable=False, comment='公告类型(1通知 2公告)') + notice_content = Column( + mysql.LONGBLOB if DataBaseConfig.db_type == 'mysql' else LargeBinary, + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type, False), + comment='公告内容', + ) + status = Column(CHAR(1), nullable=True, server_default='0', comment='公告状态(0正常 1关闭)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') + create_time = Column(DateTime, nullable=True, comment='创建时间', default=datetime.now()) + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') + update_time = Column(DateTime, nullable=True, comment='更新时间', default=datetime.now()) + remark = Column( + String(255), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/post_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/post_do.py index f231f72..442d0f3 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/post_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/post_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Integer, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysPost(Base): @@ -9,14 +11,20 @@ class SysPost(Base): """ __tablename__ = 'sys_post' + __table_args__ = {'comment': '岗位信息表'} - post_id = Column(Integer, primary_key=True, autoincrement=True, comment='岗位ID') + post_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='岗位ID') post_code = Column(String(64), nullable=False, comment='岗位编码') post_name = Column(String(50), nullable=False, comment='岗位名称') post_sort = Column(Integer, nullable=False, comment='显示顺序') - status = Column(String(1), nullable=False, default='0', comment='状态(0正常 1停用)') - create_by = Column(String(64), default='', comment='创建者') + status = Column(CHAR(1), nullable=False, comment='状态(0正常 1停用)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default=None, comment='备注') + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/role_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/role_do.py index 58d4de1..fecf9d1 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/role_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/role_do.py @@ -1,6 +1,9 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, Integer, SmallInteger, String +from sqlalchemy.dialects import mysql from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysRole(Base): @@ -9,25 +12,42 @@ class SysRole(Base): """ __tablename__ = 'sys_role' + __table_args__ = {'comment': '角色信息表'} - role_id = Column(Integer, primary_key=True, autoincrement=True, comment='角色ID') + role_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='角色ID') role_name = Column(String(30), nullable=False, comment='角色名称') role_key = Column(String(100), nullable=False, comment='角色权限字符串') role_sort = Column(Integer, nullable=False, comment='显示顺序') data_scope = Column( - String(1), - default='1', + CHAR(1), + nullable=True, + server_default='1', comment='数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', ) - menu_check_strictly = Column(Integer, default=1, comment='菜单树选择项是否关联显示') - dept_check_strictly = Column(Integer, default=1, comment='部门树选择项是否关联显示') - status = Column(String(1), nullable=False, default='0', comment='角色状态(0正常 1停用)') - del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)') - create_by = Column(String(64), default='', comment='创建者') - create_time = Column(DateTime, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), default='', comment='更新者') - update_time = Column(DateTime, default=datetime.now(), comment='更新时间') - remark = Column(String(500), default=None, comment='备注') + menu_check_strictly = Column( + mysql.TINYINT(display_width=1) if DataBaseConfig.db_type == 'mysql' else SmallInteger, + nullable=True, + server_default='1', + comment='菜单树选择项是否关联显示', + ) + dept_check_strictly = Column( + mysql.TINYINT(display_width=1) if DataBaseConfig.db_type == 'mysql' else SmallInteger, + nullable=True, + server_default='1', + comment='部门树选择项是否关联显示', + ) + status = Column(CHAR(1), nullable=False, comment='角色状态(0正常 1停用)') + del_flag = Column(CHAR(1), nullable=True, server_default='0', comment='删除标志(0代表存在 2代表删除)') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') + create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') + update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) class SysRoleDept(Base): @@ -36,9 +56,10 @@ class SysRoleDept(Base): """ __tablename__ = 'sys_role_dept' + __table_args__ = {'comment': '角色和部门关联表'} - role_id = Column(Integer, primary_key=True, nullable=False, comment='角色ID') - dept_id = Column(Integer, primary_key=True, nullable=False, comment='部门ID') + role_id = Column(BigInteger, primary_key=True, nullable=False, comment='角色ID') + dept_id = Column(BigInteger, primary_key=True, nullable=False, comment='部门ID') class SysRoleMenu(Base): @@ -47,6 +68,7 @@ class SysRoleMenu(Base): """ __tablename__ = 'sys_role_menu' + __table_args__ = {'comment': '角色和菜单关联表'} - role_id = Column(Integer, primary_key=True, nullable=False, comment='角色ID') - menu_id = Column(Integer, primary_key=True, nullable=False, comment='菜单ID') + role_id = Column(BigInteger, primary_key=True, nullable=False, comment='角色ID') + menu_id = Column(BigInteger, primary_key=True, nullable=False, comment='菜单ID') diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/user_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/user_do.py index 2dd0ba0..246461f 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/user_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/user_do.py @@ -1,6 +1,8 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, String from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class SysUser(Base): @@ -9,26 +11,37 @@ class SysUser(Base): """ __tablename__ = 'sys_user' + __table_args__ = {'comment': '用户信息表'} - user_id = Column(Integer, primary_key=True, autoincrement=True, comment='用户ID') - dept_id = Column(Integer, default=None, comment='部门ID') + user_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='用户ID') + dept_id = Column( + BigInteger, + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type, False), + comment='部门ID', + ) user_name = Column(String(30), nullable=False, comment='用户账号') nick_name = Column(String(30), nullable=False, comment='用户昵称') - user_type = Column(String(2), default='00', comment='用户类型(00系统用户)') - email = Column(String(50), default='', comment='用户邮箱') - phonenumber = Column(String(11), default='', comment='手机号码') - sex = Column(String(1), default='0', comment='用户性别(0男 1女 2未知)') - avatar = Column(String(100), default='', comment='头像地址') - password = Column(String(100), default='', comment='密码') - status = Column(String(1), default='0', comment='帐号状态(0正常 1停用)') - del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)') - login_ip = Column(String(128), default='', comment='最后登录IP') - login_date = Column(DateTime, comment='最后登录时间') - create_by = Column(String(64), default='', comment='创建者') - create_time = Column(DateTime, comment='创建时间', default=datetime.now()) - update_by = Column(String(64), default='', comment='更新者') - update_time = Column(DateTime, comment='更新时间', default=datetime.now()) - remark = Column(String(500), default=None, comment='备注') + user_type = Column(String(2), nullable=True, server_default='00', comment='用户类型(00系统用户)') + email = Column(String(50), nullable=True, server_default="''", comment='用户邮箱') + phonenumber = Column(String(11), nullable=True, server_default="''", comment='手机号码') + sex = Column(CHAR(1), nullable=True, server_default='0', comment='用户性别(0男 1女 2未知)') + avatar = Column(String(100), nullable=True, server_default="''", comment='头像地址') + password = Column(String(100), nullable=True, server_default="''", comment='密码') + status = Column(CHAR(1), nullable=True, server_default='0', comment='帐号状态(0正常 1停用)') + del_flag = Column(CHAR(1), nullable=True, server_default='0', comment='删除标志(0代表存在 2代表删除)') + login_ip = Column(String(128), nullable=True, server_default="''", comment='最后登录IP') + login_date = Column(DateTime, nullable=True, comment='最后登录时间') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') + create_time = Column(DateTime, nullable=True, comment='创建时间', default=datetime.now()) + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') + update_time = Column(DateTime, nullable=True, comment='更新时间', default=datetime.now()) + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) class SysUserRole(Base): @@ -37,9 +50,10 @@ class SysUserRole(Base): """ __tablename__ = 'sys_user_role' + __table_args__ = {'comment': '用户和角色关联表'} - user_id = Column(Integer, primary_key=True, nullable=False, comment='用户ID') - role_id = Column(Integer, primary_key=True, nullable=False, comment='角色ID') + user_id = Column(BigInteger, primary_key=True, nullable=False, comment='用户ID') + role_id = Column(BigInteger, primary_key=True, nullable=False, comment='角色ID') class SysUserPost(Base): @@ -48,6 +62,7 @@ class SysUserPost(Base): """ __tablename__ = 'sys_user_post' + __table_args__ = {'comment': '用户与岗位关联表'} - user_id = Column(Integer, primary_key=True, nullable=False, comment='用户ID') - post_id = Column(Integer, primary_key=True, nullable=False, comment='岗位ID') + user_id = Column(BigInteger, primary_key=True, nullable=False, comment='用户ID') + post_id = Column(BigInteger, primary_key=True, nullable=False, comment='岗位ID') diff --git a/ruoyi-fastapi-backend/module_admin/service/job_service.py b/ruoyi-fastapi-backend/module_admin/service/job_service.py index 55263c1..2b783f0 100644 --- a/ruoyi-fastapi-backend/module_admin/service/job_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/job_service.py @@ -129,7 +129,7 @@ class JobService: elif not await cls.check_job_unique_services(query_db, page_object): raise ServiceException(message=f'修改定时任务{page_object.job_name}失败,定时任务已存在') try: - await JobDao.edit_job_dao(query_db, edit_job) + await JobDao.edit_job_dao(query_db, edit_job, job_info) SchedulerUtil.remove_scheduler_job(job_id=edit_job.get('job_id')) if edit_job.get('status') == '0': job_info = await cls.job_detail_services(query_db, edit_job.get('job_id')) diff --git a/ruoyi-fastapi-backend/module_generator/entity/do/gen_do.py b/ruoyi-fastapi-backend/module_generator/entity/do/gen_do.py index e64d0bf..edd62f6 100644 --- a/ruoyi-fastapi-backend/module_generator/entity/do/gen_do.py +++ b/ruoyi-fastapi-backend/module_generator/entity/do/gen_do.py @@ -1,7 +1,9 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import BigInteger, CHAR, Column, DateTime, ForeignKey, Integer, String from sqlalchemy.orm import relationship from config.database import Base +from config.env import DataBaseConfig +from utils.common_util import SqlalchemyUtil class GenTable(Base): @@ -10,30 +12,48 @@ class GenTable(Base): """ __tablename__ = 'gen_table' + __table_args__ = {'comment': '代码生成业务表'} - table_id = Column(Integer, primary_key=True, autoincrement=True, comment='编号') - table_name = Column(String(200), nullable=True, default='', comment='表名称') - table_comment = Column(String(500), nullable=True, default='', comment='表描述') - sub_table_name = Column(String(64), nullable=True, comment='关联子表的表名') - sub_table_fk_name = Column(String(64), nullable=True, comment='子表关联的外键名') - class_name = Column(String(100), nullable=True, default='', comment='实体类名称') - tpl_category = Column(String(200), nullable=True, default='crud', comment='使用的模板(crud单表操作 tree树表操作)') + table_id = Column(BigInteger, primary_key=True, nullable=False, autoincrement=True, comment='编号') + table_name = Column(String(200), nullable=True, server_default="''", comment='表名称') + table_comment = Column(String(500), nullable=True, server_default="''", comment='表描述') + sub_table_name = Column( + String(64), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='关联子表的表名', + ) + sub_table_fk_name = Column( + String(64), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='子表关联的外键名', + ) + class_name = Column(String(100), nullable=True, server_default="''", comment='实体类名称') + tpl_category = Column( + String(200), nullable=True, server_default='crud', comment='使用的模板(crud单表操作 tree树表操作)' + ) tpl_web_type = Column( - String(30), nullable=True, default='', comment='前端模板类型(element-ui模版 element-plus模版)' + String(30), nullable=True, server_default="''", comment='前端模板类型(element-ui模版 element-plus模版)' ) package_name = Column(String(100), nullable=True, comment='生成包路径') module_name = Column(String(30), nullable=True, comment='生成模块名') business_name = Column(String(30), nullable=True, comment='生成业务名') - function_name = Column(String(100), nullable=True, comment='生成功能名') - function_author = Column(String(100), nullable=True, comment='生成功能作者') - gen_type = Column(String(1), nullable=True, default='0', comment='生成代码方式(0zip压缩包 1自定义路径)') - gen_path = Column(String(200), nullable=True, default='/', comment='生成路径(不填默认项目路径)') + function_name = Column(String(50), nullable=True, comment='生成功能名') + function_author = Column(String(50), nullable=True, comment='生成功能作者') + gen_type = Column(CHAR(1), nullable=True, server_default='0', comment='生成代码方式(0zip压缩包 1自定义路径)') + gen_path = Column(String(200), nullable=True, server_default='/', comment='生成路径(不填默认项目路径)') options = Column(String(1000), nullable=True, comment='其它生成选项') - create_by = Column(String(64), default='', comment='创建者') + create_by = Column(String(64), nullable=True, server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), default='', comment='更新者') + update_by = Column(String(64), nullable=True, server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') - remark = Column(String(500), nullable=True, default=None, comment='备注') + remark = Column( + String(500), + nullable=True, + server_default=SqlalchemyUtil.get_server_default_null(DataBaseConfig.db_type), + comment='备注', + ) columns = relationship('GenTableColumn', order_by='GenTableColumn.sort', back_populates='tables') @@ -44,31 +64,34 @@ class GenTableColumn(Base): """ __tablename__ = 'gen_table_column' + __table_args__ = {'comment': '代码生成业务表字段'} - column_id = Column(Integer, primary_key=True, autoincrement=True, comment='编号') - table_id = Column(Integer, ForeignKey('gen_table.table_id'), nullable=True, comment='归属表编号') + column_id = Column(BigInteger, primary_key=True, autoincrement=True, nullable=False, comment='编号') + table_id = Column(BigInteger, ForeignKey('gen_table.table_id'), nullable=True, comment='归属表编号') column_name = Column(String(200), nullable=True, comment='列名称') column_comment = Column(String(500), nullable=True, comment='列描述') column_type = Column(String(100), nullable=True, comment='列类型') python_type = Column(String(500), nullable=True, comment='PYTHON类型') python_field = Column(String(200), nullable=True, comment='PYTHON字段名') - is_pk = Column(String(1), nullable=True, comment='是否主键(1是)') - is_increment = Column(String(1), nullable=True, comment='是否自增(1是)') - is_required = Column(String(1), nullable=True, comment='是否必填(1是)') - is_unique = Column(String(1), nullable=True, comment='是否唯一(1是)') - is_insert = Column(String(1), nullable=True, comment='是否为插入字段(1是)') - is_edit = Column(String(1), nullable=True, comment='是否编辑字段(1是)') - is_list = Column(String(1), nullable=True, comment='是否列表字段(1是)') - is_query = Column(String(1), nullable=True, comment='是否查询字段(1是)') - query_type = Column(String(200), nullable=True, default='EQ', comment='查询方式(等于、不等于、大于、小于、范围)') + is_pk = Column(CHAR(1), nullable=True, comment='是否主键(1是)') + is_increment = Column(CHAR(1), nullable=True, comment='是否自增(1是)') + is_required = Column(CHAR(1), nullable=True, comment='是否必填(1是)') + is_unique = Column(CHAR(1), nullable=True, comment='是否唯一(1是)') + is_insert = Column(CHAR(1), nullable=True, comment='是否为插入字段(1是)') + is_edit = Column(CHAR(1), nullable=True, comment='是否编辑字段(1是)') + is_list = Column(CHAR(1), nullable=True, comment='是否列表字段(1是)') + is_query = Column(CHAR(1), nullable=True, comment='是否查询字段(1是)') + query_type = Column( + String(200), nullable=True, server_default='EQ', comment='查询方式(等于、不等于、大于、小于、范围)' + ) html_type = Column( String(200), nullable=True, comment='显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)' ) - dict_type = Column(String(200), nullable=True, default='', comment='字典类型') + dict_type = Column(String(200), nullable=True, server_default="''", comment='字典类型') sort = Column(Integer, nullable=True, comment='排序') - create_by = Column(String(64), default='', comment='创建者') + create_by = Column(String(64), server_default="''", comment='创建者') create_time = Column(DateTime, nullable=True, default=datetime.now(), comment='创建时间') - update_by = Column(String(64), default='', comment='更新者') + update_by = Column(String(64), server_default="''", comment='更新者') update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间') tables = relationship('GenTable', back_populates='columns') diff --git a/ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql b/ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql index b3731aa..a47c14f 100644 --- a/ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql +++ b/ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql @@ -522,7 +522,7 @@ create table sys_oper_log ( status int4 default 0, error_msg varchar(2000) default '', oper_time timestamp(0), - cost_time int8 default 0, + cost_time bigint default 0, primary key (oper_id) ); alter sequence sys_oper_log_oper_id_seq restart 100; @@ -545,6 +545,7 @@ comment on column sys_oper_log.json_result is '返回参数'; comment on column sys_oper_log.status is '操作状态(0正常 1异常)'; comment on column sys_oper_log.error_msg is '错误消息'; comment on column sys_oper_log.oper_time is '操作时间'; +comment on column sys_oper_log.cost_time is '消耗时间'; comment on table sys_oper_log is '操作日志记录'; -- ---------------------------- @@ -931,7 +932,8 @@ create table gen_table_column ( create_time timestamp(0), update_by varchar(64) default '', update_time timestamp(0), - primary key (column_id) + primary key (column_id), + constraint fk_gen_table_column_table_id foreign key (table_id) references gen_table(table_id) ); comment on column gen_table_column.column_id is '编号'; comment on column gen_table_column.table_id is '归属表编号'; diff --git a/ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql b/ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql index d0ce11a..7b796a7 100644 --- a/ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql +++ b/ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql @@ -709,5 +709,6 @@ create table gen_table_column ( create_time datetime comment '创建时间', update_by varchar(64) default '' comment '更新者', update_time datetime comment '更新时间', - primary key (column_id) + primary key (column_id), + foreign key (table_id) references gen_table(table_id) ) engine=innodb auto_increment=1 comment = '代码生成业务表字段'; \ No newline at end of file diff --git a/ruoyi-fastapi-backend/utils/common_util.py b/ruoyi-fastapi-backend/utils/common_util.py index b56000e..0ccb546 100644 --- a/ruoyi-fastapi-backend/utils/common_util.py +++ b/ruoyi-fastapi-backend/utils/common_util.py @@ -8,6 +8,7 @@ from openpyxl.utils import get_column_letter from openpyxl.worksheet.datavalidation import DataValidation from sqlalchemy.engine.row import Row from sqlalchemy.orm.collections import InstrumentedList +from sqlalchemy.sql.expression import TextClause, null from typing import Any, Dict, List, Literal, Union from config.database import Base from config.env import CachePathConfig @@ -100,6 +101,19 @@ class SqlalchemyUtil: return result_dict return result + @classmethod + def get_server_default_null(cls, dialect_name: str, need_explicit_null: bool = True) -> Union[TextClause, None]: + """ + 根据数据库方言动态返回值为null的server_default + + :param dialect_name: 数据库方言名称 + :param need_explicit_null: 是否需要显式DEFAULT NULL + :return: 不同数据库方言对应的null_server_default + """ + if need_explicit_null and dialect_name == 'postgresql': + return null() + return None + class CamelCaseUtil: """