diff --git a/ruoyi-fastapi-backend/config/constant.py b/ruoyi-fastapi-backend/config/constant.py index 552d717..5f94546 100644 --- a/ruoyi-fastapi-backend/config/constant.py +++ b/ruoyi-fastapi-backend/config/constant.py @@ -4,12 +4,16 @@ class CommonConstant: WWW: www主域 HTTP: http请求 HTTPS: https请求 + YES: 是否为系统默认(是) + NO: 是否为系统默认(否) UNIQUE: 校验是否唯一的返回标识(是) NOT_UNIQUE: 校验是否唯一的返回标识(否) """ WWW = 'www.' HTTP = 'http://' HTTPS = 'https://' + YES = 'Y' + NO = 'N' UNIQUE = True NOT_UNIQUE = False diff --git a/ruoyi-fastapi-backend/module_admin/service/config_service.py b/ruoyi-fastapi-backend/module_admin/service/config_service.py index e470060..fd269e8 100644 --- a/ruoyi-fastapi-backend/module_admin/service/config_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/config_service.py @@ -1,4 +1,5 @@ from fastapi import Request +from config.constant import CommonConstant from config.env import RedisInitKeyConfig from module_admin.dao.config_dao import * from module_admin.entity.vo.common_vo import CrudResponseModel @@ -38,8 +39,7 @@ class ConfigService: await redis.delete(*keys) config_all = await ConfigDao.get_config_list(query_db, ConfigPageQueryModel(**dict()), is_page=False) for config_obj in config_all: - if config_obj.get('configType') == 'Y': - await redis.set(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{config_obj.get('configKey')}", config_obj.get('configValue')) + await redis.set(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{config_obj.get('configKey')}", config_obj.get('configValue')) @classmethod async def query_config_list_from_cache_services(cls, redis, config_key: str): @@ -53,6 +53,20 @@ class ConfigService: return result + @classmethod + async def check_config_key_unique_services(cls, query_db: AsyncSession, page_object: ConfigModel): + """ + 校验参数键名是否唯一service + :param query_db: orm对象 + :param page_object: 参数配置对象 + :return: 校验结果 + """ + config_id = -1 if page_object.config_id is None else page_object.config_id + config = await ConfigDao.get_config_detail_by_info(query_db, ConfigModel(configKey=page_object.config_key)) + if config and config.config_id != config_id: + return CommonConstant.NOT_UNIQUE + return CommonConstant.UNIQUE + @classmethod async def add_config_services(cls, request: Request, query_db: AsyncSession, page_object: ConfigModel): """ @@ -62,14 +76,13 @@ class ConfigService: :param page_object: 新增参数配置对象 :return: 新增参数配置校验结果 """ - config = await ConfigDao.get_config_detail_by_info(query_db, ConfigModel(configKey=page_object.config_key)) - if config: - result = dict(is_success=False, message='参数键名已存在') + if not await cls.check_config_key_unique_services(query_db, page_object): + result = dict(is_success=False, message=f'新增参数{page_object.config_name}失败,参数键名已存在') else: try: await ConfigDao.add_config_dao(query_db, page_object) await query_db.commit() - await cls.init_cache_sys_config_services(query_db, request.app.state.redis) + await request.app.state.redis.set(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{page_object.config_key}", page_object.config_value) result = dict(is_success=True, message='新增成功') except Exception as e: await query_db.rollback() @@ -87,21 +100,21 @@ class ConfigService: :return: 编辑参数配置校验结果 """ edit_config = page_object.model_dump(exclude_unset=True) - config_info = await cls.config_detail_services(query_db, edit_config.get('config_id')) - if config_info: - if config_info.config_key != page_object.config_key or config_info.config_value != page_object.config_value: - config = await ConfigDao.get_config_detail_by_info(query_db, page_object) - if config: - result = dict(is_success=False, message='参数配置已存在') - return CrudResponseModel(**result) - try: - await ConfigDao.edit_config_dao(query_db, edit_config) - await query_db.commit() - await cls.init_cache_sys_config_services(query_db, request.app.state.redis) - result = dict(is_success=True, message='更新成功') - except Exception as e: - await query_db.rollback() - raise e + config_info = await cls.config_detail_services(query_db, page_object.config_id) + if config_info.config_id: + if not await cls.check_config_key_unique_services(query_db, page_object): + result = dict(is_success=False, message=f'修改参数{page_object.config_name}失败,参数键名已存在') + else: + try: + await ConfigDao.edit_config_dao(query_db, edit_config) + await query_db.commit() + if config_info.config_key != page_object.config_key: + await request.app.state.redis.delete(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{config_info.config_key}") + await request.app.state.redis.set(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{page_object.config_key}", page_object.config_value) + result = dict(is_success=True, message='更新成功') + except Exception as e: + await query_db.rollback() + raise e else: result = dict(is_success=False, message='参数配置不存在') @@ -119,16 +132,23 @@ class ConfigService: if page_object.config_ids.split(','): config_id_list = page_object.config_ids.split(',') try: + delete_config_key_list = [] for config_id in config_id_list: - await ConfigDao.delete_config_dao(query_db, ConfigModel(configId=config_id)) + config_info = await cls.config_detail_services(query_db, int(config_id)) + if config_info.config_type == CommonConstant.YES: + return CrudResponseModel(is_success=False, message=f'内置参数{config_info.config_key}不能删除') + else: + await ConfigDao.delete_config_dao(query_db, ConfigModel(configId=int(config_id))) + delete_config_key_list.append(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:{config_info.config_key}") await query_db.commit() - await cls.init_cache_sys_config_services(query_db, request.app.state.redis) + if delete_config_key_list: + await request.app.state.redis.delete(*delete_config_key_list) result = dict(is_success=True, message='删除成功') except Exception as e: await query_db.rollback() raise e else: - result = dict(is_success=False, message='传入字典数据id为空') + result = dict(is_success=False, message='传入参数配置id为空') return CrudResponseModel(**result) @classmethod @@ -140,7 +160,10 @@ class ConfigService: :return: 参数配置id对应的信息 """ config = await ConfigDao.get_config_detail_by_id(query_db, config_id=config_id) - result = ConfigModel(**CamelCaseUtil.transform_result(config)) + if config: + result = ConfigModel(**CamelCaseUtil.transform_result(config)) + else: + result = ConfigModel(**dict()) return result