109 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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):
 | |
|         print(len(data))
 | |
|         for ind, val in enumerate(data):
 | |
|             # imaterial_data = i['imaterial_data']
 | |
|             # other_cost_data = i['other_cost_data']
 | |
|             qua_data = val['qua_data']
 | |
|             equip_elec_data = val['equip_elec_data']
 | |
|             if qua_data:
 | |
|                 for item in qua_data:
 | |
|                     val[f'{item["material_name"]}_{item["testitem_name"]}_rate_pass'] = item['rate_pass']
 | |
|             if equip_elec_data:
 | |
|                 for item in equip_elec_data:
 | |
|                     val[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'] |