From bba96e18a13e8effe4899711806e5918107f6f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 16:44:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=9F=E5=88=97=E7=8A=B6=E6=80=81=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E6=94=B9=E4=B8=BA=E5=80=9F=E7=94=A8=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=8F=90=E4=BA=A4=E8=B7=AF=E5=BE=84=E6=95=B4?= =?UTF-8?q?=E8=A1=8C=E5=85=8B=E9=9A=86=20-=20editor=5Fgeneration=5Fqueue?= =?UTF-8?q?=5Fstate=20=E6=94=B6=20&ExternalGenerationJobRecord=EF=BC=8C?= =?UTF-8?q?=E5=8F=AA=E5=85=8B=E9=9A=86=E8=BE=93=E5=87=BA=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E4=B8=89=E4=B8=AA=E5=AD=97=E6=AE=B5=20-=20Model3dSubm?= =?UTF-8?q?issionResponse::from=5Fjob=20=E4=B8=8D=E5=86=8D=E5=85=8B?= =?UTF-8?q?=E9=9A=86=E6=95=B4=E8=A1=8C=20job=EF=BC=8Cstatus=5Furl=20?= =?UTF-8?q?=E6=8F=90=E5=89=8D=E7=AE=97=E5=A5=BD=E9=81=BF=E5=85=8D=E9=A2=9D?= =?UTF-8?q?=E5=A4=96=E5=85=8B=E9=9A=86=20-=20=E5=85=B6=E4=BD=99=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=82=B9=E6=94=B9=E4=B8=BA=E4=BC=A0=E5=BC=95=E7=94=A8?= =?UTF-8?q?=EF=BC=8C=E8=A1=8C=E4=B8=BA=E4=B8=8D=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api-server/src/character_animation_assets.rs | 4 ++-- .../crates/api-server/src/editor_generation_queue.rs | 12 ++++++------ server-rs/crates/api-server/src/editor_project.rs | 10 +++++----- .../crates/api-server/src/editor_project_icon.rs | 4 ++-- .../crates/api-server/src/external_editor_api.rs | 2 +- server-rs/crates/api-server/src/tripo3d/queue.rs | 8 +++++--- .../src/vector_engine_audio_generation/generation.rs | 4 ++-- 7 files changed, 23 insertions(+), 21 deletions(-) diff --git a/server-rs/crates/api-server/src/character_animation_assets.rs b/server-rs/crates/api-server/src/character_animation_assets.rs index a4c59f384..c2054e9e8 100644 --- a/server-rs/crates/api-server/src/character_animation_assets.rs +++ b/server-rs/crates/api-server/src/character_animation_assets.rs @@ -620,7 +620,7 @@ pub async fn generate_editor_character_animation( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } @@ -1086,7 +1086,7 @@ pub async fn generate_editor_video( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } diff --git a/server-rs/crates/api-server/src/editor_generation_queue.rs b/server-rs/crates/api-server/src/editor_generation_queue.rs index b60012be7..c9c13a8e8 100644 --- a/server-rs/crates/api-server/src/editor_generation_queue.rs +++ b/server-rs/crates/api-server/src/editor_generation_queue.rs @@ -702,7 +702,7 @@ fn is_inline_media_reference(value: &str) -> bool { } pub(crate) fn editor_generation_queue_state( - job: ExternalGenerationJobRecord, + job: &ExternalGenerationJobRecord, ) -> ExternalGenerationJobStatusRecord { let (status, phase_detail, progress) = match job.status.as_str() { "completed" => (ExternalGenerationJobStatus::Completed, "生成已完成。", 100), @@ -714,12 +714,12 @@ pub(crate) fn editor_generation_queue_state( _ => (ExternalGenerationJobStatus::Queued, "排队中。", 8), }; ExternalGenerationJobStatusRecord { - operation_id: job.job_id, + operation_id: job.job_id.clone(), status, - phase_label: job.request_label, + phase_label: job.request_label.clone(), phase_detail: phase_detail.to_string(), progress, - error: job.last_error_message, + error: job.last_error_message.clone(), updated_at_micros: job.updated_at_micros, } } @@ -1447,7 +1447,7 @@ mod tests { for (persisted_status, phase, expected_status, expected_detail, expected_progress) in cases { - let state = editor_generation_queue_state(queue_job_fixture(persisted_status, phase)); + let state = editor_generation_queue_state(&queue_job_fixture(persisted_status, phase)); assert_eq!(state.operation_id, "task-queue-test"); assert_eq!(state.status, expected_status, "status={persisted_status}"); @@ -1467,7 +1467,7 @@ mod tests { let mut job = queue_job_fixture("failed", None); job.last_error_message = Some("生成失败摘要".to_string()); - let state = editor_generation_queue_state(job); + let state = editor_generation_queue_state(&job); assert_eq!(state.status, ExternalGenerationJobStatus::Failed); assert_eq!(state.error.as_deref(), Some("生成失败摘要")); diff --git a/server-rs/crates/api-server/src/editor_project.rs b/server-rs/crates/api-server/src/editor_project.rs index 48bed2fea..8029cf054 100644 --- a/server-rs/crates/api-server/src/editor_project.rs +++ b/server-rs/crates/api-server/src/editor_project.rs @@ -2795,7 +2795,7 @@ pub async fn generate_editor_scene( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } @@ -2836,7 +2836,7 @@ pub async fn generate_editor_image( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } @@ -5822,7 +5822,7 @@ pub async fn edit_editor_image( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } @@ -6361,7 +6361,7 @@ pub async fn remove_editor_image_background( Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )) } @@ -8325,7 +8325,7 @@ pub async fn extract_editor_ui_design_assets( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } diff --git a/server-rs/crates/api-server/src/editor_project_icon.rs b/server-rs/crates/api-server/src/editor_project_icon.rs index f974e9d4c..d9650c6f6 100644 --- a/server-rs/crates/api-server/src/editor_project_icon.rs +++ b/server-rs/crates/api-server/src/editor_project_icon.rs @@ -619,7 +619,7 @@ pub(crate) async fn generate_icon_spec( return Ok(crate::api_response::json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(job), + queue_state: editor_generation_queue_state(&job), }, )); } @@ -1485,7 +1485,7 @@ pub async fn generate_editor_icon_spritesheet( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } diff --git a/server-rs/crates/api-server/src/external_editor_api.rs b/server-rs/crates/api-server/src/external_editor_api.rs index 4ae9f03c4..5a4edaeb2 100644 --- a/server-rs/crates/api-server/src/external_editor_api.rs +++ b/server-rs/crates/api-server/src/external_editor_api.rs @@ -1031,7 +1031,7 @@ fn external_generation_accepted_response( job: ExternalGenerationJobRecord, ) -> Response { let kind = job.job_kind.clone(); - let status = editor_generation_queue_state(job); + let status = editor_generation_queue_state(&job); let status_url = format!("/api/external/v1/generations/{}", status.operation_id); let mut response = ( StatusCode::ACCEPTED, diff --git a/server-rs/crates/api-server/src/tripo3d/queue.rs b/server-rs/crates/api-server/src/tripo3d/queue.rs index 36269cbee..19fb14213 100644 --- a/server-rs/crates/api-server/src/tripo3d/queue.rs +++ b/server-rs/crates/api-server/src/tripo3d/queue.rs @@ -34,12 +34,14 @@ pub(crate) struct Model3dSubmissionResponse { impl Model3dSubmissionResponse { pub(crate) fn from_job(job: ExternalGenerationJobRecord) -> Self { - let status = editor_generation_queue_state(job.clone()); + // 状态映射只读整行记录:这里不必为了它克隆请求 payload 等大字段。 + let status = editor_generation_queue_state(&job); + let status_url = model3d_job_status_url(job.job_id.as_str()); Self { - operation_id: job.job_id.clone(), + operation_id: job.job_id, job_kind: job.job_kind, status, - status_url: model3d_job_status_url(job.job_id.as_str()), + status_url, } } } diff --git a/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs b/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs index ebfa963e6..9bb51a1ef 100644 --- a/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs +++ b/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs @@ -244,7 +244,7 @@ pub async fn generate_editor_sound_effect( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); } @@ -848,7 +848,7 @@ pub async fn generate_editor_background_music( return Ok(json_success_body( Some(&request_context), EditorGenerationQueuedResponse { - queue_state: editor_generation_queue_state(queue_job), + queue_state: editor_generation_queue_state(&queue_job), }, )); }