From 2db95349b2f8dcb94a41bbdc484f5fa5b4838e92 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 13 Jun 2023 09:29:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=B3=E9=97=AD=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=97=B6=E9=9C=80=E8=A6=81=E6=89=A7=E8=A1=8C=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=97=B6=E8=B0=83=E7=94=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/opm/serializers.py | 4 ++-- apps/wf/views.py | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index 46593d34..5a6f59a2 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -204,8 +204,8 @@ class OplCreateUpdateSerializer(CustomModelSerializer): if operation.state == Operation.OP_DONE: raise ParseError('作业已关闭不可创建许可') cate = validated_data['cate'] - if Opl.objects.filter(operation=operation, cate=cate).exists(): - raise ParseError('该类许可证已存在,不可重复申请') + if Opl.objects.filter(operation=operation, cate=cate).exclude(ticket__act_state=5).exists(): + raise ParseError('该类有效许可证已存在,不可重复申请') return super().create(validated_data) diff --git a/apps/wf/views.py b/apps/wf/views.py index 8742c47e..a5e74990 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -23,7 +23,7 @@ from rest_framework import status from django.db.models import Count from rest_framework.serializers import Serializer from apps.utils.snowflake import idWorker - +import importlib from apps.wf.tasks import run_task # Create your views here. @@ -465,6 +465,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R @action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=TicketCloseSerializer) + @transaction.atomic def close(self, request, pk=None): """ 关闭工单(创建人在初始状态) @@ -484,6 +485,11 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, participant=request.user, transition=None) + if end_state.on_reach_func: # 如果有到达方法还需要进行处理 + module, func = end_state.on_reach_func.rsplit(".", 1) + m = importlib.import_module(module) + f = getattr(m, func) + f(ticket=ticket) # 同步执行 return Response() else: return Response('工单不可关闭', status=status.HTTP_400_BAD_REQUEST)