@@ -176,19 +176,17 @@ class ApplicationUserTokenRanking(serializers.Serializer):
176176 end_time = serializers .DateField (format = '%Y-%m-%d' , label = _ ("End time" ))
177177
178178 def get_queryset (self , auth ):
179- workspace_id = self .validated_data .get ("workspace_id" )
180- user_id = self .validated_data .get ("user_id" )
179+ workspace_id = self .data .get ("workspace_id" )
180+ user_id = self .data .get ("user_id" )
181181 start_time = get_format_time (self .data .get ("start_time" ))
182182 end_time = get_format_time (self .data .get ("end_time" ))
183183 name = self .data .get ("name" )
184184
185- # ---- 基础查询 ----
185+ # ---- 基础查询:不再按 Chat.create_time 过滤 ----
186186 base_queryset = (
187187 Chat .objects .filter (
188188 is_deleted = False ,
189189 chat_user_id__isnull = False ,
190- create_time__gte = start_time ,
191- create_time__lte = end_time ,
192190 )
193191 .exclude (chat_user_id = "" )
194192 )
@@ -204,17 +202,28 @@ def get_queryset(self, auth):
204202 # ---- 窗口函数:一次查询拿到每个用户最新的 asker ----
205203 asker_map = self ._build_asker_map (base_queryset )
206204
205+ # ---- 时间条件针对 ChatRecord ----
206+ record_time_filter = Q (
207+ chatrecord__create_time__gte = start_time ,
208+ chatrecord__create_time__lte = end_time ,
209+ )
210+
207211 # ---- 聚合统计 ----
208212 queryset = (
209213 base_queryset
214+ .filter (record_time_filter )
210215 .values ("chat_user_id" , "chat_user_type" )
211216 .annotate (
212217 total_tokens = Coalesce (
213- Sum (TOKEN_EXPR ),
218+ Sum (TOKEN_EXPR , filter = record_time_filter ),
214219 Value (0 ),
215220 output_field = BigIntegerField (),
216221 ),
217- chat_record_count = Count ("chatrecord__id" , distinct = True ),
222+ chat_record_count = Count (
223+ "chatrecord__id" ,
224+ filter = record_time_filter ,
225+ distinct = True ,
226+ ),
218227 )
219228 .order_by ("-total_tokens" )
220229 )
@@ -320,17 +329,14 @@ class ApplicationQuestionRanking(serializers.Serializer):
320329 end_time = serializers .DateField (format = '%Y-%m-%d' , label = _ ("End time" ))
321330
322331 def get_queryset (self , auth ):
323- workspace_id = self .validated_data .get ("workspace_id" )
324- user_id = self .validated_data .get ("user_id" )
325- queryset = Application .objects .filter (workspace_id = workspace_id )
332+ workspace_id = self .data .get ("workspace_id" )
333+ user_id = self .data .get ("user_id" )
326334 name = self .data .get ("name" )
327- if name :
328- queryset = queryset .filter (name__contains = name )
329335 start_time = get_format_time (self .data .get ("start_time" ))
330336 end_time = get_format_time (self .data .get ("end_time" ))
331- queryset = queryset . filter (
332- create_time__gte = start_time ,
333- create_time__lte = end_time )
337+ queryset = Application . objects . filter (workspace_id = workspace_id )
338+ if name :
339+ queryset = queryset . filter ( name__contains = name )
334340 workspace_manage = is_workspace_manage (auth , workspace_id )
335341 if not workspace_manage :
336342 permission_list = (
@@ -353,12 +359,17 @@ def get_queryset(self, auth):
353359 .values_list ("target_uuid" , flat = True )
354360 )
355361
362+ record_time_filter = (
363+ Q (chat__is_deleted = False )
364+ & Q (chat__chatrecord__create_time__gte = start_time )
365+ & Q (chat__chatrecord__create_time__lte = end_time )
366+ )
356367 return queryset .annotate (
357- # 问题数 / 对话轮次数量
368+ # 问题数(按 ChatRecord 条数统计)
358369 chat_record_count_total = Coalesce (
359- Sum (
360- "chat__chat_record_count " ,
361- filter = Q ( chat__is_deleted = False ) ,
370+ Count (
371+ "chat__chatrecord__id " ,
372+ filter = record_time_filter ,
362373 ),
363374 Value (0 ),
364375 output_field = BigIntegerField (),
@@ -368,7 +379,7 @@ def get_queryset(self, auth):
368379 chat_user_count = Count (
369380 "chat__chat_user_id" ,
370381 filter = (
371- Q ( chat__is_deleted = False )
382+ record_time_filter
372383 & Q (chat__chat_user_id__isnull = False )
373384 & ~ Q (chat__chat_user_id = "" )
374385 ),
@@ -435,17 +446,20 @@ def get_queryset(self, auth):
435446 output_field = BigIntegerField ()
436447 )
437448
438- queryset = Application .objects .filter (
439- create_time__gte = start_time ,
440- create_time__lte = end_time )
449+ # 时间条件针对 ChatRecord
450+ record_time_filter = (
451+ Q (chat__is_deleted = False )
452+ & Q (chat__chatrecord__create_time__gte = start_time )
453+ & Q (chat__chatrecord__create_time__lte = end_time )
454+ )
455+
456+ queryset = Application .objects .filter (workspace_id = workspace_id )
441457 if name :
442458 queryset = queryset .filter (name__contains = name )
443459
444460 workspace_manage = is_workspace_manage (auth , workspace_id )
445461
446- if workspace_manage :
447- queryset = queryset .filter (workspace_id = workspace_id )
448- else :
462+ if not workspace_manage :
449463 permission_list = ["VIEW" , "MANAGE" , "ROLE" ] if hasPermission (
450464 auth ,
451465 "APPLICATION:READ"
@@ -467,16 +481,25 @@ def get_queryset(self, auth):
467481 total_tokens = Coalesce (
468482 Sum (
469483 token_expr ,
470- filter = Q ( chat__is_deleted = False )
484+ filter = record_time_filter
471485 ),
472486 Value (0 ),
473487 output_field = BigIntegerField ()
474488 ),
475489 chat_record_count_total = Count (
476490 "chat__chatrecord__id" ,
477- filter = Q ( chat__is_deleted = False ) ,
491+ filter = record_time_filter ,
478492 output_field = IntegerField ()
479- )
493+ ),
494+ chat_user_count = Count (
495+ "chat__chat_user_id" ,
496+ filter = (
497+ record_time_filter
498+ & Q (chat__chat_user_id__isnull = False )
499+ & ~ Q (chat__chat_user_id = "" )
500+ ),
501+ distinct = True ,
502+ ),
480503 ).order_by ("-total_tokens" )
481504
482505 def ranking (self , auth , current_page , page_size , with_valid = True ):
@@ -492,6 +515,7 @@ def ranking(self, auth, current_page, page_size, with_valid=True):
492515 "name" : a .name ,
493516 "total_tokens" : a .total_tokens ,
494517 "chat_record_count" : a .chat_record_count_total ,
518+ "chat_user_count" : a .chat_user_count
495519 }
496520 )
497521
0 commit comments