175 lines
6.9 KiB
Python
175 lines
6.9 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,
|
|
OperationPartialUpdateSerializer)
|
|
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
|
|
from django.db import transaction
|
|
|
|
# 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']
|
|
ordering = 'sort'
|
|
|
|
|
|
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
|
|
partial_update_serializer_class = OperationPartialUpdateSerializer
|
|
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()
|
|
user = request.user
|
|
if user.is_superuser:
|
|
pass
|
|
elif obj.state == Operation.OP_CREATE and user == obj.create_by:
|
|
pass
|
|
elif user == obj.create_by and kwargs['partial']:
|
|
pass
|
|
else:
|
|
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('非创建状态不可删除')
|
|
user = request.user
|
|
if user == obj.create_by or user.is_superuser:
|
|
pass
|
|
else:
|
|
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']
|
|
|
|
@transaction.atomic
|
|
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('许可证已处理不可删除')
|
|
user = request.user
|
|
if user == obj.create_by or user.is_superuser:
|
|
pass
|
|
else:
|
|
raise ParseError('非创建人不可删除')
|
|
if obj.ticket:
|
|
obj.ticket.delete()
|
|
obj.delete()
|
|
return Response(status=204)
|
|
|
|
def update(self, request, *args, **kwargs):
|
|
obj = self.get_object()
|
|
if obj.ticket and obj.ticket.act_state not in [Ticket.TICKET_ACT_STATE_DRAFT, Ticket.TICKET_ACT_STATE_BACK, Ticket.TICKET_ACT_STATE_RETREAT]:
|
|
raise ParseError('许可证已处理不可编辑')
|
|
user = request.user
|
|
if user == obj.create_by or user.is_superuser:
|
|
pass
|
|
else:
|
|
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.operation.state == Operation.OP_DONE:
|
|
raise ParseError('作业已关闭,不能开启监控')
|
|
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()
|
|
close_mtask(obj)
|
|
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('许可证已处理不可删除')
|
|
obj.delete()
|
|
return Response(status=204)
|