feat: qct get_qs接口
This commit is contained in:
parent
3a1ed151c7
commit
767896f3dc
|
@ -151,7 +151,7 @@ QC_TRACE_CHOICES = (
|
|||
class Qct(CommonAModel):
|
||||
name = models.CharField(max_length=50, verbose_name="名称")
|
||||
number = models.CharField(max_length=20, verbose_name="编号")
|
||||
tags = models.JSONField('检测类型', default=list, blank=True) # process 和 inm
|
||||
tags = models.JSONField('检测类型', default=list, blank=True) # process/inm/default
|
||||
testitems = models.ManyToManyField(TestItem, verbose_name="检测项", blank=True, through='qm.qcttestitem')
|
||||
defects = models.ManyToManyField(Defect, verbose_name="缺陷项", blank=True, through='qm.qctdefect')
|
||||
materials = models.ManyToManyField(Material, verbose_name="物料", blank=True, through='qm.qctmat')
|
||||
|
@ -169,14 +169,26 @@ class Qct(CommonAModel):
|
|||
return QctMat.objects.filter(qct=self)
|
||||
|
||||
@classmethod
|
||||
def get(self, material:Material, cate:str):
|
||||
def get(cls, material:Material, tag:str):
|
||||
try:
|
||||
qctmat = QctMat.objects.get(material=material, qct__is_deleted=False, qct__tags__contains=cate)
|
||||
except QctMat.DoesNotExist:
|
||||
qctmat = None
|
||||
except QctMat.MultipleObjectsReturned:
|
||||
qct = Qct.objects.filter(qctmat__material=material, tags__contains=tag)
|
||||
except Qct.DoesNotExist:
|
||||
try:
|
||||
qct = Qct.objects.get(tags__contains="default")
|
||||
except Qct.DoesNotExist:
|
||||
qct = None
|
||||
except Qct.MultipleObjectsReturned:
|
||||
raise ParseError("存在多个通用质检表,请手动选择")
|
||||
except Qct.MultipleObjectsReturned:
|
||||
raise ParseError("存在多个质检表,请手动选择")
|
||||
return qctmat.qct if qctmat else None
|
||||
return qct
|
||||
|
||||
@classmethod
|
||||
def get_qs(cls, materialId:str, tag:str):
|
||||
qct_qs = Qct.objects.filter(qctmat__material__id=materialId, tags__contains=tag)
|
||||
if not qct_qs.exists():
|
||||
qct_qs = Qct.objects.filter(tags__contains="default")
|
||||
return qct_qs
|
||||
|
||||
class QctTestItem(BaseModel):
|
||||
qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qcttestitem")
|
||||
|
|
|
@ -25,6 +25,9 @@ class DefectSerializer(CustomModelSerializer):
|
|||
# def update(self, instance, validated_data):
|
||||
# validated_data.pop("code", None)
|
||||
# return super().update(instance, validated_data)
|
||||
class QctGetSerializer(CustomModelSerializer):
|
||||
material = serializers.CharField(label="物料ID")
|
||||
tag = serializers.CharField(label="标签")
|
||||
|
||||
class TestItemSerializer(CustomModelSerializer):
|
||||
process_name = serializers.CharField(source="process.name", read_only=True)
|
||||
|
|
|
@ -7,7 +7,7 @@ from apps.qm.models import QuaStat, NotOkOption, Ftest, Ptest, FtestWork, FtestI
|
|||
from apps.qm.models import TestItem, Defect, Qct, QctTestItem, QctMat, QctDefect
|
||||
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
|
||||
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
|
||||
QctDetailSerializer, UpdateRatePassTSerializer
|
||||
QctDetailSerializer, UpdateRatePassTSerializer, QctGetSerializer
|
||||
from apps.qm.tasks import cal_quastat_sflog
|
||||
from rest_framework.response import Response
|
||||
from apps.utils.mixins import BulkUpdateModelMixin
|
||||
|
@ -46,6 +46,14 @@ class QctViewSet(CustomModelViewSet):
|
|||
filterset_class = QctFilter
|
||||
search_fields = ["name", "number"]
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=QctGetSerializer)
|
||||
@transaction.atomic
|
||||
def get_qs(self, request, *args, **kwargs):
|
||||
data = request.data
|
||||
qct_qs = Qct.get_qs(data["material"], data["tag"])
|
||||
return QctSerializer(instance=qct_qs, many=True).data
|
||||
|
||||
|
||||
class QctTestItemViewSet(CustomModelViewSet):
|
||||
"""检测模板项
|
||||
|
||||
|
|
Loading…
Reference in New Issue