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

View File

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

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