handleticket bug修复

This commit is contained in:
caoqianming 2021-12-21 10:04:19 +08:00
parent d54df1a442
commit 0bd5516cef
4 changed files with 13 additions and 7 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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)