factory/apps/opm/views.py

150 lines
6.0 KiB
Python

from rest_framework.response import Response
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplWorker
from apps.opm.serializers import (GasCheckCreateUpdateSerializer, GasCheckSerializer,
OperationCreateUpdateSerializer, OperationDetailSerializer,
OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer,
OplCreateUpdateSerializer, OplDetailSerializer, OplListSerializer,
OplWorkerCreateSerializer, OplWorkerSerializer, OplWorkerUpdateSerializer)
from apps.opm.services import close_mtask, start_mtask
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from rest_framework.exceptions import ParseError
from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin
from rest_framework.decorators import action
from rest_framework.serializers import Serializer
from apps.wf.models import Ticket
from django.core.cache import cache
# Create your views here.
class OplCateViewSet(CustomModelViewSet):
queryset = OplCate.objects.all()
create_serializer_class = OplCateCreateUpdateSerializer
update_serializer_class = OplCateCreateUpdateSerializer
retrieve_serializer_class = OplCateDetailSerializer
serializer_class = OplCateSerializer
prefetch_related_fields = ['measure_options', 'risk_options', 'close_options']
class OperationViewSet(CustomModelViewSet):
perms_map = {'get': 'operation.view', 'post': 'operation.create',
'put': 'operation.update', 'delete': 'operation.delete'}
queryset = Operation.objects.all()
create_serializer_class = OperationCreateUpdateSerializer
update_serializer_class = OperationCreateUpdateSerializer
serializer_class = OperationDetailSerializer
retrieve_serializer_class = OperationDetailSerializer
select_related_fields = ['area', 'dept_bus', 'dept_ter', 'coordinator']
prefetch_related_fields = ['cates']
search_fields = ['name']
filterset_fields = ['state', 'cates', 'area', 'create_by']
# data_filter = True
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.state != Operation.OP_CREATE:
raise ParseError('非创建状态不可修改')
return super().update(request, *args, **kwargs)
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.state != Operation.OP_CREATE:
raise ParseError('非创建状态不可删除')
obj.delete()
return Response(status=204)
class OplViewSet(CustomModelViewSet):
queryset = Opl.objects.all()
create_serializer_class = OplCreateUpdateSerializer
update_serializer_class = OplCreateUpdateSerializer
serializer_class = OplListSerializer
retrieve_serializer_class = OplDetailSerializer
select_related_fields = ['cate', 'operation', 'dept_do', 'charger', 'monitor', 'ticket']
filterset_fields = ['operation', 'cate']
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
raise ParseError('许可证已处理不可删除')
return super().destroy(request, *args, **kwargs)
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
raise ParseError('许可证已处理不可编辑')
return super().update(request, *args, **kwargs)
@action(methods=['post'], detail=True, perms_map={'post': '*'},
serializer_class=Serializer, logging_methods=[])
def start_mtask(self, request, pk=None):
"""
开启作业监控
开启作业监控
"""
obj = self.get_object()
if obj.mtask:
# 先关闭
close_mtask(obj.mtask.task_id)
res = start_mtask(obj)
return Response(res)
@action(methods=['post'], detail=True, perms_map={'post': '*'},
serializer_class=Serializer, logging_methods=[])
def stop_mtask(self, request, pk=None):
"""
停止作业监控
停止作业监控
"""
obj = self.get_object()
mtask = obj.mtask
if obj.mtask:
close_mtask(mtask.task_id)
# 防止没变化,手动处理一下
mtask.status = 'REVOKED'
mtask.save()
return Response()
class OplWorkerViewSet(CustomModelViewSet):
perms_map = {'get': '*', 'post': 'opl.update', 'put': 'opl.update', 'delete': 'opl.update'}
queryset = OplWorker.objects.all()
create_serializer_class = OplWorkerCreateSerializer
update_serializer_class = OplWorkerUpdateSerializer
serializer_class = OplWorkerSerializer
filterset_fields = ['opl']
# def get_queryset(self):
# if self.request.query_params.get('opl', None):
# raise ParseError('请指定查询许可证')
# return super().get_queryset()
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.opl.ticket:
raise ParseError('许可证已处理不可删除')
return super().destroy(request, *args, **kwargs)
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.opl.ticket:
raise ParseError('许可证已处理不可编辑')
return super().update(request, *args, **kwargs)
class GasCheckViewSet(CreateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'opl.update', 'delete': 'opl.update'}
queryset = GasCheck.objects.all()
create_serializer_class = GasCheckCreateUpdateSerializer
serializer_class = GasCheckSerializer
filterset_fields = ['opl']
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.opl.ticket:
raise ParseError('许可证已处理不可删除')
return super().destroy(request, *args, **kwargs)