From 3f2db2a4af7005cfc04216cbb56bd99839270ce6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 25 Nov 2025 10:23:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20wf=20=E8=B0=83=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=94=AF=E6=8C=81=E9=9D=99=E6=80=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/services.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/apps/wf/services.py b/apps/wf/services.py index 7a2f1090..2d477457 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -163,9 +163,12 @@ class WfService(object): destination_participant = 0 elif destination_participant_type == State.PARTICIPANT_TYPE_FORMCODE: # 代码获取 - module, func = destination_participant.rsplit(".", 1) - m = importlib.import_module(module) - f = getattr(m, func) + parts = destination_participant.split('.') + try: + m = importlib.import_module('.'.join(parts[:-1])) + except ModuleNotFoundError: + m = getattr(importlib.import_module('.'.join(parts[:-2])), parts[-2]) + f = getattr(m, parts[-1]) destination_participant = f(state=state, ticket=ticket, new_ticket_data=new_ticket_data, handler=handler) elif destination_participant_type == State.PARTICIPANT_TYPE_DEPT: # 部门 @@ -352,9 +355,12 @@ class WfService(object): # 提交时可能进行的操作 if transition.on_submit_func: - module, func = transition.on_submit_func.rsplit(".", 1) - m = importlib.import_module(module) - f = getattr(m, func) + parts = transition.on_submit_func.split('.') + try: + m = importlib.import_module('.'.join(parts[:-1])) + except ModuleNotFoundError: + m = getattr(importlib.import_module('.'.join(parts[:-2])), parts[-2]) + f = getattr(m, parts[-1]) f(ticket=ticket, transition=transition, new_ticket_data=new_ticket_data) # 校验处理权限 @@ -474,9 +480,12 @@ class WfService(object): state = ticket.state # 如果目标状态有func,由func执行额外操作(比如发送通知) if state.on_reach_func: - module, func = state.on_reach_func.rsplit(".", 1) - m = importlib.import_module(module) - f = getattr(m, func) + parts = state.on_reach_func.split('.') + try: + m = importlib.import_module('.'.join(parts[:-1])) + except ModuleNotFoundError: + m = getattr(importlib.import_module('.'.join(parts[:-2])), parts[-2]) + f = getattr(m, parts[-1]) f(ticket=ticket) # 同步执行 # wf默认只发送通知