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