refactor: 移除多租户和客户相关代码及功能

refactor: 统一状态字段为字符串类型并更新相关组件
refactor: 更新模型基类移除租户和客户相关字段
refactor: 简化数据权限控制逻辑
refactor: 优化类型注解使用Python 3.10+语法
refactor: 清理无用导入和注释
docs: 更新文档移除多租户相关内容
This commit is contained in:
zhangtao
2025-12-01 00:36:05 +08:00
parent 463e2fca23
commit 3c12fa56eb
173 changed files with 3143 additions and 7672 deletions
@@ -6,10 +6,10 @@ from redis.asyncio.client import Redis
from app.common.request import PaginationService
from app.common.response import StreamResponse, SuccessResponse
from app.core.router_class import OperationLogRoute
from app.utils.common_util import bytes2file_response
from app.core.base_params import PaginationQueryParam
from app.core.dependencies import AuthPermission, redis_getter
from app.core.router_class import OperationLogRoute
from app.core.logger import log
from ..auth.schema import AuthSchema
+17 -17
View File
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from typing import Dict, List, Optional, Sequence, Union, Any
from typing import Sequence
from app.core.base_crud import CRUDBase
@@ -22,47 +22,47 @@ class ParamsCRUD(CRUDBase[ParamsModel, ParamsCreateSchema, ParamsUpdateSchema]):
self.auth = auth
super().__init__(model=ParamsModel, auth=auth)
async def get_obj_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[ParamsModel]:
async def get_obj_by_id_crud(self, id: int, preload: list | None = None) -> ParamsModel | None:
"""
获取配置管理型详情
参数:
- id (int): 配置管理型ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项
- preload (list | None): 预加载关系,未提供时使用模型默认项
返回:
- Optional[ParamsModel]: 配置管理型模型实例
- ParamsModel | None: 配置管理型模型实例
"""
return await self.get(id=id, preload=preload)
async def get_obj_by_key_crud(self, key: str, preload: Optional[List[Union[str, Any]]] = None) -> Optional[ParamsModel]:
async def get_obj_by_key_crud(self, key: str, preload: list | None = None) -> ParamsModel | None:
"""
根据key获取配置管理型详情
参数:
- key (str): 配置管理型key
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项
- preload (list | None): 预加载关系,未提供时使用模型默认项
返回:
- Optional[ParamsModel]: 配置管理型模型实例
- ParamsModel | None: 配置管理型模型实例
"""
return await self.get(config_key=key, preload=preload)
async def get_obj_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[ParamsModel]:
async def get_obj_list_crud(self, search: dict | None = None, order_by: list | None = None, preload: list | None = None) -> Sequence[ParamsModel]:
"""
获取配置管理型列表
参数:
- search (Dict | None): 查询参数对象。
- order_by (List[Dict[str, str]] | None): 排序参数列表。
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项
- search (dict | None): 查询参数对象。
- order_by (list | None): 排序参数列表。
- preload (list | None): 预加载关系,未提供时使用模型默认项
返回:
- Sequence[ParamsModel]: 配置管理型模型实例列表
"""
return await self.list(search=search, order_by=order_by, preload=preload)
async def create_obj_crud(self, data: ParamsCreateSchema) -> Optional[ParamsModel]:
async def create_obj_crud(self, data: ParamsCreateSchema) -> ParamsModel | None:
"""
创建配置管理型
@@ -70,11 +70,11 @@ class ParamsCRUD(CRUDBase[ParamsModel, ParamsCreateSchema, ParamsUpdateSchema]):
- data (ParamsCreateSchema): 创建配置管理型负载模型
返回:
- Optional[ParamsModel]: 配置管理型模型实例
- ParamsModel | None: 配置管理型模型实例
"""
return await self.create(data=data)
async def update_obj_crud(self, id: int, data: ParamsUpdateSchema) -> Optional[ParamsModel]:
async def update_obj_crud(self, id: int, data: ParamsUpdateSchema) -> ParamsModel | None:
"""
更新配置管理型
@@ -83,16 +83,16 @@ class ParamsCRUD(CRUDBase[ParamsModel, ParamsCreateSchema, ParamsUpdateSchema]):
- data (ParamsUpdateSchema): 更新配置管理型负载模型
返回:
- Optional[ParamsModel]: 配置管理型模型实例
- ParamsModel | None: 配置管理型模型实例
"""
return await self.update(id=id, data=data)
async def delete_obj_crud(self, ids: List[int]) -> None:
async def delete_obj_crud(self, ids: list[int]) -> None:
"""
删除配置管理型
参数:
- ids (List[int]): 配置管理型ID列表
- ids (list[int]): 配置管理型ID列表
返回:
- None
@@ -9,26 +9,6 @@ from app.core.base_model import ModelMixin
class ParamsModel(ModelMixin):
"""
参数配置表
参数配置隔离策略:
=============
- 系统级参数(tenant_id=NULL):
* 平台级配置参数,影响所有租户
* config_type=True表示系统内置,不可删除
* 如:系统名称、Logo、邮件配置等
- 租户级参数(tenant_id>1):
* 租户自定义配置参数,仅本租户生效
* config_type=False表示可自定义
* 如:租户LOGO、业务配置等
- 不需要customer_id:
* 参数是租户级配置,不属于客户
用于存储系统配置参数,包括:
- 系统级别参数
- 租户级别参数
- 配置项的名称、键、值和类型等信息
"""
__tablename__: str = "sys_param"
__table_args__: dict[str, str] = ({'comment': '系统参数表'})
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field, field_validator
from fastapi import Query
@@ -10,13 +9,12 @@ from app.core.base_schema import BaseSchema
class ParamsCreateSchema(BaseModel):
"""配置创建模型"""
config_name: str = Field(..., max_length=500, description="参数名称")
config_name: str = Field(..., max_length=64, description="参数名称")
config_key: str = Field(..., max_length=500, description="参数键名")
config_value: Optional[str] = Field(default=None, description="参数键值")
config_value: str | None = Field(default=None, description="参数键值")
config_type: bool = Field(default=False, description="系统内置(True:是 False:否)")
status: str = Field(default="0", description="状态(True:正常 False:停用)")
description: Optional[str] = Field(default=None, max_length=500, description="描述")
description: str | None = Field(default=None, max_length=500, description="描述")
@field_validator('config_key')
@classmethod
@@ -43,10 +41,11 @@ class ParamsQueryParam:
def __init__(
self,
config_name: Optional[str] = Query(None, description="配置名称"),
config_key: Optional[str] = Query(None, description="配置键名"),
config_type: Optional[bool] = Query(None, description="系统内置((True:是 False:否))"),
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
config_name: str | None = Query(None, description="配置名称"),
config_key: str | None = Query(None, description="配置键名"),
config_type: bool | None = Query(None, description="系统内置((True:是 False:否))"),
created_time: list[DateTimeStr] | None = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
updated_time: list[DateTimeStr] | None = Query(None, description="更新时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
) -> None:
# 模糊查询字段
@@ -59,5 +58,6 @@ class ParamsQueryParam:
# 时间范围查询
if created_time and len(created_time) == 2:
self.created_time = ("between", (created_time[0], created_time[1]))
if updated_time and len(updated_time) == 2:
self.updated_time = ("between", (updated_time[0], updated_time[1]))
@@ -1,8 +1,6 @@
# -*- coding: utf-8 -*-
import json
from typing import Any, Dict, List, Optional
from redis.asyncio.client import Redis
from fastapi import UploadFile
from redis.asyncio.client import Redis
@@ -26,7 +24,7 @@ class ParamsService:
配置管理模块服务层
"""
@classmethod
async def get_obj_detail_service(cls, auth: AuthSchema, id: int) -> Dict:
async def get_obj_detail_service(cls, auth: AuthSchema, id: int) -> dict:
"""
获取配置详情
@@ -35,13 +33,13 @@ class ParamsService:
- id (int): 配置管理型ID
返回:
- Dict: 配置管理型模型实例字典表示
- dict: 配置管理型模型实例字典表示
"""
obj = await ParamsCRUD(auth).get_obj_by_id_crud(id=id)
return ParamsOutSchema.model_validate(obj).model_dump()
@classmethod
async def get_obj_by_key_service(cls, auth: AuthSchema, config_key: str) -> Dict:
async def get_obj_by_key_service(cls, auth: AuthSchema, config_key: str) -> dict:
"""
根据配置键获取配置详情
@@ -75,17 +73,17 @@ class ParamsService:
return obj.config_value
@classmethod
async def get_obj_list_service(cls, auth: AuthSchema, search: Optional[ParamsQueryParam] = None, order_by: Optional[List[Dict[str, str]]]= None) -> List[Dict]:
async def get_obj_list_service(cls, auth: AuthSchema, search: ParamsQueryParam | None = None, order_by: list[dict] | None = None) -> list[dict]:
"""
获取配置管理型列表
参数:
- auth (AuthSchema): 认证信息模型
- search (ParamsQueryParam | None): 查询参数对象
- order_by (List[Dict[str, str]] | None): 排序参数列表
- order_by (list[dict] | None): 排序参数列表
返回:
- List[Dict]: 配置管理型模型实例字典列表表示
- list[dict]: 配置管理型模型实例字典列表表示
"""
obj_list = None
if search:
@@ -95,7 +93,7 @@ class ParamsService:
return [ParamsOutSchema.model_validate(obj).model_dump() for obj in obj_list]
@classmethod
async def create_obj_service(cls, auth: AuthSchema, redis: Redis, data: ParamsCreateSchema) -> Dict:
async def create_obj_service(cls, auth: AuthSchema, redis: Redis, data: ParamsCreateSchema) -> dict:
"""
创建配置管理型
@@ -105,7 +103,7 @@ class ParamsService:
- data (ParamsCreateSchema): 配置管理型创建模型
返回:
- Dict: 新创建的配置管理型模型实例字典表示
- dict: 新创建的配置管理型模型实例字典表示
"""
exist_obj = await ParamsCRUD(auth).get(config_key=data.config_key)
if exist_obj:
@@ -131,7 +129,7 @@ class ParamsService:
return new_obj_dict
@classmethod
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: ParamsUpdateSchema) -> Dict:
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: ParamsUpdateSchema) -> dict:
"""
更新配置管理型
@@ -212,12 +210,12 @@ class ParamsService:
raise CustomException(msg="删除字典类型失败")
@classmethod
async def export_obj_service(cls, data_list: List[Dict[str, Any]]) -> bytes:
async def export_obj_service(cls, data_list: list[dict]) -> bytes:
"""
导出系统配置列表
参数:
- data_list (List[Dict[str, Any]]): 系统配置模型实例字典列表表示
- data_list (list[dict]): 系统配置模型实例字典列表表示
返回:
- bytes: Excel文件二进制数据
@@ -232,7 +230,7 @@ class ParamsService:
'created_time': '创建时间',
'updated_time': '更新时间',
'created_id': '创建者ID',
'creator': '创建者',
'updated_id': '更新者ID',
}
# 复制数据并转换状态
@@ -245,7 +243,7 @@ class ParamsService:
return ExcelUtil.export_list2excel(list_data=data, mapping_dict=mapping_dict)
@classmethod
async def upload_service(cls, base_url: str, file: UploadFile) -> Dict:
async def upload_service(cls, base_url: str, file: UploadFile) -> dict:
"""
上传文件
@@ -254,7 +252,7 @@ class ParamsService:
- file (UploadFile): 上传的文件对象
返回:
- Dict: 上传文件的响应模型实例字典表示
- dict: 上传文件的响应模型实例字典表示
"""
filename, filepath, file_url = await UploadUtil.upload_file(file=file, base_url=base_url)
@@ -301,7 +299,7 @@ class ParamsService:
raise CustomException(msg="初始化系统配置失败")
@classmethod
async def get_init_config_service(cls, redis: Redis) -> List[Dict]:
async def get_init_config_service(cls, redis: Redis) -> list[dict]:
"""
获取系统配置
@@ -309,7 +307,7 @@ class ParamsService:
- redis (Redis): Redis 客户端实例
返回:
- List[Dict]: 系统配置模型实例字典列表表示
- list[dict]: 系统配置模型实例字典列表表示
"""
redis_keys = await RedisCURD(redis).get_keys(f"{RedisInitKeyConfig.SYSTEM_CONFIG.key}:*")
redis_configs = await RedisCURD(redis).mget(redis_keys)
@@ -327,7 +325,7 @@ class ParamsService:
return configs
@classmethod
async def get_system_config_for_middleware(cls, redis: Redis) -> Dict[str, Any]:
async def get_system_config_for_middleware(cls, redis: Redis) -> dict:
"""
获取中间件所需的系统配置
@@ -335,7 +333,7 @@ class ParamsService:
- redis (Redis): Redis 客户端实例
返回:
- Dict[str, Any]: 包含演示模式、IP白名单、API白名单和IP黑名单的配置字典
- dict: 包含演示模式、IP白名单、API白名单和IP黑名单的配置字典
"""
# 定义需要获取的配置键
config_keys = [