From 5d85abfad1dc4dd34eb49e2f6bda46ab74fb3f26 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 9 Nov 2025 23:40:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20=E5=BC=80=E5=A7=8B=E7=BC=96?= =?UTF-8?q?=E5=86=99ticketMixin=E5=8F=AF=E8=87=AA=E5=8A=A8=E6=8C=82?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/mixins.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 apps/wf/mixins.py diff --git a/apps/wf/mixins.py b/apps/wf/mixins.py new file mode 100644 index 00000000..a17a49e6 --- /dev/null +++ b/apps/wf/mixins.py @@ -0,0 +1,31 @@ +from apps.wf.models import Workflow, Ticket, State +from rest_framework.exceptions import ParseError +from apps.wf.services import WfService + +class TicketMixin: + workflow_key = None + ticket_auto_submit_on_update = True + ticket_data_save_keys = [] + + def get_workflow_key(self, instance): + return self.workflow_key + + def should_create_ticket(self, instance): + return True + + def perform_create(self, serializer): + ins = serializer.save() + if self.workflow_key: + try: + wf = Workflow.objects.get(key=self.workflow_key) + except Exception as e: + raise ParseError(f'工作流{self.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() + + else: + raise ParseError(f'工作流{self.workflow_key}异常:起始状态{source_state}有多个后续状态;不可直接创建') + + \ No newline at end of file