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