feat: qct get_qs接口

This commit is contained in:
caoqianming 2025-03-06 15:26:11 +08:00
parent 3a1ed151c7
commit 767896f3dc
3 changed files with 31 additions and 8 deletions

View File

@ -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")

View File

@ -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)

View File

@ -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):
"""检测模板项