diff --git a/apps/wpm/migrations/0075_auto_20241128_1703.py b/apps/wpm/migrations/0075_auto_20241128_1703.py new file mode 100644 index 00000000..5b9cd816 --- /dev/null +++ b/apps/wpm/migrations/0075_auto_20241128_1703.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.12 on 2024-11-28 09:03 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('wpm', '0074_mlog_count_n_b'), + ] + + operations = [ + migrations.CreateModel( + name='BatchSt', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('batch', models.TextField(verbose_name='批次号')), + ('data', models.JSONField(blank=True, default=list, verbose_name='数据')), + ], + options={ + 'abstract': False, + }, + ), + migrations.RemoveField( + model_name='fmlog', + name='route', + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index bc983d77..e1914347 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -12,6 +12,17 @@ from django.utils.translation import gettext_lazy as _ # Create your models here. +# class Good(BaseModel): +# """ +# 产品状态 +# """ +# pass +class BatchSt(BaseModel): + """ + 批次统计表 + """ + batch = models.TextField("批次号") + data = models.JSONField("数据", default=list, blank=True) class SfLog(CommonADModel): """值班记录 @@ -139,7 +150,6 @@ class WMaterial(CommonBDModel): ) class Fmlog(CommonADModel): - route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True) mtask = models.ForeignKey(Mtask, verbose_name='任务', on_delete=models.CASCADE, related_name='fmlog_mtask') mgroup = models.ForeignKey(Mgroup, verbose_name='工段', on_delete=models.CASCADE, related_name='fmlog_mgroup') note = models.TextField('备注', default='', blank=True) @@ -274,7 +284,15 @@ class Mlog(CommonADModel): def audit_ignore_fields(self): return ['create_by', 'update_by', 'create_time', 'update_time', 'id'] - + + @property + def count_fields(self): + mlog_count_fields = [] + for f in Mlog._meta.fields: + if f.name.startswith("count"): + mlog_count_fields.append(f.name) + mlog_count_fields.remove("count_real_eweight") + return mlog_count_fields class Mlogb(BaseModel): mlog = models.ForeignKey(Mlog, verbose_name='关联日志', diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 61df3cff..886d6a17 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -420,9 +420,10 @@ class MlogSerializer(CustomModelSerializer): pass else: raise ParseError('未提供消耗的车间物料') - attrs['route'] = fmlog.route attrs['mgroup'] = fmlog.mgroup attrs['mtask'] = fmlog.mtask + if attrs['mtask'].route: + attrs['route'] = attrs['mtask'].route if attrs['mtask'].mtaskb and mtaskb is None: raise ParseError('子任务不能为空') if mtaskb and mtaskb.mtask != fmlog.mtask: @@ -456,8 +457,6 @@ class MlogSerializer(CustomModelSerializer): mtask = mtaskb.mtask attrs['mtask'] = mtask attrs['handle_user'] = mtaskb.handle_user - else: - mtask: Mtask = attrs.get('mtask', None) if mtask: attrs['mgroup'] = mtask.mgroup attrs['material_in'] = mtask.material_in @@ -792,7 +791,7 @@ class AttLogSerializer(CustomModelSerializer): class FmlogSerializer(CustomModelSerializer): routepack_name = serializers.CharField( - source='route.routepack.name', read_only=True) + source='mtask.route.routepack.name', read_only=True) mtask_number = serializers.CharField(source='mtask.number', read_only=True) class Meta: model = Fmlog @@ -800,15 +799,9 @@ class FmlogSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS def validate(self, attrs): - route: Route = attrs['route'] mtask: Mtask = attrs['mtask'] if mtask.state != Mtask.MTASK_ASSGINED: raise ParseError('该任务非下达中不可选择') - mgroup: Mgroup = attrs['mgroup'] - if route.process != mgroup.process: - raise ParseError('工序不匹配') - if mtask.mgroup != mgroup: - raise ParseError('工段不匹配') return attrs class FmlogUpdateSerializer(CustomModelSerializer): diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 7952ebd7..a271ad2d 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -503,8 +503,8 @@ class FmlogViewSet(CustomModelViewSet): queryset = Fmlog.objects.all() serializer_class = FmlogSerializer update_serializer_class = FmlogUpdateSerializer - filterset_fields = ['mtask', 'mgroup', 'route'] - select_related_fields = ['mtask', 'mgroup', 'route', 'route__routepack'] + filterset_fields = ['mtask', 'mgroup', 'mtask__route'] + select_related_fields = ['mtask', 'mgroup', 'mtask__route', 'mtask__route__routepack'] def destroy(self, request, *args, **kwargs): ins = self.get_object()