From 8b3d04ca062ebbdca2d93a49687a51b771a6c94e Mon Sep 17 00:00:00 2001 From: insistence <3055204202@qq.com> Date: Fri, 17 May 2024 15:59:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9ESnakeCaseUtil?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=EF=BC=8C=E5=B0=86=E5=8E=9FCamelCase?= =?UTF-8?q?Util=E5=B7=A5=E5=85=B7=E7=B1=BB=E7=9A=84camel=5Fto=5Fsnake?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=BF=81=E7=A7=BB=E8=87=B3SnakeCaseUtil?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/log_dao.py | 10 ++-- ruoyi-fastapi-backend/utils/common_util.py | 51 ++++++++++++++----- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/ruoyi-fastapi-backend/module_admin/dao/log_dao.py b/ruoyi-fastapi-backend/module_admin/dao/log_dao.py index 7a39922..5161bea 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/log_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/log_dao.py @@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.log_do import SysOperLog, SysLogininfor from module_admin.entity.vo.log_vo import * from utils.page_util import PageUtil -from utils.common_util import CamelCaseUtil +from utils.common_util import SnakeCaseUtil from datetime import datetime, time @@ -22,10 +22,10 @@ class OperationLogDao: :return: 操作日志列表信息对象 """ if query_object.is_asc == 'ascending': - order_by_column = asc(getattr(SysOperLog, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None)) + order_by_column = asc(getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)) elif query_object.is_asc == 'descending': order_by_column = desc( - getattr(SysOperLog, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None)) + getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)) else: order_by_column = desc(SysOperLog.oper_time) query = select(SysOperLog) \ @@ -98,10 +98,10 @@ class LoginLogDao: """ if query_object.is_asc == 'ascending': order_by_column = asc( - getattr(SysLogininfor, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None)) + getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)) elif query_object.is_asc == 'descending': order_by_column = desc( - getattr(SysLogininfor, CamelCaseUtil.camel_to_snake(query_object.order_by_column), None)) + getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)) else: order_by_column = desc(SysLogininfor.login_time) query = select(SysLogininfor) \ diff --git a/ruoyi-fastapi-backend/utils/common_util.py b/ruoyi-fastapi-backend/utils/common_util.py index df9a6a5..1dd8c93 100644 --- a/ruoyi-fastapi-backend/utils/common_util.py +++ b/ruoyi-fastapi-backend/utils/common_util.py @@ -40,19 +40,8 @@ def worship(): class CamelCaseUtil: """ - 小驼峰形式(camelCase)与下划线形式(snake_case)互相转换工具方法 + 下划线形式(snake_case)转小驼峰形式(camelCase)工具方法 """ - @classmethod - def camel_to_snake(cls, camel_str): - """ - 小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case) - :param camel_str: 小驼峰形式字符串 - :return: 下划线形式字符串 - """ - # 在大写字母前添加一个下划线,然后将整个字符串转为小写 - words = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel_str) - return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower() - @classmethod def snake_to_camel(cls, snake_str): """ @@ -88,6 +77,44 @@ class CamelCaseUtil: return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns}) +class SnakeCaseUtil: + """ + 小驼峰形式(camelCase)转下划线形式(snake_case)工具方法 + """ + @classmethod + def camel_to_snake(cls, camel_str): + """ + 小驼峰形式字符串(camelCase)转换为下划线形式字符串(snake_case) + :param camel_str: 小驼峰形式字符串 + :return: 下划线形式字符串 + """ + # 在大写字母前添加一个下划线,然后将整个字符串转为小写 + words = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel_str) + return re.sub('([a-z0-9])([A-Z])', r'\1_\2', words).lower() + + @classmethod + def transform_result(cls, result): + """ + 针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法 + :param result: 输入数据 + :return: 小驼峰形式结果 + """ + if result is None: + return result + # 如果是字典,直接转换键 + elif isinstance(result, dict): + return {cls.camel_to_snake(k): v for k, v in result.items()} + # 如果是一组字典或其他类型的列表,遍历列表进行转换 + elif isinstance(result, list): + return [cls.transform_result(row) if isinstance(row, (dict, Row)) else (cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row) for row in result] + # 如果是sqlalchemy的Row实例,遍历Row进行转换 + elif isinstance(result, Row): + return [cls.transform_result(row) if isinstance(row, dict) else (cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row) for row in result] + # 如果是其他类型,如模型实例,先转换为字典 + else: + return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns}) + + def bytes2human(n, format_str="%(value).1f%(symbol)s"): """Used by various scripts. See: http://goo.gl/zeJZl