From 0fdb230822c58ad589d99442f083588f92795215 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 11 Apr 2024 10:58:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mplog=E8=A7=86=E5=9B=BE=E5=B1=82?= =?UTF-8?q?=E8=BD=ACmplogx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/serializers.py | 25 +++++++++++++------ apps/enm/urls.py | 4 +-- apps/enm/views.py | 55 ++++++++++++++++++++++++++++++----------- 3 files changed, 61 insertions(+), 23 deletions(-) diff --git a/apps/enm/serializers.py b/apps/enm/serializers.py index 4d85754d..9717c4fe 100644 --- a/apps/enm/serializers.py +++ b/apps/enm/serializers.py @@ -1,9 +1,10 @@ from apps.utils.serializers import CustomModelSerializer -from apps.enm.models import Mpoint, MpLog, MpointStat, EnStat, EnStat2 +from apps.enm.models import Mpoint, MpointStat, EnStat, EnStat2, MpLogx from apps.utils.constants import EXCLUDE_FIELDS from rest_framework import serializers from apps.mtm.models import Mgroup from rest_framework.exceptions import ParseError +from django.core.cache import cache class MpointSerializer(CustomModelSerializer): @@ -15,11 +16,16 @@ class MpointSerializer(CustomModelSerializer): ep_belong_name = serializers.CharField(source='ep_belong.name', read_only=True) material_name = serializers.CharField(source='material.name', read_only=True) formula = serializers.CharField(allow_blank=True, required=False) + last_data = serializers.SerializerMethodField() class Meta: model = Mpoint fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept', 'cate'] + def get_last_data(self, obj): + last_data = cache.get(f'mpoint_{obj.code}', None) + return {'last_val': last_data.get('last_val', None) if last_data else None, 'last_timex': last_data.get('last_timex', None) if last_data else None} + def validate(self, attrs): if 'material' in attrs and attrs['material']: attrs['cate'] = 'material' @@ -40,15 +46,20 @@ class MpointSerializer(CustomModelSerializer): return attrs -class MpLogSerializer(CustomModelSerializer): - mpoint_name = serializers.CharField(source='mpoint.name', read_only=True) - class Meta: - model = MpLog - fields = '__all__' - read_only_fields = EXCLUDE_FIELDS + ['mpoint_name'] +# class MpLogSerializer(CustomModelSerializer): +# mpoint_name = serializers.CharField(source='mpoint.name', read_only=True) +# class Meta: +# model = MpLog +# fields = '__all__' +# read_only_fields = EXCLUDE_FIELDS + ['mpoint_name'] +class MpLogxSerializer(CustomModelSerializer): + """Serializer for EnvData model""" + class Meta: + model = MpLogx + fields = "__all__" class MpointStatSerializer(CustomModelSerializer): diff --git a/apps/enm/urls.py b/apps/enm/urls.py index a889ad48..de4cca4d 100644 --- a/apps/enm/urls.py +++ b/apps/enm/urls.py @@ -1,13 +1,13 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.enm.views import (MpointViewSet, MpLogViewSet, MpointStatViewSet, EnStatViewSet, EnStat2ViewSet) +from apps.enm.views import (MpointViewSet, MpLogxViewSet, MpointStatViewSet, EnStatViewSet, EnStat2ViewSet) API_BASE_URL = 'api/enm/' HTML_BASE_URL = 'enm/' router = DefaultRouter() router.register('mpoint', MpointViewSet, basename='mpoint') -router.register('mplog', MpLogViewSet, basename='mplog') +router.register('mplogx', MpLogxViewSet, basename='mplogx') router.register('mpointstat', MpointStatViewSet, basename='mpointstat') router.register('enstat', EnStatViewSet, basename='enstat') router.register('enstat2', EnStat2ViewSet, basename='enstat2') diff --git a/apps/enm/views.py b/apps/enm/views.py index fe3d4465..84385cfc 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -1,17 +1,18 @@ from django.shortcuts import render from django.conf import settings -from apps.enm.models import Mpoint, MpLog, MpointStat, EnStat, EnStat2 +from apps.enm.models import Mpoint, MpointStat, EnStat, EnStat2, MpLogx from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from rest_framework.mixins import ListModelMixin from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin -from apps.enm.serializers import (MpointSerializer, MpLogSerializer, MpointStatSerializer, EnStatSerializer, EnStat2Serializer, ReCalSerializer) +from apps.enm.serializers import (MpointSerializer, MpLogxSerializer, MpointStatSerializer, EnStatSerializer, EnStat2Serializer, ReCalSerializer) from apps.enm.filters import MpointStatFilter, EnStatFilter, EnStat2Filter from apps.enm.tasks import cal_mpointstat_manual from rest_framework.response import Response from rest_framework.serializers import Serializer from rest_framework.decorators import action from apps.enm.tasks import cal_mpointstats_duration -from apps.enm.services import king_sync +from apps.enm.services import king_sync, cache_mpoints +from django.db import transaction class MpointViewSet(CustomModelViewSet): """ @@ -22,11 +23,21 @@ class MpointViewSet(CustomModelViewSet): queryset = Mpoint.objects.all() serializer_class = MpointSerializer select_related_fields = ['create_by', 'belong_dept', 'ep_monitored', 'ep_belong', 'mgroup'] - filterset_fields = ['belong_dept', 'ep_monitored', 'ep_belong', 'mgroup', 'is_auto', 'is_all', 'mgroup__name'] - search_fields = ['number', 'code'] + filterset_fields = ['belong_dept', 'ep_monitored', 'ep_belong', 'mgroup', 'is_auto', 'is_all', 'mgroup__name', 'val_type', 'enabled'] + search_fields = ['name', 'code'] + ordering = ['-create_time', 'name', 'code'] + @transaction.atomic + def perform_create(self, serializer): + instance = serializer.save() + cache_mpoints(instance.id) + + @transaction.atomic + def perform_update(self, serializer): + instance = serializer.save() + cache_mpoints(instance.id) - @action(methods=['post'], detail=False, perms_map={'post': 'mpoint.sync'}, serializer_class=Serializer) + @action(methods=['post'], detail=False, perms_map={'post': 'mpoint.create'}, serializer_class=Serializer) def king_sync(self, request, *args, **kwargs): """同步亚控采集点 @@ -36,17 +47,33 @@ class MpointViewSet(CustomModelViewSet): return Response() -class MpLogViewSet(ListModelMixin, CustomGenericViewSet): - """ - list:测点原始记录 +# class MpLogViewSet(ListModelMixin, CustomGenericViewSet): +# """ +# list:测点原始记录 - 测点原始记录 +# 测点原始记录 +# """ +# perms_map = {'get': '*'} +# queryset = MpLog.objects.all() +# serializer_class = MpLogSerializer +# select_related_fields = ['mpoint'] +# filterset_fields = ['mpoint', 'mpoint__mgroup', 'mpoint__mgroup__belong_dept'] + +class MpLogxViewSet(ListModelMixin, CustomGenericViewSet): + """ + list: 测点采集数据 + + 测点采集数据 """ perms_map = {'get': '*'} - queryset = MpLog.objects.all() - serializer_class = MpLogSerializer - select_related_fields = ['mpoint'] - filterset_fields = ['mpoint', 'mpoint__mgroup', 'mpoint__mgroup__belong_dept'] + queryset = MpLogx.objects.all() + serializer_class = MpLogxSerializer + filterset_fields = { + "timex": ['exact', 'gte', 'lte', 'year', 'month', 'day'], + "mpoint": ['exact'], + } + ordering_fields = ['timex'] + ordering = ['-timex'] class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, ListModelMixin, CustomGenericViewSet):