From 5949133ab44fb6e37f6c58c112155ea62e11f839 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Thu, 28 May 2026 17:02:59 +0800 Subject: [PATCH] fix: Incomplete Data Export --- apps/homepage/serializers/homepage.py | 50 +++++++++++++++++++--- apps/locales/en_US/LC_MESSAGES/django.po | 26 ++++++++++- apps/locales/zh_CN/LC_MESSAGES/django.po | 26 ++++++++++- apps/locales/zh_Hant/LC_MESSAGES/django.po | 26 ++++++++++- 4 files changed, 119 insertions(+), 9 deletions(-) diff --git a/apps/homepage/serializers/homepage.py b/apps/homepage/serializers/homepage.py index c65e24499fa..428ba3f564e 100644 --- a/apps/homepage/serializers/homepage.py +++ b/apps/homepage/serializers/homepage.py @@ -257,21 +257,35 @@ def ranking(self, auth, current_page, page_size, with_valid=True): def export(self, auth, with_valid=True): if with_valid: self.is_valid(raise_exception=True) + token_count = HomePageSerializer.TokensAggregation(data=self.data).aggregation(auth) queryset, asker_map = self.get_queryset(auth) workbook = openpyxl.Workbook(write_only=True) worksheet = workbook.create_sheet(title='Sheet1') headers = [gettext('ranking'), gettext('User Name'), gettext('Token consumption'), + gettext('proportion'), gettext('number of questions'), + gettext('Average tokens per request'), ] worksheet.append(headers) index = 0 for item in queryset: index += 1 - row = [index, asker_map.get( + user_info = asker_map.get( (item["chat_user_id"], item["chat_user_type"]) - ).get('username'), item['total_tokens'], item['chat_record_count']] + ) or {} + username = user_info.get("username", "") + total_tokens = item.get("total_tokens", 0) + chat_record_count = item.get("chat_record_count", 0) + row = [ + index, + username, + total_tokens, + total_tokens / token_count if token_count else 0, + chat_record_count, + total_tokens / chat_record_count if chat_record_count else 0, + ] worksheet.append(row) response = HttpResponse(content_type="application/vnd.ms-excel") response["Content-Disposition"] = f'attachment; filename="data.xlsx"' @@ -414,19 +428,29 @@ def ranking(self, auth, current_page, page_size, with_valid=True): def export(self, auth, with_valid=True): if with_valid: self.is_valid(raise_exception=True) + chat_record_number = HomePageSerializer.ChatRecordAggregation(data=self.data).aggregation(auth) queryset = self.get_queryset(auth) workbook = openpyxl.Workbook(write_only=True) worksheet = workbook.create_sheet(title='Sheet1') headers = [gettext('ranking'), gettext('Application Name'), gettext('number of questions'), - gettext('active users') + gettext('proportion'), + gettext('active users'), + gettext('Average Number of Conversation Turns per Person') ] worksheet.append(headers) index = 0 for item in queryset: index += 1 - row = [index, item.name, item.chat_record_count_total, item.chat_user_count] + row = [ + index, + item.name, + item.chat_record_count_total, + item.chat_record_count_total / chat_record_number if chat_record_number != 0 else 0, + item.chat_user_count, + item.chat_user_count / item.chat_record_count_total if item.chat_record_count_total != 0 else 0 + ] worksheet.append(row) response = HttpResponse(content_type="application/vnd.ms-excel") response["Content-Disposition"] = f'attachment; filename="data.xlsx"' @@ -528,19 +552,33 @@ def ranking(self, auth, current_page, page_size, with_valid=True): def export(self, auth, with_valid=True): if with_valid: self.is_valid(raise_exception=True) + tokens_total = HomePageSerializer.TokensAggregation(data=self.data).aggregation(auth) queryset = self.get_queryset(auth) workbook = openpyxl.Workbook(write_only=True) worksheet = workbook.create_sheet(title='Sheet1') headers = [gettext('ranking'), gettext('Application Name'), gettext('Token consumption'), - gettext('number of questions') + gettext('proportion'), + gettext('number of questions'), + gettext('active users'), + gettext('Average tokens per request'), ] worksheet.append(headers) index = 0 for item in queryset: index += 1 - row = [index, item.name, item.total_tokens, item.chat_record_count_total] + total_tokens = item.total_tokens + chat_record_count_total = item.chat_record_count_total + row = [ + index, + item.name, + total_tokens, + total_tokens / tokens_total if tokens_total else 0, + item.chat_user_count, + chat_record_count_total, + total_tokens / chat_record_count_total if chat_record_count_total else 0, + ] worksheet.append(row) response = HttpResponse(content_type="application/vnd.ms-excel") response["Content-Disposition"] = f'attachment; filename="data.xlsx"' diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index 710e822f685..fc7732071eb 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -9354,4 +9354,28 @@ msgid "Termbase" msgstr "" msgid "Copy" -msgstr "Copy" \ No newline at end of file +msgstr "Copy" + +msgid "ranking" +msgstr "ranking" + +msgid "Token consumption" +msgstr "Token consumption" + +msgid "proportion" +msgstr "proportion" + +msgid "number of questions" +msgstr "number of questions" + +msgid "active users" +msgstr "active users" + +msgid "Average tokens per request" +msgstr "Average tokens per request" + +msgid "Average Number of Conversation Turns per Person" +msgstr "Average Number of Conversation Turns per Person" + +msgid "User Name" +msgstr "User Name" \ No newline at end of file diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index 74ee4c4f03f..1d26c8589f1 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -9477,4 +9477,28 @@ msgid "Termbase" msgstr "词库" msgid "Copy" -msgstr "复制" \ No newline at end of file +msgstr "复制" + +msgid "ranking" +msgstr "排名" + +msgid "Token consumption" +msgstr "Token消耗" + +msgid "proportion" +msgstr "占比" + +msgid "number of questions" +msgstr "提问次数" + +msgid "active users" +msgstr "活跃用户数" + +msgid "Average tokens per request" +msgstr "单次请求平均Token数" + +msgid "Average Number of Conversation Turns per Person" +msgstr "人均对话轮次" + +msgid "User Name" +msgstr "用户名称" \ No newline at end of file diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index 580bf3e1548..8aefecc5090 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -9474,4 +9474,28 @@ msgid "Termbase" msgstr "詞庫" msgid "Copy" -msgstr "複製" \ No newline at end of file +msgstr "複製" + +msgid "ranking" +msgstr "排名" + +msgid "Token consumption" +msgstr "Token消耗" + +msgid "proportion" +msgstr "占比" + +msgid "number of questions" +msgstr "提問次數" + +msgid "active users" +msgstr "活躍用戶數" + +msgid "Average tokens per request" +msgstr "單次請求平均Token數" + +msgid "Average Number of Conversation Turns per Person" +msgstr "人均對話輪次" + +msgid "User Name" +msgstr "用戶名稱" \ No newline at end of file