feat: 增加性能测试接口

This commit is contained in:
caoqianming 2023-11-03 16:21:56 +08:00
parent 39fbf6d0f3
commit 297adfa3cd
5 changed files with 124 additions and 6 deletions

View File

@ -0,0 +1,54 @@
# Generated by Django 3.2.12 on 2023-11-03 08:20
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('qm', '0009_auto_20231102_1758'),
]
operations = [
migrations.AddField(
model_name='testitem',
name='number',
field=models.CharField(blank=True, default='', max_length=20, verbose_name='编号'),
),
migrations.CreateModel(
name='Ptest',
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='删除标记')),
('test_date', models.DateField(verbose_name='实验日期')),
('sample_number', models.CharField(max_length=20, verbose_name='样品编号')),
('sample_count', models.PositiveIntegerField(blank=True, null=True, verbose_name='样品数量')),
('sample_density', models.FloatField(blank=True, null=True, verbose_name='样品密度')),
('specification', models.CharField(blank=True, max_length=20, null=True, verbose_name='型号规格')),
('equip_state', models.CharField(choices=[('R', '正常'), ('T', '异常')], default='R', help_text=[('R', '正常'), ('T', '异常')], max_length=10, verbose_name='仪器状态')),
('note', models.TextField(blank=True, default='', verbose_name='备注')),
('val_hd', models.FloatField(blank=True, help_text='mm', null=True, verbose_name='厚度')),
('val_zsl', models.FloatField(blank=True, help_text='589nm', null=True, verbose_name='折射率')),
('val_tgl', models.FloatField(blank=True, help_text='550nm', null=True, verbose_name='透过率')),
('val_ts', models.FloatField(blank=True, help_text='', null=True, verbose_name='Ts')),
('val_tg', models.FloatField(blank=True, help_text='', null=True, verbose_name='Tg')),
('val_tf', models.FloatField(blank=True, help_text='', null=True, verbose_name='Tf')),
('val_xj', models.CharField(choices=[('S', '析晶'), ('R', '不析晶'), ('θ', '未化')], default='S', help_text=[('S', '析晶'), ('R', '不析晶'), ('θ', '未化')], max_length=10, verbose_name='析晶')),
('val_pzxs', models.FloatField(blank=True, help_text='30-300℃', null=True, verbose_name='膨胀系数')),
('val_zgwd', models.FloatField(blank=True, null=True, verbose_name='升至最高温度')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ptest_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('test_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='检验员')),
('testitem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.testitem', verbose_name='测试项目')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ptest_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
]

View File

@ -10,6 +10,7 @@ class TestItem(CommonAModel):
检验项目
"""
name = models.CharField('名称', max_length=100)
number = models.CharField('编号', max_length=20, default='', blank=True)
sort = models.PositiveSmallIntegerField('排序', default=1)
description = models.TextField('描述', default='')
@ -63,3 +64,45 @@ class FtestItem(BaseModel):
TestItem, verbose_name='质检项目', on_delete=models.CASCADE)
test_val = models.FloatField('测量值', default=0, blank=True)
check_val = models.FloatField('专检测量值', null=True, blank=True)
class Ptest(CommonAModel):
"""
性能测试记录
"""
PTEST_EQUIP_STATES = (
('R', '正常'),
('T', '异常')
)
PTEST_XJ_VALS = (
('S', '析晶'),
('R', '不析晶'),
('θ', '未化')
)
test_date = models.DateField('实验日期')
test_user = models.ForeignKey(
User, verbose_name='检验员', on_delete=models.CASCADE)
testitem = models.ForeignKey(
TestItem, verbose_name='测试项目', on_delete=models.CASCADE)
sample_number = models.CharField('样品编号', max_length=20)
sample_count = models.PositiveIntegerField('样品数量', null=True, blank=True)
sample_density = models.FloatField('样品密度', null=True, blank=True)
specification = models.CharField(
'型号规格', max_length=20, null=True, blank=True)
equip_state = models.CharField(
'仪器状态', max_length=10, default='R', choices=PTEST_EQUIP_STATES, help_text=list(PTEST_EQUIP_STATES))
note = models.TextField('备注', default='', blank=True)
val_hd = models.FloatField('厚度', help_text='mm', null=True, blank=True)
val_zsl = models.FloatField(
'折射率', help_text='589nm', null=True, blank=True)
val_tgl = models.FloatField(
'透过率', help_text='550nm', null=True, blank=True)
val_ts = models.FloatField("Ts", help_text='', null=True, blank=True)
val_tg = models.FloatField("Tg", help_text='', null=True, blank=True)
val_tf = models.FloatField("Tf", help_text='', null=True, blank=True)
val_xj = models.CharField(
'析晶', max_length=10, default='S', choices=PTEST_XJ_VALS, help_text=list(PTEST_XJ_VALS))
val_pzxs = models.FloatField(
'膨胀系数', help_text='30-300℃', null=True, blank=True)
val_zgwd = models.FloatField('升至最高温度', null=True, blank=True)

View File

@ -1,4 +1,4 @@
from apps.qm.models import QuaStat, TestItem, Ftest, FtestItem
from apps.qm.models import QuaStat, TestItem, Ftest, FtestItem, Ptest
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
from apps.utils.serializers import CustomModelSerializer
from rest_framework import serializers
@ -104,3 +104,12 @@ class FtestSerializer(CustomModelSerializer):
ftestitem.check_val = item['check_val']
ftestitem.save()
return instance
class PtestSerializer(CustomModelSerializer):
testitem_name = serializers.CharField(
source='testitem.name', read_only=True)
class Meta:
model = Ptest
fields = '__all__'

View File

@ -1,7 +1,7 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.qm.views import QuaStatViewSet, TestItemViewSet, FtestViewSet
from apps.qm.views import QuaStatViewSet, TestItemViewSet, FtestViewSet, PtestViewSet
API_BASE_URL = 'api/qm/'
HTML_BASE_URL = 'qm/'
@ -9,8 +9,8 @@ HTML_BASE_URL = 'qm/'
router = DefaultRouter()
router.register('quastat', QuaStatViewSet, basename='quastat')
router.register('testitem', TestItemViewSet, basename='testitem')
router.register('ftest', FtestViewSet, basename='Ftest')
router.register('ftest', FtestViewSet, basename='fest')
router.register('ptest', PtestViewSet, basename='ptest')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]

View File

@ -1,8 +1,8 @@
from django.shortcuts import render
from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin
from rest_framework.decorators import action
from apps.qm.models import QuaStat, TestItem, Ftest
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer
from apps.qm.models import QuaStat, TestItem, Ftest, Ptest
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer
from apps.qm.tasks import cal_quastat_sflog
from rest_framework.response import Response
from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin
@ -62,3 +62,15 @@ class FtestViewSet(CustomModelViewSet):
queryset = Ftest.objects.all()
serializer_class = FtestSerializer
select_related_fields = ['test_user', 'check_user']
class PtestViewSet(CustomModelViewSet):
"""
list:性能测试
性能测试
"""
queryset = Ptest.objects.all()
serializer_class = PtestSerializer
select_related_fields = ['testitem']
filterset_fields = ['testitem', 'test_date']