fix: base ticketmixin先创建再handle

This commit is contained in:
caoqianming 2025-12-01 16:12:29 +08:00
parent 0519facc9e
commit adee19eb5b
1 changed files with 16 additions and 13 deletions

View File

@ -44,10 +44,13 @@ class TicketMixin:
raise ParseError('该工单已开始流转,不可修改') raise ParseError('该工单已开始流转,不可修改')
if ruser != ins.ticket.create_by: if ruser != ins.ticket.create_by:
raise ParseError('非工单创建人不可修改') raise ParseError('非工单创建人不可修改')
transition = WfService.get_state_transitions(source_state).first() transitions = WfService.get_state_transitions(source_state)
if transitions.count() == 1:
ticket_data = self.gen_ticket_data(ins) ticket_data = self.gen_ticket_data(ins)
WfService.handle_ticket(ticket=ins.ticket, transition=transition, new_ticket_data=ticket_data, WfService.handle_ticket(ticket=ins.ticket, transition=transition, new_ticket_data=ticket_data,
handler=self.request.user, oinfo=self.request.data) handler=self.request.user, oinfo=self.request.data)
else:
raise ParseError('有多个或无后续状态;不可处理')
def perform_create(self, serializer): def perform_create(self, serializer):
ins = serializer.save() ins = serializer.save()
@ -62,22 +65,22 @@ class TicketMixin:
raise ParseError(f'工作流{workflow_key}异常:{e}') raise ParseError(f'工作流{workflow_key}异常:{e}')
# 开始创建工单 # 开始创建工单
if self.ticket_auto_submit_on_create is False: ticket_data = self.gen_ticket_data(ins)
transition = None ticket = WfService.handle_ticket(ticket=None, transition=None, workflow=wf, new_ticket_data=ticket_data,
else: handler=handler, oinfo=self.request.data)
ins.ticket = ticket
ins.save(update_fields=['ticket'])
if self.ticket_auto_submit_on_create:
source_state: State = WfService.get_workflow_start_state(wf) source_state: State = WfService.get_workflow_start_state(wf)
transitions = WfService.get_state_transitions(source_state) transitions = WfService.get_state_transitions(source_state)
if transitions.count() == 1: if transitions.count() == 1:
transition = transitions.first() transition = transitions.first()
WfService.handle_ticket(ticket=ticket, transition=transition, new_ticket_data=ticket_data,
handler=handler, oinfo=self.request.data)
else: else:
raise ParseError(f'工作流{workflow_key}异常:有多个或无后续状态;不可处理') 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): def perform_destroy(self, instance):
ticket = instance.ticket ticket = instance.ticket
if ticket and ticket.state.type != State.STATE_TYPE_START: if ticket and ticket.state.type != State.STATE_TYPE_START: