feat: qct 重构
This commit is contained in:
parent
796cdbc615
commit
b289c7813e
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2024-12-19 02:34
|
||||
# Generated by Django 3.2.12 on 2024-12-19 07:09
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -31,6 +31,22 @@ class Migration(migrations.Migration):
|
|||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='QctTestItem',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('sort', models.FloatField(default=1, verbose_name='排序')),
|
||||
('qct', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.qct', verbose_name='质检模板')),
|
||||
('testitem', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='qm.testitem', verbose_name='检测项')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='QctMat',
|
||||
fields=[
|
||||
|
@ -47,18 +63,17 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='QctItem',
|
||||
name='QctDefect',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('rule_expression', models.TextField(blank=True, null=True, verbose_name='判定表达式')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('sort', models.FloatField(default=1, verbose_name='排序')),
|
||||
('defect', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='qm.defect', verbose_name='缺陷项')),
|
||||
('defect', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.defect', verbose_name='缺陷项')),
|
||||
('qct', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.qct', verbose_name='质检模板')),
|
||||
('testitem', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='qm.testitem', verbose_name='检测项')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -67,7 +82,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='qct',
|
||||
name='defects',
|
||||
field=models.ManyToManyField(blank=True, through='qm.QctItem', to='qm.Defect', verbose_name='缺陷项'),
|
||||
field=models.ManyToManyField(blank=True, through='qm.QctDefect', to='qm.Defect', verbose_name='缺陷项'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='qct',
|
||||
|
@ -77,7 +92,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='qct',
|
||||
name='testitems',
|
||||
field=models.ManyToManyField(blank=True, through='qm.QctItem', to='qm.TestItem', verbose_name='检测项'),
|
||||
field=models.ManyToManyField(blank=True, through='qm.QctTestItem', to='qm.TestItem', verbose_name='检测项'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='qct',
|
|
@ -138,16 +138,21 @@ 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)
|
||||
testitems = models.ManyToManyField(TestItem, verbose_name="检测项", blank=True, through='qm.qctItem')
|
||||
defects = models.ManyToManyField(Defect, verbose_name="缺陷项", blank=True, through='qm.qctItem')
|
||||
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')
|
||||
|
||||
class QctItem(BaseModel):
|
||||
class QctTestItem(BaseModel):
|
||||
qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE)
|
||||
testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
sort = models.FloatField('排序', default=1)
|
||||
|
||||
class QctDefect(BaseModel):
|
||||
qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE)
|
||||
defect = models.ForeignKey(Defect, verbose_name="缺陷项", on_delete=models.CASCADE)
|
||||
rule_expression = models.TextField('判定表达式', null=True, blank=True)
|
||||
defect = models.ForeignKey(Defect, verbose_name="缺陷项", on_delete=models.CASCADE, null=True, blank=True)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
sort = models.FloatField('排序', default=1)
|
||||
|
||||
class QctMat(BaseModel):
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from apps.qm.models import (QuaStat, TestItem, Ftest, FtestItem, FtestWork, Ptest,
|
||||
NotOkOption, Defect, Qct, QctItem, QctMat)
|
||||
NotOkOption, Defect, Qct, QctTestItem, QctMat, QctDefect)
|
||||
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
from rest_framework import serializers
|
||||
|
@ -36,11 +36,16 @@ class QctSerializer(CustomModelSerializer):
|
|||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
class QctItemSerializer(CustomModelSerializer):
|
||||
defect_name = serializers.StringRelatedField(source='defect', read_only=True)
|
||||
class QctTestItemSerializer(CustomModelSerializer):
|
||||
testitem_name = serializers.CharField(source='testitem.name', read_only=True)
|
||||
class Meta:
|
||||
model = QctItem
|
||||
model = QctTestItem
|
||||
fields = '__all__'
|
||||
|
||||
class QctDefectSerializer(CustomModelSerializer):
|
||||
defect_name = serializers.CharField(source='defect.name', read_only=True)
|
||||
class Meta:
|
||||
model = QctDefect
|
||||
fields = '__all__'
|
||||
|
||||
class QctMatSerializer(CustomModelSerializer):
|
||||
|
@ -50,7 +55,8 @@ class QctMatSerializer(CustomModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
class QctDetailSerializer(CustomModelSerializer):
|
||||
testitems_ = QctItemSerializer(source="testitems", many=True, read_only=True)
|
||||
testitems_ = QctTestItemSerializer(source="testitems", many=True, read_only=True)
|
||||
defects_ = QctDefectSerializer(source="defects", many=True, read_only=True)
|
||||
defects_ = DefectSerializer(source="defects", many=True, read_only=True)
|
||||
class Meta:
|
||||
model = Qct
|
||||
|
|
|
@ -3,7 +3,7 @@ from rest_framework.routers import DefaultRouter
|
|||
|
||||
from apps.qm.views import (QuaStatViewSet, TestItemViewSet,
|
||||
FtestWorkViewSet, FtestViewSet, PtestViewSet,
|
||||
NotOkOptionView, DefectViewSet, QctViewSet, QctItemViewSet, QctMatViewSet)
|
||||
NotOkOptionView, DefectViewSet, QctViewSet, QctTestItemViewSet, QctDefectViewSet, QctMatViewSet)
|
||||
|
||||
API_BASE_URL = 'api/qm/'
|
||||
HTML_BASE_URL = 'qm/'
|
||||
|
@ -16,7 +16,8 @@ router.register('ftestwork', FtestWorkViewSet, basename='ftestwork')
|
|||
router.register('ptest', PtestViewSet, basename='ptest')
|
||||
router.register("defect", DefectViewSet, basename="defect")
|
||||
router.register('qct', QctViewSet, basename='qct')
|
||||
router.register('qctitem', QctItemViewSet, basename='qctitem')
|
||||
router.register('qcttestitem', QctTestItemViewSet, basename='qcttestitem')
|
||||
router.register('qctdefect', QctDefectViewSet, basename="qctdefect")
|
||||
router.register('qctmat', QctMatViewSet, basename='qctmat')
|
||||
urlpatterns = [
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
|
|
|
@ -5,7 +5,7 @@ from rest_framework.views import APIView
|
|||
from rest_framework.serializers import Serializer
|
||||
from apps.qm.models import QuaStat, TestItem, Ftest, Ptest, FtestWork
|
||||
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
|
||||
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctItemSerializer, QctMatSerializer, \
|
||||
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
|
||||
QctDetailSerializer
|
||||
from apps.qm.tasks import cal_quastat_sflog
|
||||
from rest_framework.response import Response
|
||||
|
@ -16,7 +16,7 @@ from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
|||
from apps.wpm.models import SfLog
|
||||
from apps.qm.filters import QuaStatFilter, TestItemFilter, FtestWorkFilter, QctFilter
|
||||
from django.db import transaction
|
||||
from apps.qm.models import NotOkOption, Defect, Qct, QctItem, QctMat
|
||||
from apps.qm.models import NotOkOption, Defect, Qct, QctTestItem, QctMat, QctDefect
|
||||
from apps.qm.services import ftestwork_submit
|
||||
from apps.utils.thread import MyThread
|
||||
from apps.wpm.services_2 import get_alldata_with_batch_and_store
|
||||
|
@ -25,7 +25,7 @@ from apps.wf.models import State
|
|||
|
||||
class DefectViewSet(CustomModelViewSet):
|
||||
"""
|
||||
list: 缺陷项
|
||||
缺陷项
|
||||
|
||||
缺陷项
|
||||
"""
|
||||
|
@ -36,7 +36,7 @@ class DefectViewSet(CustomModelViewSet):
|
|||
|
||||
class QctViewSet(CustomModelViewSet):
|
||||
"""
|
||||
list: 检测模板
|
||||
检测模板
|
||||
|
||||
检测模板
|
||||
"""
|
||||
|
@ -46,15 +46,26 @@ class QctViewSet(CustomModelViewSet):
|
|||
filterset_class = QctFilter
|
||||
search_fields = ["name", "number"]
|
||||
|
||||
class QctItemViewSet(CustomModelViewSet):
|
||||
class QctTestItemViewSet(CustomModelViewSet):
|
||||
"""检测模板项
|
||||
|
||||
检测模板项
|
||||
"""
|
||||
perms_map = {"get": "*", "post": "qct.update", "put": "qct.update", "delete": "qct.update"}
|
||||
queryset = QctItem.objects.all()
|
||||
serializer_class = QctItemSerializer
|
||||
filterset_fields = ["qct", "testitem", "defect"]
|
||||
queryset = QctTestItem.objects.all()
|
||||
serializer_class = QctTestItemSerializer
|
||||
filterset_fields = ["qct", "testitem"]
|
||||
ordering = ["qct", "sort"]
|
||||
|
||||
class QctDefectViewSet(CustomModelViewSet):
|
||||
"""检测缺陷项
|
||||
|
||||
检测缺陷项
|
||||
"""
|
||||
perms_map = {"get": "*", "post": "qct.update", "put": "qct.update", "delete": "qct.update"}
|
||||
queryset = QctDefect.objects.all()
|
||||
serializer_class = QctDefectSerializer
|
||||
filterset_fields = ["qct", "defect"]
|
||||
ordering = ["qct", "sort"]
|
||||
|
||||
class QctMatViewSet(CustomModelViewSet):
|
||||
|
|
Loading…
Reference in New Issue