feat: 支持个号转批号的配置

This commit is contained in:
caoqianming 2025-04-28 14:43:22 +08:00
parent c5a7a19f74
commit 0ff9aa1e5a
3 changed files with 30 additions and 10 deletions

View File

@ -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='个号转批号'),
),
]

View File

@ -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 = '工序'

View File

@ -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