增加条件流转
This commit is contained in:
parent
bb53fbe220
commit
050d4e5bda
|
|
@ -77,7 +77,7 @@ class TicketListSerializer(serializers.ModelSerializer):
|
|||
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = ['id', 'title', 'sn', 'workflow', 'workflow_', 'state', 'state_', 'act_state', 'create_time', 'update_time']
|
||||
fields = ['id', 'title', 'sn', 'workflow', 'workflow_', 'state', 'state_', 'act_state', 'create_time', 'update_time', 'participant_type']
|
||||
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class WfService(object):
|
|||
|
||||
|
||||
@classmethod
|
||||
def get_next_state_by_transition_and_ticket_info(cls, ticket:Ticket, transition: Transition)->object:
|
||||
def get_next_state_by_transition_and_ticket_info(cls, ticket:Ticket, transition: Transition, ticket_data:dict={})->object:
|
||||
"""
|
||||
获取下个节点状态
|
||||
"""
|
||||
|
|
@ -103,8 +103,14 @@ class WfService(object):
|
|||
# raise APIException('流转错误')
|
||||
source_state = ticket.state
|
||||
destination_state = transition.destination_state
|
||||
ticket_all_value = cls.get_ticket_all_field_value(ticket)
|
||||
ticket_all_value.update(**ticket_data)
|
||||
if transition.condition_expression:
|
||||
pass
|
||||
for i in transition.condition_expression:
|
||||
expression = i['expression'].format(**ticket_all_value)
|
||||
import datetime, time # 用于支持条件表达式中对时间的操作
|
||||
if eval(expression):
|
||||
destination_state = State.objects.get(i['expression'].get('target'))
|
||||
return destination_state
|
||||
|
||||
@classmethod
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if key not in ticket_data or not ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
ticket = serializer.save(state=start_state, create_by=request.user) # 先创建出来
|
||||
ticket = serializer.save(state=start_state, create_by=request.user, act_state=Ticket.TICKET_ACT_STATE_DRAFT) # 先创建出来
|
||||
next_state = WfService.get_next_state_by_transition_and_ticket_info(ticket=ticket, transition=transition)
|
||||
participant_info = WfService.get_ticket_state_participant_info(state=next_state, ticket=ticket, ticket_data=ticket.ticket_data)
|
||||
destination_participant_type = participant_info.get('destination_participant_type', 0)
|
||||
|
|
@ -162,7 +162,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
return Response(TicketSerializer(instance=ticket).data)
|
||||
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'get':'*'})
|
||||
@action(methods=['post'], detail=True, perms_map={'post':'*'})
|
||||
def handle(self, request, pk=None):
|
||||
"""
|
||||
处理工单
|
||||
|
|
@ -185,7 +185,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if key not in ticket_data or not ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
destination_state = WfService.get_next_state_by_transition_and_ticket_info(ticket, transition)
|
||||
destination_state = WfService.get_next_state_by_transition_and_ticket_info(ticket, transition, ticket_data)
|
||||
multi_all_person = ticket.multi_all_person
|
||||
if multi_all_person:
|
||||
multi_all_person[request.user.id] =dict(transition=transition.id)
|
||||
|
|
|
|||
Loading…
Reference in New Issue