191 lines
6.1 KiB
Python
191 lines
6.1 KiB
Python
![]() |
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
from django.conf import settings
|
|||
|
from django.db import ProgrammingError
|
|||
|
from django.db import connection
|
|||
|
|
|||
|
|
|||
|
def is_tenants_mode():
|
|||
|
"""
|
|||
|
判断是否为租户模式
|
|||
|
:return:
|
|||
|
"""
|
|||
|
return hasattr(connection, 'tenant') and connection.tenant.schema_name
|
|||
|
|
|||
|
|
|||
|
# ================================================= #
|
|||
|
# ******************** 初始化 ******************** #
|
|||
|
# ================================================= #
|
|||
|
def _get_all_dictionary():
|
|||
|
from dvadmin.system.models import Dictionary
|
|||
|
queryset = Dictionary.objects.filter(status=True, is_value=False)
|
|||
|
data = []
|
|||
|
for instance in queryset:
|
|||
|
data.append({
|
|||
|
"id": instance.id,
|
|||
|
"value": instance.value,
|
|||
|
"children": list(Dictionary.objects.filter(parent=instance.id).filter(status=1).
|
|||
|
values('label', 'value', 'type', 'color'))
|
|||
|
})
|
|||
|
return {ele.get("value"): ele for ele in data}
|
|||
|
|
|||
|
|
|||
|
def _get_all_system_config():
|
|||
|
data = {}
|
|||
|
from dvadmin.system.models import SystemConfig
|
|||
|
system_config_obj = SystemConfig.objects.filter(status=True, parent_id__isnull=False).values(
|
|||
|
'parent__key', 'key', 'value', 'form_item_type').order_by('sort')
|
|||
|
for system_config in system_config_obj:
|
|||
|
data[f"{system_config.get('parent__key')}.{system_config.get('key')}"] = system_config.get('value') or ''
|
|||
|
return data
|
|||
|
|
|||
|
|
|||
|
def init_dictionary(schema_name=None):
|
|||
|
"""
|
|||
|
初始化字典配置
|
|||
|
:return:
|
|||
|
"""
|
|||
|
try:
|
|||
|
if is_tenants_mode():
|
|||
|
from django_tenants.utils import tenant_context
|
|||
|
for tenant in get_tenant_model().objects.filter(schema_name=schema_name):
|
|||
|
with tenant_context(tenant):
|
|||
|
settings.DICTIONARY_CONFIG[connection.tenant.schema_name] = _get_all_dictionary()
|
|||
|
else:
|
|||
|
settings.DICTIONARY_CONFIG = _get_all_dictionary()
|
|||
|
print("初始化字典配置完成")
|
|||
|
except ProgrammingError as e:
|
|||
|
print("请先进行数据库迁移!")
|
|||
|
return
|
|||
|
|
|||
|
|
|||
|
def init_system_config():
|
|||
|
"""
|
|||
|
初始化系统配置
|
|||
|
:param name:
|
|||
|
:return:
|
|||
|
"""
|
|||
|
try:
|
|||
|
|
|||
|
if is_tenants_mode():
|
|||
|
from django_tenants.utils import tenant_context
|
|||
|
for tenant in get_tenant_model().objects.filter(schema_name=schema_name):
|
|||
|
with tenant_context(tenant):
|
|||
|
settings.SYSTEM_CONFIG[connection.tenant.schema_name] = _get_all_system_config()
|
|||
|
else:
|
|||
|
settings.SYSTEM_CONFIG = _get_all_system_config()
|
|||
|
print("初始化系统配置完成")
|
|||
|
except ProgrammingError as e:
|
|||
|
print("请先进行数据库迁移!")
|
|||
|
return
|
|||
|
|
|||
|
|
|||
|
def refresh_dictionary():
|
|||
|
"""
|
|||
|
刷新字典配置
|
|||
|
:return:
|
|||
|
"""
|
|||
|
if is_tenants_mode():
|
|||
|
with schema_context(connection.tenant.schema_name):
|
|||
|
settings.DICTIONARY_CONFIG[connection.tenant.schema_name] = _get_all_dictionary()
|
|||
|
else:
|
|||
|
settings.DICTIONARY_CONFIG = _get_all_dictionary()
|
|||
|
|
|||
|
|
|||
|
def refresh_system_config():
|
|||
|
"""
|
|||
|
刷新系统配置
|
|||
|
:return:
|
|||
|
"""
|
|||
|
if is_tenants_mode():
|
|||
|
with schema_context(connection.tenant.schema_name):
|
|||
|
settings.SYSTEM_CONFIG[connection.tenant.schema_name] = _get_all_system_config()
|
|||
|
else:
|
|||
|
settings.SYSTEM_CONFIG = _get_all_system_config()
|
|||
|
|
|||
|
|
|||
|
# ================================================= #
|
|||
|
# ******************** 字典管理 ******************** #
|
|||
|
# ================================================= #
|
|||
|
def get_dictionary_config(schema_name=None):
|
|||
|
"""
|
|||
|
获取字典所有配置
|
|||
|
:param schema_name: 对应字典配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
if is_tenants_mode():
|
|||
|
dictionary_config = settings.DICTIONARY_CONFIG[schema_name or connection.tenant.schema_name]
|
|||
|
else:
|
|||
|
dictionary_config = settings.DICTIONARY_CONFIG
|
|||
|
return dictionary_config or {}
|
|||
|
|
|||
|
|
|||
|
def get_dictionary_values(key, schema_name=None):
|
|||
|
"""
|
|||
|
获取字典数据数组
|
|||
|
:param key: 对应字典配置的key值(字典编号)
|
|||
|
:param schema_name: 对应字典配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
dictionary_config = get_dictionary_config(schema_name)
|
|||
|
return dictionary_config.get(key)
|
|||
|
|
|||
|
|
|||
|
def get_dictionary_label(key, name, schema_name=None):
|
|||
|
"""
|
|||
|
获取获取字典label值
|
|||
|
:param key: 字典管理中的key值(字典编号)
|
|||
|
:param name: 对应字典配置的value值
|
|||
|
:param schema_name: 对应字典配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
children = get_dictionary_values(key, schema_name) or []
|
|||
|
for ele in children:
|
|||
|
if ele.get("value") == str(name):
|
|||
|
return ele.get("label")
|
|||
|
return ""
|
|||
|
|
|||
|
|
|||
|
# ================================================= #
|
|||
|
# ******************** 系统配置 ******************** #
|
|||
|
# ================================================= #
|
|||
|
def get_system_config(schema_name=None):
|
|||
|
"""
|
|||
|
获取系统配置中所有配置
|
|||
|
1.只传父级的key,返回全部子级,{ "父级key.子级key" : "值" }
|
|||
|
2."父级key.子级key",返回子级值
|
|||
|
:param schema_name: 对应字典配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
if is_tenants_mode():
|
|||
|
dictionary_config = settings.SYSTEM_CONFIG[schema_name or connection.tenant.schema_name]
|
|||
|
else:
|
|||
|
dictionary_config = settings.SYSTEM_CONFIG
|
|||
|
return dictionary_config or {}
|
|||
|
|
|||
|
|
|||
|
def get_system_config_values(key, schema_name=None):
|
|||
|
"""
|
|||
|
获取系统配置数据数组
|
|||
|
:param key: 对应系统配置的key值(字典编号)
|
|||
|
:param schema_name: 对应系统配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
system_config = get_system_config(schema_name)
|
|||
|
return system_config.get(key)
|
|||
|
|
|||
|
|
|||
|
def get_system_config_label(key, name, schema_name=None):
|
|||
|
"""
|
|||
|
获取获取系统配置label值
|
|||
|
:param key: 系统配置中的key值(字典编号)
|
|||
|
:param name: 对应系统配置的value值
|
|||
|
:param schema_name: 对应系统配置的租户schema_name值
|
|||
|
:return:
|
|||
|
"""
|
|||
|
children = get_system_config_values(key, schema_name) or []
|
|||
|
for ele in children:
|
|||
|
if ele.get("value") == str(name):
|
|||
|
return ele.get("label")
|
|||
|
return ""
|