feat: mplog视图层转mplogx

This commit is contained in:
caoqianming 2024-04-11 10:58:33 +08:00
parent 1139bb6119
commit 0fdb230822
3 changed files with 61 additions and 23 deletions

View File

@ -1,9 +1,10 @@
from apps.utils.serializers import CustomModelSerializer 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 apps.utils.constants import EXCLUDE_FIELDS
from rest_framework import serializers from rest_framework import serializers
from apps.mtm.models import Mgroup from apps.mtm.models import Mgroup
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from django.core.cache import cache
class MpointSerializer(CustomModelSerializer): class MpointSerializer(CustomModelSerializer):
@ -15,11 +16,16 @@ class MpointSerializer(CustomModelSerializer):
ep_belong_name = serializers.CharField(source='ep_belong.name', read_only=True) ep_belong_name = serializers.CharField(source='ep_belong.name', read_only=True)
material_name = serializers.CharField(source='material.name', read_only=True) material_name = serializers.CharField(source='material.name', read_only=True)
formula = serializers.CharField(allow_blank=True, required=False) formula = serializers.CharField(allow_blank=True, required=False)
last_data = serializers.SerializerMethodField()
class Meta: class Meta:
model = Mpoint model = Mpoint
fields = '__all__' fields = '__all__'
read_only_fields = EXCLUDE_FIELDS + ['belong_dept', 'cate'] 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): def validate(self, attrs):
if 'material' in attrs and attrs['material']: if 'material' in attrs and attrs['material']:
attrs['cate'] = 'material' attrs['cate'] = 'material'
@ -40,15 +46,20 @@ class MpointSerializer(CustomModelSerializer):
return attrs return attrs
class MpLogSerializer(CustomModelSerializer): # class MpLogSerializer(CustomModelSerializer):
mpoint_name = serializers.CharField(source='mpoint.name', read_only=True) # mpoint_name = serializers.CharField(source='mpoint.name', read_only=True)
class Meta: # class Meta:
model = MpLog # model = MpLog
fields = '__all__' # fields = '__all__'
read_only_fields = EXCLUDE_FIELDS + ['mpoint_name'] # read_only_fields = EXCLUDE_FIELDS + ['mpoint_name']
class MpLogxSerializer(CustomModelSerializer):
"""Serializer for EnvData model"""
class Meta:
model = MpLogx
fields = "__all__"
class MpointStatSerializer(CustomModelSerializer): class MpointStatSerializer(CustomModelSerializer):

View File

@ -1,13 +1,13 @@
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter 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/' API_BASE_URL = 'api/enm/'
HTML_BASE_URL = 'enm/' HTML_BASE_URL = 'enm/'
router = DefaultRouter() router = DefaultRouter()
router.register('mpoint', MpointViewSet, basename='mpoint') 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('mpointstat', MpointStatViewSet, basename='mpointstat')
router.register('enstat', EnStatViewSet, basename='enstat') router.register('enstat', EnStatViewSet, basename='enstat')
router.register('enstat2', EnStat2ViewSet, basename='enstat2') router.register('enstat2', EnStat2ViewSet, basename='enstat2')

View File

@ -1,17 +1,18 @@
from django.shortcuts import render from django.shortcuts import render
from django.conf import settings 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 apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
from rest_framework.mixins import ListModelMixin from rest_framework.mixins import ListModelMixin
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin 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.filters import MpointStatFilter, EnStatFilter, EnStat2Filter
from apps.enm.tasks import cal_mpointstat_manual from apps.enm.tasks import cal_mpointstat_manual
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.serializers import Serializer from rest_framework.serializers import Serializer
from rest_framework.decorators import action from rest_framework.decorators import action
from apps.enm.tasks import cal_mpointstats_duration 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): class MpointViewSet(CustomModelViewSet):
""" """
@ -22,11 +23,21 @@ class MpointViewSet(CustomModelViewSet):
queryset = Mpoint.objects.all() queryset = Mpoint.objects.all()
serializer_class = MpointSerializer serializer_class = MpointSerializer
select_related_fields = ['create_by', 'belong_dept', 'ep_monitored', 'ep_belong', 'mgroup'] 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'] filterset_fields = ['belong_dept', 'ep_monitored', 'ep_belong', 'mgroup', 'is_auto', 'is_all', 'mgroup__name', 'val_type', 'enabled']
search_fields = ['number', 'code'] 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): def king_sync(self, request, *args, **kwargs):
"""同步亚控采集点 """同步亚控采集点
@ -36,17 +47,33 @@ class MpointViewSet(CustomModelViewSet):
return Response() return Response()
class MpLogViewSet(ListModelMixin, CustomGenericViewSet): # class MpLogViewSet(ListModelMixin, CustomGenericViewSet):
""" # """
list:测点原始记录 # 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': '*'} perms_map = {'get': '*'}
queryset = MpLog.objects.all() queryset = MpLogx.objects.all()
serializer_class = MpLogSerializer serializer_class = MpLogxSerializer
select_related_fields = ['mpoint'] filterset_fields = {
filterset_fields = ['mpoint', 'mpoint__mgroup', 'mpoint__mgroup__belong_dept'] "timex": ['exact', 'gte', 'lte', 'year', 'month', 'day'],
"mpoint": ['exact'],
}
ordering_fields = ['timex']
ordering = ['-timex']
class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, ListModelMixin, CustomGenericViewSet): class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, ListModelMixin, CustomGenericViewSet):