diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index be20e37..0aebb03 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -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) diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 3c3a730..e7987ec 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -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) diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index bf83291..beb9724 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -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 diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index ed9ec46..7dfa9c2 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -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)