From 2e15c8ff31ba2339885cdb0fb2ef7a4c2e24982d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Feb 2024 15:02:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20em=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=AF=E6=90=BA=E5=B8=A6=E7=8E=AF=E4=BF=9D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/em/views.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/apps/em/views.py b/apps/em/views.py index cbaec5ff..db292e16 100644 --- a/apps/em/views.py +++ b/apps/em/views.py @@ -1,4 +1,7 @@ from django.shortcuts import render +from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi +from django.utils import timezone from apps.em.models import Equipment, EcheckRecord, EInspect, Ecate from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer, EInspectSerializer, EcateSerializer @@ -12,7 +15,7 @@ from django.db import transaction from apps.em.services import daoru_equipment from rest_framework.response import Response from django.conf import settings -from django.db.models import Count, Case, When, IntegerField +from django.db.models import Count, Case, When, IntegerField, Max # Create your views here. @@ -62,6 +65,30 @@ class EquipmentViewSet(CustomModelViewSet): daoru_equipment(settings.BASE_DIR + request.data.get('path', '')) return Response() + @swagger_auto_schema(manual_parameters=[ + openapi.Parameter(name="has_envdata", in_=openapi.IN_QUERY, description="Include envdata in the response", + type=openapi.TYPE_STRING, enum=["yes", "no"], required=False), + openapi.Parameter(name="query", in_=openapi.IN_QUERY, description="定制返回数据", + type=openapi.TYPE_STRING, required=False), + ]) + def list(self, request, *args, **kwargs): + return super().list(request, *args, **kwargs) + + def add_info_for_list(self, data): + if self.request.query_params.get('has_envdata', 'no') == 'yes': + now = timezone.now() + now_10_before = now - timezone.timedelta(minutes=10) + data_ids = [item['id'] for item in data] + from apps.enp.models import EnvData + from apps.enp.serializers import EnvDataSerializer + last_envdata_qs = EnvData.objects.filter(equipment_id__in=data_ids, time__gte=now_10_before, time__lte=now).values('equipment_id').annotate( + last_time=Max('time')) + envdata = EnvDataSerializer(last_envdata_qs, many=True).data + envdata_dict = {item['equipment_id']: item for item in envdata} + for item in data: + item['envdata'] = envdata_dict.get(item['id'], {}) + return data + @action(methods=['get'], detail=False, perms_map={'get': '*'}) def count_running_state(self, request, *args, **kwargs): """当前运行状态统计