增加条件流转
This commit is contained in:
parent
bb53fbe220
commit
050d4e5bda
|
|
@ -77,7 +77,7 @@ class TicketListSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Ticket
|
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
|
@staticmethod
|
||||||
def setup_eager_loading(queryset):
|
def setup_eager_loading(queryset):
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ class WfService(object):
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@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('流转错误')
|
# raise APIException('流转错误')
|
||||||
source_state = ticket.state
|
source_state = ticket.state
|
||||||
destination_state = transition.destination_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:
|
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
|
return destination_state
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
if value == State.STATE_FIELD_REQUIRED:
|
if value == State.STATE_FIELD_REQUIRED:
|
||||||
if key not in ticket_data or not ticket_data[key]:
|
if key not in ticket_data or not ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(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)
|
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)
|
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)
|
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)
|
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):
|
def handle(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
处理工单
|
处理工单
|
||||||
|
|
@ -185,7 +185,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
if value == State.STATE_FIELD_REQUIRED:
|
if value == State.STATE_FIELD_REQUIRED:
|
||||||
if key not in ticket_data or not ticket_data[key]:
|
if key not in ticket_data or not ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(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
|
multi_all_person = ticket.multi_all_person
|
||||||
if multi_all_person:
|
if multi_all_person:
|
||||||
multi_all_person[request.user.id] =dict(transition=transition.id)
|
multi_all_person[request.user.id] =dict(transition=transition.id)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue