feat: qct get_qs接口
This commit is contained in:
parent
3a1ed151c7
commit
767896f3dc
|
@ -151,7 +151,7 @@ QC_TRACE_CHOICES = (
|
||||||
class Qct(CommonAModel):
|
class Qct(CommonAModel):
|
||||||
name = models.CharField(max_length=50, verbose_name="名称")
|
name = models.CharField(max_length=50, verbose_name="名称")
|
||||||
number = models.CharField(max_length=20, 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')
|
testitems = models.ManyToManyField(TestItem, verbose_name="检测项", blank=True, through='qm.qcttestitem')
|
||||||
defects = models.ManyToManyField(Defect, verbose_name="缺陷项", blank=True, through='qm.qctdefect')
|
defects = models.ManyToManyField(Defect, verbose_name="缺陷项", blank=True, through='qm.qctdefect')
|
||||||
materials = models.ManyToManyField(Material, verbose_name="物料", blank=True, through='qm.qctmat')
|
materials = models.ManyToManyField(Material, verbose_name="物料", blank=True, through='qm.qctmat')
|
||||||
|
@ -169,14 +169,26 @@ class Qct(CommonAModel):
|
||||||
return QctMat.objects.filter(qct=self)
|
return QctMat.objects.filter(qct=self)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(self, material:Material, cate:str):
|
def get(cls, material:Material, tag:str):
|
||||||
try:
|
try:
|
||||||
qctmat = QctMat.objects.get(material=material, qct__is_deleted=False, qct__tags__contains=cate)
|
qct = Qct.objects.filter(qctmat__material=material, tags__contains=tag)
|
||||||
except QctMat.DoesNotExist:
|
except Qct.DoesNotExist:
|
||||||
qctmat = None
|
try:
|
||||||
except QctMat.MultipleObjectsReturned:
|
qct = Qct.objects.get(tags__contains="default")
|
||||||
|
except Qct.DoesNotExist:
|
||||||
|
qct = None
|
||||||
|
except Qct.MultipleObjectsReturned:
|
||||||
|
raise ParseError("存在多个通用质检表,请手动选择")
|
||||||
|
except Qct.MultipleObjectsReturned:
|
||||||
raise ParseError("存在多个质检表,请手动选择")
|
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):
|
class QctTestItem(BaseModel):
|
||||||
qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qcttestitem")
|
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):
|
# def update(self, instance, validated_data):
|
||||||
# validated_data.pop("code", None)
|
# validated_data.pop("code", None)
|
||||||
# return super().update(instance, validated_data)
|
# return super().update(instance, validated_data)
|
||||||
|
class QctGetSerializer(CustomModelSerializer):
|
||||||
|
material = serializers.CharField(label="物料ID")
|
||||||
|
tag = serializers.CharField(label="标签")
|
||||||
|
|
||||||
class TestItemSerializer(CustomModelSerializer):
|
class TestItemSerializer(CustomModelSerializer):
|
||||||
process_name = serializers.CharField(source="process.name", read_only=True)
|
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.models import TestItem, Defect, Qct, QctTestItem, QctMat, QctDefect
|
||||||
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
|
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
|
||||||
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
|
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
|
||||||
QctDetailSerializer, UpdateRatePassTSerializer
|
QctDetailSerializer, UpdateRatePassTSerializer, QctGetSerializer
|
||||||
from apps.qm.tasks import cal_quastat_sflog
|
from apps.qm.tasks import cal_quastat_sflog
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from apps.utils.mixins import BulkUpdateModelMixin
|
from apps.utils.mixins import BulkUpdateModelMixin
|
||||||
|
@ -46,6 +46,14 @@ class QctViewSet(CustomModelViewSet):
|
||||||
filterset_class = QctFilter
|
filterset_class = QctFilter
|
||||||
search_fields = ["name", "number"]
|
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):
|
class QctTestItemViewSet(CustomModelViewSet):
|
||||||
"""检测模板项
|
"""检测模板项
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue