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