184 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			6.6 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, MpointStatCorrectSerializer
 | 
						|
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": ["exact"],
 | 
						|
            "ep_monitored": ["exact"],
 | 
						|
            "ep_belong": ["exact"],
 | 
						|
            "mgroup": ["exact"],
 | 
						|
            "type": ["exact"],
 | 
						|
            "mgroup__name": ["exact"],
 | 
						|
            "val_type": ["exact"],
 | 
						|
            "enabled": ["exact"],
 | 
						|
            "need_display": ["exact"],
 | 
						|
            "formula": ["exact", "contains"],
 | 
						|
            "material": ["exact"],
 | 
						|
            "material__code": ["exact", "in"]
 | 
						|
        }
 | 
						|
 | 
						|
    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, next_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, next_cal=1)
 | 
						|
 | 
						|
    @action(methods=["post"], detail=True, perms_map={"post": "mpointstat.correct"}, serializer_class=MpointStatCorrectSerializer)
 | 
						|
    def correct(self, request, *args, **kwargs):
 | 
						|
        """修正测点统计记录及统计值
 | 
						|
 | 
						|
        修正测点统计记录及统计值
 | 
						|
        """
 | 
						|
        instance: MpointStat = self.get_object()
 | 
						|
        sr = MpointStatCorrectSerializer(data=request.data)
 | 
						|
        sr.is_valid(raise_exception=True)
 | 
						|
        vdata = sr.validated_data
 | 
						|
        val_correct  = vdata["val_correct"]
 | 
						|
        instance.val_correct = val_correct
 | 
						|
        instance.val = val_correct
 | 
						|
        instance.update_by = request.user
 | 
						|
        instance.save()
 | 
						|
        mpoint, sflog, mgroup, year_s, month_s, day_s = instance.mpoint, instance.sflog, instance.mgroup, instance.year_s, instance.month_s, instance.day_s
 | 
						|
        # sflog 可能为None
 | 
						|
        if sflog is None:
 | 
						|
            sflogId = None
 | 
						|
        else:
 | 
						|
            sflogId = sflog.id
 | 
						|
        cal_mpointstat_manual.delay(mpoint.id, sflogId, mgroup.id, None, None, None, None, year_s, month_s, day_s, next_cal=1)
 | 
						|
        return Response()
 | 
						|
 | 
						|
    @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
 |