From 49ce97af900a50f007ecebb3a962426b9e3df76e Mon Sep 17 00:00:00 2001 From: imeepos Date: Wed, 30 Jul 2025 22:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A9=BF=E6=90=AD=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E7=94=9F=E6=88=90=E5=89=8D=E7=AB=AF=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在生成成功时创建OutfitImage记录到数据库 - 修复get_records_by_model_id函数加载关联数据 - 解决前端状态显示'未知'和图片不显示的问题 - 添加必要的导入和错误处理 --- .../repositories/outfit_image_repository.rs | 19 ++++++++++++----- .../commands/outfit_image_commands.rs | 21 +++++++++++++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/apps/desktop/src-tauri/src/data/repositories/outfit_image_repository.rs b/apps/desktop/src-tauri/src/data/repositories/outfit_image_repository.rs index 2cdb6cb..b6ce456 100644 --- a/apps/desktop/src-tauri/src/data/repositories/outfit_image_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/outfit_image_repository.rs @@ -2,6 +2,7 @@ use anyhow::{anyhow, Result}; use rusqlite::{params, Row}; use std::sync::Arc; use chrono::{DateTime, Utc}; +use tracing::warn; use crate::data::models::outfit_image::{ OutfitImageRecord, OutfitImageStatus, ProductImage, OutfitImage, OutfitImageStats @@ -434,12 +435,20 @@ impl OutfitImageRepository { let mut records = Vec::new(); for record in record_iter { - let record = record.map_err(|e| anyhow!("解析记录失败: {}", e))?; + let mut record = record.map_err(|e| anyhow!("解析记录失败: {}", e))?; - // 🚨 关联查询也需要使用连接池,但为了避免嵌套连接获取, - // 我们在这里只返回主记录,关联数据由调用方按需加载 - // record.product_images = self.get_product_images_by_record_id(&record.id)?; - // record.outfit_images = self.get_outfit_images_by_record_id(&record.id)?; + // 加载关联的商品图片和穿搭图片 + record.product_images = self.get_product_images_by_record_id(&record.id) + .unwrap_or_else(|e| { + warn!("获取商品图片失败: {}", e); + Vec::new() + }); + + record.outfit_images = self.get_outfit_images_by_record_id(&record.id) + .unwrap_or_else(|e| { + warn!("获取穿搭图片失败: {}", e); + Vec::new() + }); records.push(record); } diff --git a/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs index c81f93d..1d60bfb 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs @@ -6,7 +6,7 @@ use chrono::Utc; use crate::app_state::AppState; use crate::data::models::outfit_image::{ OutfitImageRecord, OutfitImageGenerationRequest, OutfitImageGenerationResponse, - OutfitImageStats, ProductImage + OutfitImageStats, ProductImage, OutfitImage }; use crate::data::models::outfit_photo_generation::{ WorkflowProgress @@ -518,9 +518,26 @@ pub async fn execute_outfit_image_generation( .map(|url| convert_s3_to_cdn_url(url)) .collect(); - // 更新记录状态为完成 + // 更新记录状态为完成并创建OutfitImage记录 if let Ok(Some(mut record)) = outfit_repo.get_record_by_id(&record_id) { record.complete(cdn_urls.clone()); + + // 创建OutfitImage记录 + for (index, image_url) in cdn_urls.iter().enumerate() { + let outfit_image = OutfitImage::new( + record_id.clone(), + image_url.clone(), + index as u32, + ); + + // 保存OutfitImage到数据库 + if let Err(e) = outfit_repo.create_outfit_image(&outfit_image) { + warn!("创建OutfitImage记录失败: {}", e); + } else { + record.outfit_images.push(outfit_image); + } + } + let _ = outfit_repo.update_record(&record); info!("📝 更新穿搭图片生成记录状态为完成,保存 {} 张图片", cdn_urls.len()); }