From 275b84d20e27e1967adbc67a20cdc68e7b1c5ce0 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 16 Dec 2021 11:19:44 +0800 Subject: [PATCH] operation record update --- hb_server/apps/qm/serializers.py | 35 +++++++++++------------------- hb_server/apps/wpm/models.py | 4 ++-- hb_server/apps/wpm/serializers.py | 34 +++++++++++++++++++++++------ hb_server/apps/wpm/views.py | 36 +++++-------------------------- 4 files changed, 46 insertions(+), 63 deletions(-) diff --git a/hb_server/apps/qm/serializers.py b/hb_server/apps/qm/serializers.py index 72e7450..6785b0c 100644 --- a/hb_server/apps/qm/serializers.py +++ b/hb_server/apps/qm/serializers.py @@ -108,10 +108,11 @@ class TestRecordDetailSerializer(serializers.ModelSerializer): i['origin_value'] = o_dict[i['field_key']] if i['field_key'] in o_dict else None return super().to_representation(instance) -class TestRecordItemUpdatexSerializer(serializers.ModelSerializer): - class Meta: - model = TestRecordItem - fields = ['form_field', 'field_value', 'is_hidden', 'is_testok'] +class TestRecordItemUpdatexSerializer(serializers.Serializer): + id = serializers.PrimaryKeyRelatedField(queryset=TestRecordItem.objects.all()) + field_value = serializers.JSONField(allow_null=True, required=False) + is_testok = serializers.BooleanField(allow_null=True, required=False) + is_hidden = serializers.BooleanField(default=False) class TestRecordUpdateSerializer(serializers.ModelSerializer): record_data = TestRecordItemUpdatexSerializer(many=True, write_only=True) @@ -123,23 +124,11 @@ class TestRecordUpdateSerializer(serializers.ModelSerializer): record_data = validated_data.pop('record_data') for attr, value in validated_data.items(): setattr(instance, attr, value) - instance.save(self.context['request'].user) - # 更新items - items = TestRecordItem.objects.filter(test_record=instance, is_deleted=False) - for m in record_data: # 保存或创建记录详情 - form_field = m['form_field'] - for i in items: - if i.form_field == form_field: - # 更新操作 - i.field_value = m['field_value'] - i.is_testok = m['is_testok'] - i.is_hidden = m['is_hidden'] - i.save() - else: - TestRecordItem.objects.create( - form_field=form_field, - field_value=m['field_value'], - is_testok = m['is_testok'], - is_hidden = m['is_hidden'], - test_record=instance) + instance.save() + for i in record_data: + tri = i['id'] + tri.field_value = i['field_value'] + tri.is_testok = i['is_testok'] + tri.is_hidden = i['is_hidden'] + tri.save() return instance diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 0e49d4b..3679faa 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -187,9 +187,9 @@ class OperationRecordItem(BaseModel): """ 记录表格字段值 """ - form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, db_constraint=False) + form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, related_name='ori_form_field') field_value = models.JSONField('录入值', default=dict, blank=True) - operation_record = models.ForeignKey(OperationRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE) + operation_record = models.ForeignKey(OperationRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE, related_name='item_operation_record') class OperationEquip(BaseModel): operation = models.ForeignKey(Operation, verbose_name='关联操作', on_delete=models.CASCADE, related_name='oe_operation') diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 3cab8b8..ea38496 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -244,19 +244,18 @@ class DoOutputSerializer(serializers.Serializer): material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label='物料ID') count_output = serializers.IntegerField(min_value=0, label='产出数量') -class OperationRecordItemSerializer(serializers.ModelSerializer): - class Meta: - model = OperationRecordItem - fields = ['form_field', 'field_value'] +class OperationRecordItemUpdateSerializer(serializers.Serializer): + id = serializers.PrimaryKeyRelatedField(queryset=OperationRecordItem.objects.all()) + field_value = serializers.JSONField(allow_null=True, required=False) class OperationRecordSubmitSerializer(serializers.ModelSerializer): - record_data = OperationRecordItemSerializer(many=True) + record_data = OperationRecordItemUpdateSerializer(many=True) class Meta: model = OperationRecord fields = ['record_data'] class OperationRecordSerializer(serializers.ModelSerializer): - record_data = OperationRecordItemSerializer(many=True) + record_data = OperationRecordItemUpdateSerializer(many=True) class Meta: model = OperationRecord fields = ['form', 'record_data'] @@ -392,4 +391,25 @@ class OperationMaterialCreate3Serializer(serializers.ModelSerializer): validated_data['type'] = SubprodctionMaterial.SUB_MA_TYPE_TOOL return super().create(validated_data) - \ No newline at end of file + +class OperationRecordItemSerializer(serializers.ModelSerializer): + field_key = serializers.CharField(source='form_field.field_key', read_only=True) + field_name = serializers.CharField(source='form_field.field_name', read_only=True) + field_type = serializers.CharField(source='form_field.field_type', read_only=True) + is_hidden = serializers.BooleanField(source='form_field.is_hidden', read_only=True) + help_text = serializers.CharField(source='form_field.help_text', read_only=True) + sort = serializers.IntegerField(source='form_field.sort', read_only=True) + class Meta: + model = OperationRecordItem + fields = '__all__' + +class OperationRecordDetailSerializer(serializers.ModelSerializer): + form_ = RecordFormSimpleSerializer(source='form', read_only=True) + record_data = serializers.SerializerMethodField() + create_by_ = UserSimpleSerializer(source='create_by', read_only=True) + class Meta: + model = OperationRecord + fields = '__all__' + + def get_record_data(self, obj): + return OperationRecordItemSerializer(instance=obj.item_operation_record.order_by('form_field__sort'), many=True).data \ No newline at end of file diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 2a7b02d..f64bd30 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -408,13 +408,8 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd opr.operation = op opr.form = i opr.is_filled = False - opri_list = [] for m in RecordFormField.objects.filter(form=i, is_deleted=False): - opri_dict = {} - opri_dict['form_field'] = m - opri_dict['operation_record'] = opr - opri_list.append(OperationRecordItem(**opri_dict)) - OperationRecordItem.objects.bulk_create(opri_list) + OperationRecordItem.objects.create(operation_record=opr, form_field=m) opr.save() # 查询需要使用的生产设备 for i in step.equipments.all(): @@ -604,16 +599,6 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin instance.delete() return Response() - @action(methods=['get'], detail=True, perms_map={'get':'*'}) - def init(self, request, pk=None): - ''' - 表格初始化 - ''' - obj = self.get_object() - data = RecordFormDetailSerializer(instance=obj.form).data - # 后续加入系统带入数据 - return Response(data) - def update(self, request, *args, **kwargs): serializer = OperationRecordSubmitSerializer(data=request.data) @@ -622,21 +607,10 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin opr = self.get_object() if opr.operation.is_submited: raise exceptions.APIException('操作已提交不可修改') - - # 已存在信息 - items = OperationRecordItem.objects.filter(operation_record=opr, is_deleted=False) - for m in vdata['record_data']: # 保存或创建记录详情 - form_field = m['form_field'] - for i in items: - if i.form_field == form_field: - # 更新操作 - i.field_value = m['field_value'] - i.save() - else: - OperationRecordItem.objects.create( - form_field=form_field, - field_value=m['field_value'], - operation_record=opr) + for i in vdata['record_data']: + ori = i['id'] + ori.field_value = i['field_value'] + ori.save() opr.is_filled = True opr.update_by = request.user opr.save()