feat: mpointvalues 聚合查询bug
This commit is contained in:
parent
9c0160f556
commit
3cfc4393de
|
@ -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"]:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue