-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e60f08b
commit a6aa386
Showing
8 changed files
with
284 additions
and
0 deletions.
There are no files selected for viewing
76 changes: 76 additions & 0 deletions
76
apps/application/serializers/application_statistics_serializers.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# coding=utf-8 | ||
""" | ||
@project: maxkb | ||
@Author:虎 | ||
@file: application_statistics_serializers.py | ||
@date:2024/3/27 10:55 | ||
@desc: | ||
""" | ||
import datetime | ||
import os | ||
|
||
from django.db import models | ||
from django.db.models.query import QuerySet | ||
from rest_framework import serializers | ||
|
||
from application.models.api_key_model import ApplicationPublicAccessClient | ||
from common.db.search import native_search, get_dynamics_model | ||
from common.util.field_message import ErrMessage | ||
from common.util.file_util import get_file_content | ||
from smartdoc.conf import PROJECT_DIR | ||
|
||
|
||
class ApplicationStatisticsSerializer(serializers.Serializer): | ||
application_id = serializers.UUIDField(required=True, error_messages=ErrMessage.char("应用id")) | ||
history_day = serializers.IntegerField(required=True, error_messages=ErrMessage.integer("历史天数")) | ||
|
||
def get_end_time(self): | ||
history_day = self.data.get('history_day') | ||
return datetime.datetime.now() - datetime.timedelta(days=history_day) | ||
|
||
def get_customer_count(self, with_valid=True): | ||
if with_valid: | ||
self.is_valid(raise_exception=True) | ||
return native_search( | ||
QuerySet(ApplicationPublicAccessClient).filter(application_id=self.data.get('application_id'), | ||
create_time__gte=self.get_end_time()), | ||
select_string=get_file_content( | ||
os.path.join(PROJECT_DIR, "apps", "application", 'sql', 'customer_count.sql')), | ||
with_search_one=True) | ||
|
||
def get_customer_count_trend(self, with_valid=True): | ||
if with_valid: | ||
self.is_valid(raise_exception=True) | ||
return native_search( | ||
{'default_sql': QuerySet(ApplicationPublicAccessClient).filter( | ||
application_id=self.data.get('application_id'), | ||
create_time__gte=self.get_end_time())}, | ||
select_string=get_file_content( | ||
os.path.join(PROJECT_DIR, "apps", "application", 'sql', 'customer_count_trend.sql'))) | ||
|
||
def get_chat_record_aggregate(self, with_valid=True): | ||
if with_valid: | ||
self.is_valid(raise_exception=True) | ||
return native_search( | ||
QuerySet(model=get_dynamics_model( | ||
{'application_chat.application_id': models.UUIDField(), | ||
'application_chat_record.create_time': models.DateTimeField()})).filter( | ||
**{'application_chat.application_id': self.data.get('application_id'), | ||
'application_chat_record.create_time__gte': self.get_end_time()} | ||
), | ||
select_string=get_file_content( | ||
os.path.join(PROJECT_DIR, "apps", "application", 'sql', 'chat_record_count.sql')), | ||
with_search_one=True) | ||
|
||
def get_chat_record_aggregate_trend(self, with_valid=True): | ||
if with_valid: | ||
self.is_valid(raise_exception=True) | ||
return native_search( | ||
{'default_sql': QuerySet(model=get_dynamics_model( | ||
{'application_chat.application_id': models.UUIDField(), | ||
'application_chat_record.create_time': models.DateTimeField()})).filter( | ||
**{'application_chat.application_id': self.data.get('application_id'), | ||
'application_chat_record.create_time__gte': self.get_end_time()} | ||
)}, | ||
select_string=get_file_content( | ||
os.path.join(PROJECT_DIR, "apps", "application", 'sql', 'chat_record_count_trend.sql'))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
SELECT SUM | ||
( CASE WHEN application_chat_record.vote_status = '0' THEN 1 ELSE 0 END ) AS "star_num", | ||
SUM ( CASE WHEN application_chat_record.vote_status = '1' THEN 1 ELSE 0 END ) AS "trample_num", | ||
SUM ( application_chat_record.message_tokens + application_chat_record.answer_tokens ) as "tokens_sum", | ||
"count"(application_chat_record."id") as chat_record_count | ||
FROM | ||
application_chat_record application_chat_record | ||
LEFT JOIN application_chat application_chat ON application_chat."id" = application_chat_record.chat_id |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
SELECT SUM | ||
( CASE WHEN application_chat_record.vote_status = '0' THEN 1 ELSE 0 END ) AS "star_num", | ||
SUM ( CASE WHEN application_chat_record.vote_status = '1' THEN 1 ELSE 0 END ) AS "trample_num", | ||
SUM ( application_chat_record.message_tokens + application_chat_record.answer_tokens ) as "tokens_sum", | ||
"count"(application_chat_record."id") as chat_record_count, | ||
application_chat_record.create_time :: DATE as "day" | ||
FROM | ||
application_chat_record application_chat_record | ||
LEFT JOIN application_chat application_chat ON application_chat."id" = application_chat_record.chat_id | ||
${default_sql} | ||
GROUP BY "day" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
SELECT | ||
( SUM ( CASE WHEN create_time :: DATE = CURRENT_DATE THEN 1 ELSE 0 END ) ) AS "today_added_count", | ||
COUNT ( "application_public_access_client"."id" ) AS "added_count" | ||
FROM | ||
"application_public_access_client" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
SELECT | ||
COUNT ( "application_public_access_client"."id" ) AS "added_count", | ||
create_time :: DATE as "day" | ||
FROM | ||
"application_public_access_client" | ||
${default_sql} | ||
GROUP BY "day" |
78 changes: 78 additions & 0 deletions
78
apps/application/swagger_api/application_statistics_api.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# coding=utf-8 | ||
""" | ||
@project: maxkb | ||
@Author:虎 | ||
@file: application_statistics_api.py | ||
@date:2024/3/27 15:09 | ||
@desc: | ||
""" | ||
from drf_yasg import openapi | ||
|
||
from common.mixins.api_mixin import ApiMixin | ||
|
||
|
||
class ApplicationStatisticsApi(ApiMixin): | ||
@staticmethod | ||
def get_request_params_api(): | ||
return [openapi.Parameter(name='application_id', | ||
in_=openapi.IN_PATH, | ||
type=openapi.TYPE_STRING, | ||
required=True, | ||
description='应用id'), | ||
openapi.Parameter(name='history_day', | ||
in_=openapi.IN_QUERY, | ||
type=openapi.TYPE_NUMBER, | ||
required=True, | ||
description='历史天数'), | ||
|
||
] | ||
|
||
class ChatRecordAggregate(ApiMixin): | ||
@staticmethod | ||
def get_response_body_api(): | ||
return openapi.Schema( | ||
type=openapi.TYPE_OBJECT, | ||
required=['star_num', 'trample_num', 'tokens_sum', 'chat_record_count'], | ||
properties={ | ||
'star_num': openapi.Schema(type=openapi.TYPE_NUMBER, title="点赞数量", | ||
description="点赞数量"), | ||
|
||
'trample_num': openapi.Schema(type=openapi.TYPE_NUMBER, title="点踩数量", description="点踩数量"), | ||
'tokens_sum': openapi.Schema(type=openapi.TYPE_NUMBER, title="token使用数量", | ||
description="token使用数量"), | ||
'chat_record_count': openapi.Schema(type=openapi.TYPE_NUMBER, title="对话次数", | ||
description="对话次数"), | ||
'day': openapi.Schema(type=openapi.TYPE_STRING, | ||
title="日期", | ||
description="日期,只有查询趋势的时候才有该字段"), | ||
} | ||
) | ||
|
||
class CustomerCountTrend(ApiMixin): | ||
@staticmethod | ||
def get_response_body_api(): | ||
return openapi.Schema( | ||
type=openapi.TYPE_OBJECT, | ||
required=['added_count'], | ||
properties={ | ||
'added_count': openapi.Schema(type=openapi.TYPE_NUMBER, title="新增数量", description="新增数量"), | ||
|
||
'day': openapi.Schema(type=openapi.TYPE_STRING, | ||
title="时间", | ||
description="时间"), | ||
} | ||
) | ||
|
||
class CustomerCount(ApiMixin): | ||
@staticmethod | ||
def get_response_body_api(): | ||
return openapi.Schema( | ||
type=openapi.TYPE_OBJECT, | ||
required=['added_count'], | ||
properties={ | ||
'today_added_count': openapi.Schema(type=openapi.TYPE_NUMBER, title="今日新增数量", | ||
description="今日新增数量"), | ||
'added_count': openapi.Schema(type=openapi.TYPE_NUMBER, title="新增数量", description="新增数量"), | ||
|
||
} | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters