From 0ff9aa1e5a23aa9bdfed1a998e39750fc362fd38 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 28 Apr 2025 14:43:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=B8=AA=E5=8F=B7?= =?UTF-8?q?=E8=BD=AC=E6=89=B9=E5=8F=B7=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0057_process_number_to_batch.py | 18 +++++++++++++++++ apps/mtm/models.py | 2 ++ apps/wpm/views.py | 20 +++++++++---------- 3 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 apps/mtm/migrations/0057_process_number_to_batch.py diff --git a/apps/mtm/migrations/0057_process_number_to_batch.py b/apps/mtm/migrations/0057_process_number_to_batch.py new file mode 100644 index 00000000..fa8017f0 --- /dev/null +++ b/apps/mtm/migrations/0057_process_number_to_batch.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-04-28 06:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0056_mgroup_batch_append_code'), + ] + + operations = [ + migrations.AddField( + model_name='process', + name='number_to_batch', + field=models.BooleanField(default=False, verbose_name='个号转批号'), + ), + ] diff --git a/apps/mtm/models.py b/apps/mtm/models.py index c432a023..c1dde7f9 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -16,6 +16,7 @@ class Process(CommonBModel): PRO_NORMAL = 10 PRO_DIV = 20 PRO_MERGE = 30 + name = models.CharField('工序名称', max_length=100) type = models.PositiveSmallIntegerField("工序类型", default=PRO_PROD, choices=((PRO_PROD, '生产工序'), (PRO_TEST, '检验工序'))) mtype = models.PositiveSmallIntegerField("工序生产类型", default=PRO_NORMAL, choices=((PRO_NORMAL, '常规'), (PRO_DIV, '切分'), (PRO_MERGE, '合并'))) @@ -30,6 +31,7 @@ class Process(CommonBModel): mlog_need_ticket = models.BooleanField('日志提交是否需要审批', default=False) mstate_json = models.JSONField('中间状态', default=list, blank=True) parent = models.ForeignKey('self', verbose_name='父工序', on_delete=models.CASCADE, null=True, blank=True) + number_to_batch = models.BooleanField('个号转批号', default=False) class Meta: verbose_name = '工序' diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 2277e10e..bfb8f8ff 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -563,6 +563,7 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust mlogbin: Mlogb = serializer.save() mlog:Mlog = mlogbin.mlog route:Route = mlog.route + process: Process = route.process if route else None mtype = route.process.mtype if route else None is_fix = mlog.is_fix qct = mlog.qct @@ -614,18 +615,17 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust elif mtype == Process.PRO_DIV: # 切分 支持批到批,个到个, 个到批 div_number = route.div_number if material_in.tracking == Material.MA_TRACKING_SINGLE and material_out.tracking == Material.MA_TRACKING_BATCH: - if Mlogbw.objects.filter(mlogb=mlogbin).count() == 1: - mlogbwin = Mlogbw.objects.filter(mlogb=mlogbin).first() - mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=mlogbwin, mlogb_from=mlogbin, defaults=update_dict(m_dict,{"count_real": div_number, "count_ok": div_number})) + lenx = Mlogbw.objects.filter(mlogb=mlogbin).count() + # 用个号做批号是用于后续在复用个号可以追踪到原先的个 + for mlogbwin in Mlogbw.objects.filter(mlogb=mlogbin).order_by("number"): + if process and process.number_to_batch: + m_dict["batch"] = mlogbwin.number + mlogbout, _ = Mlogb.objects.get_or_create( + mlogbw_from=mlogbwin, defaults=update_dict(m_dict, {"count_real": div_number, "count_ok": div_number})) + if lenx == 1: + mlogbout.mlogb_from = mlogbin mlogbout.number_from = mlogbwin.number mlogbout.save(update_fields=["number_from"]) - else: - # 用个号做批号是用于后续在复用个号可以追踪到原先的个 - for mlogbwin in Mlogbw.objects.filter(mlogb=mlogbin).order_by("number"): - m_dict["batch"] = mlogbwin.number - mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=mlogbwin, defaults=update_dict(m_dict, {"count_real": div_number, "count_ok": div_number})) - mlogbout.number_from = mlogbwin.number - mlogbout.save(update_fields=["number_from"]) elif material_in.tracking == Material.MA_TRACKING_SINGLE and material_out.tracking == Material.MA_TRACKING_SINGLE: d_count_real = mlogbin.count_use * div_number d_count_ok = d_count_real