diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 697a96a..addf700 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -23,7 +23,7 @@ class WorkflowSimpleSerializer(serializers.ModelSerializer): class StateSimpleSerializer(serializers.ModelSerializer): class Meta: model = State - fields = ['id', 'name', 'type', 'distribute_type'] + fields = ['id', 'name', 'type', 'distribute_type', 'enable_retreat'] class TransitionSerializer(serializers.ModelSerializer): source_state_ = StateSimpleSerializer(source='source_state', read_only=True) diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index 187d70f..461ccb8 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -292,7 +292,21 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin """ 撤回工单,允许创建人在指定状态撤回工单至初始状态,状态设置中开启允许撤回 """ - pass + ticket = self.get_object() + if ticket.create_by != request.user: + raise APIException('非创建人不可撤单') + if not ticket.state.enable_retreat: + raise APIException('该状态不可撤单') + start_state = WfService.get_workflow_start_state(ticket.workflow) + ticket.state = start_state + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = request.user + 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='撤单', participant_type=State.PARTICIPANT_TYPE_PERSONAL, + participant=request.user, transition=None) class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): """