from django.shortcuts import render from apps.enm.models import Mpoint, MpLog, MpointStat, EnStat, EnStat2 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) from apps.enm.filters import MpointStatFilter, EnStatFilter from apps.enm.tasks import cal_mpointstat_manual from rest_framework.response import Response 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'] search_fields = ['number', 'code'] 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 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) 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'] def handle_data(self, data): for i in data: # imaterial_data = i['imaterial_data'] # other_cost_data = i['other_cost_data'] qua_data = i['qua_data'] equip_elec_data = i['equip_elec_data'] if qua_data: for item in qua_data: i[f'{item["material_name"]}_{item["testitem_name"]}_rate_pass'] = item['rate_pass'] if equip_elec_data: for item in equip_elec_data: i[f'{item["equipment_name"]}_consume_unit'] = item.get('consume_unit', None) return data def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) data = self.handle_data(serializer.data) return self.get_paginated_response(data) serializer = self.get_serializer(queryset, many=True) data = self.handle_data(serializer.data) return Response(data) class EnStat2ViewSet(ListModelMixin, CustomGenericViewSet): """ list:全厂统计记录 全厂统计记录 """ perms_map = {'get': '*'} queryset = EnStat2.objects.all() serializer_class = EnStat2Serializer filterset_fields = ['year_s', 'month_s']