From 3cd79a2f5daff60d124326aae8029854c4abc70b Mon Sep 17 00:00:00 2001 From: imeepos Date: Wed, 30 Jul 2025 15:44:23 +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=E5=8A=9F=E8=83=BD=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E5=92=8C=E7=BB=9F=E8=AE=A1=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?NULL=E5=80=BC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在app_state.rs中添加OutfitImageRepository.init_tables()调用,确保穿搭图片相关表在应用启动时正确创建 - 修复get_stats_by_model_id方法中的SQL查询,使用COALESCE函数处理SUM聚合函数在空表时返回NULL的问题 - 解决'no such table: outfit_image_records'和'Invalid column type Null'错误 - 确保穿搭图片统计功能在没有数据时也能正常返回0值而不是NULL --- apps/desktop/src-tauri/src/app_state.rs | 8 ++++++++ .../src/data/repositories/outfit_image_repository.rs | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src-tauri/src/app_state.rs b/apps/desktop/src-tauri/src/app_state.rs index ce319c2..ee75be0 100644 --- a/apps/desktop/src-tauri/src/app_state.rs +++ b/apps/desktop/src-tauri/src/app_state.rs @@ -75,6 +75,10 @@ impl AppState { video_generation_repository.init_tables()?; conversation_repository.initialize_tables()?; + // 初始化穿搭图片相关表 + let outfit_image_repository = crate::data::repositories::outfit_image_repository::OutfitImageRepository::new(database.clone()); + outfit_image_repository.init_tables()?; + *self.database.lock().unwrap() = Some(database.clone()); *self.project_repository.lock().unwrap() = Some(project_repository); *self.material_repository.lock().unwrap() = Some(material_repository); @@ -104,6 +108,10 @@ impl AppState { video_generation_repository.init_tables()?; conversation_repository.initialize_tables()?; + // 初始化穿搭图片相关表 + let outfit_image_repository = crate::data::repositories::outfit_image_repository::OutfitImageRepository::new(database.clone()); + outfit_image_repository.init_tables()?; + *self.database.lock().unwrap() = Some(database.clone()); *self.project_repository.lock().unwrap() = Some(project_repository); *self.material_repository.lock().unwrap() = Some(material_repository); 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 7ed1cf9..59472bd 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 @@ -371,10 +371,10 @@ impl OutfitImageRepository { r#" SELECT COUNT(*) as total_records, - SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending_records, - SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END) as processing_records, - SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed_records, - SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) as failed_records + COALESCE(SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END), 0) as pending_records, + COALESCE(SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END), 0) as processing_records, + COALESCE(SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END), 0) as completed_records, + COALESCE(SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END), 0) as failed_records FROM outfit_image_records WHERE model_id = ?1 "#, ).map_err(|e| anyhow!("准备查询语句失败: {}", e))?; @@ -395,7 +395,7 @@ impl OutfitImageRepository { r#" SELECT COUNT(*) as total_images, - SUM(CASE WHEN is_favorite = 1 THEN 1 ELSE 0 END) as favorite_images + COALESCE(SUM(CASE WHEN is_favorite = 1 THEN 1 ELSE 0 END), 0) as favorite_images FROM outfit_images oi JOIN outfit_image_records oir ON oi.outfit_record_id = oir.id WHERE oir.model_id = ?1