去掉数据库冗余pathname字段,将“PathRouteId”更改为“RouteId”
This commit is contained in:
parent
0869e32ccb
commit
eeade5553f
@ -72,7 +72,7 @@ CREATE INDEX idx_batch_tasks_created ON BatchTasks(CreatedTime);
|
||||
CREATE TABLE BatchTaskItems (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
BatchTaskId INTEGER NOT NULL, -- 关联的批处理任务ID
|
||||
PathRouteId TEXT NOT NULL, -- 关联的路径ID(使用TEXT,与PathRoutes.Id一致)
|
||||
RouteId TEXT NOT NULL, -- 关联的路径ID(使用TEXT,与PathRoutes.Id一致)
|
||||
PathRouteName TEXT NOT NULL, -- 路径名称(冗余,方便查询)
|
||||
SequenceNumber INTEGER NOT NULL, -- 执行顺序
|
||||
Status TEXT NOT NULL, -- 任务项状态:Pending, Running, Completed, Failed, Skipped
|
||||
@ -88,7 +88,7 @@ CREATE TABLE BatchTaskItems (
|
||||
);
|
||||
|
||||
CREATE INDEX idx_batch_task_items_batch ON BatchTaskItems(BatchTaskId);
|
||||
CREATE INDEX idx_batch_task_items_path ON BatchTaskItems(PathRouteId);
|
||||
CREATE INDEX idx_batch_task_items_path ON BatchTaskItems(RouteId);
|
||||
CREATE INDEX idx_batch_task_items_status ON BatchTaskItems(Status);
|
||||
```
|
||||
|
||||
@ -169,7 +169,7 @@ public class BatchTaskItem
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int BatchTaskId { get; set; }
|
||||
public string PathRouteId { get; set; } // 使用TEXT,与PathRoutes.Id一致
|
||||
public string RouteId { get; set; } // 使用TEXT,与PathRoutes.Id一致
|
||||
public string PathRouteName { get; set; }
|
||||
public int SequenceNumber { get; set; }
|
||||
public BatchTaskItemStatus Status { get; set; }
|
||||
@ -339,7 +339,7 @@ namespace NavisworksTransport.Core.Collision
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"执行任务项失败 (PathRouteId: {item.PathRouteId}): {ex.Message}");
|
||||
LogManager.Error($"执行任务项失败 (RouteId: {item.RouteId}): {ex.Message}");
|
||||
item.Status = BatchTaskItemStatus.Failed;
|
||||
item.ErrorMessage = ex.Message;
|
||||
task.FailedItems++;
|
||||
@ -385,10 +385,10 @@ namespace NavisworksTransport.Core.Collision
|
||||
|
||||
var config = task.DefaultConfig.MergeWith(item.ConfigOverride);
|
||||
|
||||
var pathRoute = await _database.GetPathRouteAsync(item.PathRouteId);
|
||||
var pathRoute = await _database.GetPathRouteAsync(item.RouteId);
|
||||
if (pathRoute == null)
|
||||
{
|
||||
throw new InvalidOperationException($"路径不存在 (Id: {item.PathRouteId})");
|
||||
throw new InvalidOperationException($"路径不存在 (Id: {item.RouteId})");
|
||||
}
|
||||
|
||||
// 获取运动物体
|
||||
@ -476,7 +476,7 @@ namespace NavisworksTransport.Core.Collision
|
||||
summaryReport.TotalCollisions += result.CollisionCount;
|
||||
summaryReport.PathSummaries.Add(new PathCollisionSummary
|
||||
{
|
||||
PathRouteId = item.PathRouteId,
|
||||
RouteId = item.RouteId,
|
||||
PathRouteName = item.PathRouteName,
|
||||
CollisionCount = result.CollisionCount,
|
||||
TestName = result.TestName,
|
||||
@ -585,7 +585,7 @@ namespace NavisworksTransport.Core
|
||||
var item = new BatchTaskItem
|
||||
{
|
||||
BatchTaskId = taskId,
|
||||
PathRouteId = itemConfig.PathRouteId,
|
||||
RouteId = itemConfig.RouteId,
|
||||
PathRouteName = itemConfig.PathRouteName,
|
||||
SequenceNumber = sequence++,
|
||||
Status = BatchTaskItemStatus.Pending,
|
||||
|
||||
@ -42,7 +42,7 @@ namespace NavisworksTransport.Commands
|
||||
/// <summary>
|
||||
/// 路径ID(用于视角调整)
|
||||
/// </summary>
|
||||
public string PathRouteId { get; set; } = string.Empty;
|
||||
public string RouteId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 碰撞结果是否已经被高亮过了(用于避免重复高亮)
|
||||
@ -221,7 +221,7 @@ namespace NavisworksTransport.Commands
|
||||
{
|
||||
// 从所有路径中查找当前路径
|
||||
var allRoutes = PathPlanningManager.Instance.GetAllRoutes();
|
||||
var pathRoute = allRoutes.FirstOrDefault(r => r.Id == _parameters.PathRouteId);
|
||||
var pathRoute = allRoutes.FirstOrDefault(r => r.Id == _parameters.RouteId);
|
||||
|
||||
ViewpointHelper.AdjustViewpointSmart(pathRoute, collisionData.AllCollisions);
|
||||
|
||||
@ -715,19 +715,19 @@ namespace NavisworksTransport.Commands
|
||||
/// <summary>
|
||||
/// 创建综合报告命令
|
||||
/// </summary>
|
||||
/// <param name="pathRouteId">路径ID(用于视角调整),如果为空则使用全局CurrentRoute</param>
|
||||
/// <param name="routeId">路径ID(用于视角调整),如果为空则使用全局CurrentRoute</param>
|
||||
/// <param name="hasHighlighted">碰撞结果是否已经被高亮</param>
|
||||
public static GenerateCollisionReportCommand CreateComprehensive(string pathRouteId = null, bool hasHighlighted = false)
|
||||
public static GenerateCollisionReportCommand CreateComprehensive(string routeId = null, bool hasHighlighted = false)
|
||||
{
|
||||
// 如果没有传入路径ID,则从全局CurrentRoute获取
|
||||
if (string.IsNullOrEmpty(pathRouteId))
|
||||
if (string.IsNullOrEmpty(routeId))
|
||||
{
|
||||
try
|
||||
{
|
||||
var currentRoute = PathPlanningManager.Instance?.CurrentRoute;
|
||||
if (currentRoute != null)
|
||||
{
|
||||
pathRouteId = currentRoute.Id;
|
||||
routeId = currentRoute.Id;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -741,7 +741,7 @@ namespace NavisworksTransport.Commands
|
||||
Type = CollisionReportParameters.ReportType.Comprehensive,
|
||||
IncludeDetails = true,
|
||||
HasHighlighted = hasHighlighted,
|
||||
PathRouteId = pathRouteId
|
||||
RouteId = routeId
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1531,7 +1531,6 @@ namespace NavisworksTransport.Core.Animation
|
||||
ClashDetectiveIntegration.Instance.CreateAllAnimationCollisionTests(
|
||||
_allCollisionResults,
|
||||
_detectionTolerance,
|
||||
_pathName,
|
||||
_currentRouteId,
|
||||
_animatedObject,
|
||||
_isVirtualVehicle,
|
||||
|
||||
@ -258,10 +258,10 @@ namespace NavisworksTransport.Core
|
||||
|
||||
try
|
||||
{
|
||||
var pathRoute = await _database.GetPathRouteAsync(item.PathRouteId);
|
||||
var pathRoute = await _database.GetPathRouteAsync(item.RouteId);
|
||||
if (pathRoute == null)
|
||||
{
|
||||
throw new InvalidOperationException($"路径不存在 (Id: {item.PathRouteId})");
|
||||
throw new InvalidOperationException($"路径不存在 (Id: {item.RouteId})");
|
||||
}
|
||||
|
||||
// 获取运动物体
|
||||
@ -448,7 +448,7 @@ namespace NavisworksTransport.Core
|
||||
LogManager.Info($"[批处理队列] 已渲染路径可视化: {pathRoute.Name}");
|
||||
|
||||
var reportCommand = Commands.GenerateCollisionReportCommand.CreateComprehensive(
|
||||
pathRouteId: item.PathRouteId, // 使用任务自己的路径ID
|
||||
routeId: item.RouteId, // 使用任务自己的路径ID
|
||||
hasHighlighted: false
|
||||
);
|
||||
reportCommand.SetTestName(testName);
|
||||
|
||||
@ -92,7 +92,6 @@ namespace NavisworksTransport.Core.Collision
|
||||
var testName = _clashIntegration.CreateAllAnimationCollisionTestsForBatch(
|
||||
precomputedCollisions,
|
||||
detectionGap,
|
||||
pathName,
|
||||
routeId,
|
||||
animatedObject,
|
||||
isVirtualVehicle,
|
||||
|
||||
@ -147,7 +147,7 @@ namespace NavisworksTransport
|
||||
/// <summary>
|
||||
/// 保存ClashDetective结果到数据库
|
||||
/// </summary>
|
||||
private void SaveClashDetectiveResultToDatabase(string pathName, string routeId, List<CollisionResult> clashResults,
|
||||
private void SaveClashDetectiveResultToDatabase(string routeId, List<CollisionResult> clashResults,
|
||||
int frameRate, double duration, double detectionGap,
|
||||
ModelItem animatedObject, bool isVirtualVehicle,
|
||||
double virtualVehicleLength, double virtualVehicleWidth, double virtualVehicleHeight)
|
||||
@ -181,7 +181,6 @@ namespace NavisworksTransport
|
||||
var record = new ClashDetectiveResultRecord
|
||||
{
|
||||
TestName = _currentTestName,
|
||||
PathName = pathName,
|
||||
RouteId = routeId ?? "",
|
||||
TestTime = DateTime.Now,
|
||||
CollisionCount = clashResults.Count,
|
||||
@ -229,7 +228,8 @@ namespace NavisworksTransport
|
||||
LogManager.Info($"已保存 {collisionObjects.Count} 个被撞物体到数据库");
|
||||
}
|
||||
|
||||
// 触发结果保存事件,通知UI刷新列表
|
||||
// 触发结果保存事件,通知UI刷新列表(从RouteId获取PathName)
|
||||
var pathName = GetPathNameByRouteId(routeId);
|
||||
ClashDetectiveResultSaved?.Invoke(this, new ClashDetectiveResultSavedEventArgs(pathName, _currentTestName, clashResults.Count));
|
||||
}
|
||||
}
|
||||
@ -240,6 +240,30 @@ namespace NavisworksTransport
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据RouteId获取路径名称
|
||||
/// </summary>
|
||||
private string GetPathNameByRouteId(string routeId)
|
||||
{
|
||||
if (string.IsNullOrEmpty(routeId))
|
||||
return "未知路径";
|
||||
|
||||
try
|
||||
{
|
||||
var pathDatabase = PathPlanningManager.Instance?.GetPathDatabase();
|
||||
if (pathDatabase != null)
|
||||
{
|
||||
var pathRoute = pathDatabase.GetPathRouteSync(routeId);
|
||||
return pathRoute?.Name ?? "未知路径";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"获取路径名称失败: {ex.Message}");
|
||||
}
|
||||
return "未知路径";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从数据库加载ClashDetective碰撞结果
|
||||
/// </summary>
|
||||
@ -256,12 +280,13 @@ namespace NavisworksTransport
|
||||
return null;
|
||||
}
|
||||
|
||||
// 1. 从数据库读取测试信息
|
||||
// 1. 从数据库读取测试信息(添加JOIN获取PathName)
|
||||
var testInfoSql = @"
|
||||
SELECT Id, PathName, RouteId, IsVirtualVehicle, VehicleModelIndex, VehiclePathId,
|
||||
VirtualVehicleLength, VirtualVehicleWidth, VirtualVehicleHeight, ScreenshotPath
|
||||
FROM ClashDetectiveResults
|
||||
WHERE TestName = @testName
|
||||
SELECT cdr.Id, pr.Name AS PathName, cdr.RouteId, cdr.IsVirtualVehicle, cdr.VehicleModelIndex, cdr.VehiclePathId,
|
||||
cdr.VirtualVehicleLength, cdr.VirtualVehicleWidth, cdr.VirtualVehicleHeight, cdr.ScreenshotPath
|
||||
FROM ClashDetectiveResults cdr
|
||||
INNER JOIN PathRoutes pr ON cdr.RouteId = pr.Id
|
||||
WHERE cdr.TestName = @testName
|
||||
";
|
||||
|
||||
ClashDetectiveResultRecord testInfo = null;
|
||||
@ -480,7 +505,6 @@ namespace NavisworksTransport
|
||||
public (ClashResultGroup collisionGroup, ClashTest addedMainTest, int confirmedCount) RunClashDetectiveTestsAndSaveToDatabase(
|
||||
List<CollisionResult> precomputedCollisions,
|
||||
double detectionGap,
|
||||
string pathName,
|
||||
string routeId,
|
||||
ModelItem animatedObject,
|
||||
bool isVirtualVehicle,
|
||||
@ -536,7 +560,6 @@ namespace NavisworksTransport
|
||||
|
||||
// 保存到数据库
|
||||
SaveClashDetectiveResultToDatabase(
|
||||
pathName,
|
||||
routeId,
|
||||
new List<CollisionResult>(),
|
||||
frameRate,
|
||||
@ -751,7 +774,7 @@ namespace NavisworksTransport
|
||||
_clashDetectiveCollisionCount = clashResults.Count;
|
||||
|
||||
// 保存到数据库(使用去重后的结果)
|
||||
SaveClashDetectiveResultToDatabase(pathName, routeId, finalClashResults, frameRate, duration, detectionGap, animatedObject, isVirtualVehicle,
|
||||
SaveClashDetectiveResultToDatabase(routeId, finalClashResults, frameRate, duration, detectionGap, animatedObject, isVirtualVehicle,
|
||||
virtualVehicleLength, virtualVehicleWidth, virtualVehicleHeight);
|
||||
|
||||
LogManager.Info($"[ClashDetective] 结果已保存到数据库");
|
||||
@ -765,7 +788,6 @@ namespace NavisworksTransport
|
||||
/// </summary>
|
||||
/// <param name="precomputedCollisions">预计算碰撞结果</param>
|
||||
/// <param name="detectionGap">检测间隙容差</param>
|
||||
/// <param name="pathName">路径名称</param>
|
||||
/// <param name="routeId">路由ID</param>
|
||||
/// <param name="animatedObject">动画对象(如果是真实车辆)</param>
|
||||
/// <param name="isVirtualVehicle">是否使用虚拟车辆</param>
|
||||
@ -778,7 +800,6 @@ namespace NavisworksTransport
|
||||
public void CreateAllAnimationCollisionTests(
|
||||
List<CollisionResult> precomputedCollisions,
|
||||
double detectionGap,
|
||||
string pathName,
|
||||
string routeId,
|
||||
ModelItem animatedObject,
|
||||
bool isVirtualVehicle,
|
||||
@ -817,13 +838,12 @@ namespace NavisworksTransport
|
||||
ClashTest addedMainTest = null;
|
||||
ClashResultGroup collisionGroup = null;
|
||||
int confirmedCount = 0;
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var result = RunClashDetectiveTestsAndSaveToDatabase(
|
||||
precomputedCollisions,
|
||||
detectionGap,
|
||||
pathName,
|
||||
routeId,
|
||||
animatedObject,
|
||||
isVirtualVehicle,
|
||||
@ -1524,7 +1544,6 @@ namespace NavisworksTransport
|
||||
public string CreateAllAnimationCollisionTestsForBatch(
|
||||
List<CollisionResult> precomputedCollisions,
|
||||
double detectionGap,
|
||||
string pathName,
|
||||
string routeId,
|
||||
ModelItem animatedObject,
|
||||
bool isVirtualVehicle,
|
||||
@ -1549,7 +1568,6 @@ namespace NavisworksTransport
|
||||
var result = RunClashDetectiveTestsAndSaveToDatabase(
|
||||
precomputedCollisions,
|
||||
detectionGap,
|
||||
pathName,
|
||||
routeId,
|
||||
animatedObject,
|
||||
isVirtualVehicle,
|
||||
|
||||
@ -9,8 +9,8 @@ namespace NavisworksTransport.Core.Models
|
||||
public class BatchQueueItem
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string PathRouteId { get; set; }
|
||||
public string PathRouteName { get; set; }
|
||||
public string RouteId { get; set; }
|
||||
public string PathRouteName { get; set; } // 通过 JOIN PathRoutes 获取,用于显示
|
||||
public BatchQueueStatus Status { get; set; }
|
||||
public DateTime CreatedTime { get; set; }
|
||||
public DateTime? StartTime { get; set; }
|
||||
|
||||
@ -97,7 +97,6 @@ namespace NavisworksTransport
|
||||
CREATE TABLE IF NOT EXISTS CollisionReports (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
RouteId TEXT,
|
||||
PathName TEXT,
|
||||
AnimatedObjectName TEXT,
|
||||
UniqueCollidedObjectsCount INTEGER,
|
||||
FrameRate INTEGER,
|
||||
@ -171,7 +170,6 @@ namespace NavisworksTransport
|
||||
CREATE TABLE IF NOT EXISTS ClashDetectiveResults (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
TestName TEXT NOT NULL UNIQUE,
|
||||
PathName TEXT NOT NULL,
|
||||
RouteId TEXT NOT NULL,
|
||||
TestTime DATETIME NOT NULL,
|
||||
CollisionCount INTEGER NOT NULL,
|
||||
@ -208,7 +206,7 @@ namespace NavisworksTransport
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_reports_route ON CollisionReports(RouteId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_pathpoints_route ON PathPoints(RouteId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_pathedges_route ON PathEdges(RouteId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_clash_path_name ON ClashDetectiveResults(PathName)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_clash_route_id ON ClashDetectiveResults(RouteId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_clash_test_time ON ClashDetectiveResults(TestTime DESC)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_clash_objects_result ON ClashDetectiveCollisionObjects(ResultId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_clash_objects_path ON ClashDetectiveCollisionObjects(PathId)");
|
||||
@ -217,8 +215,7 @@ namespace NavisworksTransport
|
||||
ExecuteNonQuery(@"
|
||||
CREATE TABLE IF NOT EXISTS BatchQueueItems (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
PathRouteId TEXT NOT NULL,
|
||||
PathRouteName TEXT NOT NULL,
|
||||
RouteId TEXT NOT NULL,
|
||||
Status TEXT NOT NULL,
|
||||
CreatedTime TEXT NOT NULL,
|
||||
StartTime TEXT,
|
||||
@ -241,7 +238,7 @@ namespace NavisworksTransport
|
||||
// 批处理表索引
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_batch_queue_status ON BatchQueueItems(Status)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_batch_queue_created ON BatchQueueItems(CreatedTime)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_batch_queue_path ON BatchQueueItems(PathRouteId)");
|
||||
ExecuteNonQuery("CREATE INDEX IF NOT EXISTS idx_batch_queue_route_id ON BatchQueueItems(RouteId)");
|
||||
|
||||
// 通用 ModelItem 引用表(用于存储运动物体、碰撞物体等)
|
||||
ExecuteNonQuery(@"
|
||||
@ -367,16 +364,15 @@ namespace NavisworksTransport
|
||||
{
|
||||
var sql = @"
|
||||
INSERT INTO CollisionReports
|
||||
(RouteId, PathName, AnimatedObjectName, UniqueCollidedObjectsCount, FrameRate, Duration,
|
||||
(RouteId, AnimatedObjectName, UniqueCollidedObjectsCount, FrameRate, Duration,
|
||||
DetectionGap, AnimationCollisionCount, ClashDetectiveCollisionCount, ReportTime)
|
||||
VALUES (@routeId, @pathName, @animatedObjectName, @uniqueCollidedObjectsCount, @frameRate, @duration,
|
||||
VALUES (@routeId, @animatedObjectName, @uniqueCollidedObjectsCount, @frameRate, @duration,
|
||||
@detectionGap, @animationCount, @clashCount, @reportTime)
|
||||
";
|
||||
|
||||
using (var cmd = new SQLiteCommand(sql, _connection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@routeId", routeId ?? "");
|
||||
cmd.Parameters.AddWithValue("@pathName", pathName ?? "未知路径");
|
||||
cmd.Parameters.AddWithValue("@animatedObjectName", animatedObjectName ?? "未知对象");
|
||||
cmd.Parameters.AddWithValue("@uniqueCollidedObjectsCount", uniqueCollidedObjectsCount);
|
||||
cmd.Parameters.AddWithValue("@frameRate", frameRate);
|
||||
@ -388,7 +384,7 @@ namespace NavisworksTransport
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
LogManager.Info($"碰撞报告已保存: 路径={pathName}, 碰撞构件={uniqueCollidedObjectsCount}, 动画碰撞={animationCollisionCount}, ClashDetective碰撞={clashDetectiveCollisionCount}");
|
||||
LogManager.Info($"碰撞报告已保存: 路径ID={routeId}, 碰撞构件={uniqueCollidedObjectsCount}, 动画碰撞={animationCollisionCount}, ClashDetective碰撞={clashDetectiveCollisionCount}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -499,10 +495,10 @@ namespace NavisworksTransport
|
||||
|
||||
var sql = @"
|
||||
INSERT INTO ClashDetectiveResults
|
||||
(TestName, PathName, RouteId, TestTime, CollisionCount, AnimationCollisionCount,
|
||||
(TestName, RouteId, TestTime, CollisionCount, AnimationCollisionCount,
|
||||
FrameRate, Duration, DetectionGap, AnimatedObjectName, IsVirtualVehicle, VehicleModelIndex, VehiclePathId,
|
||||
VirtualVehicleLength, VirtualVehicleWidth, VirtualVehicleHeight, ScreenshotPath, CreatedAt)
|
||||
VALUES (@testName, @pathName, @routeId, @testTime, @collisionCount, @animationCollisionCount,
|
||||
VALUES (@testName, @routeId, @testTime, @collisionCount, @animationCollisionCount,
|
||||
@frameRate, @duration, @detectionGap, @animatedObjectName, @isVirtualVehicle, @vehicleModelIndex, @vehiclePathId,
|
||||
@virtualVehicleLength, @virtualVehicleWidth, @virtualVehicleHeight, @screenshotPath, @createdAt)
|
||||
";
|
||||
@ -511,7 +507,6 @@ namespace NavisworksTransport
|
||||
using (var cmd = new SQLiteCommand(sql, _connection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@testName", record.TestName);
|
||||
cmd.Parameters.AddWithValue("@pathName", record.PathName);
|
||||
cmd.Parameters.AddWithValue("@routeId", record.RouteId);
|
||||
cmd.Parameters.AddWithValue("@testTime", record.TestTime);
|
||||
cmd.Parameters.AddWithValue("@collisionCount", record.CollisionCount);
|
||||
@ -552,11 +547,12 @@ namespace NavisworksTransport
|
||||
try
|
||||
{
|
||||
var sql = @"
|
||||
SELECT Id, TestName, PathName, RouteId, TestTime, CollisionCount, AnimationCollisionCount,
|
||||
FrameRate, Duration, DetectionGap, AnimatedObjectName, CreatedAt
|
||||
FROM ClashDetectiveResults
|
||||
WHERE PathName = @pathName
|
||||
ORDER BY TestTime DESC
|
||||
SELECT cdr.Id, cdr.TestName, cdr.RouteId, pr.Name AS PathName, cdr.TestTime, cdr.CollisionCount, cdr.AnimationCollisionCount,
|
||||
cdr.FrameRate, cdr.Duration, cdr.DetectionGap, cdr.AnimatedObjectName, cdr.CreatedAt
|
||||
FROM ClashDetectiveResults cdr
|
||||
INNER JOIN PathRoutes pr ON cdr.RouteId = pr.Id
|
||||
WHERE pr.Name = @pathName
|
||||
ORDER BY cdr.TestTime DESC
|
||||
";
|
||||
|
||||
using (var cmd = new SQLiteCommand(sql, _connection))
|
||||
@ -603,11 +599,12 @@ namespace NavisworksTransport
|
||||
try
|
||||
{
|
||||
var sql = @"
|
||||
SELECT Id, TestName, PathName, RouteId, TestTime, CollisionCount, AnimationCollisionCount,
|
||||
FrameRate, Duration, DetectionGap, AnimatedObjectName, CreatedAt
|
||||
FROM ClashDetectiveResults
|
||||
WHERE PathName = @pathName
|
||||
ORDER BY TestTime DESC
|
||||
SELECT cdr.Id, cdr.TestName, cdr.RouteId, pr.Name AS PathName, cdr.TestTime, cdr.CollisionCount, cdr.AnimationCollisionCount,
|
||||
cdr.FrameRate, cdr.Duration, cdr.DetectionGap, cdr.AnimatedObjectName, cdr.CreatedAt
|
||||
FROM ClashDetectiveResults cdr
|
||||
INNER JOIN PathRoutes pr ON cdr.RouteId = pr.Id
|
||||
WHERE pr.Name = @pathName
|
||||
ORDER BY cdr.TestTime DESC
|
||||
LIMIT 1
|
||||
";
|
||||
|
||||
@ -671,10 +668,11 @@ namespace NavisworksTransport
|
||||
try
|
||||
{
|
||||
var sql = @"
|
||||
SELECT Id, TestName, PathName, RouteId, TestTime, CollisionCount, AnimationCollisionCount,
|
||||
FrameRate, Duration, DetectionGap, AnimatedObjectName, CreatedAt, ScreenshotPath
|
||||
FROM ClashDetectiveResults
|
||||
WHERE TestName = @testName
|
||||
SELECT cdr.Id, cdr.TestName, cdr.RouteId, pr.Name AS PathName, cdr.TestTime, cdr.CollisionCount, cdr.AnimationCollisionCount,
|
||||
cdr.FrameRate, cdr.Duration, cdr.DetectionGap, cdr.AnimatedObjectName, cdr.CreatedAt, cdr.ScreenshotPath
|
||||
FROM ClashDetectiveResults cdr
|
||||
INNER JOIN PathRoutes pr ON cdr.RouteId = pr.Id
|
||||
WHERE cdr.TestName = @testName
|
||||
";
|
||||
|
||||
using (var cmd = new SQLiteCommand(sql, _connection))
|
||||
@ -1344,42 +1342,50 @@ namespace NavisworksTransport
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据路径ID获取路径
|
||||
/// 异步获取路径信息
|
||||
/// </summary>
|
||||
public async Task<PathRoute> GetPathRouteAsync(string routeId)
|
||||
{
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
using (var cmd = new SQLiteCommand(_connection))
|
||||
return GetPathRouteSync(routeId);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 同步获取路径信息(用于需要同步调用的场景)
|
||||
/// </summary>
|
||||
public PathRoute GetPathRouteSync(string routeId)
|
||||
{
|
||||
using (var cmd = new SQLiteCommand(_connection))
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
SELECT Id, Name, CreatedTime, LastModified, TotalLength
|
||||
FROM PathRoutes
|
||||
WHERE Id = @Id";
|
||||
|
||||
cmd.Parameters.AddWithValue("@Id", routeId);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
SELECT Id, Name, CreatedTime, LastModified, TotalLength
|
||||
FROM PathRoutes
|
||||
WHERE Id = @Id";
|
||||
|
||||
cmd.Parameters.AddWithValue("@Id", routeId);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
if (reader.Read())
|
||||
{
|
||||
if (reader.Read())
|
||||
var route = new PathRoute(reader["Name"].ToString())
|
||||
{
|
||||
var route = new PathRoute(reader["Name"].ToString())
|
||||
{
|
||||
Id = reader["Id"].ToString(),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
LastModified = DateTime.Parse(reader["LastModified"].ToString()),
|
||||
TotalLength = Convert.ToDouble(reader["TotalLength"])
|
||||
};
|
||||
|
||||
// 加载路径点和路径边
|
||||
LoadPathPoints(route);
|
||||
LoadPathEdges(route);
|
||||
return route;
|
||||
}
|
||||
return null;
|
||||
Id = reader["Id"].ToString(),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
LastModified = DateTime.Parse(reader["LastModified"].ToString()),
|
||||
TotalLength = Convert.ToDouble(reader["TotalLength"])
|
||||
};
|
||||
|
||||
// 加载路径点和路径边
|
||||
LoadPathPoints(route);
|
||||
LoadPathEdges(route);
|
||||
return route;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -1397,14 +1403,14 @@ namespace NavisworksTransport
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
INSERT INTO BatchQueueItems (
|
||||
PathRouteId, PathRouteName, Status, CreatedTime, StartTime, EndTime, ErrorMessage,
|
||||
RouteId, Status, CreatedTime, StartTime, EndTime, ErrorMessage,
|
||||
FrameRate, DurationSeconds, DetectionToleranceMeters,
|
||||
IsVirtualVehicle, VirtualVehicleLength, VirtualVehicleWidth, VirtualVehicleHeight,
|
||||
DetectAllObjects,
|
||||
ClashDetectiveTestName, CollisionCount, ObjectRotationCorrection
|
||||
)
|
||||
VALUES (
|
||||
@PathRouteId, @PathRouteName, @Status, @CreatedTime, @StartTime, @EndTime, @ErrorMessage,
|
||||
@RouteId, @Status, @CreatedTime, @StartTime, @EndTime, @ErrorMessage,
|
||||
@FrameRate, @DurationSeconds, @DetectionToleranceMeters,
|
||||
@IsVirtualVehicle, @VirtualVehicleLength, @VirtualVehicleWidth, @VirtualVehicleHeight,
|
||||
@DetectAllObjects,
|
||||
@ -1412,8 +1418,7 @@ namespace NavisworksTransport
|
||||
);
|
||||
SELECT last_insert_rowid();";
|
||||
|
||||
cmd.Parameters.AddWithValue("@PathRouteId", item.PathRouteId);
|
||||
cmd.Parameters.AddWithValue("@PathRouteName", item.PathRouteName ?? "");
|
||||
cmd.Parameters.AddWithValue("@RouteId", item.RouteId);
|
||||
cmd.Parameters.AddWithValue("@Status", item.Status.ToString());
|
||||
cmd.Parameters.AddWithValue("@CreatedTime", item.CreatedTime.ToString("o"));
|
||||
cmd.Parameters.AddWithValue("@StartTime", item.StartTime?.ToString("o") ?? "");
|
||||
@ -1454,7 +1459,7 @@ namespace NavisworksTransport
|
||||
var item = new BatchQueueItem
|
||||
{
|
||||
Id = itemId,
|
||||
PathRouteId = reader["PathRouteId"].ToString(),
|
||||
RouteId = reader["RouteId"].ToString(),
|
||||
PathRouteName = reader["PathRouteName"].ToString(),
|
||||
Status = (BatchQueueStatus)Enum.Parse(typeof(BatchQueueStatus), reader["Status"].ToString()),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
@ -1500,18 +1505,19 @@ namespace NavisworksTransport
|
||||
using (var cmd = new SQLiteCommand(_connection))
|
||||
{
|
||||
var sql = @"
|
||||
SELECT Id, PathRouteId, PathRouteName, Status, CreatedTime, StartTime, EndTime, ErrorMessage,
|
||||
FrameRate, DurationSeconds, DetectionToleranceMeters,
|
||||
IsVirtualVehicle, VirtualVehicleLength, VirtualVehicleWidth, VirtualVehicleHeight,
|
||||
DetectAllObjects,
|
||||
ClashDetectiveTestName, CollisionCount, ObjectRotationCorrection
|
||||
FROM BatchQueueItems";
|
||||
SELECT bqi.Id, bqi.RouteId, pr.Name AS PathRouteName, bqi.Status, bqi.CreatedTime, bqi.StartTime, bqi.EndTime, bqi.ErrorMessage,
|
||||
bqi.FrameRate, bqi.DurationSeconds, bqi.DetectionToleranceMeters,
|
||||
bqi.IsVirtualVehicle, bqi.VirtualVehicleLength, bqi.VirtualVehicleWidth, bqi.VirtualVehicleHeight,
|
||||
bqi.DetectAllObjects,
|
||||
bqi.ClashDetectiveTestName, bqi.CollisionCount, bqi.ObjectRotationCorrection
|
||||
FROM BatchQueueItems bqi
|
||||
INNER JOIN PathRoutes pr ON bqi.RouteId = pr.Id";
|
||||
var conditions = new List<string>();
|
||||
|
||||
// 只有当 statusFilter 不是 All 时才添加筛选条件
|
||||
if (statusFilter != BatchQueueStatus.All)
|
||||
{
|
||||
conditions.Add("Status = @Status");
|
||||
conditions.Add("bqi.Status = @Status");
|
||||
cmd.Parameters.AddWithValue("@Status", statusFilter.ToString());
|
||||
}
|
||||
|
||||
@ -1520,7 +1526,7 @@ namespace NavisworksTransport
|
||||
sql += " WHERE " + string.Join(" AND ", conditions);
|
||||
}
|
||||
|
||||
sql += " ORDER BY CreatedTime DESC";
|
||||
sql += " ORDER BY bqi.CreatedTime DESC";
|
||||
|
||||
if (limit > 0)
|
||||
{
|
||||
@ -1558,13 +1564,14 @@ namespace NavisworksTransport
|
||||
using (var cmd = new SQLiteCommand(_connection))
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
SELECT Id, PathRouteId, PathRouteName, Status, CreatedTime, StartTime, EndTime, ErrorMessage,
|
||||
FrameRate, DurationSeconds, DetectionToleranceMeters,
|
||||
IsVirtualVehicle, VirtualVehicleLength, VirtualVehicleWidth, VirtualVehicleHeight,
|
||||
DetectAllObjects,
|
||||
ClashDetectiveTestName, CollisionCount, ObjectRotationCorrection
|
||||
FROM BatchQueueItems
|
||||
WHERE Id = @Id";
|
||||
SELECT bqi.Id, bqi.RouteId, pr.Name AS PathRouteName, bqi.Status, bqi.CreatedTime, bqi.StartTime, bqi.EndTime, bqi.ErrorMessage,
|
||||
bqi.FrameRate, bqi.DurationSeconds, bqi.DetectionToleranceMeters,
|
||||
bqi.IsVirtualVehicle, bqi.VirtualVehicleLength, bqi.VirtualVehicleWidth, bqi.VirtualVehicleHeight,
|
||||
bqi.DetectAllObjects,
|
||||
bqi.ClashDetectiveTestName, bqi.CollisionCount, bqi.ObjectRotationCorrection
|
||||
FROM BatchQueueItems bqi
|
||||
INNER JOIN PathRoutes pr ON bqi.RouteId = pr.Id
|
||||
WHERE bqi.Id = @Id";
|
||||
|
||||
cmd.Parameters.AddWithValue("@Id", itemId);
|
||||
|
||||
|
||||
@ -3530,8 +3530,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
// 创建批处理队列项
|
||||
var queueItem = new BatchQueueItem
|
||||
{
|
||||
PathRouteId = CurrentPathRoute.Id,
|
||||
PathRouteName = CurrentPathRoute.Name,
|
||||
RouteId = CurrentPathRoute.Id,
|
||||
Status = BatchQueueStatus.Pending,
|
||||
CreatedTime = DateTime.Now,
|
||||
|
||||
@ -3627,18 +3626,18 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
LogManager.Info($"[批处理] 已创建队列项: {queueItem.PathRouteName}, " +
|
||||
LogManager.Info($"[批处理] 已创建队列项: {CurrentPathRoute.Name}, " +
|
||||
$"虚拟车辆: {queueItem.IsVirtualVehicle}, " +
|
||||
$"帧率: {queueItem.FrameRate}, " +
|
||||
$"时长: {queueItem.DurationSeconds:F2}秒, " +
|
||||
$"角度修正: {queueItem.ObjectRotationCorrection:F1}°, " +
|
||||
$"ID: {itemId}");
|
||||
|
||||
UpdateMainStatus($"已添加到批处理队列: {queueItem.PathRouteName}");
|
||||
UpdateMainStatus($"已添加到批处理队列: {CurrentPathRoute.Name}");
|
||||
|
||||
// 显示成功提示
|
||||
System.Windows.MessageBox.Show(
|
||||
$"已成功添加到批处理队列:{queueItem.PathRouteName}\n" +
|
||||
$"已成功添加到批处理队列:{CurrentPathRoute.Name}\n" +
|
||||
$"队列项ID: {itemId}",
|
||||
"添加成功",
|
||||
System.Windows.MessageBoxButton.OK,
|
||||
|
||||
@ -255,13 +255,6 @@ NavisworksTransport 路径编辑页签视图 - 采用与动画控制和分层管
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<!-- 当前路径信息 -->
|
||||
<TextBlock Text="{Binding SelectedPathRoute.Name, StringFormat='当前选择: {0}', TargetNullValue='当前选择: 无'}"
|
||||
Style="{StaticResource StatusTextStyle}"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="#FF2B579A"
|
||||
Margin="0,5,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
@ -293,22 +286,11 @@ NavisworksTransport 路径编辑页签视图 - 采用与动画控制和分层管
|
||||
</StackPanel>
|
||||
|
||||
<!-- 当前路径信息 -->
|
||||
<Grid Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Column="0" Content="编辑路径:" Style="{StaticResource ParameterLabelStyle}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Text="{Binding SelectedPathRoute.Name, TargetNullValue='未选择路径'}"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="{Binding SelectedPathRoute, Converter={x:Null}, TargetNullValue='#FF999999'}"
|
||||
Background="#FFF5F5F5"
|
||||
Padding="5,3"
|
||||
Margin="0,5,0,0"/>
|
||||
</Grid>
|
||||
<TextBlock Text="{Binding SelectedPathRoute.Name, StringFormat='当前路径: {0}', TargetNullValue='编辑路径: 未选择路径'}"
|
||||
Style="{StaticResource StatusTextStyle}"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="#FF2B579A"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<!-- 路径点列表 -->
|
||||
<ListView ItemsSource="{Binding SelectedPathRoute.Points}"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user