diff --git a/hb_server/apps/inm/migrations/0023_auto_20211216_0945.py b/hb_server/apps/inm/migrations/0023_auto_20211216_0945.py new file mode 100644 index 0000000..a13408a --- /dev/null +++ b/hb_server/apps/inm/migrations/0023_auto_20211216_0945.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.9 on 2021-12-16 01:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inm', '0022_auto_20211208_1408'), + ] + + operations = [ + migrations.AlterField( + model_name='fifoitem', + name='is_tested', + field=models.BooleanField(default=False, verbose_name='是否已检验'), + ), + migrations.AlterField( + model_name='fifoitem', + name='is_testok', + field=models.BooleanField(default=False, verbose_name='是否检验合格'), + ), + ] diff --git a/hb_server/apps/qm/migrations/0020_auto_20211216_0945.py b/hb_server/apps/qm/migrations/0020_auto_20211216_0945.py new file mode 100644 index 0000000..2610e7d --- /dev/null +++ b/hb_server/apps/qm/migrations/0020_auto_20211216_0945.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.9 on 2021-12-16 01:45 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0042_alter_recordformfield_field_type'), + ('qm', '0019_auto_20211214_1504'), + ] + + operations = [ + migrations.RemoveField( + model_name='testrecorditem', + name='field_key', + ), + migrations.RemoveField( + model_name='testrecorditem', + name='field_name', + ), + migrations.RemoveField( + model_name='testrecorditem', + name='field_type', + ), + migrations.AlterField( + model_name='testrecorditem', + name='form_field', + field=models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, to='mtm.recordformfield', verbose_name='关联自定义表格字段'), + ), + migrations.AlterField( + model_name='testrecorditem', + name='test_record', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_test_record', to='qm.testrecord', verbose_name='关联的检验记录'), + ), + ] diff --git a/hb_server/apps/qm/models.py b/hb_server/apps/qm/models.py index ed7e582..6e82b8e 100644 --- a/hb_server/apps/qm/models.py +++ b/hb_server/apps/qm/models.py @@ -79,9 +79,6 @@ class TestRecordItem(BaseModel): 记录表格字段值 """ form_field = models.ForeignKey(RecordFormField, verbose_name='关联自定义表格字段', on_delete=models.CASCADE, db_constraint=False) - field_name = models.CharField('字段名', max_length=50) - field_key = models.CharField('字段标识', max_length=50) - field_type = models.CharField('字段类型', choices=RecordForm.type_choices, max_length=50) field_value = models.JSONField('录入值', default=dict, blank=True) is_hidden = models.BooleanField('是否隐藏', default=False) is_testok = models.BooleanField('是否合格', null=True, blank=True) diff --git a/hb_server/apps/qm/serializers.py b/hb_server/apps/qm/serializers.py index f329d3a..6785b0c 100644 --- a/hb_server/apps/qm/serializers.py +++ b/hb_server/apps/qm/serializers.py @@ -48,6 +48,9 @@ class TestRecordItemUpdateSerializer(serializers.ModelSerializer): class TestRecordItemSerializer(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) need_judge = serializers.BooleanField(source='form_field.need_judge', read_only=True) rule_expression = serializers.JSONField(source='form_field.rule_expression', read_only=True) display_expression = serializers.JSONField(source='form_field.display_expression', read_only=True) diff --git a/hb_server/apps/wpm/migrations/0033_auto_20211216_0945.py b/hb_server/apps/wpm/migrations/0033_auto_20211216_0945.py new file mode 100644 index 0000000..6ec8a77 --- /dev/null +++ b/hb_server/apps/wpm/migrations/0033_auto_20211216_0945.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.9 on 2021-12-16 01:45 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wpm', '0032_auto_20211214_1245'), + ] + + operations = [ + migrations.RemoveField( + model_name='operationrecorditem', + name='field_key', + ), + migrations.RemoveField( + model_name='operationrecorditem', + name='field_name', + ), + migrations.RemoveField( + model_name='operationrecorditem', + name='field_type', + ), + migrations.RemoveField( + model_name='operationrecorditem', + name='sort', + ), + ] diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 5cdd3c7..0e49d4b 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -188,11 +188,7 @@ class OperationRecordItem(BaseModel): 记录表格字段值 """ form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, db_constraint=False) - field_name = models.CharField('字段名', max_length=50) - field_key = models.CharField('字段标识', max_length=50) - field_type = models.CharField('字段类型', choices=RecordForm.type_choices, max_length=50) field_value = models.JSONField('录入值', default=dict, blank=True) - sort = models.IntegerField('排序号', default=1) operation_record = models.ForeignKey(OperationRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE) class OperationEquip(BaseModel): diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index d426947..98f51ad 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -251,10 +251,6 @@ class WProductViewSet(ListModelMixin, GenericViewSet): obj = serializer.save(**savedict) tris = [] for m in record_data: # 保存记录详情 - form_field = m['form_field'] - m['field_name'] = form_field.field_name - m['field_key'] = form_field.field_key - m['field_type'] = form_field.field_type m['is_testok'] = m['is_testok'] if 'is_testok' in m else None m['is_hidden'] = m['is_hidden'] if 'is_hidden' in m else None m['test_record'] = obj @@ -532,7 +528,7 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd WProduct.objects.create(**wpr) elif step.type == Step.STEP_TYPE_COMB: oms_w = OperationMaterial.objects.filter(operation=op, type=SubprodctionMaterial.SUB_MA_TYPE_OUT, - subproduction_progress__ismain=True) + subproduction_progress__is_main=True) if len(oms_w) == 1: oms_w = oms_w[0] # 校验单片数量是否正确, 暂时未写 @@ -655,17 +651,21 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin opr = self.get_object() if opr.operation.is_submited: raise exceptions.APIException('操作已提交不可修改') - wrds = [] - for m in vdata['record_data']: # 保存记录详情 + + # 已存在信息 + items = OperationRecordItem.objects.filter(operation=opr, is_deleted=False) + for m in vdata['record_data']: # 保存或创建记录详情 form_field = m['form_field'] - m['form_field'] = form_field - m['field_name'] = form_field.field_name - m['field_key'] = form_field.field_key - m['field_type'] = form_field.field_type - m['sort'] = form_field.sort - m['operation_record'] = opr - wrds.append(OperationRecordItem(**m)) - OperationRecordItem.objects.bulk_create(wrds) + 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) opr.is_filled = True opr.save() return Response()