em 更新检测日期 未完成

This commit is contained in:
caoqianming 2022-01-20 10:47:31 +08:00
parent 8e8f231f72
commit cf19c022fa
5 changed files with 80 additions and 45 deletions

View File

@ -3,7 +3,7 @@ from django.contrib.auth.models import AbstractUser
from django.db.models.base import Model from django.db.models.base import Model
import django.utils.timezone as timezone import django.utils.timezone as timezone
from django.db.models.query import QuerySet 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 utils.model import SoftModel, BaseModel
from simple_history.models import HistoricalRecords from simple_history.models import HistoricalRecords
@ -24,6 +24,13 @@ class Equipment(CommonAModel):
(EQUIP_STATE_DISABLE, '禁用') (EQUIP_STATE_DISABLE, '禁用')
) )
state2_choices = (
(EQUIP_STATE_OK, '合格'),
(EQUIP_STATE_DISABLE, '禁用')
)
EQUIP_TYPE_PRO = 1
EQUIP_TYPE_TEST = 2
type_choices = ( type_choices = (
(1, '生产设备'), (1, '生产设备'),
(2, '检验工具') (2, '检验工具')
@ -59,10 +66,11 @@ class Equipment(CommonAModel):
mgmtype = models.IntegerField('管理类别', choices=mgmtype_choices, default=1) mgmtype = models.IntegerField('管理类别', choices=mgmtype_choices, default=1)
way = models.IntegerField('校准或检定方式', choices=way_choices, default=1) way = models.IntegerField('校准或检定方式', choices=way_choices, default=1)
standard = models.CharField('溯源标准或依据', max_length=200, blank=True, null=True) 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) 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: class Meta:
verbose_name = '设备信息' verbose_name = '设备信息'
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
@ -70,10 +78,10 @@ class Equipment(CommonAModel):
def __str__(self): def __str__(self):
return self.number + '-' + self.name 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) equipment = models.ForeignKey(Equipment, verbose_name='校准检定设备', on_delete=models.CASCADE)
check_date = models.DateField('校准检查日期',blank=True, null=True) check_date = models.DateField('校准检查日期')
description = models.CharField('描述', max_length=200, blank=True, null=True) description = models.CharField('描述', max_length=200, blank=True, null=True)

View File

@ -1,12 +1,12 @@
from apps.mtm.models import Step from apps.mtm.models import Step
from rest_framework import serializers from rest_framework import serializers
from rest_framework.serializers import ModelSerializer from rest_framework.serializers import ModelSerializer
from rest_framework import exceptions
from .models import Equipment, ECheckRecord from .models import Equipment, ECheckRecord
from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer
class EquipmentSerializer(ModelSerializer): class EquipmentListSerializer(ModelSerializer):
belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True) belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
keeper_ = UserSimpleSerializer(source='keeper', read_only=True) keeper_ = UserSimpleSerializer(source='keeper', read_only=True)
step_ = serializers.SerializerMethodField() step_ = serializers.SerializerMethodField()
@ -24,15 +24,26 @@ class EquipmentSerializer(ModelSerializer):
return Step.objects.filter(equipments=obj).values('id', 'name', 'number') 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 EquipmentSimpleSerializer(ModelSerializer):
class Meta: class Meta:
model = Equipment model = Equipment
fields = ['id', 'number', 'name', 'state'] fields = ['id', 'number', 'name', 'state', 'model']
class EquipmentrecordSerializer(ModelSerializer): class ECheckRecordListSerializer(ModelSerializer):
equipment_ = EquipmentSerializer(source='equipment', read_only=True) equipment_ = EquipmentSimpleSerializer(source='equipment', read_only=True)
class Meta: class Meta:
model = ECheckRecord model = ECheckRecord
fields = '__all__' fields = '__all__'
@ -43,6 +54,11 @@ class EquipmentrecordSerializer(ModelSerializer):
queryset = queryset.select_related('equipment') queryset = queryset.select_related('equipment')
return queryset return queryset
class EChcekRecordCreateSerializer(ModelSerializer):
class Meta:
model = ECheckRecord
fields = ['equipment', 'check_date', 'description']
class DaqCreateSerializer(serializers.Serializer): class DaqCreateSerializer(serializers.Serializer):
number = serializers.CharField() number = serializers.CharField()
file = serializers.FileField() file = serializers.FileField()

