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='工单自定义字段内容')
|
||||
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='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效')
|
||||
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 = models.JSONField('当前处理人', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表')
|
||||
act_state = models.IntegerField('进行状态', default=1, help_text='当前工单的进行状态', choices=act_state_choices)
|
||||
|
|
|
@ -126,7 +126,7 @@ class TicketFlowSimpleSerializer(serializers.ModelSerializer):
|
|||
class TicketHandleSerializer(serializers.Serializer):
|
||||
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), label="流转id")
|
||||
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):
|
||||
suggestion = serializers.CharField(label="撤回原因", required = False)
|
||||
|
|
|
@ -201,7 +201,7 @@ class WfService(object):
|
|||
transitions = cls.get_state_transitions(ticket.state)
|
||||
if not transitions:
|
||||
return dict(permission=True, msg="工单当前状态无需操作")
|
||||
current_participant_count = 1
|
||||
current_participant_count = 0
|
||||
participant_type = ticket.participant_type
|
||||
participant = ticket.participant
|
||||
state = ticket.state
|
||||
|
@ -346,4 +346,6 @@ class WfService(object):
|
|||
# 如果目标状态是脚本则执行
|
||||
if destination_state.participant_type == State.PARTICIPANT_TYPE_ROBOT:
|
||||
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.models import query
|
||||
from rest_framework.utils import serializer_helpers
|
||||
|
@ -146,7 +147,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.validated_data #校验之后的数据
|
||||
start_state = WfService.get_workflow_start_state(vdata['workflow'])
|
||||
transition = vdata['transition']
|
||||
transition = vdata.pop('transition')
|
||||
ticket_data = vdata['ticket_data']
|
||||
|
||||
save_ticket_data = {}
|
||||
|
@ -154,7 +155,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
if transition.field_require_check:
|
||||
for key, value in start_state.state_fields.items():
|
||||
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))
|
||||
save_ticket_data[key] = ticket_data[key]
|
||||
elif value == State.STATE_FIELD_OPTIONAL:
|
||||
|
@ -162,6 +163,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
|
||||
ticket = serializer.save(state=start_state,
|
||||
create_by=request.user,
|
||||
create_time=timezone.now(),
|
||||
act_state=Ticket.TICKET_ACT_STATE_DRAFT,
|
||||
belong_dept=request.user.dept,
|
||||
ticket_data=save_ticket_data) # 先创建出来
|
||||
|
@ -176,7 +178,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
ticket.title = title
|
||||
ticket.save()
|
||||
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)
|
||||
|
||||
@action(methods=['get'], detail=False, perms_map={'get':'*'})
|
||||
|
@ -201,7 +203,9 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
serializer = TicketHandleSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
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'],
|
||||
new_ticket_data=new_ticket_data, handler=request.user, suggestion=vdata['suggestion'])
|
||||
return Response(TicketSerializer(instance=ticket).data)
|
||||
|
|
Loading…
Reference in New Issue