From ce41facb2213f41f145a896d7e3a121e044f54bc Mon Sep 17 00:00:00 2001 From: John Wang Date: Wed, 31 May 2023 11:07:32 +0800 Subject: [PATCH] feat: revert to original UserSatisfactionRateStatistic query --- api/controllers/console/app/statistic.py | 27 +++++++++--------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/api/controllers/console/app/statistic.py b/api/controllers/console/app/statistic.py index ba0df4bc1c..8e4ac51c7f 100644 --- a/api/controllers/console/app/statistic.py +++ b/api/controllers/console/app/statistic.py @@ -286,13 +286,12 @@ class UserSatisfactionRateStatistic(Resource): args = parser.parse_args() sql_query = ''' - WITH numbered_messages AS ( - SELECT m.id, m.created_at, mf.id AS feedback_id, - ROW_NUMBER() OVER (ORDER BY m.created_at) AS message_number - FROM messages m - LEFT JOIN message_feedbacks mf ON mf.message_id = m.id - WHERE m.app_id = :app_id - ''' + SELECT date(DATE_TRUNC('day', m.created_at AT TIME ZONE 'UTC' AT TIME ZONE :tz )) AS date, + COUNT(m.id) as message_count, COUNT(mf.id) as feedback_count + FROM messages m + LEFT JOIN message_feedbacks mf on mf.message_id=m.id + WHERE m.app_id = :app_id + ''' arg_dict = {'tz': account.timezone, 'app_id': app_model.id} timezone = pytz.timezone(account.timezone) @@ -318,13 +317,7 @@ class UserSatisfactionRateStatistic(Resource): sql_query += ' and m.created_at < :end' arg_dict['end'] = end_datetime_utc - sql_query += ''') - SELECT date(DATE_TRUNC('day', nm.created_at AT TIME ZONE 'UTC' AT TIME ZONE :tz )) AS date, - FLOOR((COUNT(nm.feedback_id) + 999) / 1000) AS feedback_count_per_1000_messages - FROM numbered_messages nm - GROUP BY date, FLOOR((nm.message_number - 1) / 1000) - ORDER BY date; - ''' + sql_query += ' GROUP BY date order by date' with db.engine.begin() as conn: rs = conn.execute(db.text(sql_query), arg_dict) @@ -334,12 +327,12 @@ class UserSatisfactionRateStatistic(Resource): for i in rs: response_data.append({ 'date': str(i.date), - 'rate': round(i.feedback_count_per_1000_messages / 1000, 5), + 'rate': round((i.feedback_count * 1000 / i.message_count) if i.message_count > 0 else 0, 2), }) return jsonify({ - 'data': response_data - }) + 'data': response_data + }) class AverageResponseTimeStatistic(Resource):