88 lines
3.2 KiB
Python
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) |