注册码管理页面的功能完善
This commit is contained in:
@@ -489,9 +489,111 @@ def analytics_trend(gte: str = None, lte: str = None, interval: str = "day"):
|
||||
print(f"分析趋势失败: {str(e)}")
|
||||
return []
|
||||
|
||||
def analytics_types(gte: str = None, lte: str = None, size: int = 10):
|
||||
def delete_key_globally(key_to_remove: str):
|
||||
try:
|
||||
filters = _type_filters_from_list(limit=size)
|
||||
# 1. 从 GlobalDocument (id='keys') 中彻底移除
|
||||
try:
|
||||
doc = GlobalDocument.get(id='keys')
|
||||
current_keys = list(doc.keys_list or [])
|
||||
# 使用列表推导式进行彻底删除,处理可能的重复项
|
||||
new_keys = [k.strip().strip(';') for k in current_keys if k.strip().strip(';') != key_to_remove]
|
||||
|
||||
if len(new_keys) != len(current_keys):
|
||||
doc.keys_list = new_keys
|
||||
doc.save()
|
||||
print(f"已从全局列表移除 Key: {key_to_remove}")
|
||||
except Exception as e:
|
||||
print(f"从全局列表移除 Key 失败: {str(e)}")
|
||||
|
||||
# 2. 同步清理所有注册码中的该 key (无论是 keys 还是 manage_keys 字段)
|
||||
from elasticsearch.helpers import scan
|
||||
query = {
|
||||
"query": {
|
||||
"bool": {
|
||||
"should": [
|
||||
{"term": {"keys": key_to_remove}},
|
||||
{"term": {"manage_keys": key_to_remove}}
|
||||
],
|
||||
"must": [
|
||||
{"exists": {"field": "code"}} # 确保是注册码文档
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updated_count = 0
|
||||
for hit in scan(es, query=query, index=GLOBAL_INDEX_NAME):
|
||||
try:
|
||||
# 重新获取文档对象进行操作
|
||||
doc = RegistrationCodeDocument.get(id=hit['_id'])
|
||||
modified = False
|
||||
|
||||
if doc.keys:
|
||||
old_keys = list(doc.keys)
|
||||
new_ks = [k for k in old_keys if k != key_to_remove]
|
||||
if len(new_ks) != len(old_keys):
|
||||
doc.keys = new_ks
|
||||
modified = True
|
||||
|
||||
if doc.manage_keys:
|
||||
old_mks = list(doc.manage_keys)
|
||||
new_mks = [k for k in old_mks if k != key_to_remove]
|
||||
if len(new_mks) != len(old_mks):
|
||||
doc.manage_keys = new_mks
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
doc.save()
|
||||
updated_count += 1
|
||||
except Exception as e:
|
||||
print(f"同步清理注册码 {hit['_id']} 失败: {str(e)}")
|
||||
|
||||
# 3. 同步清理所有用户中的该 key (无论是 key 还是 manage_key 字段)
|
||||
try:
|
||||
user_query = {
|
||||
"query": {
|
||||
"bool": {
|
||||
"should": [
|
||||
{"term": {"key": key_to_remove}},
|
||||
{"term": {"manage_key": key_to_remove}}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
for user_hit in scan(es, query=user_query, index=USER_INDEX_NAME):
|
||||
try:
|
||||
user_doc = UserDocument.get(id=user_hit['_id'])
|
||||
user_modified = False
|
||||
|
||||
if user_doc.key:
|
||||
old_uk = list(user_doc.key)
|
||||
new_uks = [k for k in old_uk if k != key_to_remove]
|
||||
if len(new_uks) != len(old_uk):
|
||||
user_doc.key = new_uks
|
||||
user_modified = True
|
||||
|
||||
if user_doc.manage_key:
|
||||
old_umk = list(user_doc.manage_key)
|
||||
new_umks = [k for k in old_umk if k != key_to_remove]
|
||||
if len(new_umks) != len(old_umk):
|
||||
user_doc.manage_key = new_umks
|
||||
user_modified = True
|
||||
|
||||
if user_modified:
|
||||
user_doc.save()
|
||||
except Exception as e:
|
||||
print(f"同步清理用户 {user_hit['_id']} 失败: {str(e)}")
|
||||
except Exception as e:
|
||||
print(f"扫描用户失败: {str(e)}")
|
||||
|
||||
return True, updated_count
|
||||
except Exception as e:
|
||||
print(f"全局删除 Key 失败: {str(e)}")
|
||||
return False, 0
|
||||
|
||||
def analytics_types(gte: str = None, lte: str = None, limit: int = 12):
|
||||
try:
|
||||
filters = _type_filters_from_list(limit=limit)
|
||||
body = {
|
||||
"size": 0,
|
||||
"aggs": {
|
||||
|
||||
Reference in New Issue
Block a user