From 1dfb9626ccb68da7f1a8d1b3e3b163bd9497090f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 12 Feb 2023 21:05:56 +0800 Subject: [PATCH] =?UTF-8?q?wf=20=E6=9B=B4=E6=94=B9ticket=20=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/serializers.py | 5 +++++ apps/wf/services.py | 18 +++++++++++++++++- apps/wf/views.py | 16 +++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/apps/wf/serializers.py b/apps/wf/serializers.py index 0ed461c5..aaca854c 100755 --- a/apps/wf/serializers.py +++ b/apps/wf/serializers.py @@ -259,3 +259,8 @@ class TicketAddNodeEndSerializer(serializers.Serializer): class TicketDestorySerializer(serializers.Serializer): 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) diff --git a/apps/wf/services.py b/apps/wf/services.py index 32d27639..53f0bfed 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -152,7 +152,6 @@ class WfService(object): multi_all_person={}) multi_all_person_dict = {} 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: destination_participant = new_ticket_data.get(destination_participant, 0) if destination_participant \ in new_ticket_data else Ticket.ticket_data.get(destination_participant, 0) @@ -394,6 +393,23 @@ class WfService(object): 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 def task_ticket(cls, ticket: Ticket): """ diff --git a/apps/wf/views.py b/apps/wf/views.py index 8d2ff8dc..98dcb244 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -12,7 +12,7 @@ from apps.wf.serializers import CustomFieldCreateUpdateSerializer, CustomFieldSe TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \ TicketHandleSerializer, TicketRetreatSerializer, \ TicketSerializer, TransitionSerializer, WorkflowSerializer, \ - TicketListSerializer, TicketDetailSerializer, WorkflowCloneSerializer + TicketListSerializer, TicketDetailSerializer, WorkflowCloneSerializer, TicketStateUpateSerializer from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.decorators import action from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow @@ -173,6 +173,7 @@ class WorkflowViewSet(CustomModelViewSet): tr.save() return Response() + class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet): perms_map = {'get': '*', 'post': 'workflow.update', 'put': 'workflow.update', 'delete': 'workflow.update'} @@ -498,6 +499,19 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R run_task.delay(ticket.id) 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): """