## 主要修复 - 修复Creo软件运行状态检测失败问题 - 添加完整的软件停止功能支持 - 改进多进程软件的进程管理逻辑 ## 技术改进 - 更新软件配置支持多进程名称检测 - 优化进程停止逻辑,增加超时配置 - 新增 stop_software WebSocket消息类型 - 完善错误处理和日志记录 ## 配置更新 - configs/software_config.yaml: 支持进程名称列表和停止超时 - 添加Revit 2017配置支持 ## 文档更新 - README.md: 更新软件配置说明和API列表 - frontend-api-docs.md: 添加停止软件API文档 - CHECKPOINT.md: 记录修复进展和解决方案 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
123 lines
4.0 KiB
Python
123 lines
4.0 KiB
Python
import sys
|
|
sys.path.append('app')
|
|
|
|
from datetime import datetime
|
|
from models.user import User
|
|
from models.software import SoftwareDefinition
|
|
from models.task import Task, TaskStatus, TaskType
|
|
from schemas.auth import LoginRequest, LoginResponse, TokenData
|
|
from schemas.software import SoftwareInfo, SoftwareActionResponse
|
|
from schemas.task import TaskResponse, SSEEvent
|
|
|
|
def test_models():
|
|
print("=== 测试数据模型 ===")
|
|
|
|
# 测试用户模型
|
|
print("\n1. 测试用户模型:")
|
|
try:
|
|
user = User(
|
|
username="admin",
|
|
password_hash="$2b$12$test",
|
|
is_active=True,
|
|
permissions=["software:start", "software:stop"]
|
|
)
|
|
print(f"✅ 用户模型: {user.username}, 权限: {user.permissions}")
|
|
except Exception as e:
|
|
print(f"❌ 用户模型失败: {e}")
|
|
|
|
# 测试软件定义模型
|
|
print("\n2. 测试软件定义模型:")
|
|
try:
|
|
software = SoftwareDefinition(
|
|
name="PTC Creo",
|
|
executable_path="C:\\Program Files\\PTC\\Creo\\parametric.exe",
|
|
startup_args=[],
|
|
startup_timeout=60,
|
|
check_process_name="parametric.exe"
|
|
)
|
|
print(f"✅ 软件定义: {software.name}, 超时: {software.startup_timeout}s")
|
|
except Exception as e:
|
|
print(f"❌ 软件定义失败: {e}")
|
|
|
|
# 测试任务模型
|
|
print("\n3. 测试任务模型:")
|
|
try:
|
|
task = Task(
|
|
id="task_001",
|
|
task_type=TaskType.START_SOFTWARE,
|
|
software_id="creo",
|
|
status=TaskStatus.PENDING,
|
|
created_at=datetime.now(),
|
|
progress=0
|
|
)
|
|
print(f"✅ 任务模型: {task.id}, 类型: {task.task_type}, 状态: {task.status}")
|
|
except Exception as e:
|
|
print(f"❌ 任务模型失败: {e}")
|
|
|
|
def test_schemas():
|
|
print("\n=== 测试API模式 ===")
|
|
|
|
# 测试登录请求
|
|
print("\n1. 测试登录请求:")
|
|
try:
|
|
login_req = LoginRequest(username="admin", password="password123")
|
|
print(f"✅ 登录请求: 用户名 {login_req.username}")
|
|
except Exception as e:
|
|
print(f"❌ 登录请求失败: {e}")
|
|
|
|
# 测试登录响应
|
|
print("\n2. 测试登录响应:")
|
|
try:
|
|
login_resp = LoginResponse(
|
|
access_token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
|
|
refresh_token="refresh_token_here",
|
|
expires_in=1800
|
|
)
|
|
print(f"✅ 登录响应: Token类型 {login_resp.token_type}, 过期时间 {login_resp.expires_in}s")
|
|
except Exception as e:
|
|
print(f"❌ 登录响应失败: {e}")
|
|
|
|
# 测试软件信息
|
|
print("\n3. 测试软件信息:")
|
|
try:
|
|
software_info = SoftwareInfo(
|
|
id="creo",
|
|
name="PTC Creo",
|
|
is_running=False,
|
|
process_id=None
|
|
)
|
|
print(f"✅ 软件信息: {software_info.name}, 运行状态: {software_info.is_running}")
|
|
except Exception as e:
|
|
print(f"❌ 软件信息失败: {e}")
|
|
|
|
# 测试软件操作响应
|
|
print("\n4. 测试软件操作响应:")
|
|
try:
|
|
action_resp = SoftwareActionResponse(
|
|
task_id="task_001",
|
|
software_id="creo",
|
|
action="start",
|
|
status=TaskStatus.PENDING,
|
|
message="软件启动任务已创建"
|
|
)
|
|
print(f"✅ 操作响应: 任务 {action_resp.task_id}, 操作 {action_resp.action}")
|
|
except Exception as e:
|
|
print(f"❌ 操作响应失败: {e}")
|
|
|
|
# 测试SSE事件
|
|
print("\n5. 测试SSE事件:")
|
|
try:
|
|
sse_event = SSEEvent(
|
|
event_type="software_status",
|
|
task_id="task_001",
|
|
software_id="creo",
|
|
data={"status": "starting", "progress": 25}
|
|
)
|
|
print(f"✅ SSE事件: 类型 {sse_event.event_type}, 数据: {sse_event.data}")
|
|
except Exception as e:
|
|
print(f"❌ SSE事件失败: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
test_models()
|
|
test_schemas()
|
|
print("\n=== 模型测试完成 ===") |