From fc2195eba1f2fe0fe1173cc8901a3657dc5a777e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 2 Sep 2024 15:29:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ftestwork=E5=A2=9E=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=9B=B4=E6=96=B0=E5=BA=93=E5=AD=98=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0023_ftestwork_need_update_wm.py | 18 +++ apps/qm/models.py | 1 + apps/qm/serializers.py | 2 +- apps/qm/services.py | 119 +++++++++--------- 4 files changed, 80 insertions(+), 60 deletions(-) create mode 100644 apps/qm/migrations/0023_ftestwork_need_update_wm.py diff --git a/apps/qm/migrations/0023_ftestwork_need_update_wm.py b/apps/qm/migrations/0023_ftestwork_need_update_wm.py new file mode 100644 index 00000000..db68613e --- /dev/null +++ b/apps/qm/migrations/0023_ftestwork_need_update_wm.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-09-02 07:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('qm', '0022_ftestwork_count_sampling_ok'), + ] + + operations = [ + migrations.AddField( + model_name='ftestwork', + name='need_update_wm', + field=models.BooleanField(default=True, verbose_name='是否更新车间库存'), + ), + ] diff --git a/apps/qm/models.py b/apps/qm/models.py index 53766f9f..3501ae2e 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -122,6 +122,7 @@ class FtestWork(CommonBDModel): count_sampling_ok = models.IntegerField('抽检合格数量', default=0) count_ok = models.IntegerField('合格数量', default=0) count_notok = models.IntegerField('不合格数量', default=0) + need_update_wm = models.BooleanField('是否更新车间库存', default=True) count_notok_json = models.JSONField('不合格项数量统计', default=dict, null=False, blank=True) test_user = models.ForeignKey( User, verbose_name='操作人', on_delete=models.CASCADE, related_name='ftestwork_test_user', null=True, blank=True) diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 47e1561b..b756b63b 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -63,7 +63,7 @@ class QuaStatUpdateSerializer(CustomModelSerializer): class FtestWorkCreateUpdateSerializer(CustomModelSerializer): class Meta: model = FtestWork - fields = ['id', 'wm', 'mb', 'type', 'type2', 'test_date', 'count', 'count_sampling', 'count_ok', 'count_notok', 'count_notok_json', 'test_user'] + fields = ['id', 'wm', 'mb', 'type', 'type2', 'test_date', 'count', 'count_sampling', 'count_ok', 'count_notok', 'count_notok_json', 'test_user', 'need_update_wm'] extra_kwargs = {'test_user': {'required': True}, 'type': {'required': True}} def validate(self, attrs): diff --git a/apps/qm/services.py b/apps/qm/services.py index 2a107090..e984855b 100644 --- a/apps/qm/services.py +++ b/apps/qm/services.py @@ -7,67 +7,68 @@ from django.utils import timezone def ftestwork_submit(ins:FtestWork, user: User): wm:WMaterial = ins.wm - if wm.state == WMaterial.WM_TEST: - # 更新对应的车间库存 - wm.count = wm.count - ins.count - if wm.count >= 0: - # 已检测的数量 - wm.count_xtest = wm.count_xtest + ins.count - wm.save() - else: - raise ParseError("超过待检数量") - # 生成合格的 - count_ok = ins.count_ok - if count_ok > 0: - wm, new_create = WMaterial.objects.get_or_create( - material=wm.material, - batch=wm.batch, - mgroup=wm.mgroup, - belong_dept=wm.belong_dept, - state=WMaterial.WM_OK, - defaults={ - 'count': count_ok, - 'material': wm.material, - 'batch': wm.batch, - 'mgroup': wm.mgroup, - 'belong_dept': wm.belong_dept, - } - ) - if not new_create: - wm.count = wm.count + count_ok + if ins.need_update_wm: + if wm.state == WMaterial.WM_TEST: + # 更新对应的车间库存 + wm.count = wm.count - ins.count + if wm.count >= 0: + # 已检测的数量 + wm.count_xtest = wm.count_xtest + ins.count wm.save() - else: - wm.count = wm.count - ins.count_notok - if wm.count >= 0: - wm.save() + else: + raise ParseError("超过待检数量") + # 生成合格的 + count_ok = ins.count_ok + if count_ok > 0: + wm, new_create = WMaterial.objects.get_or_create( + material=wm.material, + batch=wm.batch, + mgroup=wm.mgroup, + belong_dept=wm.belong_dept, + state=WMaterial.WM_OK, + defaults={ + 'count': count_ok, + 'material': wm.material, + 'batch': wm.batch, + 'mgroup': wm.mgroup, + 'belong_dept': wm.belong_dept, + } + ) + if not new_create: + wm.count = wm.count + count_ok + wm.save() else: - raise ParseError("不合格数不可大于批次数量") - - # 生成不合格的 - count_notok_json = ins.count_notok_json - for k, v in count_notok_json.items(): - if v > 0: - notok_sign = k.replace('count_n_', '') - wm_n, new_create = WMaterial.objects.get_or_create( - material=wm.material, - batch=wm.batch, - mgroup=wm.mgroup, - belong_dept=wm.belong_dept, - notok_sign=notok_sign, - state=WMaterial.WM_NOTOK, - defaults={ - 'count': v, - 'material': wm.material, - 'batch': wm.batch, - 'mgroup': wm.mgroup, - 'belong_dept': wm.belong_dept, - 'notok_sign': notok_sign, - 'state': WMaterial.WM_NOTOK, - } - ) - if not new_create: - wm_n.count = wm_n.count + v - wm_n.save() + wm.count = wm.count - ins.count_notok + if wm.count >= 0: + wm.save() + else: + raise ParseError("不合格数不可大于批次数量") + + # 生成不合格的 + count_notok_json = ins.count_notok_json + for k, v in count_notok_json.items(): + if v > 0: + notok_sign = k.replace('count_n_', '') + wm_n, new_create = WMaterial.objects.get_or_create( + material=wm.material, + batch=wm.batch, + mgroup=wm.mgroup, + belong_dept=wm.belong_dept, + notok_sign=notok_sign, + state=WMaterial.WM_NOTOK, + defaults={ + 'count': v, + 'material': wm.material, + 'batch': wm.batch, + 'mgroup': wm.mgroup, + 'belong_dept': wm.belong_dept, + 'notok_sign': notok_sign, + 'state': WMaterial.WM_NOTOK, + } + ) + if not new_create: + wm_n.count = wm_n.count + v + wm_n.save() ins.submit_user = user ins.submit_time = timezone.now() ins.save() \ No newline at end of file