通过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, \ from apps.wf.views import CustomFieldViewSet, FromCodeListView, StateViewSet, TicketFlowViewSet, \
TicketViewSet, TransitionViewSet, WorkflowViewSet TicketViewSet, TransitionViewSet, WorkflowKeyInitView, WorkflowViewSet
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
@ -16,4 +16,5 @@ router.register('ticketflow', TicketFlowViewSet, basename='wf_ticketflow')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL + 'participant_from_code', FromCodeListView.as_view()), path(API_BASE_URL + 'participant_from_code', FromCodeListView.as_view()),
path(API_BASE_URL, include(router.urls)), 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.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow
from apps.utils.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin from apps.utils.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin
from apps.wf.services import WfService 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 rest_framework import status
from django.db.models import Count from django.db.models import Count
from .scripts import GetParticipants from .scripts import GetParticipants
# Create your views here. # Create your views here.
class FromCodeListView(APIView): class FromCodeListView(APIView):
def get(self, request, format=None): def get(self, request, format=None):
""" """
@ -32,6 +33,34 @@ class FromCodeListView(APIView):
return Response(GetParticipants.all_funcs) 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): class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'workflow:create', perms_map = {'get': '*', 'post': 'workflow:create',
'put': 'workflow:update', 'delete': 'workflow:delete'} 'put': 'workflow:update', 'delete': 'workflow:delete'}
@ -42,9 +71,6 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
ordering_fields = ['create_time'] ordering_fields = ['create_time']
ordering = ['-create_time'] ordering = ['-create_time']
def get_object(self):
return super().get_object()
@action(methods=['get'], detail=True, perms_map={'get': 'workflow:update'}, @action(methods=['get'], detail=True, perms_map={'get': 'workflow:update'},
pagination_class=None, serializer_class=StateSerializer) pagination_class=None, serializer_class=StateSerializer)
def states(self, request, pk=None): def states(self, request, pk=None):
@ -76,16 +102,18 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
workflow=wf, is_deleted=False).order_by('sort'), many=True) workflow=wf, is_deleted=False).order_by('sort'), many=True)
return Response(serializer.data) 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): def init(self, request, pk=None):
""" """
新建工单初始化
新建工单初始化 新建工单初始化
""" """
ret = {} ret = {}
wf = self.get_object() wf = self.get_object()
start_state = WfService.get_workflow_start_state(wf) start_state = WfService.get_workflow_start_state(wf)
transitions = WfService.get_state_transitions(start_state) transitions = WfService.get_state_transitions(start_state)
ret['workflow'] = pk ret['workflow'] = wf.id
ret['transitions'] = TransitionSerializer(instance=transitions, many=True).data ret['transitions'] = TransitionSerializer(instance=transitions, many=True).data
field_list = CustomFieldSerializer(instance=WfService.get_workflow_custom_fields(wf), many=True).data field_list = CustomFieldSerializer(instance=WfService.get_workflow_custom_fields(wf), many=True).data
for i in field_list: for i in field_list:
@ -96,6 +124,7 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
ret['field_list'] = field_list ret['field_list'] = field_list
return Response(ret) return Response(ret)
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
perms_map = {'get': '*', 'post': 'workflow:update', perms_map = {'get': '*', 'post': 'workflow:update',
'put': 'workflow:update', 'delete': 'workflow:update'} 'put': 'workflow:update', 'delete': 'workflow:update'}