通过key初始化

This commit is contained in:
曹前明 2022-07-11 17:19:17 +08:00
parent a2bfb4ec03
commit 2a8c0a2d4e
2 changed files with 38 additions and 8 deletions

View File

@ -1,5 +1,5 @@
from apps.wf.views import CustomFieldViewSet, FromCodeListView, StateViewSet, TicketFlowViewSet, \
TicketViewSet, TransitionViewSet, WorkflowViewSet
TicketViewSet, TransitionViewSet, WorkflowKeyInitView, WorkflowViewSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter
@ -16,4 +16,5 @@ router.register('ticketflow', TicketFlowViewSet, basename='wf_ticketflow')
urlpatterns = [
path(API_BASE_URL + 'participant_from_code', FromCodeListView.as_view()),
path(API_BASE_URL, include(router.urls)),
path(API_BASE_URL + 'workflow/<str:key>/init_key/', WorkflowKeyInitView.as_view())
]

View File

@ -17,13 +17,14 @@ from rest_framework.decorators import action
from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow
from apps.utils.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin
from apps.wf.services import WfService
from rest_framework.exceptions import ParseError
from rest_framework.exceptions import ParseError, NotFound
from rest_framework import status
from django.db.models import Count
from .scripts import GetParticipants
# Create your views here.
class FromCodeListView(APIView):
def get(self, request, format=None):
"""
@ -32,6 +33,34 @@ class FromCodeListView(APIView):
return Response(GetParticipants.all_funcs)
class WorkflowKeyInitView(APIView):
perms_map = {'get': '*'}
def get(self, request, key=None):
"""
新建工单初始化-通过key
新建工单初始化
"""
ret = {}
try:
wf = Workflow.objects.get(key=key)
except Exception:
raise NotFound('获取工作流失败')
start_state = WfService.get_workflow_start_state(wf)
transitions = WfService.get_state_transitions(start_state)
ret['workflow'] = wf.id
ret['transitions'] = TransitionSerializer(instance=transitions, many=True).data
field_list = CustomFieldSerializer(instance=WfService.get_workflow_custom_fields(wf), many=True).data
for i in field_list:
if i['field_key'] in start_state.state_fields:
i['field_attribute'] = start_state.state_fields[i['field_key']]
else:
i['field_attribute'] = State.STATE_FIELD_READONLY
ret['field_list'] = field_list
return Response(ret)
class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'workflow:create',
'put': 'workflow:update', 'delete': 'workflow:delete'}
@ -42,9 +71,6 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
ordering_fields = ['create_time']
ordering = ['-create_time']
def get_object(self):
return super().get_object()
@action(methods=['get'], detail=True, perms_map={'get': 'workflow:update'},
pagination_class=None, serializer_class=StateSerializer)
def states(self, request, pk=None):
@ -76,16 +102,18 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
workflow=wf, is_deleted=False).order_by('sort'), many=True)
return Response(serializer.data)
@action(methods=['get'], detail=True, perms_map={'get': 'workflow:init'})
@action(methods=['get'], detail=True, perms_map={'get': '*'})
def init(self, request, pk=None):
"""
新建工单初始化
新建工单初始化
"""
ret = {}
wf = self.get_object()
start_state = WfService.get_workflow_start_state(wf)
transitions = WfService.get_state_transitions(start_state)
ret['workflow'] = pk
ret['workflow'] = wf.id
ret['transitions'] = TransitionSerializer(instance=transitions, many=True).data
field_list = CustomFieldSerializer(instance=WfService.get_workflow_custom_fields(wf), many=True).data
for i in field_list:
@ -96,6 +124,7 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
ret['field_list'] = field_list
return Response(ret)
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
perms_map = {'get': '*', 'post': 'workflow:update',
'put': 'workflow:update', 'delete': 'workflow:update'}