feat: mpointvalues 聚合查询bug

This commit is contained in:
caoqianming 2024-12-06 15:05:06 +08:00
parent 9c0160f556
commit 3cfc4393de
2 changed files with 12 additions and 5 deletions

View File

@ -2,6 +2,7 @@ from django_filters import rest_framework as filters
from apps.enm.models import MpointStat, EnStat, EnStat2 from apps.enm.models import MpointStat, EnStat, EnStat2
from datetime import datetime from datetime import datetime
from django.db.models import F, Q from django.db.models import F, Q
from rest_framework.exceptions import ParseError
class MpointStatFilter(filters.FilterSet): class MpointStatFilter(filters.FilterSet):
@ -47,6 +48,8 @@ class MpointStatFilter(filters.FilterSet):
def filter_start_time(self, queryset, name, value): def filter_start_time(self, queryset, name, value):
query = self.data query = self.data
if "type" not in query:
raise ParseError("type参数缺失")
start_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") start_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour
if query["type"] in ["hour_s", "hour"]: if query["type"] in ["hour_s", "hour"]:
@ -72,6 +75,8 @@ class MpointStatFilter(filters.FilterSet):
def filter_end_time(self, queryset, name, value): def filter_end_time(self, queryset, name, value):
query = self.data query = self.data
if "type" not in query:
raise ParseError("type参数缺失")
end_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") end_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour
if query["type"] in ["hour_s", "hour"]: if query["type"] in ["hour_s", "hour"]:

View File

@ -214,13 +214,15 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, CustomListM
测点统计数据聚合查询 测点统计数据聚合查询
""" """
qs = self.filter_queryset(self.get_queryset()) qs = self.filter_queryset(self.get_queryset())
group_by = request.query_params.get("group_by", None) group_by = request.query_params.get("group_by", "")
group_by_fields = ['mpoint'] group_by_list = group_by.split(",")
if group_by: group_by_list.remove("")
group_by_fields.append(group_by) if 'mpoint' not in group_by_list:
group_by_list.append('mpoint')
qs = qs.values() qs = qs.values()
qs = qs.order_by() qs = qs.order_by()
aggreagte_qs = qs.values(*group_by_fields).annotate(total_val = Sum('val')).values('mpoint__name', 'total_val', 'mpoint__nickname', 'mpoint__unit', 'val_level') display_fields = ['mpoint__name', 'total_val', 'mpoint__nickname', 'mpoint__unit'] + group_by_list
aggreagte_qs = qs.values(*group_by_list).annotate(total_val = Sum('val')).values(*display_fields)
result = list(aggreagte_qs) result = list(aggreagte_qs)
return Response(result) return Response(result)