From e9d8402cdaf07e500889fcc0864a169a4cc53092 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 24 Nov 2025 14:24:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20ticketmixin=E6=B7=BB=E5=8A=A0tic?= =?UTF-8?q?ket=5Fauto=5Fsubmit=5Fon=5Fcreate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/mixins.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/wf/mixins.py b/apps/wf/mixins.py index 7ded85da..08507ebe 100644 --- a/apps/wf/mixins.py +++ b/apps/wf/mixins.py @@ -12,6 +12,7 @@ class TicketMixin: """ workflow_key = None ticket_auto_submit_on_update = True + ticket_auto_submit_on_create = True ticket_data_save_fields = [] def get_workflow_key(self, instance): @@ -61,16 +62,22 @@ class TicketMixin: raise ParseError(f'工作流{workflow_key}异常:{e}') # 开始创建工单 - source_state: State = WfService.get_workflow_start_state(wf) - transitions = WfService.get_state_transitions(source_state) - if transitions.count() == 1: - transition = transitions.first() - ticket_data = self.gen_ticket_data(ins) - WfService.handle_ticket(ticket=None, transition=transition, new_ticket_data=ticket_data, - handler=handler, oinfo=self.request.data) + if self.ticket_auto_submit_on_create is False: + transition = None else: - raise ParseError(f'工作流{workflow_key}异常:有多个后续状态;不可处理') + source_state: State = WfService.get_workflow_start_state(wf) + transitions = WfService.get_state_transitions(source_state) + if transitions.count() == 1: + transition = transitions.first() + else: + raise ParseError(f'工作流{workflow_key}异常:有多个或无后续状态;不可处理') + ticket_data = self.gen_ticket_data(ins) + ticket = WfService.handle_ticket(ticket=None, transition=transition, workflow=wf, new_ticket_data=ticket_data, + handler=handler, oinfo=self.request.data) + ins.ticket = ticket + ins.save(update_fields=['ticket']) + def perform_destroy(self, instance): ticket = instance.ticket if ticket and ticket.state.type != State.STATE_TYPE_START: