diff --git a/api/api_v1/endpoints/data_auth.py b/api/api_v1/endpoints/data_auth.py index 5605445..354ff60 100644 --- a/api/api_v1/endpoints/data_auth.py +++ b/api/api_v1/endpoints/data_auth.py @@ -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'], } diff --git a/api/api_v1/user_label/controller.py b/api/api_v1/user_label/controller.py index 80df6d9..4e807ec 100644 --- a/api/api_v1/user_label/controller.py +++ b/api/api_v1/user_label/controller.py @@ -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) diff --git a/api/api_v1/user_label/service.py b/api/api_v1/user_label/service.py index 6a66296..c587b37 100644 --- a/api/api_v1/user_label/service.py +++ b/api/api_v1/user_label/service.py @@ -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 @@ -19,7 +23,7 @@ async def get_detail(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 @@ -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) diff --git a/models/user_label.py b/models/user_label.py index 295d860..a6eddd6 100644 --- a/models/user_label.py +++ b/models/user_label.py @@ -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