feat: 增加性能测试接口
This commit is contained in:
parent
39fbf6d0f3
commit
297adfa3cd
|
@ -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,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -10,6 +10,7 @@ class TestItem(CommonAModel):
|
||||||
检验项目
|
检验项目
|
||||||
"""
|
"""
|
||||||
name = models.CharField('名称', max_length=100)
|
name = models.CharField('名称', max_length=100)
|
||||||
|
number = models.CharField('编号', max_length=20, default='', blank=True)
|
||||||
sort = models.PositiveSmallIntegerField('排序', default=1)
|
sort = models.PositiveSmallIntegerField('排序', default=1)
|
||||||
description = models.TextField('描述', default='')
|
description = models.TextField('描述', default='')
|
||||||
|
|
||||||
|
@ -63,3 +64,45 @@ class FtestItem(BaseModel):
|
||||||
TestItem, verbose_name='质检项目', on_delete=models.CASCADE)
|
TestItem, verbose_name='质检项目', on_delete=models.CASCADE)
|
||||||
test_val = models.FloatField('测量值', default=0, blank=True)
|
test_val = models.FloatField('测量值', default=0, blank=True)
|
||||||
check_val = models.FloatField('专检测量值', null=True, 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)
|
||||||
|
|
|
@ -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.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
|
||||||
from apps.utils.serializers import CustomModelSerializer
|
from apps.utils.serializers import CustomModelSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
@ -104,3 +104,12 @@ class FtestSerializer(CustomModelSerializer):
|
||||||
ftestitem.check_val = item['check_val']
|
ftestitem.check_val = item['check_val']
|
||||||
ftestitem.save()
|
ftestitem.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
class PtestSerializer(CustomModelSerializer):
|
||||||
|
testitem_name = serializers.CharField(
|
||||||
|
source='testitem.name', read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Ptest
|
||||||
|
fields = '__all__'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
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/'
|
API_BASE_URL = 'api/qm/'
|
||||||
HTML_BASE_URL = 'qm/'
|
HTML_BASE_URL = 'qm/'
|
||||||
|
@ -9,8 +9,8 @@ HTML_BASE_URL = 'qm/'
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register('quastat', QuaStatViewSet, basename='quastat')
|
router.register('quastat', QuaStatViewSet, basename='quastat')
|
||||||
router.register('testitem', TestItemViewSet, basename='testitem')
|
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 = [
|
urlpatterns = [
|
||||||
path(API_BASE_URL, include(router.urls)),
|
path(API_BASE_URL, include(router.urls)),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin
|
from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from apps.qm.models import QuaStat, TestItem, Ftest
|
from apps.qm.models import QuaStat, TestItem, Ftest, Ptest
|
||||||
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer
|
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer
|
||||||
from apps.qm.tasks import cal_quastat_sflog
|
from apps.qm.tasks import cal_quastat_sflog
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin
|
from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin
|
||||||
|
@ -62,3 +62,15 @@ class FtestViewSet(CustomModelViewSet):
|
||||||
queryset = Ftest.objects.all()
|
queryset = Ftest.objects.all()
|
||||||
serializer_class = FtestSerializer
|
serializer_class = FtestSerializer
|
||||||
select_related_fields = ['test_user', 'check_user']
|
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']
|
||||||
|
|
Loading…
Reference in New Issue