feat: em返回数据可携带环保数据信息

This commit is contained in:
caoqianming 2024-02-28 15:02:19 +08:00
parent d4bf7a7e19
commit 2e15c8ff31
1 changed files with 28 additions and 1 deletions

View File

@ -1,4 +1,7 @@
from django.shortcuts import render 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.em.models import Equipment, EcheckRecord, EInspect, Ecate
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer, EInspectSerializer, EcateSerializer 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 apps.em.services import daoru_equipment
from rest_framework.response import Response from rest_framework.response import Response
from django.conf import settings 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. # Create your views here.
@ -62,6 +65,30 @@ class EquipmentViewSet(CustomModelViewSet):
daoru_equipment(settings.BASE_DIR + request.data.get('path', '')) daoru_equipment(settings.BASE_DIR + request.data.get('path', ''))
return Response() 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': '*'}) @action(methods=['get'], detail=False, perms_map={'get': '*'})
def count_running_state(self, request, *args, **kwargs): def count_running_state(self, request, *args, **kwargs):
"""当前运行状态统计 """当前运行状态统计