From fbce5ec64f9fcbe5afe635326487dcc4b4f86833 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 18 Aug 2025 16:51:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20retreat=20=E6=92=A4=E5=9B=9E?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=8F=90=E5=88=B0wfservice=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/services.py | 18 +++++++++++++++++- apps/wf/views.py | 14 +------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/apps/wf/services.py b/apps/wf/services.py index 9c337a97..ca0ce46d 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -462,7 +462,23 @@ class WfService(object): ticket_data=WfService.get_ticket_all_field_value(ticket), suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_ROBOT, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, transition=None) - + @classmethod + def retreat(cls, ticket: Ticket, suggestion: str, handler: User, next_handler: User): + """ + 回退 + """ + start_state = WfService.get_workflow_start_state(ticket.workflow) + ticket.state = start_state + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = next_handler.id + ticket.act_state = Ticket.TICKET_ACT_STATE_RETREAT + ticket.save() + # 更新流转记录 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, + ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, + intervene_type=Transition.TRANSITION_INTERVENE_TYPE_RETREAT, + participant=handler, transition=None) def send_ticket_notice_t(ticket: Ticket): """ 发送通知 diff --git a/apps/wf/views.py b/apps/wf/views.py index a5e74990..c819e22d 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -400,19 +400,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R raise ParseError('非创建人不可撤回') if not ticket.state.enable_retreat: raise ParseError('该状态不可撤回') - start_state = WfService.get_workflow_start_state(ticket.workflow) - ticket.state = start_state - ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL - ticket.participant = request.user.id - ticket.act_state = Ticket.TICKET_ACT_STATE_RETREAT - ticket.save() - # 更新流转记录 - suggestion = request.data.get('suggestion', '') # 撤回原因 - TicketFlow.objects.create(ticket=ticket, state=ticket.state, - ticket_data=WfService.get_ticket_all_field_value(ticket), - suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, - intervene_type=Transition.TRANSITION_INTERVENE_TYPE_RETREAT, - participant=request.user, transition=None) + WfService.retreat(ticket, request.data.get('suggestion', ''), request.user, request.user) return Response() @action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=TicketAddNodeSerializer)