127 lines
4.0 KiB
Python
127 lines
4.0 KiB
Python
from django.shortcuts import render
|
|
from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin
|
|
from rest_framework.decorators import action
|
|
from rest_framework.views import APIView
|
|
from apps.qm.models import QuaStat, TestItem, Ftest, Ptest, FtestWork
|
|
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
|
|
FtestWorkCreateUpdateSerializer, FtestWorkSerializer
|
|
from apps.qm.tasks import cal_quastat_sflog
|
|
from rest_framework.response import Response
|
|
from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin
|
|
import datetime
|
|
|
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
|
from apps.wpm.models import SfLog
|
|
from apps.qm.filters import QuaStatFilter, TestItemFilter
|
|
from django.db import transaction
|
|
from apps.qm.models import NotOkOption
|
|
# Create your views here.
|
|
|
|
class NotOkOptionView(APIView):
|
|
perms_map = {'get': '*'}
|
|
|
|
def get(self, request):
|
|
"""
|
|
获取不合格项
|
|
|
|
获取不合格项
|
|
"""
|
|
res1 = [{'value': i.value, 'label': i.label} for i in NotOkOption]
|
|
res2 = {i.value: i.label for i in NotOkOption}
|
|
return Response({"res_list": res1, "res_dict": res2})
|
|
|
|
class TestItemViewSet(CustomModelViewSet):
|
|
"""
|
|
list:质检项目
|
|
|
|
质检项目
|
|
"""
|
|
queryset = TestItem.objects.all()
|
|
serializer_class = TestItemSerializer
|
|
filterset_class = TestItemFilter
|
|
search_fields = ['tags', 'name', 'number', 'mcate_tags']
|
|
ordering = ['id']
|
|
|
|
|
|
class QuaStatViewSet(ListModelMixin, BulkUpdateModelMixin, CustomGenericViewSet):
|
|
"""
|
|
list:质量数据统计
|
|
|
|
质量数据统计
|
|
"""
|
|
perms_map = {'get': '*', 'put': 'quastat.update'}
|
|
queryset = QuaStat.objects.all()
|
|
serializer_class = QuaStatSerializer
|
|
update_serializer_class = QuaStatUpdateSerializer
|
|
filterset_class = QuaStatFilter
|
|
select_related_fields = ['belong_dept', 'material', 'testitem']
|
|
ordering = ['belong_dept__sort', 'material__sort', 'testitem__sort']
|
|
|
|
def after_bulk_update(self, objs):
|
|
now = datetime.datetime.now()
|
|
sflogIds = []
|
|
for i in objs:
|
|
sflogIds.append(i['sflog'])
|
|
sflogIds = list(set(sflogIds))
|
|
SfLog.objects.filter(id__in=sflogIds).update(
|
|
last_test_time=now) # 更新质检记录时间
|
|
for sflogId in sflogIds:
|
|
cal_quastat_sflog.delay(sflogId)
|
|
|
|
|
|
class FtestViewSet(CustomModelViewSet):
|
|
"""
|
|
list:首件/成品检验
|
|
|
|
首件/成品检验
|
|
"""
|
|
queryset = Ftest.objects.all()
|
|
serializer_class = FtestSerializer
|
|
select_related_fields = ['test_user', 'check_user', 'ftest_work']
|
|
filterset_fields = ['type', 'ftest_work']
|
|
|
|
@transaction.atomic
|
|
def perform_create(self, serializer):
|
|
ins = serializer.save()
|
|
if ins.ftest_work:
|
|
ins.ftest_work.count_sampling = Ftest.objects.filter(
|
|
ftest_work=ins.ftest_work).count()
|
|
ins.ftest_work.save()
|
|
return ins
|
|
|
|
@transaction.atomic
|
|
def perform_destroy(self, instance):
|
|
ftest_work = instance.ftest_work
|
|
instance.delete()
|
|
if ftest_work:
|
|
instance.ftest_work.count_sampling = Ftest.objects.filter(
|
|
ftest_work=instance.ftest_work).count()
|
|
instance.ftest_work.save()
|
|
|
|
|
|
class PtestViewSet(CustomModelViewSet):
|
|
"""
|
|
list:性能测试
|
|
|
|
性能测试
|
|
"""
|
|
queryset = Ptest.objects.all()
|
|
serializer_class = PtestSerializer
|
|
select_related_fields = ['testitem']
|
|
filterset_fields = ['testitem', 'test_date', 'sample_number']
|
|
search_fields = ['testitem__name', 'sample_number']
|
|
|
|
|
|
class FtestWorkViewSet(CustomModelViewSet):
|
|
"""
|
|
list: 检验工作
|
|
|
|
检验工作
|
|
"""
|
|
queryset = FtestWork.objects.all()
|
|
serializer_class = FtestWorkSerializer
|
|
create_serializer_class = FtestWorkCreateUpdateSerializer
|
|
update_serializer_class = FtestWorkCreateUpdateSerializer
|
|
select_related_fields = ['material']
|
|
filterset_fields = ['material', 'batch']
|