factory/apps/enm/views.py

146 lines
5.0 KiB
Python

from django.shortcuts import render
from django.conf import settings
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, 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, get_mpoint_cache
from django.db import transaction
class MpointViewSet(CustomModelViewSet):
"""
list:测点
测点
"""
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", "val_type", "enabled"]
search_fields = ["name", "code"]
ordering = ["-create_time", "name", "code"]
@transaction.atomic
def perform_create(self, serializer):
instance = serializer.save()
if instance.code:
get_mpoint_cache(instance.code, True)
@transaction.atomic
def perform_update(self, serializer):
instance = serializer.save()
if instance.code:
get_mpoint_cache(instance.code, True)
@action(methods=["post"], detail=False, perms_map={"post": "mpoint.create"}, serializer_class=Serializer)
def king_sync(self, request, *args, **kwargs):
"""同步亚控采集点
同步亚控采集点
"""
king_sync(getattr(settings, "KING_PROJECTNAME", ""))
return Response()
# 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 = 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):
"""
list:测点统计记录
测点统计记录
"""
perms_map = {"get": "*", "post": "mpointstat.create", "delete": "mpointstat.delete"}
queryset = MpointStat.objects.all()
serializer_class = MpointStatSerializer
select_related_fields = ["mpoint", "mpoint__ep_monitored", "mpoint__ep_belong", "mgroup", "mgroup__belong_dept"]
filterset_class = MpointStatFilter
def perform_create(self, serializer):
ins = serializer.save()
cal_mpointstat_manual.delay(ins.mpoint.id, ins.sflog.id, ins.mgroup.id, None, None, None, None, ins.year_s, ins.month_s, ins.day_s, nex_cal=1)
def perform_destroy(self, instance):
mpoint, sflog, mgroup, year_s, month_s, day_s = instance.mpoint, instance.sflog, instance.mgroup, instance.year_s, instance.month_s, instance.day_s
instance.delete()
cal_mpointstat_manual.delay(mpoint.id, sflog.id, mgroup.id, None, None, None, None, year_s, month_s, day_s)
@action(methods=["post"], detail=False, perms_map={"post": "mpointstat.create"}, serializer_class=ReCalSerializer)
def recal(self, request, *args, **kwargs):
"""重新运行某段时间的enm计算
重新运行某段时间的enm计算
"""
data = request.data
sr = ReCalSerializer(data=data)
sr.is_valid(raise_exception=True)
task = cal_mpointstats_duration.delay(data["start_time"], data["end_time"])
return Response({"task_id": task.task_id})
class EnStatViewSet(ListModelMixin, CustomGenericViewSet):
"""
list:能耗统计记录
能耗统计记录
"""
perms_map = {"get": "*"}
queryset = EnStat.objects.all()
serializer_class = EnStatSerializer
select_related_fields = ["mgroup", "team", "mgroup__belong_dept"]
filterset_class = EnStatFilter
ordering = ["mgroup__sort", "year_s", "month_s", "day_s", "hour"]
class EnStat2ViewSet(ListModelMixin, CustomGenericViewSet):
"""
list:全厂统计记录
全厂统计记录
"""
perms_map = {"get": "*"}
queryset = EnStat2.objects.all()
serializer_class = EnStat2Serializer
filterset_class = EnStat2Filter