优化标签过滤

This commit is contained in:
wuaho 2021-10-22 13:44:55 +08:00
parent a9c9a9bf73
commit 74c365e1a1
4 changed files with 36 additions and 7 deletions

View File

@ -280,7 +280,7 @@ async def load_filter_props(request: Request,
user_label_docs = await crud.user_label.find_many(db, {'game': game}, {'qp': 0}) user_label_docs = await crud.user_label.find_many(db, {'game': game}, {'qp': 0})
for item in user_label_docs: for item in user_label_docs:
tmp = { tmp = {
'id': item['_id'], 'id': item['cluster_name'],
'data_type': 'user_label', 'data_type': 'user_label',
'title': item['display_name'], 'title': item['display_name'],
} }

View File

@ -69,7 +69,7 @@ async def sql(request: Request,
return schemas.Msg(code=0, msg='ok', data=data) return schemas.Msg(code=0, msg='ok', data=data)
@router.post("/cluster_user") @router.post("/cluster_user_list")
async def cluster_user(request: Request, async def cluster_user(request: Request,
data_in: schemas.UserLabelJson2Sql, data_in: schemas.UserLabelJson2Sql,
game: str, game: str,
@ -79,3 +79,13 @@ async def cluster_user(request: Request,
"""获取该标签用户""" """获取该标签用户"""
data = await service.get_cluster_user(game, data_in.label_id) data = await service.get_cluster_user(game, data_in.label_id)
return schemas.Msg(code=0, msg='ok', data=data) return schemas.Msg(code=0, msg='ok', data=data)
@router.post("/cluster_user_count")
async def cluster_user_count(request: Request,
data_in: schemas.UserLabelJson2Sql,
game: str,
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""获取该标签用户数量"""
data = await service.get_cluster_user_count(game, data_in.label_id)
return schemas.Msg(code=0, msg='ok', data=data)

View File

@ -1,4 +1,8 @@
import pandas as pd
import numpy as np
import crud import crud
from db.ckdb import get_ck_db
from models.user_label import UserClusterDef from models.user_label import UserClusterDef
@ -19,7 +23,7 @@ async def get_detail(db, label_id):
async def delete(db, label_id): async def delete(db, label_id):
await crud.user_label.delete_id(db, label_id) await crud.user_label.delete_id(db, label_id)
return True return True
@ -34,3 +38,11 @@ async def get_cluster_user(game, date_in):
await user_cluster_def.init() await user_cluster_def.init()
sql = user_cluster_def.cluster_user() sql = user_cluster_def.cluster_user()
return sql return sql
async def get_cluster_user_count(game, date_in):
user_cluster_def = UserClusterDef(game, date_in)
await user_cluster_def.init()
sql = user_cluster_def.cluster_user_count()
ckdb = get_ck_db()
df = await ckdb.query_dataframe(sql)

View File

@ -25,10 +25,10 @@ from db.redisdb import get_redis_pool, RedisDrive
class UserClusterDef: class UserClusterDef:
def __init__(self, game: str, label_id: str, data_where: list = None, rdb: RedisDrive = get_redis_pool()): def __init__(self, game: str, cluster_name: str, data_where: list = None,rdb: RedisDrive = get_redis_pool()):
self.game = game self.game = game
self.rdb = rdb self.rdb = rdb
self.label_id = label_id self.cluster_name = cluster_name
self.event_tbl = None self.event_tbl = None
self.data_where = data_where or [] self.data_where = data_where or []
@ -49,7 +49,7 @@ class UserClusterDef:
async def init(self): async def init(self):
self.data_in = (await crud.user_label.get(get_database(), self.label_id, {'qp': 1})).get('qp') self.data_in = (await crud.user_label.find_one(get_database(), {'cluster_name':self.cluster_name}, {'qp': 1})).get('qp')
await self._init_tal() await self._init_tal()
self.events = self.data_in['user_cluster_def']['events'] self.events = self.data_in['user_cluster_def']['events']
self.event_relation = self.data_in['user_cluster_def']['event_relation'] self.event_relation = self.data_in['user_cluster_def']['event_relation']
@ -134,7 +134,7 @@ class UserClusterDef:
analysis = event['prop_quota']['analysis'] analysis = event['prop_quota']['analysis']
quota = event['prop_quota']['quota'] quota = event['prop_quota']['quota']
num = event['num'].split(',') num = event['num'].split(',')
date_type = event.get('date_type','dynamic') date_type = event.get('date_type', 'dynamic')
e_days = event.get('e_days') e_days = event.get('e_days')
s_days = event.get('s_days') s_days = event.get('s_days')
@ -206,3 +206,10 @@ class UserClusterDef:
sql = str(qry.compile(compile_kwargs={"literal_binds": True})) sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
print(sql) print(sql)
return sql return sql
def cluster_user_count(self):
sub_qry = self.to_sql_qry()
qry= sa.select(func.count()).select(sub_qry)
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
print(sql)
return sql