feat: mlog quick增加wprs_in传参
This commit is contained in:
parent
34e217e468
commit
fb71f0697a
|
@ -721,6 +721,7 @@ class CountJsonFromSerializer(serializers.Serializer):
|
||||||
class MlogbInSerializer(CustomModelSerializer):
|
class MlogbInSerializer(CustomModelSerializer):
|
||||||
mlogbdefect = MlogbDefectSerializer(many=True, required=False)
|
mlogbdefect = MlogbDefectSerializer(many=True, required=False)
|
||||||
count_json_from = CountJsonFromSerializer(required=False, many=True)
|
count_json_from = CountJsonFromSerializer(required=False, many=True)
|
||||||
|
wprs_in = serializers.ListField(child=serializers.CharField(), label="单个ID的列表", required=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Mlogb
|
model = Mlogb
|
||||||
|
@ -878,7 +879,9 @@ class MlogbwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
if wpr:
|
if wpr:
|
||||||
mlogb: Mlogb = validated_data["mlogb"]
|
mlogb: Mlogb = validated_data["mlogb"]
|
||||||
if Mlogbw.objects.filter(mlogb=mlogb, wpr=wpr).exists():
|
if Mlogbw.objects.filter(mlogb=mlogb, wpr=wpr).exists():
|
||||||
raise ParseError('该产品已选入')
|
raise ParseError(f'{wpr.number}-该产品已选入')
|
||||||
|
if Mlogbw.objects.filter(mlogb__mlog__submit_time__isnull=True, wpr=wpr).exists():
|
||||||
|
raise ParseError(f'{wpr.number}-该产品已在其他日志中选入')
|
||||||
ftest_data = validated_data.pop("ftest", None)
|
ftest_data = validated_data.pop("ftest", None)
|
||||||
mlogbw = super().create(validated_data)
|
mlogbw = super().create(validated_data)
|
||||||
if ftest_data:
|
if ftest_data:
|
||||||
|
@ -1520,6 +1523,7 @@ class MlogQuickSerializer(serializers.Serializer):
|
||||||
team = serializers.CharField(label="班组ID", required=False)
|
team = serializers.CharField(label="班组ID", required=False)
|
||||||
equipment = serializers.CharField(label="设备ID", required=False)
|
equipment = serializers.CharField(label="设备ID", required=False)
|
||||||
wm_in = serializers.CharField(label="输入车间库存ID")
|
wm_in = serializers.CharField(label="输入车间库存ID")
|
||||||
|
wprs_in = serializers.ListField(child=serializers.CharField(), label="单个ID的列表", required=False)
|
||||||
count_use = serializers.IntegerField(label="领用数量")
|
count_use = serializers.IntegerField(label="领用数量")
|
||||||
is_fix = serializers.BooleanField(label="是否返修")
|
is_fix = serializers.BooleanField(label="是否返修")
|
||||||
mgroup = serializers.CharField(label="工段ID")
|
mgroup = serializers.CharField(label="工段ID")
|
||||||
|
|
|
@ -481,10 +481,11 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
mlogbin_data["mtask"] = vdata["mtask"]
|
mlogbin_data["mtask"] = vdata["mtask"]
|
||||||
if "route" in vdata:
|
if "route" in vdata:
|
||||||
mlogbin_data["route"] = vdata["route"]
|
mlogbin_data["route"] = vdata["route"]
|
||||||
|
wprIds = vdata.get("wprs_in", [])
|
||||||
sr_2 = MlogbInSerializer(data=mlogbin_data)
|
sr_2 = MlogbInSerializer(data=mlogbin_data)
|
||||||
sr_2.is_valid(raise_exception=True)
|
sr_2.is_valid(raise_exception=True)
|
||||||
mlogbin = sr_2.save()
|
mlogbin = sr_2.save()
|
||||||
MlogbInViewSet.p_create_after(mlogbin, skip_mlogbw=True)
|
MlogbInViewSet.p_create_after(mlogbin, wprIds=wprIds)
|
||||||
return Response({"mlog": str(mlog.id), "mlogbin": str(mlogbin.id)})
|
return Response({"mlog": str(mlog.id), "mlogbin": str(mlogbin.id)})
|
||||||
|
|
||||||
class HandoverViewSet(CustomModelViewSet):
|
class HandoverViewSet(CustomModelViewSet):
|
||||||
|
@ -714,7 +715,7 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
||||||
mlog.cal_mlog_count_from_mlogb()
|
mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def p_create_after(cls, mlogbin:Mlogb, skip_mlogbw=False):
|
def p_create_after(cls, mlogbin:Mlogb, wprIds:list=[]):
|
||||||
mlogbin_parent:Mlogb = mlogbin.parent
|
mlogbin_parent:Mlogb = mlogbin.parent
|
||||||
mlog:Mlog = mlogbin.mlog
|
mlog:Mlog = mlogbin.mlog
|
||||||
mgroup:Mgroup = mlog.mgroup
|
mgroup:Mgroup = mlog.mgroup
|
||||||
|
@ -743,11 +744,24 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
||||||
|
|
||||||
wm_in: WMaterial = mlogbin.wm_in
|
wm_in: WMaterial = mlogbin.wm_in
|
||||||
|
|
||||||
if material_in.tracking == Material.MA_TRACKING_SINGLE and skip_mlogbw is False: # 自动创建mlogbw
|
if material_in.tracking == Material.MA_TRACKING_SINGLE: # 自动创建mlogbw
|
||||||
wprs_can_use_qs = Wpr.objects.filter(wm=wm_in).exclude(wpr_mlogbw__mlogb__mlog__submit_time__isnull=True).order_by("number")
|
if wprIds:
|
||||||
if wprs_can_use_qs.count() == mlogbin.count_use:
|
wprs_can_use_qs = Wpr.objects.filter(id__in=wprIds).exclude(wpr_mlogbw__mlogb__mlog__submit_time__isnull=True).order_by("number")
|
||||||
|
wm_ids = wprs_can_use_qs.values_list("wm__id", flat=True).distinct()
|
||||||
|
if len(wm_ids) == 1 and wm_ids[0] == wm_in.id:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise ParseError("单个产品列表不属于当前批次")
|
||||||
for wpr in wprs_can_use_qs:
|
for wpr in wprs_can_use_qs:
|
||||||
Mlogbw.objects.get_or_create(wpr=wpr, mlogb=mlogbin, defaults={"number": wpr.number})
|
Mlogbw.objects.get_or_create(wpr=wpr, mlogb=mlogbin, defaults={"number": wpr.number})
|
||||||
|
mlogbin.count_use = Mlogbw.objects.filter(mlogb=mlogbin).count()
|
||||||
|
mlogbin.save(update_fields=["count_use"])
|
||||||
|
else:
|
||||||
|
wprs_can_use_qs = Wpr.objects.filter(wm=wm_in).exclude(wpr_mlogbw__mlogb__mlog__submit_time__isnull=True).order_by("number")
|
||||||
|
if wprs_can_use_qs.count() == mlogbin.count_use:
|
||||||
|
for wpr in wprs_can_use_qs:
|
||||||
|
Mlogbw.objects.get_or_create(wpr=wpr, mlogb=mlogbin, defaults={"number": wpr.number})
|
||||||
|
|
||||||
|
|
||||||
# if qct is None:
|
# if qct is None:
|
||||||
# mlog.qct = Qct.get(material_out, "process")
|
# mlog.qct = Qct.get(material_out, "process")
|
||||||
|
@ -892,9 +906,10 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
||||||
|
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
|
vdata = serializer.validated_data
|
||||||
mlogbin: Mlogb = serializer.save()
|
mlogbin: Mlogb = serializer.save()
|
||||||
MlogViewSet.lock_and_check_can_update(mlogbin.mlog)
|
MlogViewSet.lock_and_check_can_update(mlogbin.mlog)
|
||||||
MlogbInViewSet.p_create_after(mlogbin)
|
MlogbInViewSet.p_create_after(mlogbin, wprIds=vdata.get('wprIds', []))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def gen_number_with_rule(cls, rule, material_out:Material, mlog:Mlog, gen_count=1):
|
def gen_number_with_rule(cls, rule, material_out:Material, mlog:Mlog, gen_count=1):
|
||||||
|
|
Loading…
Reference in New Issue