From 549ef24c70cbaff777bd4ac97a21ab076bd44033 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 7 Aug 2024 09:46:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20qm=E6=B7=BB=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/qm/migrations/0016_auto_20240807_0945.py | 58 +++++++++++++++++++ apps/qm/models.py | 25 +++++--- apps/qm/serializers.py | 4 +- apps/qm/views.py | 1 + 4 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 apps/qm/migrations/0016_auto_20240807_0945.py diff --git a/apps/qm/migrations/0016_auto_20240807_0945.py b/apps/qm/migrations/0016_auto_20240807_0945.py new file mode 100644 index 00000000..d5511a71 --- /dev/null +++ b/apps/qm/migrations/0016_auto_20240807_0945.py @@ -0,0 +1,58 @@ +# Generated by Django 3.2.12 on 2024-08-07 01:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('qm', '0015_ftestwork_count_ok'), + ] + + operations = [ + migrations.AddField( + model_name='ftestitem', + name='check_val_json', + field=models.JSONField(blank=True, null=True, verbose_name='专检测量值'), + ), + migrations.AddField( + model_name='ftestitem', + name='test_val_json', + field=models.JSONField(blank=True, null=True, verbose_name='测量值'), + ), + migrations.AddField( + model_name='ftestwork', + name='count_notok', + field=models.IntegerField(default=0, verbose_name='不合格数量'), + ), + migrations.AddField( + model_name='ftestwork', + name='type', + field=models.CharField(choices=[('first', '首件检验'), ('prod', '成品检验')], default='prod', max_length=20, verbose_name='检验类型'), + ), + migrations.AddField( + model_name='testitem', + name='choices', + field=models.JSONField(blank=True, default=list, verbose_name='选项'), + ), + migrations.AddField( + model_name='testitem', + name='field_type', + field=models.CharField(choices=[('input-number', '数字输入'), ('input-text', '文本输入'), ('select', '单选'), ('selects', '多选')], default='float', max_length=20, verbose_name='字段类型'), + ), + migrations.AddField( + model_name='testitem', + name='mcate_tags', + field=models.JSONField(blank=True, default=list, verbose_name='物料系列标签'), + ), + migrations.AlterField( + model_name='ftestitem', + name='test_val', + field=models.FloatField(blank=True, null=True, verbose_name='测量值'), + ), + migrations.AlterField( + model_name='testitem', + name='tags', + field=models.JSONField(blank=True, default=list, verbose_name='检测类型'), + ), + ] diff --git a/apps/qm/models.py b/apps/qm/models.py index c6f46280..52b77836 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -41,21 +41,28 @@ class NotOkOption(models.TextChoices): wz = "wz", _("未知") +FTEST_TYPE_CHOICES = ( + ('first', '首件检验'), + ('prod', '成品检验') +) class TestItem(CommonAModel): """ - 检验项目 + 检测项目 """ name = models.CharField('名称', max_length=100) + field_type = models.CharField('字段类型', max_length=20, default='float', choices=( + ('input-number', '数字输入'), ('input-text', '文本输入'), ('select', '单选'), ('selects', '多选') + )) number = models.CharField('编号', max_length=20, default='', blank=True) - tags = models.JSONField('标签', default=list, blank=True) + choices = models.JSONField('选项', default=list, blank=True) + tags = models.JSONField('检测类型', default=list, blank=True) + mcate_tags = models.JSONField('物料系列标签', default=list, blank=True) sort = models.PositiveSmallIntegerField('排序', default=1) description = models.TextField('描述', default='') class Meta: ordering = ['sort', '-create_time'] -# Create your models here. - class QuaStat(CommonBDModel): """ @@ -77,6 +84,7 @@ class FtestWork(CommonBDModel): """ 检验工作 """ + type = models.CharField('检验类型', max_length=20, choices=FTEST_TYPE_CHOICES, default='prod') test_date = models.DateField('检验日期') material = models.ForeignKey( Material, verbose_name='产品', on_delete=models.CASCADE) @@ -84,16 +92,13 @@ class FtestWork(CommonBDModel): count = models.IntegerField('总数量') count_sampling = models.IntegerField('抽检数量', default=0) count_ok = models.IntegerField('合格数量', default=0) + count_notok = models.IntegerField('不合格数量', default=0) class Ftest(CommonBDModel): """ 检验记录 """ - FTEST_TYPE_CHOICES = ( - ('first', '首件检验'), - ('prod', '成品检验') - ) type = models.CharField('检验类型', max_length=20, choices=FTEST_TYPE_CHOICES) test_date = models.DateField('检验日期') test_numer = models.CharField('检测编号', max_length=20, default='') @@ -121,8 +126,10 @@ class FtestItem(BaseModel): Ftest, verbose_name='关联检验', on_delete=models.CASCADE) testitem = models.ForeignKey( TestItem, verbose_name='质检项目', on_delete=models.CASCADE) - test_val = models.FloatField('测量值', default=0, blank=True) + test_val = models.FloatField('测量值', null=True, blank=True) check_val = models.FloatField('专检测量值', null=True, blank=True) + test_val_json = models.JSONField('测量值', null=True, blank=True) + check_val_json = models.JSONField('专检测量值', null=True, blank=True) class Ptest(CommonAModel): diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 0c0446b7..f173d952 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -97,9 +97,9 @@ class FtestSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS def validate(self, attrs): - ftest_work = attrs.get('ftest_work', None) + ftest_work: FtestWork = attrs.get('ftest_work', None) if ftest_work: - attrs['type'] = 'prod' # 带检验工作的标记为成品检验 + attrs['type'] = ftest_work.type return attrs def create(self, validated_data): diff --git a/apps/qm/views.py b/apps/qm/views.py index c4427212..7bddbcc5 100644 --- a/apps/qm/views.py +++ b/apps/qm/views.py @@ -39,6 +39,7 @@ class TestItemViewSet(CustomModelViewSet): queryset = TestItem.objects.all() serializer_class = TestItemSerializer filterset_class = TestItemFilter + search_fields = ['tags', 'name', 'number'] ordering = ['id']