From 2efd11c0197f4130e699650ce76bc727946b11cd Mon Sep 17 00:00:00 2001 From: colaftc Date: Mon, 17 Nov 2025 16:38:09 +0800 Subject: [PATCH] feat: query all process nodes for business_object --- debug_advance_bug.py | 154 ----------------------------- examples/test_process_nodes_api.py | 35 ------- 2 files changed, 189 deletions(-) delete mode 100644 debug_advance_bug.py delete mode 100644 examples/test_process_nodes_api.py diff --git a/debug_advance_bug.py b/debug_advance_bug.py deleted file mode 100644 index 3fa9c4c..0000000 --- a/debug_advance_bug.py +++ /dev/null @@ -1,154 +0,0 @@ -""" -调试脚本:检查 advance_to_next_state 是否会导致"前进2步"的bug -""" -import os -import django - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'flower.settings') -django.setup() - -from django.contrib.auth import get_user_model -from stateflow.models import State, Process, BusinessObject, StateFlowRecord -from stateflow.services import advance_to_next_state, get_business_object_current_state, get_completed_node_ids, get_progress_percentage - -User = get_user_model() - -def main(): - # 创建测试用户 - user = User.objects.first() - if not user: - user = User.objects.create_user(username='debuguser', password='debug123') - print(f"创建测试用户: {user.username}") - - # 创建3个状态节点 - state1 = State.objects.create(name='Debug State 1') - state2 = State.objects.create(name='Debug State 2') - state3 = State.objects.create(name='Debug State 3') - print(f"\n创建状态节点:") - print(f" - {state1.name} (ID: {state1.id})") - print(f" - {state2.name} (ID: {state2.id})") - print(f" - {state3.name} (ID: {state3.id})") - - # 创建流程 - process = Process.objects.create(name='Debug Process') - process.replace_nodes([state1, state2, state3]) - print(f"\n创建流程: {process.name}") - print(f"节点顺序: {state1.name} -> {state2.name} -> {state3.name}") - - # 创建业务对象 - bo = BusinessObject.objects.create(name='Debug BO', process=process) - print(f"\n创建业务对象: {bo.name}") - - # 检查初始状态 - print(f"\n{'='*60}") - print(f"初始状态检查") - print(f"{'='*60}") - current = get_business_object_current_state(bo) - completed_ids = get_completed_node_ids(bo) - progress = get_progress_percentage(bo) - logs_count = StateFlowRecord.objects.filter(business_object=bo, is_cancelled=False).count() - - print(f"Current State: {current.name if current else 'None'} (ID: {current.id if current else 'N/A'})") - print(f"Completed Node IDs: {completed_ids}") - print(f"Progress: {progress:.2f}%") - print(f"Log Records Count: {logs_count}") - print(f"\n✓ 期望: Current='{state1.name}', Completed=[], Progress=0%, Logs=0") - - if current and current.id != state1.id: - print(f"❌ 错误: Current State 应该是 '{state1.name}' 但实际是 '{current.name}'") - cleanup(bo, process, [state1, state2, state3]) - return False - - if len(completed_ids) != 0: - print(f"❌ 错误: 应该没有完成的节点,但有 {len(completed_ids)} 个") - cleanup(bo, process, [state1, state2, state3]) - return False - - print("✅ 初始状态正确") - - # 第一次推进 - print(f"\n{'='*60}") - print(f"第一次调用 advance_to_next_state") - print(f"{'='*60}") - - success, message, log = advance_to_next_state(bo, user) - - print(f"Success: {success}") - print(f"Message: {message}") - print(f"Created Log ID: {log.id if log else 'None'}") - if log: - print(f"Log State: {log.state.name} (ID: {log.state_id})") - - # 检查推进后的状态 - print(f"\n推进后状态检查:") - current = get_business_object_current_state(bo) - completed_ids = get_completed_node_ids(bo) - progress = get_progress_percentage(bo) - logs_count = StateFlowRecord.objects.filter(business_object=bo, is_cancelled=False).count() - all_logs = StateFlowRecord.objects.filter(business_object=bo, is_cancelled=False).values_list('state_id', 'state__name') - - print(f"Current State: {current.name if current else 'None'} (ID: {current.id if current else 'N/A'})") - print(f"Completed Node IDs: {completed_ids}") - print(f"Completed Nodes: {[State.objects.get(id=cid).name for cid in completed_ids]}") - print(f"Progress: {progress:.2f}%") - print(f"Log Records Count: {logs_count}") - print(f"All Logs: {list(all_logs)}") - - print(f"\n✓ 期望: Current='{state2.name}', Completed=[{state1.name}], Progress=33.33%, Logs=1") - - # 验证 - has_error = False - - if current and current.id != state2.id: - print(f"\n❌ BUG FOUND! Current State 应该是 '{state2.name}' (ID: {state2.id}) 但实际是 '{current.name}' (ID: {current.id})") - has_error = True - - if len(completed_ids) != 1: - print(f"\n❌ BUG FOUND! 应该完成1个节点,但实际完成了 {len(completed_ids)} 个") - has_error = True - - if completed_ids and completed_ids[0] != state1.id: - print(f"\n❌ BUG FOUND! 完成的节点应该是 '{state1.name}' 但实际是 ID {completed_ids[0]}") - has_error = True - - if logs_count != 1: - print(f"\n❌ BUG FOUND! 应该有1条日志记录,但实际有 {logs_count} 条") - has_error = True - - if abs(progress - 33.33) > 0.1: - print(f"\n❌ BUG FOUND! 进度应该是 33.33% 但实际是 {progress:.2f}%") - has_error = True - - if not has_error: - print("\n✅ 所有检查通过!没有发现bug") - - # 清理 - cleanup(bo, process, [state1, state2, state3]) - - return not has_error - -def cleanup(bo, process, states): - """清理测试数据""" - print(f"\n{'='*60}") - print("清理测试数据...") - bo.delete() - process.delete() - for state in states: - state.delete() - print("清理完成") - print(f"{'='*60}") - -if __name__ == '__main__': - try: - result = main() - if result: - print("\n🎉 测试通过!") - exit(0) - else: - print("\n💥 测试失败!发现bug") - exit(1) - except Exception as e: - print(f"\n❌ 测试异常: {e}") - import traceback - traceback.print_exc() - exit(1) diff --git a/examples/test_process_nodes_api.py b/examples/test_process_nodes_api.py deleted file mode 100644 index ff525ad..0000000 --- a/examples/test_process_nodes_api.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -测试新增的 get_process_nodes API 端点 -""" -import requests - -BASE_URL = "http://localhost:8000" - -# 假设你已经有了 JWT token -TOKEN = "your_jwt_token_here" -headers = {"Authorization": f"Bearer {TOKEN}"} - -# 业务对象 ID -business_object_id = 1 - -# 获取流程的所有节点 -response = requests.get( - f"{BASE_URL}/api/v1/stateflow/business-objects/{business_object_id}/process-nodes/", - headers=headers -) - -if response.status_code == 200: - data = response.json() - print(f"流程共有 {data['count']} 个节点:") - print() - - for node in data['nodes']: - print(f"节点 {node['order'] + 1}:") - print(f" - ProcessNode ID: {node['id']}") - print(f" - State ID: {node['state_id']}") - print(f" - State 名称: {node['state_name']}") - print(f" - 顺序: {node['order']}") - print() -else: - print(f"错误: {response.status_code}") - print(response.json())