wf 更改ticket 状态接口

This commit is contained in:
caoqianming 2023-02-12 21:05:56 +08:00
parent 1833c1a7ff
commit 1dfb9626cc
3 changed files with 37 additions and 2 deletions

View File

@ -259,3 +259,8 @@ class TicketAddNodeEndSerializer(serializers.Serializer):
class TicketDestorySerializer(serializers.Serializer): class TicketDestorySerializer(serializers.Serializer):
ids = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=Ticket.objects.all()), label='工单ID列表') ids = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=Ticket.objects.all()), label='工单ID列表')
class TicketStateUpateSerializer(serializers.Serializer):
state = serializers.PrimaryKeyRelatedField(queryset=State.objects.all(), label='状态ID值')
suggestion = serializers.CharField(label="变更理由", required=False)

View File

@ -152,7 +152,6 @@ class WfService(object):
multi_all_person={}) multi_all_person={})
multi_all_person_dict = {} multi_all_person_dict = {}
destination_participant_type, destination_participant = state.participant_type, state.participant destination_participant_type, destination_participant = state.participant_type, state.participant
print(state.name, destination_participant_type, destination_participant)
if destination_participant_type == State.PARTICIPANT_TYPE_FIELD: if destination_participant_type == State.PARTICIPANT_TYPE_FIELD:
destination_participant = new_ticket_data.get(destination_participant, 0) if destination_participant \ destination_participant = new_ticket_data.get(destination_participant, 0) if destination_participant \
in new_ticket_data else Ticket.ticket_data.get(destination_participant, 0) in new_ticket_data else Ticket.ticket_data.get(destination_participant, 0)
@ -394,6 +393,23 @@ class WfService(object):
return ticket return ticket
@classmethod
def update_ticket_state(cls, ticket: Ticket, new_state: State, suggestion: str, handler: User):
participant_info = cls.get_ticket_state_participant_info(
new_state, ticket, {})
source_state = ticket.state
ticket.state = new_state
ticket.participant_type = participant_info.get('destination_participant_type', 0)
ticket.participant = participant_info.get('destination_participant', 0)
ticket.multi_all_person = {}
ticket.save()
TicketFlow.objects.create(ticket=ticket, state=source_state,
ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL,
intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ALTER_STATE,
participant=handler)
cls.task_ticket(ticket=ticket)
@classmethod @classmethod
def task_ticket(cls, ticket: Ticket): def task_ticket(cls, ticket: Ticket):
""" """

View File

@ -12,7 +12,7 @@ from apps.wf.serializers import CustomFieldCreateUpdateSerializer, CustomFieldSe
TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \ TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \
TicketHandleSerializer, TicketRetreatSerializer, \ TicketHandleSerializer, TicketRetreatSerializer, \
TicketSerializer, TransitionSerializer, WorkflowSerializer, \ TicketSerializer, TransitionSerializer, WorkflowSerializer, \
TicketListSerializer, TicketDetailSerializer, WorkflowCloneSerializer TicketListSerializer, TicketDetailSerializer, WorkflowCloneSerializer, TicketStateUpateSerializer
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet, ModelViewSet
from rest_framework.decorators import action 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
@ -173,6 +173,7 @@ class WorkflowViewSet(CustomModelViewSet):
tr.save() tr.save()
return Response() return Response()
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet): class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'workflow.update', perms_map = {'get': '*', 'post': 'workflow.update',
'put': 'workflow.update', 'delete': 'workflow.update'} 'put': 'workflow.update', 'delete': 'workflow.update'}
@ -498,6 +499,19 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
run_task.delay(ticket.id) run_task.delay(ticket.id)
return Response() return Response()
@action(methods=['put'], detail=True, perms_map={'put': 'ticket.state_update'},
serializer_class=TicketStateUpateSerializer)
def state(self, request, pk=None):
"""修改工单状态
修改工单状态
"""
sr = TicketStateUpateSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
ticket = self.get_object()
pass
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
""" """