fix: mlogbupdate bug

This commit is contained in:
caoqianming 2025-03-03 15:47:53 +08:00
parent 666fbd306b
commit 7e40596665
1 changed files with 29 additions and 29 deletions

View File

@ -707,45 +707,45 @@ class MlogbOutUpdateSerializer(CustomModelSerializer):
read_only_fields = EXCLUDE_FIELDS_BASE + ['mlog', 'mtask', 'wm_in', 'material_in', 'material_out',
'count_use', 'count_break', 'count_pn_jgqbl', 'mlogbdefect', "qct"]
def create(self, validated_data):
material_out:Material = validated_data["material_out"]
mlogbdefect = validated_data.pop("mlogbdefect", [])
with transaction.atomic():
ins = super().create(validated_data)
if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH:
count_notok = 0
mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0]
for item in mlogbdefect_new:
defect:Defect = item["defect"]
MlogbDefect.objects.create(mlogb=ins, **item)
if defect.cate == Defect.DEFECT_NOTOK:
count_notok +=1
ins.count_notok = count_notok
ins.count_ok = ins.count_real - ins.count_notok
ins.save()
else:
raise ParseError("mlogbdefect仅支持批次件")
return ins
# def create(self, validated_data):
# material_out:Material = validated_data["material_out"]
# mlogbdefect = validated_data.pop("mlogbdefect", [])
# with transaction.atomic():
# ins = super().create(validated_data)
# if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH:
# count_notok = 0
# mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0]
# for item in mlogbdefect_new:
# defect:Defect = item["defect"]
# MlogbDefect.objects.create(mlogb=ins, **item)
# if defect.cate == Defect.DEFECT_NOTOK:
# count_notok +=1
# ins.count_notok = count_notok
# ins.count_ok = ins.count_real - ins.count_notok
# ins.save()
# else:
# raise ParseError("mlogbdefect仅支持批次件")
# return ins
def update(self, instance, validated_data):
material_out:Material = instance.material_out
mlogbdefect = validated_data.pop("mlogbdefect", [])
with transaction.atomic():
ins:Mlogb = super().update(instance, validated_data)
if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH:
if (instance.qct or mlogbdefect) and instance.material_out.tracking == Material.MA_TRACKING_BATCH:
count_notok = 0
md_ids = []
for item in mlogbdefect:
defect = item["defect"]
insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None))
insb.count = item["count"]
insb.save(update_fields=["count"])
if defect.cate == Defect.DEFECT_NOTOK:
count_notok +=1
defect:Defect = item["defect"]
if item["count"] > 0:
insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None))
insb.count = item["count"]
insb.save(update_fields=["count"])
if defect.okcate == Defect.DEFECT_NOTOK:
count_notok += item["count"]
md_ids.append(insb.id)
Mlogbw.objects.filter(mlogb=ins).exclude(id__in=md_ids).delete()
MlogbDefect.objects.filter(mlogb=ins).exclude(id__in=md_ids).delete()
ins.count_notok = count_notok
ins.count_ok = ins.count_real
ins.count_ok = ins.count_real - ins.count_notok
ins.save()
return ins