factory/apps/wpm/views.py

88 lines
3.2 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 apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.wpm.models import SfLog, StLog, StSfLog
from apps.wpm.serializers import SfLogQuaSerializer, SfLogSerializer, StLogSerializer, StSfLogSerializer
# Create your views here.
class StLogViewSet(ListModelMixin, CustomGenericViewSet):
"""
list:停机记录
停机记录
"""
queryset = StLog.objects.all()
serializer_class = StLogSerializer
select_related_fields = ['mgroup']
filterset_fields = ['mgroup']
ordering = ['-start_time']
class SfLogViewSet(CustomModelViewSet):
"""
list:值班记录
值班记录
"""
queryset = SfLog.objects.all()
serializer_class = SfLogSerializer
select_related_fields = ['mgroup', 'shift', 'team', 'leader']
filterset_fields = ['mgroup', 'shift', 'team', 'leader', 'team__belong_dept']
search_fields = ['note']
@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()
@action(methods=['put'], detail=True, perms_map={'put': 'sflogqua.update'}, serializer_class=SfLogQuaSerializer)
def qua_data(self, request, pk=None):
"""
质量数据录入
质量数据录入
"""
sflog = self.get_object()
sr = SfLogQuaSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
qua_data = vdata['qua_data']
qua_data_new = []
for i in qua_data:
qua_data_new.append({'qitem': i['qitem'].id, 'qitem_name': i['qitem'].name, 'val': i['val']})
sflog.qua_data = qua_data_new
sflog.save()
return Response()
class StSfLogViewSet(ListModelMixin, UpdateModelMixin, CustomGenericViewSet):
"""
list:值班停机关系
值班停机关系
"""
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)