View File

@ -0,0 +1,7 @@
from apps.em.models import Equipment
class EmService:
@classmethod
def update_check_date(cls, equip:Equipment):
# 根据校准检定记录变更下次日期
pass

View File

@ -1,14 +1,20 @@
from datetime import timedelta
from django.shortcuts import render from django.shortcuts import render
from numpy import delete
from rest_framework.exceptions import APIException from rest_framework.exceptions import APIException
from rest_framework.views import APIView 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 import serializers, status
from rest_framework.response import Response from rest_framework.response import Response
from apps.em.models import Equipment, ECheckRecord 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 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. # Create your views here.
class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet): class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet):
@ -18,49 +24,47 @@ class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet)
perms_map = {'get': '*', 'post': 'equipment_create', perms_map = {'get': '*', 'post': 'equipment_create',
'put': 'equipment_update', 'delete': 'equipment_delete'} 'put': 'equipment_update', 'delete': 'equipment_delete'}
queryset = Equipment.objects.all() queryset = Equipment.objects.all()
serializer_class = EquipmentSerializer serializer_class = EquipmentListSerializer
search_fields = ['number', 'name','description'] search_fields = ['number', 'name','description']
filterset_fields = ['belong_dept', 'keeper', 'type'] filterset_fields = ['keeper', 'type']
ordering_fields = ['create_time'] ordering_fields = ['create_time']
ordering = ['-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. # Create your views here.
class EChcekRecordViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet): class EChcekRecordViewSet(CreateUpdateModelAMixin, OptimizationMixin,
CreateModelMixin, RetrieveModelMixin, ListModelMixin, DestroyModelMixin, GenericViewSet):
""" """
设备校准-增删改查 设备校准-增删改查
""" """
perms_map = {'get': '*', 'post': 'equipmentrecord_create', perms_map = {'get': '*', 'post': 'echeckrecord_create', 'delete': 'echeckrecord_delete'}
'put': 'equipmentrecord_update', 'delete': 'equipmentrecord_delete'}
queryset = ECheckRecord.objects.all() queryset = ECheckRecord.objects.all()
serializer_class = EquipmentrecordSerializer serializer_class = ECheckRecordListSerializer
filterset_fields = ['equipment'] filterset_fields = ['equipment']
ordering_fields = ['create_time'] ordering = ['-id']
ordering = ['-create_time']
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): 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 = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
serializer.save() instance = serializer.save(create_by=request.user)
return Response(status=status.HTTP_200_OK) EmService.update_check_date(equip=instance)
return Response()
def update(self, request, *args, **kwargs):
data = request.data def destroy(self, request, *args, **kwargs):
if data.get('equipment', None): instance = self.get_object()
equipment = Equipment.objects.get(pk=data['equipment']) EmService.update_check_date(equip=instance)
equipment.statedm = data['state'] instance.delete()
equipment.save() return super().destroy(request, *args, **kwargs)
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)
import uuid import uuid
import os import os

View File

@ -4,7 +4,7 @@ from django.db import transaction
from rest_framework import serializers from rest_framework import serializers
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.em.models import Equipment 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.models import MaterialBatch
from apps.inm.serializers import MaterialBatchSerializer from apps.inm.serializers import MaterialBatchSerializer
from apps.mtm.models import Step, SubProduction, SubprodctionMaterial, UsedStep 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) subproductions = SubProduction.objects.filter(product__id__in=rdata_l, is_deleted=False)
steps = Step.objects.filter(usedstep__is_deleted=False, usedstep__subproduction__in=subproductions) steps = Step.objects.filter(usedstep__is_deleted=False, usedstep__subproduction__in=subproductions)
equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False).distinct() 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) return Response(serializer.data)