factory/apps/enm/views.py

146 lines
5.2 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 apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
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, MpointCache
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", "type", "mgroup__name", "val_type", "enabled", "need_display", "formula", "material", "material__code"]
search_fields = ["name", "code"]
ordering = ["create_time", "name", "code"]
@transaction.atomic
def perform_create(self, serializer):
instance = serializer.save()
if instance.code:
MpointCache(instance.code).get(True)
@transaction.atomic
def perform_update(self, serializer):
instance = serializer.save()
if instance.code:
MpointCache(instance.code).get(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(CustomListModelMixin, 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, CustomListModelMixin, 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
ordering_fields = ['mpoint__report_sortstr', 'year', 'month', 'day', 'hour', 'year_s', 'month_s', 'day_s', 'mgroup__sort', 'create_time']
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(CustomListModelMixin, 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(CustomListModelMixin, CustomGenericViewSet):
"""
list:全厂统计记录
全厂统计记录
"""
perms_map = {"get": "*"}
queryset = EnStat2.objects.all()
serializer_class = EnStat2Serializer
filterset_class = EnStat2Filter