diff --git a/backend/application/dispatch.py b/backend/application/dispatch.py index 3bd364c..101b3ab 100644 --- a/backend/application/dispatch.py +++ b/backend/application/dispatch.py @@ -2,6 +2,10 @@ # -*- coding: utf-8 -*- from django.conf import settings from django.db import connection +from django.core.cache import cache +from dvadmin.utils.validator import CustomValidationError + +dispatch_db_type = getattr(settings, 'DISPATCH_DB_TYPE', 'memory') # redis def is_tenants_mode(): @@ -68,6 +72,9 @@ def init_dictionary(): :return: """ try: + if dispatch_db_type == 'redis': + cache.set(f"init_dictionary", _get_all_dictionary()) + return if is_tenants_mode(): from django_tenants.utils import tenant_context, get_tenant_model @@ -88,7 +95,9 @@ def init_system_config(): :return: """ try: - + if dispatch_db_type == 'redis': + cache.set(f"init_system_config", _get_all_system_config()) + return if is_tenants_mode(): from django_tenants.utils import tenant_context, get_tenant_model @@ -107,6 +116,9 @@ def refresh_dictionary(): 刷新字典配置 :return: """ + if dispatch_db_type == 'redis': + cache.set(f"init_dictionary", _get_all_dictionary()) + return if is_tenants_mode(): from django_tenants.utils import tenant_context, get_tenant_model @@ -122,6 +134,9 @@ def refresh_system_config(): 刷新系统配置 :return: """ + if dispatch_db_type == 'redis': + cache.set(f"init_system_config", _get_all_system_config()) + return if is_tenants_mode(): from django_tenants.utils import tenant_context, get_tenant_model @@ -141,6 +156,11 @@ def get_dictionary_config(schema_name=None): :param schema_name: 对应字典配置的租户schema_name值 :return: """ + if dispatch_db_type == 'redis': + init_dictionary_data = cache.get(f"init_dictionary") + if not init_dictionary_data: + refresh_dictionary() + return cache.get(f"init_dictionary") or {} if not settings.DICTIONARY_CONFIG: refresh_dictionary() if is_tenants_mode(): @@ -157,6 +177,12 @@ def get_dictionary_values(key, schema_name=None): :param schema_name: 对应字典配置的租户schema_name值 :return: """ + if dispatch_db_type == 'redis': + dictionary_config = cache.get(f"init_dictionary") + if not dictionary_config: + refresh_dictionary() + dictionary_config = cache.get(f"init_dictionary") + return dictionary_config.get(key) dictionary_config = get_dictionary_config(schema_name) return dictionary_config.get(key) @@ -169,8 +195,8 @@ def get_dictionary_label(key, name, schema_name=None): :param schema_name: 对应字典配置的租户schema_name值 :return: """ - children = get_dictionary_values(key, schema_name) or [] - for ele in children: + res = get_dictionary_values(key, schema_name) or [] + for ele in res.get('children'): if ele.get("value") == str(name): return ele.get("label") return "" @@ -187,6 +213,11 @@ def get_system_config(schema_name=None): :param schema_name: 对应字典配置的租户schema_name值 :return: """ + if dispatch_db_type == 'redis': + init_dictionary_data = cache.get(f"init_system_config") + if not init_dictionary_data: + refresh_system_config() + return cache.get(f"init_system_config") or {} if not settings.SYSTEM_CONFIG: refresh_system_config() if is_tenants_mode(): @@ -203,10 +234,32 @@ def get_system_config_values(key, schema_name=None): :param schema_name: 对应系统配置的租户schema_name值 :return: """ + if dispatch_db_type == 'redis': + system_config = cache.get(f"init_system_config") + if not system_config: + refresh_system_config() + system_config = cache.get(f"init_system_config") + return system_config.get(key) system_config = get_system_config(schema_name) return system_config.get(key) +def get_system_config_values_to_dict(key, schema_name=None): + """ + 获取系统配置数据并转换为字典 **仅限于数组类型系统配置 + :param key: 对应系统配置的key值(字典编号) + :param schema_name: 对应系统配置的租户schema_name值 + :return: + """ + values_dict = {} + config_values = get_system_config_values(key, schema_name) + if not isinstance(config_values, list): + raise CustomValidationError("该方式仅限于数组类型系统配置") + for ele in get_system_config_values(key, schema_name): + values_dict[ele.get('key')] = ele.get('value') + return values_dict + + def get_system_config_label(key, name, schema_name=None): """ 获取获取系统配置label值