feat: add inspection task lifecycle controls

This commit is contained in:
2026-07-08 17:44:45 +08:00
parent aa2bd80418
commit b87aa3f990
14 changed files with 901 additions and 28 deletions

View File

@@ -176,6 +176,27 @@ function readResultJson(workDir: string): PluginResult | null {
}
}
const DEMO_FLOW_RESULT_DATA_KEYS = [
'demoFlowRunId',
'demoFlowRole',
'demoFlowIndex',
'demoFlowTotal',
'demoFlowSourcePointCloudFileId',
'demoFlowCadFileId',
] as const;
async function readDemoFlowResultData(resultId: number): Promise<Record<string, unknown>> {
const row = await db.getTaskAnalysisResultById(resultId);
const existing = (row?.resultData as Record<string, unknown> | null) ?? {};
const picked: Record<string, unknown> = {};
for (const key of DEMO_FLOW_RESULT_DATA_KEYS) {
if (existing[key] !== undefined) {
picked[key] = existing[key];
}
}
return picked;
}
async function runProcessRuntime(
manifest: PluginManifest,
workDir: string,
@@ -286,12 +307,14 @@ export async function runAlgorithmJob(
): Promise<void> {
const manifest = getPlugin(pluginId);
if (!manifest) {
const demoFlowResultData = await readDemoFlowResultData(resultId);
await db.updateTaskAnalysisResult(resultId, {
status: 'error',
resultData: {
kind: 'plugin',
pluginId,
error: `未注册的插件:${pluginId}`,
...demoFlowResultData,
} as PluginResultData,
});
return;
@@ -333,6 +356,7 @@ export async function runAlgorithmJob(
? 'completed'
: 'error';
const demoFlowResultData = await readDemoFlowResultData(resultId);
const resultData: PluginResultData = {
kind: 'plugin',
pluginId,
@@ -351,6 +375,7 @@ export async function runAlgorithmJob(
error: finalStatus === 'error'
? result?.message ?? `子进程退出码 ${exitCode}`
: undefined,
...demoFlowResultData,
};
await db.updateTaskAnalysisResult(resultId, {
@@ -404,12 +429,14 @@ export async function runAlgorithmJob(
} catch (err) {
console.error('[AlgorithmJobRunner]', err);
const message = err instanceof Error ? err.message : String(err);
const demoFlowResultData = await readDemoFlowResultData(resultId);
await db.updateTaskAnalysisResult(resultId, {
status: 'error',
resultData: {
kind: 'plugin',
pluginId,
error: message,
...demoFlowResultData,
} as PluginResultData,
});
}