feat: mlogbw支持批量创建

This commit is contained in:
caoqianming 2025-04-27 14:12:37 +08:00
parent 8a83f8b7d8
commit cd0045c561
1 changed files with 42 additions and 37 deletions

View File

@ -711,43 +711,48 @@ class MlogbwViewSet(CustomModelViewSet):
@transaction.atomic @transaction.atomic
def perform_create(self, serializer): def perform_create(self, serializer):
ins:Mlogbw = serializer.save() ins:Mlogbw = serializer.save()
route:Route = ins.mlogb.mlog.route if isinstance(ins, list):
mlogb:Mlogb = ins.mlogb insx = ins
Mlogbw.cal_count_notok(mlogb) else:
# 如果是输入且输出追踪到个,需同步创建 insx = [ins]
material_in:Material = mlogb.material_in for ins in insx:
if material_in is not None: route:Route = ins.mlogb.mlog.route
mlogb_qs = Mlogb.objects.filter(mlogb_from=mlogb) mlogb:Mlogb = ins.mlogb
material_out:Material = mlogb.mlog.material_out Mlogbw.cal_count_notok(mlogb)
mtype = route.process.mtype if route.process else None # 如果是输入且输出追踪到个,需同步创建
if mtype == Process.PRO_DIV: material_in:Material = mlogb.material_in
mlogbin = ins.mlogb if material_in is not None:
wm_in = mlogbin.wm_in mlogb_qs = Mlogb.objects.filter(mlogb_from=mlogb)
mlog = mlogbin.mlog material_out:Material = mlogb.mlog.material_out
div_number = route.div_number mtype = route.process.mtype if route.process else None
m_dict = { if mtype == Process.PRO_DIV:
"mtask": mlogbin.mtask, mlogbin = ins.mlogb
"mlog": mlog, wm_in = mlogbin.wm_in
"batch": ins.number, mlog = mlogbin.mlog
"material_out": material_out, div_number = route.div_number
"batch_ofrom": wm_in.batch_ofrom, m_dict = {
"material_ofrom": wm_in.material_ofrom, "mtask": mlogbin.mtask,
"count_real": div_number, "mlog": mlog,
"count_ok": div_number, "qct": mlog.qct "batch": ins.number,
} "material_out": material_out,
mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=ins, defaults=m_dict) "batch_ofrom": wm_in.batch_ofrom,
if material_out.tracking == Material.MA_TRACKING_SINGLE: "material_ofrom": wm_in.material_ofrom,
for i in range(div_number): "count_real": div_number,
Mlogbw.objects.get_or_create(mlogb=mlogbout, number=f"{ins.number}-{i+1}", defaults={"mlogbw_from": ins}) "count_ok": div_number, "qct": mlog.qct
Mlogbw.cal_count_notok(mlogbout) }
elif mlogb_qs.exists() and material_out.tracking == Material.MA_TRACKING_SINGLE: mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=ins, defaults=m_dict)
for mlogb in mlogb_qs: if material_out.tracking == Material.MA_TRACKING_SINGLE:
if route.process.mtype == Process.PRO_NORMAL: for i in range(div_number):
Mlogbw.objects.get_or_create(mlogb=mlogb, wpr=ins.wpr, defaults={"number": ins.number, "mlogbw_from": ins}) Mlogbw.objects.get_or_create(mlogb=mlogbout, number=f"{ins.number}-{i+1}", defaults={"mlogbw_from": ins})
elif route.process.mtype == Process.PRO_DIV: Mlogbw.cal_count_notok(mlogbout)
for i in range(route.div_number): elif mlogb_qs.exists() and material_out.tracking == Material.MA_TRACKING_SINGLE:
Mlogbw.objects.get_or_create(mlogb=mlogb, number=f'{ins.number}-{i+1}', defaults={"mlogbw_from": ins}) for mlogb in mlogb_qs:
Mlogbw.cal_count_notok(mlogb) if route.process.mtype == Process.PRO_NORMAL:
Mlogbw.objects.get_or_create(mlogb=mlogb, wpr=ins.wpr, defaults={"number": ins.number, "mlogbw_from": ins})
elif route.process.mtype == Process.PRO_DIV:
for i in range(route.div_number):
Mlogbw.objects.get_or_create(mlogb=mlogb, number=f'{ins.number}-{i+1}', defaults={"mlogbw_from": ins})
Mlogbw.cal_count_notok(mlogb)
@transaction.atomic @transaction.atomic
def perform_update(self, serializer): def perform_update(self, serializer):