em 更新检测日期 未完成
This commit is contained in:
parent
8e8f231f72
commit
cf19c022fa
|
@ -3,7 +3,7 @@ from django.contrib.auth.models import AbstractUser
|
|||
from django.db.models.base import Model
|
||||
import django.utils.timezone as timezone
|
||||
from django.db.models.query import QuerySet
|
||||
from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File
|
||||
from apps.system.models import CommonADModel, CommonAModel, CommonBModel, Organization, User, Dict, File
|
||||
from utils.model import SoftModel, BaseModel
|
||||
from simple_history.models import HistoricalRecords
|
||||
|
||||
|
@ -24,6 +24,13 @@ class Equipment(CommonAModel):
|
|||
(EQUIP_STATE_DISABLE, '禁用')
|
||||
|
||||
)
|
||||
state2_choices = (
|
||||
(EQUIP_STATE_OK, '合格'),
|
||||
(EQUIP_STATE_DISABLE, '禁用')
|
||||
|
||||
)
|
||||
EQUIP_TYPE_PRO = 1
|
||||
EQUIP_TYPE_TEST = 2
|
||||
type_choices = (
|
||||
(1, '生产设备'),
|
||||
(2, '检验工具')
|
||||
|
@ -59,10 +66,11 @@ class Equipment(CommonAModel):
|
|||
mgmtype = models.IntegerField('管理类别', choices=mgmtype_choices, default=1)
|
||||
way = models.IntegerField('校准或检定方式', choices=way_choices, default=1)
|
||||
standard = models.CharField('溯源标准或依据', max_length=200, blank=True, null=True)
|
||||
cycle = models.IntegerField('校准或检定周期', default=0)
|
||||
cycle = models.IntegerField('校准或检定周期(月)', null=True, blank=True)
|
||||
usetype = models.IntegerField('使用类别', choices=usetype_choices, default=1)
|
||||
|
||||
next_check_date = models.DateField('下次校准检查日期',blank=True, null=True)
|
||||
check_date = models.DateField('最近校准检查日期', blank=True, null=True)
|
||||
next_check_date = models.DateField('预计下次校准检查日期',blank=True, null=True)
|
||||
class Meta:
|
||||
verbose_name = '设备信息'
|
||||
verbose_name_plural = verbose_name
|
||||
|
@ -70,10 +78,10 @@ class Equipment(CommonAModel):
|
|||
def __str__(self):
|
||||
return self.number + '-' + self.name
|
||||
|
||||
class ECheckRecord(CommonAModel):
|
||||
class ECheckRecord(CommonADModel):
|
||||
"""
|
||||
校准鉴定记录
|
||||
"""
|
||||
equipment = models.ForeignKey(Equipment, verbose_name='校准检定设备', on_delete=models.CASCADE, null=True, blank=True)
|
||||
check_date = models.DateField('校准检查日期',blank=True, null=True)
|
||||
equipment = models.ForeignKey(Equipment, verbose_name='校准检定设备', on_delete=models.CASCADE)
|
||||
check_date = models.DateField('校准检查日期')
|
||||
description = models.CharField('描述', max_length=200, blank=True, null=True)
|
|
@ -1,12 +1,12 @@
|
|||
from apps.mtm.models import Step
|
||||
from rest_framework import serializers
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
|
||||
from rest_framework import exceptions
|
||||
from .models import Equipment, ECheckRecord
|
||||
from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer
|
||||
|
||||
|
||||
class EquipmentSerializer(ModelSerializer):
|
||||
class EquipmentListSerializer(ModelSerializer):
|
||||
belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
|
||||
keeper_ = UserSimpleSerializer(source='keeper', read_only=True)
|
||||
step_ = serializers.SerializerMethodField()
|
||||
|
@ -24,15 +24,26 @@ class EquipmentSerializer(ModelSerializer):
|
|||
return Step.objects.filter(equipments=obj).values('id', 'name', 'number')
|
||||
|
||||
|
||||
class EquipmentCreateUpdateSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = Equipment
|
||||
exclude = ['create_by', 'update_by', 'create_time', 'update_time']
|
||||
|
||||
def validate(self, attrs):
|
||||
if attrs['type'] == Equipment.EQUIP_TYPE_TEST:
|
||||
if attrs['state'] not in [Equipment.EQUIP_STATE_OK, Equipment.EQUIP_STATE_DISABLE]:
|
||||
raise exceptions.APIException('设备状态错误')
|
||||
return super().validate(attrs)
|
||||
|
||||
class EquipmentSimpleSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = Equipment
|
||||
fields = ['id', 'number', 'name', 'state']
|
||||
fields = ['id', 'number', 'name', 'state', 'model']
|
||||
|
||||
|
||||
|
||||
class EquipmentrecordSerializer(ModelSerializer):
|
||||
equipment_ = EquipmentSerializer(source='equipment', read_only=True)
|
||||
class ECheckRecordListSerializer(ModelSerializer):
|
||||
equipment_ = EquipmentSimpleSerializer(source='equipment', read_only=True)
|
||||
class Meta:
|
||||
model = ECheckRecord
|
||||
fields = '__all__'
|
||||
|
@ -43,6 +54,11 @@ class EquipmentrecordSerializer(ModelSerializer):
|
|||
queryset = queryset.select_related('equipment')
|
||||
return queryset
|
||||
|
||||
class EChcekRecordCreateSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = ECheckRecord
|
||||
fields = ['equipment', 'check_date', 'description']
|
||||
|
||||
class DaqCreateSerializer(serializers.Serializer):
|
||||
number = serializers.CharField()
|
||||
file = serializers.FileField()
|
|
@ -0,0 +1,7 @@
|
|||
from apps.em.models import Equipment
|
||||
class EmService:
|
||||
|
||||
@classmethod
|
||||
def update_check_date(cls, equip:Equipment):
|
||||
# 根据校准检定记录变更下次日期
|
||||
pass
|
|
@ -1,14 +1,20 @@
|
|||
from datetime import timedelta
|
||||
from django.shortcuts import render
|
||||
from numpy import delete
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
||||
from rest_framework.viewsets import ModelViewSet, GenericViewSet
|
||||
from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin, ListModelMixin, DestroyModelMixin
|
||||
from rest_framework import serializers, status
|
||||
from rest_framework.response import Response
|
||||
from apps.em.models import Equipment, ECheckRecord
|
||||
from apps.em.serializers import DaqCreateSerializer, EquipmentSerializer,EquipmentrecordSerializer
|
||||
from apps.em.serializers import DaqCreateSerializer, EChcekRecordCreateSerializer, ECheckRecordListSerializer, \
|
||||
EquipmentCreateUpdateSerializer, EquipmentListSerializer
|
||||
from apps.em.services import EmService
|
||||
from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.utils import timezone
|
||||
from django.db import transaction
|
||||
|
||||
# Create your views here.
|
||||
class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet):
|
||||
|
@ -18,49 +24,47 @@ class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet)
|
|||
perms_map = {'get': '*', 'post': 'equipment_create',
|
||||
'put': 'equipment_update', 'delete': 'equipment_delete'}
|
||||
queryset = Equipment.objects.all()
|
||||
serializer_class = EquipmentSerializer
|
||||
serializer_class = EquipmentListSerializer
|
||||
search_fields = ['number', 'name','description']
|
||||
filterset_fields = ['belong_dept', 'keeper', 'type']
|
||||
filterset_fields = ['keeper', 'type']
|
||||
ordering_fields = ['create_time']
|
||||
ordering = ['-create_time']
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['create', 'update']:
|
||||
return EquipmentCreateUpdateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
# Create your views here.
|
||||
class EChcekRecordViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet):
|
||||
class EChcekRecordViewSet(CreateUpdateModelAMixin, OptimizationMixin,
|
||||
CreateModelMixin, RetrieveModelMixin, ListModelMixin, DestroyModelMixin, GenericViewSet):
|
||||
"""
|
||||
设备校准-增删改查
|
||||
"""
|
||||
perms_map = {'get': '*', 'post': 'equipmentrecord_create',
|
||||
'put': 'equipmentrecord_update', 'delete': 'equipmentrecord_delete'}
|
||||
perms_map = {'get': '*', 'post': 'echeckrecord_create', 'delete': 'echeckrecord_delete'}
|
||||
queryset = ECheckRecord.objects.all()
|
||||
serializer_class = EquipmentrecordSerializer
|
||||
serializer_class = ECheckRecordListSerializer
|
||||
filterset_fields = ['equipment']
|
||||
ordering_fields = ['create_time']
|
||||
ordering = ['-create_time']
|
||||
ordering = ['-id']
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['create']:
|
||||
return EChcekRecordCreateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, request, *args, **kwargs):
|
||||
|
||||
data = request.data
|
||||
if data.get('equipment', None):
|
||||
equipment = Equipment.objects.get(pk=data['equipment'])
|
||||
equipment.statedm = data['state']
|
||||
equipment.save()
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
data = request.data
|
||||
if data.get('equipment', None):
|
||||
equipment = Equipment.objects.get(pk=data['equipment'])
|
||||
equipment.statedm = data['state']
|
||||
equipment.save()
|
||||
id = self.get_object()
|
||||
serializer = self.get_serializer(id, data=data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
instance = serializer.save(create_by=request.user)
|
||||
EmService.update_check_date(equip=instance)
|
||||
return Response()
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
EmService.update_check_date(equip=instance)
|
||||
instance.delete()
|
||||
return super().destroy(request, *args, **kwargs)
|
||||
|
||||
import uuid
|
||||
import os
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.db import transaction
|
|||
from rest_framework import serializers
|
||||
from rest_framework.views import APIView
|
||||
from apps.em.models import Equipment
|
||||
from apps.em.serializers import EquipmentSerializer
|
||||
from apps.em.serializers import EquipmentSimpleSerializer
|
||||
from apps.inm.models import MaterialBatch
|
||||
from apps.inm.serializers import MaterialBatchSerializer
|
||||
from apps.mtm.models import Step, SubProduction, SubprodctionMaterial, UsedStep
|
||||
|
@ -248,5 +248,5 @@ class ResourceViewSet(GenericViewSet):
|
|||
subproductions = SubProduction.objects.filter(product__id__in=rdata_l, is_deleted=False)
|
||||
steps = Step.objects.filter(usedstep__is_deleted=False, usedstep__subproduction__in=subproductions)
|
||||
equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False).distinct()
|
||||
serializer = EquipmentSerializer(instance=equips, many=True)
|
||||
serializer = EquipmentSimpleSerializer(instance=equips, many=True)
|
||||
return Response(serializer.data)
|
||||
|
|
Loading…
Reference in New Issue