testrecord update接口
This commit is contained in:
parent
759062e3a2
commit
2062ee7b75
|
@ -62,7 +62,6 @@ class TestRecord(CommonADModel):
|
||||||
form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE)
|
form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE)
|
||||||
type = models.PositiveSmallIntegerField(choices=type_choice, default=TEST_PROCESS)
|
type = models.PositiveSmallIntegerField(choices=type_choice, default=TEST_PROCESS)
|
||||||
is_testok = models.BooleanField('是否合格', default=True)
|
is_testok = models.BooleanField('是否合格', default=True)
|
||||||
is_testok_robot = models.BooleanField('自动判定的是否合格', default=True)
|
|
||||||
number = models.CharField('产品编号', null=True, blank=True, max_length=50)
|
number = models.CharField('产品编号', null=True, blank=True, max_length=50)
|
||||||
wproduct = models.ForeignKey('wpm.wproduct', verbose_name='关联的动态产品', on_delete=models.CASCADE, null=True, blank=True, related_name='test_wproduct')
|
wproduct = models.ForeignKey('wpm.wproduct', verbose_name='关联的动态产品', on_delete=models.CASCADE, null=True, blank=True, related_name='test_wproduct')
|
||||||
material = models.ForeignKey('mtm.material', verbose_name='关联的物料状态', on_delete=models.CASCADE, null=True, blank=True)
|
material = models.ForeignKey('mtm.material', verbose_name='关联的物料状态', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
@ -82,5 +81,4 @@ class TestRecordItem(BaseModel):
|
||||||
field_value = models.JSONField('录入值', default=dict, blank=True)
|
field_value = models.JSONField('录入值', default=dict, blank=True)
|
||||||
is_hidden = models.BooleanField('是否隐藏', default=False)
|
is_hidden = models.BooleanField('是否隐藏', default=False)
|
||||||
is_testok = models.BooleanField('是否合格', null=True, blank=True)
|
is_testok = models.BooleanField('是否合格', null=True, blank=True)
|
||||||
is_testok_robot = models.BooleanField('自动判定的是否合格', null=True, blank=True)
|
|
||||||
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检验记录', on_delete=models.CASCADE, related_name='item_test_record')
|
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检验记录', on_delete=models.CASCADE, related_name='item_test_record')
|
|
@ -109,10 +109,9 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
|
||||||
return super().to_representation(instance)
|
return super().to_representation(instance)
|
||||||
|
|
||||||
class TestRecordItemUpdatexSerializer(serializers.Serializer):
|
class TestRecordItemUpdatexSerializer(serializers.Serializer):
|
||||||
id = serializers.PrimaryKeyRelatedField(queryset=TestRecordItem.objects.all())
|
class Meta:
|
||||||
field_value = serializers.JSONField(allow_null=True, required=False)
|
model = TestRecordItem
|
||||||
is_testok = serializers.BooleanField(allow_null=True, required=False)
|
fields = ['form_field', 'field_value', 'is_hidden', 'is_testok']
|
||||||
is_hidden = serializers.BooleanField(default=False)
|
|
||||||
|
|
||||||
class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
||||||
record_data = TestRecordItemUpdatexSerializer(many=True, write_only=True)
|
record_data = TestRecordItemUpdatexSerializer(many=True, write_only=True)
|
||||||
|
@ -124,11 +123,23 @@ class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
||||||
record_data = validated_data.pop('record_data')
|
record_data = validated_data.pop('record_data')
|
||||||
for attr, value in validated_data.items():
|
for attr, value in validated_data.items():
|
||||||
setattr(instance, attr, value)
|
setattr(instance, attr, value)
|
||||||
instance.save()
|
instance.save(self.context['request'].user)
|
||||||
for i in record_data:
|
# 更新items
|
||||||
tri = i['id']
|
items = TestRecordItem.objects.filter(test_record=instance, is_deleted=False)
|
||||||
tri.field_value = i['field_value']
|
for m in record_data: # 保存或创建记录详情
|
||||||
tri.is_testok = i['is_testok']
|
form_field = m['form_field']
|
||||||
tri.is_hidden = i['is_hidden']
|
for i in items:
|
||||||
tri.save()
|
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)
|
||||||
return instance
|
return instance
|
||||||
|
|
|
@ -188,7 +188,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestFormInitSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestFormInitSerializer)
|
||||||
def test_init(self, request, pk=None):
|
def test_init(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
检验表单初始化
|
检验记录创建及初始化
|
||||||
"""
|
"""
|
||||||
serializer = WpmTestFormInitSerializer(data=request.data)
|
serializer = WpmTestFormInitSerializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
|
@ -198,74 +198,31 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
if wproduct.test:
|
if wproduct.test:
|
||||||
raise exceptions.APIException('存在进行中检验')
|
raise exceptions.APIException('存在进行中检验')
|
||||||
|
|
||||||
data = RecordFormDetailSerializer(instance=form).data
|
# 根据情况创建一条检验记录
|
||||||
data['origin_test'] = None
|
|
||||||
data['form'] = form.id
|
|
||||||
# 如果是复检, 需要带入原数据
|
|
||||||
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST:
|
|
||||||
# 查找最近一条检验记录
|
|
||||||
trs = wproduct.last_process_test
|
|
||||||
if trs:
|
|
||||||
origin_test = TestRecordDetailSerializer(instance=trs).data
|
|
||||||
data['origin_test_'] = origin_test
|
|
||||||
data['origin_test'] = origin_test.get('id', None)
|
|
||||||
o_dict = {}
|
|
||||||
for i in origin_test['record_data']:
|
|
||||||
o_dict[i['field_key']] = i['field_value']
|
|
||||||
for i in data['form_fields']:
|
|
||||||
i['origin_value'] = o_dict[i['field_key']] if i['field_key'] in o_dict else None
|
|
||||||
i['is_hidden'] = o_dict[i['is_hidden']] if i['is_hidden'] in o_dict else False
|
|
||||||
else:
|
|
||||||
raise exceptions.APIException('原工序检验记录不存在')
|
|
||||||
|
|
||||||
# 后续加入系统自带数据
|
|
||||||
return Response(data)
|
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
|
|
||||||
@transaction.atomic
|
|
||||||
def test(self, request, pk=None):
|
|
||||||
"""
|
|
||||||
检验记录提交
|
|
||||||
"""
|
|
||||||
serializer = WpmTestRecordCreateSerializer(data=request.data)
|
|
||||||
serializer.is_valid(raise_exception=True)
|
|
||||||
vdata = serializer.validated_data
|
|
||||||
record_data = vdata.pop('record_data')
|
|
||||||
wproduct = vdata['wproduct']
|
|
||||||
if wproduct.act_state not in [WProduct.WPR_ACT_STATE_TOTEST,
|
if wproduct.act_state not in [WProduct.WPR_ACT_STATE_TOTEST,
|
||||||
WProduct.WPR_ACT_STATE_TORETEST, WProduct.WPR_ACT_STATE_TOFINALTEST, WProduct.WPR_ACT_STATE_TOCOMBTEST]:
|
WProduct.WPR_ACT_STATE_TORETEST, WProduct.WPR_ACT_STATE_TOFINALTEST, WProduct.WPR_ACT_STATE_TOCOMBTEST]:
|
||||||
raise exceptions.APIException('该产品当前状态不可检验')
|
raise exceptions.APIException('该产品当前状态不可检验')
|
||||||
if 'is_testok' not in vdata:
|
|
||||||
raise exceptions.APIException('未填写检验结论')
|
|
||||||
|
|
||||||
savedict = dict(create_by = self.request.user,
|
savedict = dict(
|
||||||
material=wproduct.material, number=wproduct.number, subproduction_plan=wproduct.subproduction_plan, step=wproduct.step)
|
create_by = self.request.user,
|
||||||
|
material=wproduct.material,
|
||||||
|
number=wproduct.number,
|
||||||
|
subproduction_plan=wproduct.subproduction_plan,
|
||||||
|
step=wproduct.step,
|
||||||
|
form=form)
|
||||||
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST:
|
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST:
|
||||||
if not vdata['origin_test']:
|
# 查找最近一条检验记录
|
||||||
raise exceptions.APIException('自检记录不存在')
|
trs = wproduct.last_process_test
|
||||||
|
savedict['origin_test'] = trs
|
||||||
|
if not trs:
|
||||||
|
raise exceptions.APIException('原工序检验记录不存在')
|
||||||
savedict['type'] = TestRecord.TEST_PROCESS_RE
|
savedict['type'] = TestRecord.TEST_PROCESS_RE
|
||||||
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOFINALTEST:
|
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOFINALTEST:
|
||||||
savedict['type'] = TestRecord.TEST_FINAL
|
savedict['type'] = TestRecord.TEST_FINAL
|
||||||
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOCOMBTEST:
|
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOCOMBTEST:
|
||||||
savedict['type'] = TestRecord.TEST_COMB
|
savedict['type'] = TestRecord.TEST_COMB
|
||||||
obj = serializer.save(**savedict)
|
tr = TestRecord.objects.create(**savedict)
|
||||||
tris = []
|
return Response(TestRecordDetailSerializer(instance=tr).data)
|
||||||
for m in record_data: # 保存记录详情
|
|
||||||
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
|
|
||||||
tris.append(TestRecordItem(**m))
|
|
||||||
TestRecordItem.objects.bulk_create(tris)
|
|
||||||
|
|
||||||
# 如果提交检验
|
|
||||||
if obj.is_submited:
|
|
||||||
WpmServies.update_wproduct_by_test(obj, request.user)
|
|
||||||
else:
|
|
||||||
# 保存当前检验
|
|
||||||
wproduct.test = obj
|
|
||||||
wproduct.update_by = request.user
|
|
||||||
wproduct.save()
|
|
||||||
return Response()
|
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
@ -551,7 +508,7 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd
|
||||||
wps = WProduct.objects.filter(ow_wproduct__operation = op)
|
wps = WProduct.objects.filter(ow_wproduct__operation = op)
|
||||||
wps.update(is_hidden=True, child=wproduct, update_by=request.user, update_time=timezone.now())
|
wps.update(is_hidden=True, child=wproduct, update_by=request.user, update_time=timezone.now())
|
||||||
else:
|
else:
|
||||||
raise exceptions.APIException('产出物料错误')
|
raise exceptions.APIException('产出物料未填写或填写错误')
|
||||||
op.is_submited = True
|
op.is_submited = True
|
||||||
op.save()
|
op.save()
|
||||||
return Response()
|
return Response()
|
||||||
|
|
Loading…
Reference in New Issue