feat: 添加drainequip及其返回envdata信息

This commit is contained in:
caoqianming 2024-01-15 17:30:29 +08:00
parent 4a6aabd860
commit c11132e38f
5 changed files with 72 additions and 10 deletions

View File

@ -48,9 +48,9 @@ class DrainEquip(BaseModel):
排口/设备关系表 排口/设备关系表
""" """
drain = models.ForeignKey( drain = models.ForeignKey(
Drain, verbose_name='排口', on_delete=models.CASCADE) Drain, verbose_name='排口', related_name='drainequip_drain', on_delete=models.CASCADE)
equipment = models.ForeignKey( equipment = models.ForeignKey(
Equipment, verbose_name='关联设备', on_delete=models.CASCADE) Equipment, verbose_name='关联设备', related_name='drainequip_equipment', on_delete=models.CASCADE)
params_list = models.JSONField('监测参数列表', default=list, null=True) params_list = models.JSONField('监测参数列表', default=list, null=True)
@ -67,7 +67,7 @@ class EnvData(models.Model):
'颗粒物实测(mg/m3)', max_digits=10, decimal_places=4, null=True, blank=True) '颗粒物实测(mg/m3)', max_digits=10, decimal_places=4, null=True, blank=True)
dust_zs = models.DecimalField( dust_zs = models.DecimalField(
'颗粒物折算(mg/m3)', max_digits=10, decimal_places=4, null=True, blank=True) '颗粒物折算(mg/m3)', max_digits=10, decimal_places=4, null=True, blank=True)
tempreture = models.DecimalField( temperature = models.DecimalField(
'温度(℃)', max_digits=10, decimal_places=4, null=True, blank=True) '温度(℃)', max_digits=10, decimal_places=4, null=True, blank=True)
pressure = models.DecimalField( pressure = models.DecimalField(
'压力(kPa)', max_digits=10, decimal_places=4, null=True, blank=True) '压力(kPa)', max_digits=10, decimal_places=4, null=True, blank=True)
@ -97,6 +97,6 @@ class EnvData(models.Model):
decimal_places=4, null=True, blank=True) decimal_places=4, null=True, blank=True)
class Meta: class Meta:
db_table = 'enp.envdata' db_table = 'enp_envdata'
managed = False managed = False
unique_together = (('equipment', 'time'), ) unique_together = (('equipment', 'time'), )

View File

@ -1,8 +1,9 @@
from apps.utils.serializers import CustomModelSerializer from apps.utils.serializers import CustomModelSerializer
from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT
from .models import Drain, DrainEquip from .models import Drain, DrainEquip, EnvData
from apps.em.serializers import EquipmentSerializer from apps.em.serializers import EquipmentSerializer
from rest_framework import serializers from rest_framework import serializers
from django.utils import timezone
class DrainSerializer(CustomModelSerializer): class DrainSerializer(CustomModelSerializer):
@ -28,3 +29,34 @@ class DrainEquipSerializer(CustomModelSerializer):
model = DrainEquip model = DrainEquip
fields = "__all__" fields = "__all__"
read_only_fields = EXCLUDE_FIELDS_BASE read_only_fields = EXCLUDE_FIELDS_BASE
class EnvDataSerializer(CustomModelSerializer):
"""Serializer for EnvData model"""
class Meta:
model = EnvData
fields = "__all__"
class DrainEquipEnvSerializer(CustomModelSerializer):
equipment_type = serializers.CharField(
source='equipment.type', read_only=True)
equipment_name = serializers.CharField(
source='equipment.name', read_only=True)
equipment_envdata = serializers.SerializerMethodField()
def get_equipment_envdata(self, obj):
now = timezone.now()
now_10_before = now - timezone.timedelta(minutes=10)
obj = EnvData.objects.filter(
equipment=obj.equipment, time__gte=now_10_before, time__lte=now).order_by('-time').first()
if obj:
return EnvDataSerializer(instance=obj).data
else:
return {}
class Meta:
model = DrainEquip
fields = ['equipment', 'equipment_type',
'equipment_name', 'equipment_envdata']

10
apps/enp/tasks.py Normal file
View File

@ -0,0 +1,10 @@
# Create your tasks here
from __future__ import absolute_import, unicode_literals
from datetime import timedelta
from apps.utils.tasks import CustomTask
from celery import shared_task
@shared_task(base=CustomTask)
def generate_envdata():
pass

View File

@ -1,9 +1,12 @@
from django.shortcuts import render from django.shortcuts import render
from apps.utils.viewsets import CustomModelViewSet, GenericViewSet, ListModelMixin from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet, ListModelMixin
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin
from .serializers import DrainSerializer, DrainEquipSerializer from .serializers import DrainSerializer, DrainEquipSerializer, DrainEquipEnvSerializer
from .models import Drain, DrainEquip from .models import Drain, DrainEquip
from rest_framework.decorators import action
from apps.utils.sql import query_all_dict
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
# Create your views here. # Create your views here.
@ -18,7 +21,7 @@ class DrainViewSet(CustomModelViewSet):
filterset_fields = ['type', 'cate', 'mgroup'] filterset_fields = ['type', 'cate', 'mgroup']
class DrainEquipViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, GenericViewSet): class DrainEquipViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet):
""" """
list: 排口/设备关系 list: 排口/设备关系
@ -27,4 +30,18 @@ class DrainEquipViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMi
perms_map = {'get': '*', 'post:': 'drain.update', 'delete': 'drain.update'} perms_map = {'get': '*', 'post:': 'drain.update', 'delete': 'drain.update'}
queryset = DrainEquip.objects.all() queryset = DrainEquip.objects.all()
serializer_class = DrainEquipSerializer serializer_class = DrainEquipSerializer
filterset_fields = ['drain', 'equipment'] filterset_fields = ['drain', 'equipment',
'drain__mgroup', 'equipment__mgroup', 'drain__type']
def get_serializer_class(self):
has_envdata = self.request.query_params.get('has_envdata', 'no')
if has_envdata == 'yes':
return DrainEquipEnvSerializer
return super().get_serializer_class()
@swagger_auto_schema(manual_parameters=[
openapi.Parameter(name="has_envdata", in_=openapi.IN_QUERY, description="Include environmental data in the response",
type=openapi.TYPE_STRING, enum=["yes", "no"], required=False),
])
def list(self, request, *args, **kwargs):
return super().list(request, *args, **kwargs)

View File

@ -119,6 +119,9 @@ class Mgroup(CommonBModel):
verbose_name = '测点集' verbose_name = '测点集'
ordering = ['sort', '-create_time'] ordering = ['sort', '-create_time']
def __str__(self) -> str:
return self.name
class TeamMember(BaseModel): class TeamMember(BaseModel):
team = models.ForeignKey(Team, verbose_name='关联班组', team = models.ForeignKey(Team, verbose_name='关联班组',