107 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| from django.shortcuts import render
 | |
| from rest_framework.mixins import ListModelMixin, UpdateModelMixin
 | |
| from rest_framework.decorators import action
 | |
| from django.db import transaction
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.exceptions import ParseError
 | |
| from rest_framework.mixins import DestroyModelMixin, UpdateModelMixin, ListModelMixin
 | |
| 
 | |
| from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
 | |
| from apps.wpm.models import SfLog, StLog, StSfLog
 | |
| from apps.wpm.serializers import SfLogSerializer, StLogSerializer, StSfLogSerializer
 | |
| from apps.wpm.filters import SfLogFilter
 | |
| from apps.mtm.models import Material
 | |
| from django.utils.timezone import localtime
 | |
| 
 | |
| # Create your views here.
 | |
| class StLogViewSet(ListModelMixin, CustomGenericViewSet):
 | |
|     """
 | |
|     list:停机记录
 | |
| 
 | |
|     停机记录
 | |
|     """
 | |
|     perms_map = {'get': '*'}
 | |
|     queryset = StLog.objects.all()
 | |
|     serializer_class = StLogSerializer
 | |
|     select_related_fields = ['mgroup']
 | |
|     filterset_fields = ['mgroup']
 | |
|     ordering = ['-start_time']
 | |
| 
 | |
| 
 | |
| class SfLogViewSet(UpdateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet):
 | |
|     """
 | |
|     list:值班记录
 | |
| 
 | |
|     值班记录
 | |
|     """
 | |
|     perms_map = {'get': '*', 'put': 'sflog.update', 'delete': 'sflog.delete'}
 | |
|     queryset = SfLog.objects.all()
 | |
|     serializer_class = SfLogSerializer
 | |
|     select_related_fields = ['mgroup', 'shift', 'team', 'leader']
 | |
|     filterset_class = SfLogFilter
 | |
|     search_fields = ['note']
 | |
|     ordering = ['-start_time']
 | |
| 
 | |
|     # 此处需要进行修改
 | |
|     # @transaction.atomic
 | |
|     # def perform_create(self, serializer):
 | |
|     #     ins = serializer.save()
 | |
|     #     # 查看并比对停机记录
 | |
|     #     stls = StLog.objects.filter(mroup=ins.mgroup)
 | |
|     #     stls_ = (stls.filter(start_time__gte=ins.start_time, start_time__lt=ins.end_time)|
 | |
|     #                 stls.exclude(end_time=None).filter(start_time__lte=ins.start_time, end_time__gt=ins.end_time)|
 | |
|     #                 stls.exclude(end_time=None).filter(end_time__gte=ins.start_time, end_time__lt=ins.end_time))
 | |
|     #     for i in stls_:
 | |
|     #        StSfLog.objects.get_or_create(stlog=i, sflog=ins, defaults={'stlog': i, 'sflog': ins})
 | |
|     #        stsflog = StSfLog.objects.filter(stlog=i).order_by('-sflog__start_time').first()
 | |
|     #        if stsflog:
 | |
|     #            stsflog.is_current_down = True
 | |
|     #            stsflog.save()
 | |
|     #     # 计算能耗
 | |
|     #     from apps.enm.tasks import cal_sflog_en_val
 | |
|     #     cal_sflog_en_val.delay(ins.id)
 | |
| 
 | |
|     @action(methods=['get'], detail=True, perms_map={'get': '*'})
 | |
|     def init_test(self, request, pk=None):
 | |
|         """
 | |
|         初始化检测录入
 | |
| 
 | |
|         初始化检测录入
 | |
|         """
 | |
|         from apps.qm.models import QuaStat, TestItem
 | |
|         from apps.qm.serializers import QuaStatSerializer
 | |
|         obj = self.get_object()
 | |
|         test_materials = Material.objects.filter(id__in=obj.mgroup.test_materials).order_by('sort', '-create_time')
 | |
|         for material in test_materials:
 | |
|             testitems = TestItem.objects.filter(id__in=material.testitems).order_by('sort', '-create_time')
 | |
|             for testitem in testitems:
 | |
|                 end_time_local = localtime(obj.end_time)
 | |
|                 params = {'type': 'sflog', 'material': material, 'testitem': testitem, 'sflog': obj}
 | |
|                 params_default = params.update({'year_s': end_time_local.year, 'month_s': end_time_local.month, 'day_s': end_time_local.day})
 | |
|                 ins, _ = QuaStat.objects.get_or_create(**params, defaults=params_default)
 | |
|                 if ins.create_by is None:
 | |
|                     ins.create_by = request.user
 | |
|                 ins.belong_dept = obj.mgroup.belong_dept
 | |
|                 ins.save()
 | |
|         qs = QuaStat.objects.filter(type='sflog', sflog=obj).order_by('material__sort', 'material__create_time', 'testitem__sort', 'testitem__create_time')
 | |
|         sr = QuaStatSerializer(instance=qs, many=True)
 | |
|         return Response(sr.data)
 | |
| 
 | |
| class StSfLogViewSet(ListModelMixin, UpdateModelMixin, CustomGenericViewSet):
 | |
|     """
 | |
|     list:值班停机关系
 | |
| 
 | |
|     值班停机关系
 | |
|     """
 | |
|     perms_map = {'get': '*', 'put': 'sflog.update'}
 | |
|     queryset = StSfLog.objects.all()
 | |
|     serializer_class = StSfLogSerializer
 | |
|     select_related_fields = ['stlog', 'sflog']
 | |
|     filterset_fields = ['stlog', 'sflog']
 | |
|     search_fields = ['reason']
 | |
| 
 | |
|     def filter_queryset(self, queryset):
 | |
|         params = self.request.query_params
 | |
|         if 'stlog' not in params or 'sflog' not in params:
 | |
|             raise ParseError('请指定所属停机或值班记录')
 | |
|         return super().filter_queryset(queryset) |