feat: fmlog添加工艺步骤字段及相应返回数据

This commit is contained in:
caoqianming 2025-04-16 17:59:20 +08:00
parent 4bc126ca97
commit b5c21b7472
4 changed files with 42 additions and 9 deletions

View File

@ -373,6 +373,14 @@ class Route(CommonADModel):
through="mtm.routemat", blank=True) through="mtm.routemat", blank=True)
parent = models.ForeignKey('self', verbose_name='上级路线', on_delete=models.CASCADE, null=True, blank=True) parent = models.ForeignKey('self', verbose_name='上级路线', on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
x = ""
if self.material_in:
x = x + str(self.material_in) + ">"
if self.material_out:
x = x + str(self.material_out)
return x
@staticmethod @staticmethod
def get_routes(material: Material=None, routepack:RoutePack=None, routeIds=None): def get_routes(material: Material=None, routepack:RoutePack=None, routeIds=None):
""" """

View File

@ -0,0 +1,20 @@
# Generated by Django 3.2.12 on 2025-04-16 09:58
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('mtm', '0055_auto_20250327_1239'),
('wpm', '0109_auto_20250416_1130'),
]
operations = [
migrations.AddField(
model_name='fmlog',
name='route',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='fmlog_route', to='mtm.route', verbose_name='所用步骤'),
),
]

View File

@ -147,6 +147,8 @@ class Fmlog(CommonADModel):
""" """
mtask = models.ForeignKey(Mtask, verbose_name='任务', mtask = models.ForeignKey(Mtask, verbose_name='任务',
on_delete=models.CASCADE, related_name='fmlog_mtask', null=True, blank=True) on_delete=models.CASCADE, related_name='fmlog_mtask', null=True, blank=True)
route = models.ForeignKey(Route, verbose_name="所用步骤",
on_delete=models.SET_NULL, related_name="fmlog_route", null=True, blank=True)
mgroup = models.ForeignKey(Mgroup, verbose_name='工段', on_delete=models.CASCADE, related_name='fmlog_mgroup') mgroup = models.ForeignKey(Mgroup, verbose_name='工段', on_delete=models.CASCADE, related_name='fmlog_mgroup')
note = models.TextField('备注', default='', blank=True) note = models.TextField('备注', default='', blank=True)
is_fix = models.BooleanField('是否用于返修', default=False) # 返工/复检 is_fix = models.BooleanField('是否用于返修', default=False) # 返工/复检

View File

@ -231,7 +231,7 @@ class MlogbSerializer(CustomModelSerializer):
class MlogListSerializer(CustomModelSerializer): class MlogListSerializer(CustomModelSerializer):
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True) mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True)
supplier_name = serializers.CharField(source='supplier.name', read_only=True) supplier_name = serializers.CharField(source='supplier.name', read_only=True)
routepack_name = serializers.CharField(source='route.routepack.name', read_only=True) # routepack_name = serializers.CharField(source='route.routepack.name', read_only=True)
belong_dept = serializers.CharField( belong_dept = serializers.CharField(
source='mgroup.belong_dept.id', read_only=True) source='mgroup.belong_dept.id', read_only=True)
belong_dept_name = serializers.CharField( belong_dept_name = serializers.CharField(
@ -287,7 +287,7 @@ class MlogbDetailSerializer(CustomModelSerializer):
class MlogSerializer(CustomModelSerializer): class MlogSerializer(CustomModelSerializer):
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True) mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True)
supplier_name = serializers.CharField(source='supplier.name', read_only=True) supplier_name = serializers.CharField(source='supplier.name', read_only=True)
routepack_name = serializers.CharField(source='route.routepack.name', read_only=True) # routepack_name = serializers.CharField(source='route.routepack.name', read_only=True)
belong_dept = serializers.CharField( belong_dept = serializers.CharField(
source='mgroup.belong_dept.id', read_only=True) source='mgroup.belong_dept.id', read_only=True)
belong_dept_name = serializers.CharField( belong_dept_name = serializers.CharField(
@ -1021,8 +1021,8 @@ class HandoverSerializer(CustomModelSerializer):
# raise ParseError(f'第{ind+1}物料与交接部门不一致') # raise ParseError(f'第{ind+1}物料与交接部门不一致')
if attrs["material"] != wm.material: if attrs["material"] != wm.material:
raise ParseError(f'{ind+1}物料与交接物料不一致') raise ParseError(f'{ind+1}物料与交接物料不一致')
if wm.state != WMaterial.WM_OK and attrs['type'] in [Handover.H_NORMAL, Handover.H_TEST]: # if wm.state != WMaterial.WM_OK and attrs['type'] in [Handover.H_NORMAL, Handover.H_TEST]:
raise ParseError(f'{ind+1}物料不合格,不能进行正常/检验交接') # raise ParseError(f'第{ind+1}物料不合格,不能进行正常/检验交接')
if wm.count_xtest is not None: if wm.count_xtest is not None:
raise ParseError(f'{ind+1}物料检验中,不能进行交接') raise ParseError(f'{ind+1}物料检验中,不能进行交接')
attrs["count"] = t_count attrs["count"] = t_count
@ -1177,8 +1177,9 @@ class AttLogSerializer(CustomModelSerializer):
class FmlogSerializer(CustomModelSerializer): class FmlogSerializer(CustomModelSerializer):
routepack_name = serializers.CharField( # routepack_name = serializers.CharField(
source='mtask.route.routepack.name', read_only=True) # source='mtask.route.routepack.name', read_only=True)
route_name = serializers.StringRelatedField(source="route", read_only=True)
mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) mgroup_name = serializers.CharField(source='mgroup.name', read_only=True)
mtask_number = serializers.CharField(source='mtask.number', read_only=True) mtask_number = serializers.CharField(source='mtask.number', read_only=True)
class Meta: class Meta:
@ -1190,11 +1191,13 @@ class FmlogSerializer(CustomModelSerializer):
is_fix = attrs.get("is_fix", False) is_fix = attrs.get("is_fix", False)
if is_fix: if is_fix:
attrs["mtask"] = None attrs["mtask"] = None
elif not attrs.get("mtask", None): elif not attrs.get("mtask", None) or not attrs.get("route", None):
raise ParseError("请选择任务") raise ParseError("请选择任务或工艺步骤")
mtask: Mtask = attrs['mtask'] mtask: Mtask = attrs['mtask']
if mtask.state != Mtask.MTASK_ASSGINED: if mtask and mtask.state != Mtask.MTASK_ASSGINED:
raise ParseError('该任务非下达中不可选择') raise ParseError('该任务非下达中不可选择')
if mtask:
attrs["route"] = mtask.route
return attrs return attrs
class FmlogUpdateSerializer(CustomModelSerializer): class FmlogUpdateSerializer(CustomModelSerializer):