feat: 增加addto_wpr字段配置以在wpr表里添加额外信息

This commit is contained in:
caoqianming 2025-01-22 13:51:03 +08:00
parent 3e93fce213
commit f88689cc1e
5 changed files with 55 additions and 3 deletions

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2025-01-22 05:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('qm', '0040_quastat_rate_pass_t'),
]
operations = [
migrations.AddField(
model_name='ftestitem',
name='addto_wpr',
field=models.BooleanField(default=False, verbose_name='加入WPR作为信息'),
),
migrations.AddField(
model_name='qcttestitem',
name='addto_wpr',
field=models.BooleanField(default=False, verbose_name='加入WPR作为信息'),
),
]

View File

@ -170,6 +170,7 @@ class Qct(CommonAModel):
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")
testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True) testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True)
addto_wpr = models.BooleanField('加入WPR作为信息', default=False)
note = models.TextField('备注', null=True, blank=True) note = models.TextField('备注', null=True, blank=True)
sort = models.FloatField('排序', default=1) sort = models.FloatField('排序', default=1)
@ -315,6 +316,7 @@ class FtestItem(BaseModel):
TestItem, verbose_name='质检项目', on_delete=models.CASCADE) TestItem, verbose_name='质检项目', on_delete=models.CASCADE)
test_user = models.ForeignKey(User, verbose_name='操作人', on_delete=models.CASCADE, null=True, blank=True) test_user = models.ForeignKey(User, verbose_name='操作人', on_delete=models.CASCADE, null=True, blank=True)
test_val = models.FloatField('测量值', null=True, blank=True) test_val = models.FloatField('测量值', null=True, blank=True)
addto_wpr = models.BooleanField('加入WPR作为信息', default=False)
check_val = models.FloatField('专检测量值', null=True, blank=True) check_val = models.FloatField('专检测量值', null=True, blank=True)
test_val_json = models.JSONField('测量值', null=True, blank=True) test_val_json = models.JSONField('测量值', null=True, blank=True)
check_val_json = models.JSONField('专检测量值', null=True, blank=True) check_val_json = models.JSONField('专检测量值', null=True, blank=True)

View File

@ -306,7 +306,7 @@ class FtestItemProcessSerializer(CustomModelSerializer):
source='testitem.description', read_only=True) source='testitem.description', read_only=True)
class Meta: class Meta:
model = FtestItem model = FtestItem
fields = ["id", "testitem", "test_user", "test_val_json", "testitem_name", "testitem_description"] fields = ["id", "testitem", "test_user", "test_val_json", "testitem_name", "testitem_description", "addto_wpr"]
class FtestProcessSerializer(CustomModelSerializer): class FtestProcessSerializer(CustomModelSerializer):
test_user_name = serializers.CharField( test_user_name = serializers.CharField(

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2025-01-22 05:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wpmw', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='wpr',
name='oinfo',
field=models.JSONField(blank=True, default=dict, verbose_name='其他信息'),
),
]

View File

@ -1,6 +1,6 @@
from django.db import models from django.db import models
from apps.qm.models import FtestDefect from apps.qm.models import FtestDefect, FtestItem
from apps.utils.models import BaseModel from apps.utils.models import BaseModel
from apps.mtm.models import Material from apps.mtm.models import Material
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
@ -19,6 +19,7 @@ class Wpr(BaseModel):
mb = models.ForeignKey("inm.materialbatch", verbose_name="仓库物料", on_delete=models.CASCADE, null=True, blank=True) mb = models.ForeignKey("inm.materialbatch", verbose_name="仓库物料", on_delete=models.CASCADE, null=True, blank=True)
wm = models.ForeignKey("wpm.wmaterial", verbose_name="车间物料", on_delete=models.CASCADE, null=True, blank=True) wm = models.ForeignKey("wpm.wmaterial", verbose_name="车间物料", on_delete=models.CASCADE, null=True, blank=True)
oinfo = models.JSONField(verbose_name="其他信息", default=dict, blank=True)
@classmethod @classmethod
def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None): def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None):
@ -57,10 +58,18 @@ class Wpr(BaseModel):
if wm.defect: if wm.defect:
WprDefect.objects.create(wpr=ins, defect=wm.defect, is_main=True) WprDefect.objects.create(wpr=ins, defect=wm.defect, is_main=True)
ins.save() ins.save()
if ftest: # 通过检验变更其缺陷项 if ftest:
# 通过检验变更其缺陷项
WprDefect.objects.filter(wpr=ins).delete() WprDefect.objects.filter(wpr=ins).delete()
for ftestdefect in FtestDefect.objects.filter(ftest=ftest, has=True): for ftestdefect in FtestDefect.objects.filter(ftest=ftest, has=True):
WprDefect.objects.create(wpr=ins, defect=ftestdefect.defect, is_main=ftestdefect.is_main) WprDefect.objects.create(wpr=ins, defect=ftestdefect.defect, is_main=ftestdefect.is_main)
# 携带某些检测信息
oinfo = {}
for ftestitem in FtestItem.objects.filter(ftest=ftest, addto_wpr=True):
if ftestitem.test_val_json:
oinfo[ftestitem.id] = {"name": ftestitem.testitem.name, "val": ftestitem.test_val_json}
ins.oinfo = ins.oinfo.update(oinfo) if ins.oinfo else oinfo
ins.save()
return ins return ins
@classmethod @classmethod