169 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			6.7 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().order_by('sort')
 | |
|     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('非创建状态不可修改')
 | |
|         user = request.user
 | |
|         if user == obj.create_by or user.is_superuser:
 | |
|             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']
 | |
| 
 | |
|     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('非创建人不可删除')
 | |
|         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('许可证已处理不可编辑')
 | |
|         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.mtask_uid:
 | |
|             # 先关闭
 | |
|             close_mtask(obj.mtask_uid)
 | |
|         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()
 | |
|         if obj.mtask_uid:
 | |
|             close_mtask(obj.mtask_uid)
 | |
|             # 防止没变化,手动处理一下
 | |
|         obj.mtask_uid = None
 | |
|         obj.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)
 |