优化标签过滤

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})
for item in user_label_docs:
tmp = {
'id': item['_id'],
'id': item['cluster_name'],
'data_type': 'user_label',
'title': item['display_name'],
}

View File

@ -69,7 +69,7 @@ async def sql(request: Request,
return schemas.Msg(code=0, msg='ok', data=data)
@router.post("/cluster_user")
@router.post("/cluster_user_list")
async def cluster_user(request: Request,
data_in: schemas.UserLabelJson2Sql,
game: str,
@ -79,3 +79,13 @@ async def cluster_user(request: Request,
"""获取该标签用户"""
data = await service.get_cluster_user(game, data_in.label_id)
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
from db.ckdb import get_ck_db
from models.user_label import UserClusterDef
@ -34,3 +38,11 @@ async def get_cluster_user(game, date_in):
await user_cluster_def.init()
sql = user_cluster_def.cluster_user()
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:
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.rdb = rdb
self.label_id = label_id
self.cluster_name = cluster_name
self.event_tbl = None
self.data_where = data_where or []
@ -49,7 +49,7 @@ class UserClusterDef:
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()
self.events = self.data_in['user_cluster_def']['events']
self.event_relation = self.data_in['user_cluster_def']['event_relation']
@ -134,7 +134,7 @@ class UserClusterDef:
analysis = event['prop_quota']['analysis']
quota = event['prop_quota']['quota']
num = event['num'].split(',')
date_type = event.get('date_type','dynamic')
date_type = event.get('date_type', 'dynamic')
e_days = event.get('e_days')
s_days = event.get('s_days')
@ -206,3 +206,10 @@ class UserClusterDef:
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
print(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