diff --git a/api_v1/views/printing/serializers.py b/api_v1/views/printing/serializers.py index df1c471..48c7b77 100644 --- a/api_v1/views/printing/serializers.py +++ b/api_v1/views/printing/serializers.py @@ -138,6 +138,8 @@ class PrintingOrderListSerializer(serializers.ModelSerializer): process_name = serializers.CharField(source='process.name', read_only=True) progress = serializers.IntegerField(read_only=True) jobs_status_summary = serializers.SerializerMethodField() + created_by = serializers.IntegerField(source='created_by_id', read_only=True) + created_by_name = serializers.SerializerMethodField() class Meta: model = models.PrintingOrder @@ -147,9 +149,17 @@ class PrintingOrderListSerializer(serializers.ModelSerializer): 'is_fabric_received', 'outgoing_date', 'is_invalid', 'new_curve', 'process', 'process_name', 'progress', 'position', 'print_count', 'jobs_status_summary', + 'created_by', 'created_by_name', 'created_at', 'updated_at', ] - read_only_fields = ['id', 'human_id', 'created_at', 'updated_at', 'progress', 'print_count'] + read_only_fields = ['id', 'human_id', 'created_at', 'updated_at', 'progress', 'print_count', 'created_by'] + + def get_created_by_name(self, obj): + user = getattr(obj, 'created_by', None) + if not user: + return None + emp = getattr(user, 'employee', None) + return getattr(emp, 'name', None) def get_jobs_status_summary(self, obj): """ @@ -186,6 +196,8 @@ class PrintingOrderDetailSerializer(serializers.ModelSerializer): customer_area = serializers.CharField(source='customer.area', read_only=True) process_name = serializers.CharField(source='process.name', read_only=True) progress = serializers.IntegerField(read_only=True) + created_by = serializers.IntegerField(source='created_by_id', read_only=True) + created_by_name = serializers.SerializerMethodField() class Meta: model = models.PrintingOrder @@ -196,9 +208,17 @@ class PrintingOrderDetailSerializer(serializers.ModelSerializer): 'curve', 'new_curve', 'position', 'printing_warn', 'rolling_warn', 'production_warn', 'is_invalid', 'process', 'process_name', 'progress', 'print_count', + 'created_by', 'created_by_name', 'created_at', 'updated_at' ] - read_only_fields = ['id', 'human_id', 'created_at', 'updated_at', 'progress', 'print_count'] + read_only_fields = ['id', 'human_id', 'created_at', 'updated_at', 'progress', 'print_count', 'created_by'] + + def get_created_by_name(self, obj): + user = getattr(obj, 'created_by', None) + if not user: + return None + emp = getattr(user, 'employee', None) + return getattr(emp, 'name', None) class PrintingOrderCreateUpdateSerializer(serializers.ModelSerializer): @@ -266,6 +286,8 @@ class PrintingJobListSerializer(serializers.ModelSerializer): last_completed_state = serializers.CharField(read_only=True) business_object_id = serializers.SerializerMethodField() batch_advance_records = serializers.SerializerMethodField() + created_by = serializers.IntegerField(source='created_by_id', read_only=True) + created_by_name = serializers.SerializerMethodField() class Meta: model = models.PrintingJob @@ -278,12 +300,14 @@ class PrintingJobListSerializer(serializers.ModelSerializer): 'progress_percentage', 'last_completed_state', 'business_object_id', 'batch_advance_records', + 'created_by', 'created_by_name', 'created_at', 'updated_at' ] read_only_fields = [ 'id', 'created_at', 'updated_at', 'status', 'status_id', 'is_completed', 'has_started', - 'progress_percentage', 'last_completed_state', 'business_object_id' + 'progress_percentage', 'last_completed_state', 'business_object_id', + 'created_by' ] def get_business_object_id(self, obj): @@ -330,6 +354,13 @@ class PrintingJobListSerializer(serializers.ModelSerializer): records = list(obj.batch_advance_records.all()) return PrintingJobBatchAdvanceRecordSerializer(records, many=True).data + def get_created_by_name(self, obj): + user = getattr(obj, 'created_by', None) + if not user: + return None + emp = getattr(user, 'employee', None) + return getattr(emp, 'name', None) + class PrintingJobDetailSerializer(serializers.ModelSerializer): """印染款式明细详情序列化器""" @@ -343,6 +374,8 @@ class PrintingJobDetailSerializer(serializers.ModelSerializer): has_started = serializers.BooleanField(read_only=True) business_object_id = serializers.SerializerMethodField() batch_advance_records = serializers.SerializerMethodField() + created_by = serializers.IntegerField(source='created_by_id', read_only=True) + created_by_name = serializers.SerializerMethodField() class Meta: model = models.PrintingJob @@ -352,11 +385,13 @@ class PrintingJobDetailSerializer(serializers.ModelSerializer): 'work_state', 'work_state_display', 'status', 'status_id', 'is_completed', 'has_started', 'business_object_id', 'batch_advance_records', + 'created_by', 'created_by_name', 'created_at', 'updated_at' ] read_only_fields = [ 'id', 'created_at', 'updated_at', - 'status', 'status_id', 'is_completed', 'has_started', 'business_object_id' + 'status', 'status_id', 'is_completed', 'has_started', 'business_object_id', + 'created_by' ] def get_business_object_id(self, obj): @@ -371,6 +406,13 @@ class PrintingJobDetailSerializer(serializers.ModelSerializer): records = list(obj.batch_advance_records.all()) return PrintingJobBatchAdvanceRecordSerializer(records, many=True).data + def get_created_by_name(self, obj): + user = getattr(obj, 'created_by', None) + if not user: + return None + emp = getattr(user, 'employee', None) + return getattr(emp, 'name', None) + class PrintingJobCreateUpdateSerializer(serializers.ModelSerializer): """印染款式明细创建/更新序列化器""" diff --git a/api_v1/views/printing/services.py b/api_v1/views/printing/services.py index d9af14c..b88cf62 100644 --- a/api_v1/views/printing/services.py +++ b/api_v1/views/printing/services.py @@ -43,6 +43,9 @@ class PrintingOrderService: if default_process: data['process'] = default_process + # 绑定创建人 + data['created_by'] = user + order = printing_models.PrintingOrder.objects.create(**data) return order @@ -122,6 +125,9 @@ class PrintingJobService: """ printing_order = data.get('printing_order') + # 绑定创建人 + data['created_by'] = user + # 创建 PrintingJob job = printing_models.PrintingJob.objects.create(**data) diff --git a/printing/migrations/0027_add_created_by_to_printingorder_and_printingjob.py b/printing/migrations/0027_add_created_by_to_printingorder_and_printingjob.py new file mode 100644 index 0000000..26d898c --- /dev/null +++ b/printing/migrations/0027_add_created_by_to_printingorder_and_printingjob.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.8 on 2026-01-06 12:32 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('printing', '0026_plateorder_printingjob_original_id'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='printingjob', + name='created_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='printing_jobs', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), + ), + migrations.AddField( + model_name='printingorder', + name='created_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='printing_orders', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), + ), + ] diff --git a/printing/models.py b/printing/models.py index 3956720..90fa6dc 100644 --- a/printing/models.py +++ b/printing/models.py @@ -277,6 +277,14 @@ class PrintingOrder(ModelBase): related_name='printing_orders', verbose_name='印染流程', ) + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name='printing_orders', + verbose_name='创建人', + ) def __str__(self): return self.human_id @@ -355,6 +363,14 @@ class PrintingJob(ModelBase): related_name='printing_job', verbose_name='流程实例', ) + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name='printing_jobs', + verbose_name='创建人', + ) def __str__(self): return self.printing_order.human_id