diff --git a/wangpan-common/src/main/java/com/wangpan/common/util/OpenListClient.java b/wangpan-common/src/main/java/com/wangpan/common/util/OpenListClient.java index f96ebee..69a39b0 100644 --- a/wangpan-common/src/main/java/com/wangpan/common/util/OpenListClient.java +++ b/wangpan-common/src/main/java/com/wangpan/common/util/OpenListClient.java @@ -350,6 +350,53 @@ public class OpenListClient { return config != null ? config.getOpenlistUrl() : null; } + // ==================== 存储管理 API ==================== + + /** + * 获取用户的所有存储列表 + * OpenList 支持多个存储(storage),每个存储有独立的挂载路径 + * + * @param userId 用户ID + * @return 存储列表,每个存储包含 id、mount_path、driver 等信息 + */ + public List> listStorages(Long userId) { + UserOpenlist config = getUserOpenlist(userId); + if (config == null) { + throw new RuntimeException("用户未绑定 OpenList"); + } + + String url = config.getOpenlistUrl() + "/api/me/storages"; + + try { + String token = getValidToken(userId); + + HttpHeaders headers = new HttpHeaders(); + headers.setBearerAuth(token); + + HttpEntity entity = new HttpEntity<>(headers); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, Map.class); + Map result = response.getBody(); + + if (result == null || (int) result.get("code") != 200) { + log.warn("用户 {} 获取存储列表失败: {}", userId, result); + return new ArrayList<>(); + } + + @SuppressWarnings("unchecked") + List> storages = (List>) result.get("data"); + if (storages == null) { + return new ArrayList<>(); + } + + log.info("用户 {} 共有 {} 个存储", userId, storages.size()); + return storages; + + } catch (Exception e) { + log.error("用户 {} 获取存储列表异常", userId, e); + return new ArrayList<>(); + } + } + // ==================== 同步相关 API ==================== /** diff --git a/wangpan-common/target/classes/com/wangpan/common/Result.class b/wangpan-common/target/classes/com/wangpan/common/Result.class index f62556d..791eacf 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/Result.class and b/wangpan-common/target/classes/com/wangpan/common/Result.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/config/WebMvcConfig.class b/wangpan-common/target/classes/com/wangpan/common/config/WebMvcConfig.class index ac77e5f..4666312 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/config/WebMvcConfig.class and b/wangpan-common/target/classes/com/wangpan/common/config/WebMvcConfig.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DailyRecommendDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DailyRecommendDO.class index bd022f4..1061b7f 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DailyRecommendDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DailyRecommendDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DriveFolderDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DriveFolderDO.class index a325f8f..662e84e 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DriveFolderDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/DriveFolderDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/IconDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/IconDO.class index a1b9179..f936980 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/IconDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/IconDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/LoginLogDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/LoginLogDO.class index 9bcf02a..9963253 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/LoginLogDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/LoginLogDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/MovieDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/MovieDO.class index 8709e46..e844711 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/MovieDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/MovieDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbCacheDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbCacheDO.class index 17deb75..d7a0768 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbCacheDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbCacheDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbScraperLogDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbScraperLogDO.class index 20dad19..1248cd1 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbScraperLogDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TmdbScraperLogDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TokenDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TokenDO.class index 1ee5336..5e2d61f 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TokenDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/TokenDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/UserDO.class b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/UserDO.class index 9519dba..916c8a9 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/UserDO.class and b/wangpan-common/target/classes/com/wangpan/common/dal/dataobject/UserDO.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DailyRecommendMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DailyRecommendMapper.class index 3d1f7ff..1ea9d1c 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DailyRecommendMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DailyRecommendMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveFolderMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveFolderMapper.class index a0be8b2..d347ddb 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveFolderMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveFolderMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMapper.class index 694c38e..9f34a30 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMovieMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMovieMapper.class index a96c2a1..fcbe256 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMovieMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/DriveMovieMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/IconMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/IconMapper.class index 87a20d6..9de611a 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/IconMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/IconMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/LoginLogMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/LoginLogMapper.class index 250aea5..1e0fa0d 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/LoginLogMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/LoginLogMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/MovieMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/MovieMapper.class index a570e88..7f7d7f0 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/MovieMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/MovieMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.class index cbf037f..9567827 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.class index b0f1ce6..b7a1384 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TokenMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TokenMapper.class index 57f5a94..09eb584 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TokenMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TokenMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/UserMapper.class b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/UserMapper.class index 2ec21db..044f1bd 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/UserMapper.class and b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/UserMapper.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/DailyRecommendRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DailyRecommendRepository.class index f54ef5f..0d9eb63 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/DailyRecommendRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DailyRecommendRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveFolderRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveFolderRepository.class index 2e654c1..dfd4c13 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveFolderRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveFolderRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/IconRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/IconRepository.class index e10b448..0fba37d 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/IconRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/IconRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/LoginLogRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/LoginLogRepository.class index aea94f9..0a747f0 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/LoginLogRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/LoginLogRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/MovieRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/MovieRepository.class index 3d31d78..786f85f 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/MovieRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/MovieRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbCacheRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbCacheRepository.class index a2c5747..2b9a917 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbCacheRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbCacheRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbScraperLogRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbScraperLogRepository.class index 478e3be..80c3f9e 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbScraperLogRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbScraperLogRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TokenRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TokenRepository.class index 158dd69..74e179e 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/TokenRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TokenRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/dal/repository/UserRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/UserRepository.class index ae5d78e..40c40d3 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/UserRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/UserRepository.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/entity/DriveFolder.class b/wangpan-common/target/classes/com/wangpan/common/entity/DriveFolder.class index 1d9610a..e21d6b5 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/entity/DriveFolder.class and b/wangpan-common/target/classes/com/wangpan/common/entity/DriveFolder.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/entity/Icon.class b/wangpan-common/target/classes/com/wangpan/common/entity/Icon.class index c1cb477..08cfc19 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/entity/Icon.class and b/wangpan-common/target/classes/com/wangpan/common/entity/Icon.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/entity/Movie.class b/wangpan-common/target/classes/com/wangpan/common/entity/Movie.class index 84a756b..32773c3 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/entity/Movie.class and b/wangpan-common/target/classes/com/wangpan/common/entity/Movie.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/entity/User.class b/wangpan-common/target/classes/com/wangpan/common/entity/User.class index 9da3049..3912cee 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/entity/User.class and b/wangpan-common/target/classes/com/wangpan/common/entity/User.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/interceptor/AuthInterceptor.class b/wangpan-common/target/classes/com/wangpan/common/interceptor/AuthInterceptor.class index 55e11ab..393cb85 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/interceptor/AuthInterceptor.class and b/wangpan-common/target/classes/com/wangpan/common/interceptor/AuthInterceptor.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/AuthUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/AuthUtil.class index d1226e1..5e3bb04 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/AuthUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/AuthUtil.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/DBUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/DBUtil.class index 0b370ea..b26383f 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/DBUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/DBUtil.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/EncryptUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/EncryptUtil.class index 4137640..bc7de25 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/EncryptUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/EncryptUtil.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/IconLogoFetcher.class b/wangpan-common/target/classes/com/wangpan/common/util/IconLogoFetcher.class index d45f601..2edf3d5 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/IconLogoFetcher.class and b/wangpan-common/target/classes/com/wangpan/common/util/IconLogoFetcher.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/MinioUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/MinioUtil.class index ee80b09..bb548ba 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/MinioUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/MinioUtil.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/OpenListClient.class b/wangpan-common/target/classes/com/wangpan/common/util/OpenListClient.class index 84cb972..52ce95e 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/OpenListClient.class and b/wangpan-common/target/classes/com/wangpan/common/util/OpenListClient.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/SchemaUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/SchemaUtil.class index 00efe52..240742c 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/SchemaUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/SchemaUtil.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil$TokenInfo.class b/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil$TokenInfo.class index 198b463..310de0f 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil$TokenInfo.class and b/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil$TokenInfo.class differ diff --git a/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil.class index f33b1c0..0017f64 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil.class and b/wangpan-common/target/classes/com/wangpan/common/util/TokenUtil.class differ diff --git a/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar b/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar index db82de2..e042de5 100644 Binary files a/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar and b/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar differ diff --git a/wangpan-drive-service/src/main/java/com/wangpan/config/DatabaseInitializer.java b/wangpan-drive-service/src/main/java/com/wangpan/config/DatabaseInitializer.java index db8f079..e3592b9 100644 --- a/wangpan-drive-service/src/main/java/com/wangpan/config/DatabaseInitializer.java +++ b/wangpan-drive-service/src/main/java/com/wangpan/config/DatabaseInitializer.java @@ -124,6 +124,18 @@ public class DatabaseInitializer { SchemaUtil.ensureColumnExists(conn, "wp_icon", "link_type", "VARCHAR(20) NOT NULL DEFAULT 'external' COMMENT '链接类型:external(仅外网)/ internal(仅内网)/ both(内外网)'"); + // 检查 wp_user_openlist 表是否有 last_heartbeat_time 字段(心跳检测时间) + SchemaUtil.ensureColumnExists(conn, "wp_user_openlist", "last_heartbeat_time", + "DATETIME DEFAULT NULL COMMENT '最后一次心跳检测时间'"); + + // 检查 wp_user_openlist 表是否有 heartbeat_status 字段(心跳状态) + SchemaUtil.ensureColumnExists(conn, "wp_user_openlist", "heartbeat_status", + "VARCHAR(20) DEFAULT NULL COMMENT '心跳状态:success/failed'"); + + // 检查 wp_user_openlist 表是否有 heartbeat_error 字段(心跳失败原因) + SchemaUtil.ensureColumnExists(conn, "wp_user_openlist", "heartbeat_error", + "VARCHAR(500) DEFAULT NULL COMMENT '心跳检测失败原因'"); + // 移除已废弃的 icon 列(已被 logo_url 替代) try (var checkStmt = conn.createStatement(); var checkRs = checkStmt.executeQuery("SHOW COLUMNS FROM wp_drive LIKE 'icon'")) { diff --git a/wangpan-drive-service/src/main/java/com/wangpan/service/OpenListSyncService.java b/wangpan-drive-service/src/main/java/com/wangpan/service/OpenListSyncService.java index 12ece1c..a622e6c 100644 --- a/wangpan-drive-service/src/main/java/com/wangpan/service/OpenListSyncService.java +++ b/wangpan-drive-service/src/main/java/com/wangpan/service/OpenListSyncService.java @@ -94,51 +94,94 @@ public class OpenListSyncService { log.info("用户 {} 开始从 OpenList 同步: {}", userId, config.getOpenlistUrl()); - // 2. 查找或创建关联网盘 - Drive drive = findOrCreateDrive(userId, config); - if (drive == null) { - result.errors.add("创建网盘失败"); + // 2. 获取 OpenList 的所有存储 + List> storages = openListClient.listStorages(userId); + if (storages.isEmpty()) { + log.warn("用户 {} 的 OpenList 没有可用存储,尝试从根目录同步", userId); + // 降级处理:从根目录同步,创建单个 Drive + Drive drive = findOrCreateDrive(userId, config, null, null); + if (drive == null) { + result.errors.add("创建网盘失败"); + return result; + } + result.driveCount = 1; + syncDirectory(userId, drive.getId(), "/", 0L, 0, result); + updateDriveStats(drive.getId(), userId); return result; } - result.driveCount = 1; - log.info("用户 {} 使用网盘: {} (ID={})", userId, drive.getName(), drive.getId()); - // 3. 从根目录开始递归同步 - String rootPath = "/"; - syncDirectory(userId, drive.getId(), rootPath, 0L, 0, result); + log.info("用户 {} 的 OpenList 共有 {} 个存储", userId, storages.size()); - // 4. 更新网盘统计信息 - int totalFolders = folderRepository.countByDrive(drive.getId(), userId); - int totalMovies = movieRepository.countByDrive(drive.getId(), userId); - driveRepository.updateStats(drive.getId(), totalFolders, totalMovies, 0L); + // 3. 为每个存储创建或查找对应的 Drive,并同步内容 + for (Map storage : storages) { + String storageId = String.valueOf(storage.get("id")); + String mountPath = (String) storage.get("mount_path"); + String driver = (String) storage.get("driver"); + + log.info("用户 {} 同步存储: id={}, mountPath={}, driver={}", userId, storageId, mountPath, driver); + + // 查找或创建该存储对应的 Drive + Drive drive = findOrCreateDrive(userId, config, storageId, mountPath); + if (drive == null) { + result.errors.add("创建存储 " + mountPath + " 的网盘失败"); + continue; + } + result.driveCount++; + + // 从该存储的挂载路径开始同步 + String rootPath = mountPath != null ? mountPath : "/"; + syncDirectory(userId, drive.getId(), rootPath, 0L, 0, result); + + // 更新该网盘的统计信息 + updateDriveStats(drive.getId(), userId); + } log.info("用户 {} 同步完成: 网盘={}, 文件夹={}, 电影={}, 跳过文件={}, 跳过文件夹={}, 错误={}", - userId, drive.getName(), result.folderCount, result.movieCount, + userId, result.driveCount, result.folderCount, result.movieCount, result.skippedFileCount, result.skippedFolderCount, result.errors.size()); return result; } /** - * 查找或创建关联 OpenList 的网盘 - * 如果用户已有 openlistMountPath 不为空的网盘,则复用;否则创建新的 + * 更新网盘统计信息 */ - private Drive findOrCreateDrive(Long userId, UserOpenlist config) { - // 查询用户所有网盘,查找已关联 OpenList 的 + private void updateDriveStats(Long driveId, Long userId) { + int totalFolders = folderRepository.countByDrive(driveId, userId); + int totalMovies = movieRepository.countByDrive(driveId, userId); + driveRepository.updateStats(driveId, totalFolders, totalMovies, 0L); + } + + /** + * 查找或创建关联网盘 + * 根据 storageId 查找已有的 Drive,如果没有则创建新的 + * + * @param userId 用户ID + * @param config OpenList 配置 + * @param storageId OpenList 存储ID(可为 null) + * @param mountPath 挂载路径(可为 null) + * @return Drive 对象 + */ + private Drive findOrCreateDrive(Long userId, UserOpenlist config, String storageId, String mountPath) { + // 查询用户所有网盘,查找匹配 storageId 的 var drives = driveRepository.queryByUserId(userId, 1, 100); for (var driveMap : drives) { - String mountPath = (String) driveMap.get("openlistMountPath"); - if (mountPath != null && !mountPath.isBlank()) { + String existingStorageId = (String) driveMap.get("openlistStorageId"); + if (storageId != null && storageId.equals(existingStorageId)) { // 复用已有网盘 + log.info("复用已有网盘: id={}, storageId={}", driveMap.get("id"), storageId); return driveRepository.findById(((Number) driveMap.get("id")).longValue()); } } // 创建新网盘 - Drive drive = new Drive(userId, "OpenList 网盘", "从 OpenList 同步的网盘"); - drive.setOpenlistMountPath(config.getMountPath() != null ? config.getMountPath() : "/"); + String driveName = mountPath != null ? "OpenList: " + mountPath : "OpenList 网盘"; + Drive drive = new Drive(userId, driveName, "从 OpenList 同步的网盘"); + drive.setOpenlistStorageId(storageId); + drive.setOpenlistMountPath(mountPath != null ? mountPath : "/"); Long driveId = driveRepository.insert(drive); drive.setId(driveId); + log.info("创建新网盘: id={}, storageId={}, mountPath={}", driveId, storageId, mountPath); return drive; } diff --git a/wangpan-drive-service/target/classes/com/wangpan/DriveServiceApplication.class b/wangpan-drive-service/target/classes/com/wangpan/DriveServiceApplication.class index 150b657..f9220bf 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/DriveServiceApplication.class and b/wangpan-drive-service/target/classes/com/wangpan/DriveServiceApplication.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/config/DatabaseInitializer.class b/wangpan-drive-service/target/classes/com/wangpan/config/DatabaseInitializer.class index fd061db..a2b23d1 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/config/DatabaseInitializer.class and b/wangpan-drive-service/target/classes/com/wangpan/config/DatabaseInitializer.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/controller/DriveController.class b/wangpan-drive-service/target/classes/com/wangpan/controller/DriveController.class index f8e30ab..8b003ca 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/controller/DriveController.class and b/wangpan-drive-service/target/classes/com/wangpan/controller/DriveController.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/controller/OpenListController.class b/wangpan-drive-service/target/classes/com/wangpan/controller/OpenListController.class index 7ca3c30..c11cfa2 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/controller/OpenListController.class and b/wangpan-drive-service/target/classes/com/wangpan/controller/OpenListController.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/listener/OpenListHeartbeatScheduler.class b/wangpan-drive-service/target/classes/com/wangpan/listener/OpenListHeartbeatScheduler.class index e7226d8..d6d74f6 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/listener/OpenListHeartbeatScheduler.class and b/wangpan-drive-service/target/classes/com/wangpan/listener/OpenListHeartbeatScheduler.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService$SyncResult.class b/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService$SyncResult.class index 46d5a73..417f02f 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService$SyncResult.class and b/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService$SyncResult.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService.class b/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService.class index 50b061c..f84331a 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService.class and b/wangpan-drive-service/target/classes/com/wangpan/service/OpenListSyncService.class differ diff --git a/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar b/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar index 4daeeaf..320b071 100644 Binary files a/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar and b/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar differ diff --git a/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar.original b/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar.original index c2f9179..b6e31e1 100644 Binary files a/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar.original and b/wangpan-drive-service/target/wangpan-drive-service-1.0-SNAPSHOT.jar.original differ diff --git a/wangpan-gateway/target/classes/com/wangpan/GatewayApplication.class b/wangpan-gateway/target/classes/com/wangpan/GatewayApplication.class index 0e117e0..937b5d1 100644 Binary files a/wangpan-gateway/target/classes/com/wangpan/GatewayApplication.class and b/wangpan-gateway/target/classes/com/wangpan/GatewayApplication.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/TmdbServiceApplication.class b/wangpan-tmdb-service/target/classes/com/wangpan/TmdbServiceApplication.class index 089e783..7692638 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/TmdbServiceApplication.class and b/wangpan-tmdb-service/target/classes/com/wangpan/TmdbServiceApplication.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/config/DatabaseInitializer.class b/wangpan-tmdb-service/target/classes/com/wangpan/config/DatabaseInitializer.class index 43dae81..ea70996 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/config/DatabaseInitializer.class and b/wangpan-tmdb-service/target/classes/com/wangpan/config/DatabaseInitializer.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController$CacheEntry.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController$CacheEntry.class index 4c17753..7cdda20 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController$CacheEntry.class and b/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController$CacheEntry.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController.class index 457523e..2ba755b 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController.class and b/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbController.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbController.class index 7347079..c4f82ed 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbController.class and b/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbController.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbScraperController.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbScraperController.class index 61baf11..f0c26fd 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbScraperController.class and b/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbScraperController.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler$ScrapeTask.class b/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler$ScrapeTask.class index 4df1742..0cae9cc 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler$ScrapeTask.class and b/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler$ScrapeTask.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler.class b/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler.class index ebb7d00..8442c61 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler.class and b/wangpan-tmdb-service/target/classes/com/wangpan/listener/TmdbScheduler.class differ diff --git a/wangpan-tmdb-service/target/classes/com/wangpan/service/TmdbScraperService.class b/wangpan-tmdb-service/target/classes/com/wangpan/service/TmdbScraperService.class index 409d3bf..06256d9 100644 Binary files a/wangpan-tmdb-service/target/classes/com/wangpan/service/TmdbScraperService.class and b/wangpan-tmdb-service/target/classes/com/wangpan/service/TmdbScraperService.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/UserServiceApplication.class b/wangpan-user-service/target/classes/com/wangpan/UserServiceApplication.class index ead56b1..f353d5f 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/UserServiceApplication.class and b/wangpan-user-service/target/classes/com/wangpan/UserServiceApplication.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/config/DatabaseInitializer.class b/wangpan-user-service/target/classes/com/wangpan/config/DatabaseInitializer.class index c7ebc97..0723f2c 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/config/DatabaseInitializer.class and b/wangpan-user-service/target/classes/com/wangpan/config/DatabaseInitializer.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/controller/AuthController.class b/wangpan-user-service/target/classes/com/wangpan/controller/AuthController.class index e532629..f060e1e 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/controller/AuthController.class and b/wangpan-user-service/target/classes/com/wangpan/controller/AuthController.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/controller/LoginLogController.class b/wangpan-user-service/target/classes/com/wangpan/controller/LoginLogController.class index 588c438..7ec9fc1 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/controller/LoginLogController.class and b/wangpan-user-service/target/classes/com/wangpan/controller/LoginLogController.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class b/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class index 6b77119..feac2e2 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class and b/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/controller/UserController.class b/wangpan-user-service/target/classes/com/wangpan/controller/UserController.class index 46eba6f..9379979 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/controller/UserController.class and b/wangpan-user-service/target/classes/com/wangpan/controller/UserController.class differ diff --git a/wangpan-user-service/target/classes/com/wangpan/service/UserService.class b/wangpan-user-service/target/classes/com/wangpan/service/UserService.class index 9bff97f..45d4aea 100644 Binary files a/wangpan-user-service/target/classes/com/wangpan/service/UserService.class and b/wangpan-user-service/target/classes/com/wangpan/service/UserService.class differ