feat: base retreat 撤回功能提到wfservice里

This commit is contained in:
caoqianming 2025-08-18 16:51:23 +08:00
parent 69e606bccc
commit fbce5ec64f
2 changed files with 18 additions and 14 deletions

View File

@ -462,7 +462,23 @@ class WfService(object):
ticket_data=WfService.get_ticket_all_field_value(ticket), ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_ROBOT, suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_ROBOT,
intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, transition=None) intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, transition=None)
@classmethod
def retreat(cls, ticket: Ticket, suggestion: str, handler: User, next_handler: User):
"""
回退
"""
start_state = WfService.get_workflow_start_state(ticket.workflow)
ticket.state = start_state
ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL
ticket.participant = next_handler.id
ticket.act_state = Ticket.TICKET_ACT_STATE_RETREAT
ticket.save()
# 更新流转记录
TicketFlow.objects.create(ticket=ticket, state=ticket.state,
ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL,
intervene_type=Transition.TRANSITION_INTERVENE_TYPE_RETREAT,
participant=handler, transition=None)
def send_ticket_notice_t(ticket: Ticket): def send_ticket_notice_t(ticket: Ticket):
""" """
发送通知 发送通知

View File

@ -400,19 +400,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
raise ParseError('非创建人不可撤回') raise ParseError('非创建人不可撤回')
if not ticket.state.enable_retreat: if not ticket.state.enable_retreat:
raise ParseError('该状态不可撤回') raise ParseError('该状态不可撤回')
start_state = WfService.get_workflow_start_state(ticket.workflow) WfService.retreat(ticket, request.data.get('suggestion', ''), request.user, request.user)
ticket.state = start_state
ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL
ticket.participant = request.user.id
ticket.act_state = Ticket.TICKET_ACT_STATE_RETREAT
ticket.save()
# 更新流转记录
suggestion = request.data.get('suggestion', '') # 撤回原因
TicketFlow.objects.create(ticket=ticket, state=ticket.state,
ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL,
intervene_type=Transition.TRANSITION_INTERVENE_TYPE_RETREAT,
participant=request.user, transition=None)
return Response() return Response()
@action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=TicketAddNodeSerializer) @action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=TicketAddNodeSerializer)