factory/apps/wf/mixins.py

31 lines
1.1 KiB
Python

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}有多个后续状态;不可直接创建')