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
|
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)
|
|
@ -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()
|
|
@ -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 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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue