handleticket bug修复
This commit is contained in:
parent
d54df1a442
commit
0bd5516cef
|
@ -206,7 +206,7 @@ class Ticket(CommonBModel):
|
||||||
ticket_data = models.JSONField('工单数据', default=dict, help_text='工单自定义字段内容')
|
ticket_data = models.JSONField('工单数据', default=dict, help_text='工单自定义字段内容')
|
||||||
in_add_node = models.BooleanField('加签状态中', default=False, help_text='是否处于加签状态下')
|
in_add_node = models.BooleanField('加签状态中', default=False, help_text='是否处于加签状态下')
|
||||||
add_node_man = models.ForeignKey(User, verbose_name='加签人', on_delete=models.SET_NULL, null=True, blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效')
|
add_node_man = models.ForeignKey(User, verbose_name='加签人', on_delete=models.SET_NULL, null=True, blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效')
|
||||||
script_run_last_result = models.BooleanField(u'脚本最后一次执行结果', default=True)
|
script_run_last_result = models.BooleanField('脚本最后一次执行结果', default=True)
|
||||||
participant_type = models.IntegerField('当前处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.state_participanttype_choices)
|
participant_type = models.IntegerField('当前处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.state_participanttype_choices)
|
||||||
participant = models.JSONField('当前处理人', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表')
|
participant = models.JSONField('当前处理人', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表')
|
||||||
act_state = models.IntegerField('进行状态', default=1, help_text='当前工单的进行状态', choices=act_state_choices)
|
act_state = models.IntegerField('进行状态', default=1, help_text='当前工单的进行状态', choices=act_state_choices)
|
||||||
|
|
|
@ -126,7 +126,7 @@ class TicketFlowSimpleSerializer(serializers.ModelSerializer):
|
||||||
class TicketHandleSerializer(serializers.Serializer):
|
class TicketHandleSerializer(serializers.Serializer):
|
||||||
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), label="流转id")
|
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), label="流转id")
|
||||||
ticket_data = serializers.JSONField(label="表单数据json")
|
ticket_data = serializers.JSONField(label="表单数据json")
|
||||||
suggestion = serializers.CharField(label="处理意见", required = False)
|
suggestion = serializers.CharField(label="处理意见", required = False, allow_blank=True)
|
||||||
|
|
||||||
class TicketRetreatSerializer(serializers.Serializer):
|
class TicketRetreatSerializer(serializers.Serializer):
|
||||||
suggestion = serializers.CharField(label="撤回原因", required = False)
|
suggestion = serializers.CharField(label="撤回原因", required = False)
|
||||||
|
|
|
@ -201,7 +201,7 @@ class WfService(object):
|
||||||
transitions = cls.get_state_transitions(ticket.state)
|
transitions = cls.get_state_transitions(ticket.state)
|
||||||
if not transitions:
|
if not transitions:
|
||||||
return dict(permission=True, msg="工单当前状态无需操作")
|
return dict(permission=True, msg="工单当前状态无需操作")
|
||||||
current_participant_count = 1
|
current_participant_count = 0
|
||||||
participant_type = ticket.participant_type
|
participant_type = ticket.participant_type
|
||||||
participant = ticket.participant
|
participant = ticket.participant
|
||||||
state = ticket.state
|
state = ticket.state
|
||||||
|
@ -347,3 +347,5 @@ class WfService(object):
|
||||||
if destination_state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
if destination_state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
||||||
getattr(HandleScripts, destination_state.participant)(ticket)
|
getattr(HandleScripts, destination_state.participant)(ticket)
|
||||||
|
|
||||||
|
return ticket
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.utils import timezone
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import query
|
from django.db.models import query
|
||||||
from rest_framework.utils import serializer_helpers
|
from rest_framework.utils import serializer_helpers
|
||||||
|
@ -146,7 +147,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
vdata = serializer.validated_data #校验之后的数据
|
vdata = serializer.validated_data #校验之后的数据
|
||||||
start_state = WfService.get_workflow_start_state(vdata['workflow'])
|
start_state = WfService.get_workflow_start_state(vdata['workflow'])
|
||||||
transition = vdata['transition']
|
transition = vdata.pop('transition')
|
||||||
ticket_data = vdata['ticket_data']
|
ticket_data = vdata['ticket_data']
|
||||||
|
|
||||||
save_ticket_data = {}
|
save_ticket_data = {}
|
||||||
|
@ -154,7 +155,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
if transition.field_require_check:
|
if transition.field_require_check:
|
||||||
for key, value in start_state.state_fields.items():
|
for key, value in start_state.state_fields.items():
|
||||||
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 and not ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(key))
|
raise APIException('字段{}必填'.format(key))
|
||||||
save_ticket_data[key] = ticket_data[key]
|
save_ticket_data[key] = ticket_data[key]
|
||||||
elif value == State.STATE_FIELD_OPTIONAL:
|
elif value == State.STATE_FIELD_OPTIONAL:
|
||||||
|
@ -162,6 +163,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
|
|
||||||
ticket = serializer.save(state=start_state,
|
ticket = serializer.save(state=start_state,
|
||||||
create_by=request.user,
|
create_by=request.user,
|
||||||
|
create_time=timezone.now(),
|
||||||
act_state=Ticket.TICKET_ACT_STATE_DRAFT,
|
act_state=Ticket.TICKET_ACT_STATE_DRAFT,
|
||||||
belong_dept=request.user.dept,
|
belong_dept=request.user.dept,
|
||||||
ticket_data=save_ticket_data) # 先创建出来
|
ticket_data=save_ticket_data) # 先创建出来
|
||||||
|
@ -176,7 +178,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
ticket.title = title
|
ticket.title = title
|
||||||
ticket.save()
|
ticket.save()
|
||||||
ticket = WfService.handle_ticket(ticket=ticket, transition=transition, new_ticket_data=ticket_data,
|
ticket = WfService.handle_ticket(ticket=ticket, transition=transition, new_ticket_data=ticket_data,
|
||||||
handler=request.user)
|
handler=request.user, created=True)
|
||||||
return Response(TicketSerializer(instance=ticket).data)
|
return Response(TicketSerializer(instance=ticket).data)
|
||||||
|
|
||||||
@action(methods=['get'], detail=False, perms_map={'get':'*'})
|
@action(methods=['get'], detail=False, perms_map={'get':'*'})
|
||||||
|
@ -201,7 +203,9 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
serializer = TicketHandleSerializer(data=request.data)
|
serializer = TicketHandleSerializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
vdata = serializer.validated_data
|
vdata = serializer.validated_data
|
||||||
new_ticket_data = ticket.ticket_data.update(**vdata['ticket_data'])
|
new_ticket_data = ticket.ticket_data
|
||||||
|
new_ticket_data.update(**vdata['ticket_data'])
|
||||||
|
|
||||||
ticket = WfService.handle_ticket(ticket=ticket, transition=vdata['transition'],
|
ticket = WfService.handle_ticket(ticket=ticket, transition=vdata['transition'],
|
||||||
new_ticket_data=new_ticket_data, handler=request.user, suggestion=vdata['suggestion'])
|
new_ticket_data=new_ticket_data, handler=request.user, suggestion=vdata['suggestion'])
|
||||||
return Response(TicketSerializer(instance=ticket).data)
|
return Response(TicketSerializer(instance=ticket).data)
|
||||||
|
|
Loading…
Reference in New Issue