diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 8d66637..ee9f695 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,5 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 1d03036..98c5286 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -15,6 +34,9 @@ + + + { "associatedIndex": 4 } @@ -38,6 +60,7 @@ "Spring Boot.GatewayApplication.executor": "Run", "Spring Boot.TmdbServiceApplication.executor": "Run", "Spring Boot.UserServiceApplication.executor": "Run", + "git-widget-placeholder": "main", "kotlin-language-version-configured": "true", "last_opened_file_path": "D:/java2/wangpan/java", "nodejs_package_manager_path": "npm", @@ -143,6 +166,8 @@ + + diff --git a/wangpan-common/src/main/java/com/wangpan/common/dal/repository/DriveMovieRepository.java b/wangpan-common/src/main/java/com/wangpan/common/dal/repository/DriveMovieRepository.java index b238631..b6dbe26 100644 --- a/wangpan-common/src/main/java/com/wangpan/common/dal/repository/DriveMovieRepository.java +++ b/wangpan-common/src/main/java/com/wangpan/common/dal/repository/DriveMovieRepository.java @@ -47,6 +47,14 @@ public class DriveMovieRepository extends ServiceImpl 1) --> SELECT title, COUNT(*) AS cnt - FROM wp_movie + FROM wp_drive_movie WHERE user_id = #{userId} AND status = 'active' GROUP BY title HAVING COUNT(*) > 1 @@ -24,14 +24,14 @@ AND u.status = 1 - + - SELECT m.* FROM wp_movie m + SELECT m.* FROM wp_drive_movie m LEFT JOIN wp_tmdb_cache c ON m.id = c.movie_id AND c.status = 'active' WHERE m.user_id = #{userId} AND m.title IS NOT NULL AND m.title != '' - AND m.scrape_type != 'none' AND (c.id IS NULL OR c.cache_time < DATE_SUB(NOW(), INTERVAL #{expireDays} DAY)) + AND m.status = 'active' ORDER BY m.update_time DESC LIMIT 100 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 9ef3135..cbf037f 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/TmdbCacheMapper.xml b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.xml index 4072efb..0ab6997 100644 --- a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.xml +++ b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.xml @@ -19,7 +19,7 @@ SELECT c.*, m.title AS movie_title FROM wp_tmdb_cache c - LEFT JOIN wp_movie m ON c.movie_id = m.id + LEFT JOIN wp_drive_movie m ON c.movie_id = m.id WHERE c.user_id = #{userId} AND c.status = 'active' ORDER BY c.cache_time DESC LIMIT #{pageSize} OFFSET #{pageNo} 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 c6ff6e7..2b063b7 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/TmdbScraperLogMapper.xml b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.xml index 3a22a24..f02cf8d 100644 --- a/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.xml +++ b/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbScraperLogMapper.xml @@ -21,7 +21,7 @@ SELECT * FROM wp_tmdb_scraper_log ORDER BY start_time DESC - LIMIT #{pageSize} OFFSET #{pageNo} + LIMIT #{pageSize} OFFSET #{offset} 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 c198ced..2ec21db 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 new file mode 100644 index 0000000..f54ef5f Binary files /dev/null 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/DriveMovieRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveMovieRepository.class index 713efee..fd4f3ee 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveMovieRepository.class and b/wangpan-common/target/classes/com/wangpan/common/dal/repository/DriveMovieRepository.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 7429ddc..e10b448 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/MovieRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/MovieRepository.class index 35c7954..f4fa2a9 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/TmdbScraperLogRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/TmdbScraperLogRepository.class index 55ce18f..f32dce8 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/UserRepository.class b/wangpan-common/target/classes/com/wangpan/common/dal/repository/UserRepository.class index 1cd2a76..ae5d78e 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/DriveMovie.class b/wangpan-common/target/classes/com/wangpan/common/entity/DriveMovie.class index 5dfaa6c..ef73e1c 100644 Binary files a/wangpan-common/target/classes/com/wangpan/common/entity/DriveMovie.class and b/wangpan-common/target/classes/com/wangpan/common/entity/DriveMovie.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 f16ec62..2bca98f 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/util/MinioUtil.class b/wangpan-common/target/classes/com/wangpan/common/util/MinioUtil.class index d67095f..ee80b09 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/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 11e5e68..274e135 100644 --- a/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -36,8 +36,10 @@ com\wangpan\common\annotation\RequireAuth.class com\wangpan\common\dal\dataobject\LoginLogDO.class com\wangpan\common\util\MinioUtil.class com\wangpan\common\dal\repository\LoginLogRepository.class +com\wangpan\common\dal\mapper\DailyRecommendMapper.class com\wangpan\common\dal\repository\TmdbScraperLogRepository.class com\wangpan\common\entity\Movie.class +com\wangpan\common\dal\dataobject\DailyRecommendDO.class com\wangpan\common\dal\repository\MovieRepository.class com\wangpan\common\entity\User.class com\wangpan\common\dal\mapper\DriveFolderMapper.class @@ -45,5 +47,6 @@ com\wangpan\common\annotation\RequireAdmin.class com\wangpan\common\dal\repository\TmdbCacheRepository.class com\wangpan\common\util\IconLogoFetcher.class com\wangpan\common\dal\dataobject\DriveMovieDO.class +com\wangpan\common\dal\repository\DailyRecommendRepository.class com\wangpan\common\Result.class com\wangpan\common\dal\repository\UserRepository.class diff --git a/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index c828377..50ff8cc 100644 --- a/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/wangpan-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,48 +1,51 @@ -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\MovieRepository.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DriveMovieDO.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\DriveFolderRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\SchemaUtil.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\AuthUtil.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\TmdbCacheMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\TmdbScraperLogMapper.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\LoginLogDO.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\TokenRepository.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\UserDO.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\User.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\IconRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\UserMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\DriveMovie.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\interceptor\AuthInterceptor.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\TmdbCacheRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DriveFolderDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\TokenUtil.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TmdbScraperLogDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\LoginLogRepository.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DriveDO.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\IconMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\Drive.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\TokenMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\UserRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\Icon.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\IconLogoFetcher.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\DriveMapper.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\DriveFolder.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\DriveMovieRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\DriveRepository.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\Movie.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\MovieMapper.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TokenDO.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\annotation\RequireAdmin.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\LoginLogMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\Result.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\IconDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\TmdbScraperLogRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\DailyRecommendRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\MovieDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TmdbCacheDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\MinioUtil.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\MovieRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DriveMovieDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\DriveFolderRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\TmdbCacheMapper.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\LoginLogDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\TokenRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\UserDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\User.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DailyRecommendDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\repository\IconRepository.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TmdbScraperLogDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\DriveDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\IconMapper.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\TokenMapper.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\entity\DriveFolder.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\MovieMapper.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TokenDO.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\DailyRecommendMapper.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\annotation\RequireAdmin.java +D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\IconDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\DriveFolderMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\config\WebMvcConfig.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\mapper\DriveMovieMapper.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\annotation\RequireAuth.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\MovieDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\EncryptUtil.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\dal\dataobject\TmdbCacheDO.java D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\DBUtil.java -D:\java2\wangpan\java\wangpan-common\src\main\java\com\wangpan\common\util\MinioUtil.java diff --git a/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar b/wangpan-common/target/wangpan-common-1.0-SNAPSHOT.jar index 9e873b5..64b51bd 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/target/classes/application.yml b/wangpan-drive-service/target/classes/application.yml index 9f7b41b..6e7e05c 100644 --- a/wangpan-drive-service/target/classes/application.yml +++ b/wangpan-drive-service/target/classes/application.yml @@ -5,6 +5,10 @@ server: spring: application: name: wangpan-drive-service + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB datasource: url: ENC(nJXPBEsg+NwtZt+qnD9A0AwRIdPFwex6kYEfGDetJ+N42ha/dH7V3Lq/hSCYgZa08cocXV5N+AaiisG/gh+i8CcNYjXzFV8CMSRfLwx03cxxNwnDzak+2ZEY5nb8UTbC/a6b3pWuAwg9lnHF9ziroFIrOn8+s/SYN7e+oMh4tZFmfCT4h5ATsEEuB6RkYGTzf0oImBVmet1jRR4CRdHPSeh6jSWa7y1TutJoeBWyDpzHNgqE/JRLd1VNoc583/Bn) username: ENC(9cCYl0WIh2m3gQhAfq4ykWAm5+PUvr6yPcuGKPwYDPpADnTZKVv9eYhwT806vYti) @@ -21,7 +25,7 @@ minio: # Jasypt 加密配置 jasypt: encryptor: - password: ${JASYPT_ENCRYPTOR_PASSWORD:wangpan-secret-key-2024} + password: ${JASYPT_ENCRYPTOR_PASSWORD} algorithm: PBEWITHHMACSHA512ANDAES_256 key-obtention-iterations: 1000 pool-size: 1 @@ -31,7 +35,7 @@ jasypt: logging: level: - com.wangpan: DEBUG + com.wangpan: INFO # MyBatis-Plus 配置 mybatis-plus: @@ -39,7 +43,6 @@ mybatis-plus: type-aliases-package: com.wangpan.common.dal.dataobject configuration: map-underscore-to-camel-case: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto 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 befee8d..f32f9d1 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 6753c4e..dc15a5f 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/IconController.class b/wangpan-drive-service/target/classes/com/wangpan/controller/IconController.class index 6efff54..4ddbb15 100644 Binary files a/wangpan-drive-service/target/classes/com/wangpan/controller/IconController.class and b/wangpan-drive-service/target/classes/com/wangpan/controller/IconController.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler$CleanupTask.class b/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler$CleanupTask.class new file mode 100644 index 0000000..560f717 Binary files /dev/null and b/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler$CleanupTask.class differ diff --git a/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler.class b/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler.class new file mode 100644 index 0000000..cba3a4b Binary files /dev/null and b/wangpan-drive-service/target/classes/com/wangpan/listener/IconCleanupScheduler.class differ diff --git a/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 7c920b6..a357e8b 100644 --- a/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,4 +1,6 @@ com\wangpan\config\DatabaseInitializer.class -com\wangpan\controller\DriveController.class com\wangpan\controller\IconController.class +com\wangpan\listener\IconCleanupScheduler.class +com\wangpan\controller\DriveController.class com\wangpan\DriveServiceApplication.class +com\wangpan\listener\IconCleanupScheduler$CleanupTask.class diff --git a/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 947c925..be3c528 100644 --- a/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/wangpan-drive-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,4 +1,5 @@ D:\java2\wangpan\java\wangpan-drive-service\src\main\java\com\wangpan\config\DatabaseInitializer.java D:\java2\wangpan\java\wangpan-drive-service\src\main\java\com\wangpan\controller\DriveController.java +D:\java2\wangpan\java\wangpan-drive-service\src\main\java\com\wangpan\listener\IconCleanupScheduler.java D:\java2\wangpan\java\wangpan-drive-service\src\main\java\com\wangpan\DriveServiceApplication.java D:\java2\wangpan\java\wangpan-drive-service\src\main\java\com\wangpan\controller\IconController.java 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 26d101f..effe51e 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 63e00e4..2761f7b 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/src/main/resources/META-INF/resources/api-doc.html b/wangpan-gateway/src/main/resources/META-INF/resources/api-doc.html index 9797e7e..83ed941 100644 --- a/wangpan-gateway/src/main/resources/META-INF/resources/api-doc.html +++ b/wangpan-gateway/src/main/resources/META-INF/resources/api-doc.html @@ -296,6 +296,7 @@ 架构总览 用户服务 用户管理 + 个人资料 网盘服务 Icon服务 TMDB服务 @@ -347,6 +348,7 @@ /api/login, /api/registeruser-service登录注册 /api/token/**, /api/login-logs/**user-service令牌/日志 /api/users/**user-service用户管理 + /api/profile/**user-service个人资料 /api/drive/**drive-service网盘管理 /api/icon/**drive-serviceIcon管理 /api/movies/**tmdb-service电影管理 @@ -667,6 +669,118 @@ + + + + 个人资料 + wangpan-user-service : 8081 + + + + + GET + /api/profile + 获取当前用户个人资料需Token + + + + 功能说明 + 获取当前登录用户的基本信息(不含密码等敏感字段)。 + + + 响应示例 + { + "code": 200, + "message": "查询成功", + "data": { + "id": 1, + "username": "admin", + "email": "admin@example.com", + "phone": "13800138000", + "realName": "管理员", + "avatarUrl": "http://...", + "userType": 2, + "status": 1, + "createTime": "2024-01-01T00:00:00" + } +} + + + + + + + PUT + /api/profile/username + 修改用户名需Token + + + + 功能说明 + 修改当前登录用户的用户名。 + 校验规则: + + 用户名不能为空 + 新用户名不能与当前用户名相同 + 新用户名不能被其他用户占用 + + + + 请求体 + { + "username": "新用户名" +} + + + 响应示例 + { + "code": 200, + "message": "用户名修改成功", + "data": null +} + + + + + + + PUT + /api/profile/avatar + 修改头像需Token + + + + 功能说明 + 修改当前登录用户的头像。 + 流程: + + 接收 Base64 编码的图片数据 + 解析 MIME 类型和 Base64 内容 + 上传到 MinIO(路径:avatar/{userId}_{timestamp}.{ext}) + 更新数据库中的 avatar_url 字段 + + 支持的图片格式:PNG、JPG/JPEG、GIF、WebP + + + 请求体 + { + "avatarData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." +} + + + 响应示例 + { + "code": 200, + "message": "头像更新成功", + "data": { + "avatarUrl": "http://118.178.238.159:39000/wangpan/avatar/1_1719234567890.png?..." + } +} + + + + + @@ -1544,12 +1658,19 @@ GET /api/movies/recommend - 今日推荐(随机推荐3部电影)需Token + 今日推荐(每天固定3部电影)需Token 功能说明 - 从当前用户的电影库中随机抽取3部电影用于首页展示,每次请求返回不同的推荐结果。 + 从当前用户的电影库中随机抽取3部电影用于首页展示。 + 推荐规则: + + 从 00:00 到 23:59 返回固定的3部电影 + 当天不管查询多少次都返回相同的结果 + 第二天 00:00 后重新随机挑选3部 + 推荐结果缓存在 wp_daily_recommend 表中 + 成功响应示例 @@ -1614,23 +1735,85 @@ GET /api/movies - 电影列表查询需Token + 电影列表查询(按文件夹分组,每组最多10条)需Token + + 功能说明 + 从 wp_drive_movie 表查询当前用户所有电影,按文件夹分组返回,每个文件夹最多返回 10 条电影数据。支持分页:pageNo 控制文件夹分页。 + 查询参数 参数类型必填说明 keywordString否搜索关键词 statusString否电影状态:active(正常)/ deleted(已删除) - categoryString否分类 scrapeTypeString否刮削类型:tmdb / manual / none sortByString否排序字段(如 createTime、rating、title) sortOrderString否排序方向:asc / desc pageNoint否页码,默认 1 - pageSizeint否每页条数,默认 20 + pageSizeint否每页条数(文件夹数),默认 20 + + 响应字段说明 + + 字段类型说明 + totalFoldersInteger文件夹总数 + pageNoInteger当前页码 + pageSizeInteger每页条数 + folderGroups[].folderIdLong文件夹ID + folderGroups[].movieCountInteger该文件夹下返回的电影数量 + folderGroups[].movies[].idLong电影ID + folderGroups[].movies[].driveIdLong所属网盘ID + folderGroups[].movies[].folderIdLong所属文件夹ID + folderGroups[].movies[].titleString电影名称 + folderGroups[].movies[].subtitleString副标题 + folderGroups[].movies[].originalNameString原始文件名 + folderGroups[].movies[].mimeTypeStringMIME类型 + folderGroups[].movies[].fileSizeLong文件大小(字节) + folderGroups[].movies[].extensionString文件扩展名 + folderGroups[].movies[].descriptionString描述 + folderGroups[].movies[].scrapeStatusString刮削状态 + folderGroups[].movies[].ratingInteger评分(0-100) + folderGroups[].movies[].tagsString标签 + folderGroups[].movies[].posterUrlString竖版海报URL(2:3 比例) + folderGroups[].movies[].backdropUrlString横版背景图URL(16:9 比例) + folderGroups[].movies[].minioUrlStringMinIO 文件访问URL + folderGroups[].movies[].createTimeString创建时间 + folderGroups[].movies[].updateTimeString更新时间 + + + + 响应示例 + { + "code": 200, + "message": "查询成功", + "data": { + "totalFolders": 5, + "pageNo": 1, + "pageSize": 20, + "folderGroups": [ + { + "folderId": 3, + "movieCount": 2, + "movies": [ + { + "id": 1, + "driveId": 1, + "folderId": 3, + "title": "肖申克的救赎", + "posterUrl": "http://...:39000/wangpan/posters/1/poster_xxx.jpg", + "backdropUrl": "http://...:39000/wangpan/posters/1/backdrop_xxx.jpg", + "rating": 93, + ... + } + ] + } + ] + } +} + @@ -1643,6 +1826,97 @@ + + + GET + /api/movies/{id}/scrape-status + 查询单部电影刮削状态需Token + + + + 功能说明 + 查询单部电影的刮削状态,返回三种状态:刮削中(scraping)、刮削失败(failed)、刮削成功(success)。 + + + 路径参数 + + 参数类型说明 + idLong电影ID + + + + 响应字段说明 + + 字段类型说明 + movieIdLong电影ID + titleString电影名称 + statusString刮削状态:scraping / failed / success / unknown + messageString状态描述信息 + errorString失败原因(仅 status=failed 时返回) + posterUrlString竖版海报URL(仅 status=success 时返回) + backdropUrlString横版背景图URL(仅 status=success 时返回) + ratingInteger评分(仅 status=success 时返回) + categoryString分类(仅 status=success 时返回) + tagsString标签(仅 status=success 时返回) + + + + 响应示例 - 刮削中 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "scraping", + "message": "正在刮削中,请稍候..." + } +} + + + 响应示例 - 刮削失败 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "failed", + "message": "刮削失败", + "error": "TMDB API 请求失败" + } +} + + + 响应示例 - 刮削成功 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "success", + "message": "刮削成功", + "posterUrl": "http://...:39000/wangpan/posters/1/poster_xxx.jpg", + "backdropUrl": "http://...:39000/wangpan/posters/1/backdrop_xxx.jpg", + "rating": 85, + "category": "动作", + "tags": "动作,科幻" + } +} + + + 错误码 + + code说明 + 401未登录或 Token 无效 + 404电影不存在或无权访问 + 500服务器内部错误 + + + + + POST diff --git a/wangpan-gateway/target/classes/META-INF/resources/api-doc.html b/wangpan-gateway/target/classes/META-INF/resources/api-doc.html index 9a87fd8..83ed941 100644 --- a/wangpan-gateway/target/classes/META-INF/resources/api-doc.html +++ b/wangpan-gateway/target/classes/META-INF/resources/api-doc.html @@ -296,6 +296,7 @@ 架构总览 用户服务 用户管理 + 个人资料 网盘服务 Icon服务 TMDB服务 @@ -346,7 +347,10 @@ 请求路径转发服务说明 /api/login, /api/registeruser-service登录注册 /api/token/**, /api/login-logs/**user-service令牌/日志 + /api/users/**user-service用户管理 + /api/profile/**user-service个人资料 /api/drive/**drive-service网盘管理 + /api/icon/**drive-serviceIcon管理 /api/movies/**tmdb-service电影管理 /api/tmdb/**, /api/tmdb-scraper/**tmdb-serviceTMDB刮削 @@ -665,6 +669,118 @@ + + + + 个人资料 + wangpan-user-service : 8081 + + + + + GET + /api/profile + 获取当前用户个人资料需Token + + + + 功能说明 + 获取当前登录用户的基本信息(不含密码等敏感字段)。 + + + 响应示例 + { + "code": 200, + "message": "查询成功", + "data": { + "id": 1, + "username": "admin", + "email": "admin@example.com", + "phone": "13800138000", + "realName": "管理员", + "avatarUrl": "http://...", + "userType": 2, + "status": 1, + "createTime": "2024-01-01T00:00:00" + } +} + + + + + + + PUT + /api/profile/username + 修改用户名需Token + + + + 功能说明 + 修改当前登录用户的用户名。 + 校验规则: + + 用户名不能为空 + 新用户名不能与当前用户名相同 + 新用户名不能被其他用户占用 + + + + 请求体 + { + "username": "新用户名" +} + + + 响应示例 + { + "code": 200, + "message": "用户名修改成功", + "data": null +} + + + + + + + PUT + /api/profile/avatar + 修改头像需Token + + + + 功能说明 + 修改当前登录用户的头像。 + 流程: + + 接收 Base64 编码的图片数据 + 解析 MIME 类型和 Base64 内容 + 上传到 MinIO(路径:avatar/{userId}_{timestamp}.{ext}) + 更新数据库中的 avatar_url 字段 + + 支持的图片格式:PNG、JPG/JPEG、GIF、WebP + + + 请求体 + { + "avatarData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." +} + + + 响应示例 + { + "code": 200, + "message": "头像更新成功", + "data": { + "avatarUrl": "http://118.178.238.159:39000/wangpan/avatar/1_1719234567890.png?..." + } +} + + + + + @@ -941,7 +1057,7 @@ POST /api/drive/{driveId}/movies - 上传电影文件需Token + 创建电影(只传文件名)需Token @@ -954,31 +1070,21 @@ 请求体 { - "title": "电影名称", // 必填 - "folderId": 0, // 可选,默认0(根目录) - "subtitle": "副标题", // 可选 - "description": "描述", // 可选 - "fileData": "Base64编码的文件数据", // 必填 - "rating": 85, // 可选,评分0-100 - "tags": "标签1,标签2" // 可选 + "title": "文件名.mp4", // 必填,文件名(同时作为电影标题) + "folderId": 0 // 可选,默认0(根目录) } 参数说明 参数类型必填说明 - titleString是电影名称(同时作为文件名) + titleString是文件名(同时作为电影标题,后续通过 TMDB 刮削补充信息) folderIdLong否目标文件夹ID,默认0(根目录) - subtitleString否副标题 - descriptionString否描述 - fileDataString是Base64编码的视频文件数据 - ratingInteger否评分 - tagsString否标签 说明 - 文件通过 Base64 编码上传,服务端解码后存储到 MinIO,返回文件访问 URL。自动检测 MIME 类型(mp4/mkv/avi → video/mp4)。 + 只记录文件名,不上传文件数据。创建后通过 TMDB 刮削接口补充电影的海报、描述、评分等信息。自动检测 MIME 类型(mp4/mkv/avi → video/mp4)。 @@ -1088,9 +1194,10 @@ - 请求体(部分更新) + 请求体(部分更新,所有字段可选) { "title": "新电影名称", + "originalName": "新文件名.mp4", "subtitle": "新副标题", "description": "新描述", "rating": 90, @@ -1098,6 +1205,23 @@ "category": "新分类" } + + 参数说明 + + 参数类型说明 + titleString电影名称 + originalNameString原始文件名(用于 TMDB 刮削有误时修改) + subtitleString副标题 + descriptionString描述 + ratingInteger评分 0-100 + tagsString标签 + categoryString分类 + + + + 说明 + 用于 TMDB 刮削有误时,用户可自定义修改文件名等信息。所有字段均为可选,只更新传入的字段。 + @@ -1463,6 +1587,64 @@ + + + + + POST + /api/icon/{id}/logo + 上传自定义图标图片需Token + + + + 功能说明 + 上传自定义图标图片替换自动抓取的 logo。上传后会自动删除旧的 MinIO 图片,防止硬盘空间浪费。系统每 24 小时自动清理无用图片。 + + + 路径参数 + + 参数类型说明 + idLongIcon ID + + + + 请求格式 + multipart/form-data + + 字段类型必填说明 + fileFile是图片文件(png/jpg/jpeg/gif/webp/ico,最大 1MB) + + + + 请求示例(curl) + curl -X POST http://localhost:8888/api/icon/1/logo \ + -H "Authorization: Bearer <token>" \ + -F "file=@/path/to/icon.png" + + + 成功响应(200) + { + "code": 200, + "message": "图标上传成功", + "data": { + "id": 1, + "name": "百度", + "logoUrl": "http://118.178.238.159:39000/wangpan/icons/2/1718265600000.png", + "updateTime": "2026-06-15T10:00:00" + } +} + + + 错误码 + + code说明 + 400文件为空/格式不支持/超过 1MB + 401未登录或 Token 无效 + 500Icon 不存在或无权访问/上传失败 + + + + @@ -1476,12 +1658,19 @@ GET /api/movies/recommend - 今日推荐(随机推荐3部电影)需Token + 今日推荐(每天固定3部电影)需Token 功能说明 - 从当前用户的电影库中随机抽取3部电影用于首页展示,每次请求返回不同的推荐结果。 + 从当前用户的电影库中随机抽取3部电影用于首页展示。 + 推荐规则: + + 从 00:00 到 23:59 返回固定的3部电影 + 当天不管查询多少次都返回相同的结果 + 第二天 00:00 后重新随机挑选3部 + 推荐结果缓存在 wp_daily_recommend 表中 + 成功响应示例 @@ -1546,21 +1735,85 @@ GET /api/movies - 电影列表查询需Token + 电影列表查询(按文件夹分组,每组最多10条)需Token + + 功能说明 + 从 wp_drive_movie 表查询当前用户所有电影,按文件夹分组返回,每个文件夹最多返回 10 条电影数据。支持分页:pageNo 控制文件夹分页。 + 查询参数 参数类型必填说明 keywordString否搜索关键词 - statusString否pending / scraped / failed - categoryString否分类 - scrapeTypeString否刮削类型 + statusString否电影状态:active(正常)/ deleted(已删除) + scrapeTypeString否刮削类型:tmdb / manual / none + sortByString否排序字段(如 createTime、rating、title) + sortOrderString否排序方向:asc / desc pageNoint否页码,默认 1 - pageSizeint否每页条数,默认 20 + pageSizeint否每页条数(文件夹数),默认 20 + + 响应字段说明 + + 字段类型说明 + totalFoldersInteger文件夹总数 + pageNoInteger当前页码 + pageSizeInteger每页条数 + folderGroups[].folderIdLong文件夹ID + folderGroups[].movieCountInteger该文件夹下返回的电影数量 + folderGroups[].movies[].idLong电影ID + folderGroups[].movies[].driveIdLong所属网盘ID + folderGroups[].movies[].folderIdLong所属文件夹ID + folderGroups[].movies[].titleString电影名称 + folderGroups[].movies[].subtitleString副标题 + folderGroups[].movies[].originalNameString原始文件名 + folderGroups[].movies[].mimeTypeStringMIME类型 + folderGroups[].movies[].fileSizeLong文件大小(字节) + folderGroups[].movies[].extensionString文件扩展名 + folderGroups[].movies[].descriptionString描述 + folderGroups[].movies[].scrapeStatusString刮削状态 + folderGroups[].movies[].ratingInteger评分(0-100) + folderGroups[].movies[].tagsString标签 + folderGroups[].movies[].posterUrlString竖版海报URL(2:3 比例) + folderGroups[].movies[].backdropUrlString横版背景图URL(16:9 比例) + folderGroups[].movies[].minioUrlStringMinIO 文件访问URL + folderGroups[].movies[].createTimeString创建时间 + folderGroups[].movies[].updateTimeString更新时间 + + + + 响应示例 + { + "code": 200, + "message": "查询成功", + "data": { + "totalFolders": 5, + "pageNo": 1, + "pageSize": 20, + "folderGroups": [ + { + "folderId": 3, + "movieCount": 2, + "movies": [ + { + "id": 1, + "driveId": 1, + "folderId": 3, + "title": "肖申克的救赎", + "posterUrl": "http://...:39000/wangpan/posters/1/poster_xxx.jpg", + "backdropUrl": "http://...:39000/wangpan/posters/1/backdrop_xxx.jpg", + "rating": 93, + ... + } + ] + } + ] + } +} + @@ -1573,6 +1826,97 @@ + + + GET + /api/movies/{id}/scrape-status + 查询单部电影刮削状态需Token + + + + 功能说明 + 查询单部电影的刮削状态,返回三种状态:刮削中(scraping)、刮削失败(failed)、刮削成功(success)。 + + + 路径参数 + + 参数类型说明 + idLong电影ID + + + + 响应字段说明 + + 字段类型说明 + movieIdLong电影ID + titleString电影名称 + statusString刮削状态:scraping / failed / success / unknown + messageString状态描述信息 + errorString失败原因(仅 status=failed 时返回) + posterUrlString竖版海报URL(仅 status=success 时返回) + backdropUrlString横版背景图URL(仅 status=success 时返回) + ratingInteger评分(仅 status=success 时返回) + categoryString分类(仅 status=success 时返回) + tagsString标签(仅 status=success 时返回) + + + + 响应示例 - 刮削中 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "scraping", + "message": "正在刮削中,请稍候..." + } +} + + + 响应示例 - 刮削失败 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "failed", + "message": "刮削失败", + "error": "TMDB API 请求失败" + } +} + + + 响应示例 - 刮削成功 + { + "code": 200, + "message": "查询成功", + "data": { + "movieId": 1, + "title": "电影名称", + "status": "success", + "message": "刮削成功", + "posterUrl": "http://...:39000/wangpan/posters/1/poster_xxx.jpg", + "backdropUrl": "http://...:39000/wangpan/posters/1/backdrop_xxx.jpg", + "rating": 85, + "category": "动作", + "tags": "动作,科幻" + } +} + + + 错误码 + + code说明 + 401未登录或 Token 无效 + 404电影不存在或无权访问 + 500服务器内部错误 + + + + + POST @@ -1581,8 +1925,19 @@ - 请求体 - { "title": "电影名称" } + 请求体(所有字段可选,title 必填) + { + "title": "电影名称", // 必填 + "subtitle": "副标题", // 可选 + "resourceLibrary": "资源库", // 可选 + "maintainer": "维护者", // 可选 + "status": "active", // 可选:active / deleted + "category": "动作", // 可选 + "scrapeType": "tmdb", // 可选:tmdb / manual / none + "rating": 85, // 可选:0-100 + "posterUrl": "海报URL", // 可选 + "tags": "标签1,标签2" // 可选 +} @@ -1593,7 +1948,30 @@ /api/movies/{id} 更新电影需Token - + + + 路径参数 + + 参数类型说明 + idLong电影ID + + + + 请求体(部分更新,所有字段可选) + { + "title": "新电影名称", + "subtitle": "新副标题", + "resourceLibrary": "新资源库", + "maintainer": "新维护者", + "status": "active", + "category": "新分类", + "scrapeType": "tmdb", + "rating": 90, + "posterUrl": "新海报URL", + "tags": "新标签" +} + + @@ -1625,7 +2003,23 @@ /api/movies/stats 电影统计需Token - + + + 功能说明 + 获取当前用户的电影数量统计,按刮削类型和分类分组。 + + + 响应示例 + { + "code": 200, + "data": { + "totalCount": 10, + "scrapedCount": 8, + "pendingCount": 2 + } +} + + @@ -1659,9 +2053,25 @@ - 请求体 + 请求方式 + 支持两种方式传递 movieId: + 1. URL 查询参数:?movieId=1 + 2. 请求体 JSON: { "movieId": 1 } + + 响应示例 + { + "code": 200, + "message": "刮削完成", + "data": { + "movieId": 1, + "title": "电影名称", + "rating": 85, + "posterUrl": "海报URL" + } +} + @@ -1673,9 +2083,20 @@ - 请求体 - { "movieIds": [1, 2, 3] } + 请求体(movieIds 可选) + { "movieIds": [1, 2, 3] } // 可选:不传则自动查找需要刮削的电影 + + 响应示例 + { + "code": 200, + "message": "批量刮削完成", + "data": { + "successCount": 2, + "failCount": 0, + "total": 2 + } +} @@ -1703,7 +2124,20 @@ /api/tmdb-scraper/stats 刮削统计需Token - + + + 响应示例 + { + "code": 200, + "data": { + "totalCaches": 5, + "activeCaches": 3, + "expiredCaches": 2, + "userId": 2 + } +} + + @@ -1712,7 +2146,24 @@ /api/tmdb-scraper/trigger 手动触发定时任务需Token - + + + 功能说明 + 手动触发 TMDB 定时扫描任务,查找需要刮削的电影并执行刮削。无需请求体。 + + + 响应示例 + { + "code": 200, + "message": "扫描任务已触发", + "data": { + "message": "扫描任务已触发", + "triggeredBy": 2, + "triggerType": "manual" + } +} + + @@ -1730,6 +2181,26 @@ pageSize20每页条数 + + 响应示例 + { + "code": 200, + "data": { + "total": 10, + "list": [ + { + "id": 1, + "scanTime": "2026-06-18T10:00:00", + "totalMovies": 5, + "successCount": 4, + "failCount": 1 + } + ], + "pageNo": 1, + "pageSize": 20 + } +} + @@ -1739,7 +2210,27 @@ /api/tmdb-scraper/cache/{movieId} 删除缓存需Token - + + + 路径参数 + + 参数类型说明 + movieIdLong电影ID + + + + 功能说明 + 删除指定电影的 TMDB 刮削缓存,下次刮削时将重新从 TMDB 获取数据。 + + + 响应示例 + { + "code": 200, + "message": "缓存删除成功", + "data": null +} + + diff --git a/wangpan-gateway/target/classes/application.yml b/wangpan-gateway/target/classes/application.yml index 5d1ef64..1aa101a 100644 --- a/wangpan-gateway/target/classes/application.yml +++ b/wangpan-gateway/target/classes/application.yml @@ -5,6 +5,8 @@ server: spring: application: name: wangpan-gateway + codec: + max-in-memory-size: 10MB cloud: gateway: routes: @@ -33,10 +35,15 @@ spring: # Jasypt 加密配置 jasypt: encryptor: - password: ${JASYPT_ENCRYPTOR_PASSWORD:wangpan-secret-key-2024} - algorithm: PBEWithMD5AndDES + password: ${JASYPT_ENCRYPTOR_PASSWORD} + algorithm: PBEWITHHMACSHA512ANDAES_256 + key-obtention-iterations: 1000 + pool-size: 1 + salt-generator-classname: org.jasypt.salt.RandomSaltGenerator + iv-generator-classname: org.jasypt.iv.RandomIvGenerator + string-output-type: base64 logging: level: - com.wangpan: DEBUG - org.springframework.cloud.gateway: DEBUG + com.wangpan: INFO + org.springframework.cloud.gateway: INFO diff --git a/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar b/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar index 24aad9c..d8d3630 100644 Binary files a/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar and b/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar differ diff --git a/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar.original b/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar.original index 8ad39b3..bea8a6d 100644 Binary files a/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar.original and b/wangpan-gateway/target/wangpan-gateway-1.0-SNAPSHOT.jar.original differ diff --git a/wangpan-tmdb-service/src/main/java/com/wangpan/controller/MovieController.java b/wangpan-tmdb-service/src/main/java/com/wangpan/controller/MovieController.java index 4997769..52261ea 100644 --- a/wangpan-tmdb-service/src/main/java/com/wangpan/controller/MovieController.java +++ b/wangpan-tmdb-service/src/main/java/com/wangpan/controller/MovieController.java @@ -3,6 +3,7 @@ package com.wangpan.controller; import com.wangpan.common.Result; import com.wangpan.common.annotation.RequireAuth; import com.wangpan.common.dal.dataobject.DailyRecommendDO; +import com.wangpan.common.dal.dataobject.DriveMovieDO; import com.wangpan.common.dal.repository.DailyRecommendRepository; import com.wangpan.common.dal.repository.DriveMovieRepository; import com.wangpan.common.dal.repository.MovieRepository; @@ -123,6 +124,66 @@ public class MovieController { return Result.success("查询成功", movieToMap(movie)); } + /** + * 查询单部电影的刮削状态 + * GET /api/movies/{id}/scrape-status + * + * 返回三种状态: + * - scraping: 刮削中(scrapeStatus = pending 或 scraping) + * - failed: 刮削失败(scrapeStatus = failed),包含失败原因 + * - success: 刮削成功(scrapeStatus = success) + */ + @GetMapping("/{id}/scrape-status") + public Result> getScrapeStatus(@PathVariable("id") Long id, HttpServletRequest request) { + User user = getCurrentUser(request); + + log.info("用户 [{}] 查询电影 ID={} 的刮削状态", user.getUsername(), id); + + // 1. 查询电影信息 + DriveMovieDO movieDO = driveMovieRepository.findByIdAsDO(id); + if (movieDO == null) { + return Result.notFound("电影不存在"); + } + + // 2. 校验用户权限 + if (!movieDO.getUserId().equals(user.getId())) { + return Result.notFound("电影不存在或无权访问"); + } + + // 3. 构建刮削状态响应 + Map resultData = new HashMap<>(); + resultData.put("movieId", id); + resultData.put("title", movieDO.getTitle()); + + String scrapeStatus = movieDO.getScrapeStatus(); + + if ("pending".equals(scrapeStatus) || "scraping".equals(scrapeStatus)) { + // 刮削中 + resultData.put("status", "scraping"); + resultData.put("message", "正在刮削中,请稍候..."); + } else if ("failed".equals(scrapeStatus)) { + // 刮削失败 + resultData.put("status", "failed"); + resultData.put("message", "刮削失败"); + resultData.put("error", movieDO.getScrapeError()); + } else if ("success".equals(scrapeStatus)) { + // 刮削成功 + resultData.put("status", "success"); + resultData.put("message", "刮削成功"); + resultData.put("posterUrl", movieDO.getPosterUrl()); + resultData.put("backdropUrl", movieDO.getBackdropUrl()); + resultData.put("rating", movieDO.getRating()); + resultData.put("category", movieDO.getCategory()); + resultData.put("tags", movieDO.getTags()); + } else { + // 未知状态或未刮削 + resultData.put("status", "unknown"); + resultData.put("message", "未进行刮削或状态未知"); + } + + return Result.success("查询成功", resultData); + } + /** * 新增电影 * POST /api/movies diff --git a/wangpan-tmdb-service/target/classes/application.yml b/wangpan-tmdb-service/target/classes/application.yml index 3fb34da..daf5e53 100644 --- a/wangpan-tmdb-service/target/classes/application.yml +++ b/wangpan-tmdb-service/target/classes/application.yml @@ -21,7 +21,7 @@ minio: # Jasypt 加密配置 jasypt: encryptor: - password: ${JASYPT_ENCRYPTOR_PASSWORD:wangpan-secret-key-2024} + password: ${JASYPT_ENCRYPTOR_PASSWORD} algorithm: PBEWITHHMACSHA512ANDAES_256 key-obtention-iterations: 1000 pool-size: 1 @@ -31,7 +31,7 @@ jasypt: logging: level: - com.wangpan: DEBUG + com.wangpan: INFO # MyBatis-Plus 配置 mybatis-plus: @@ -39,7 +39,6 @@ mybatis-plus: type-aliases-package: com.wangpan.common.dal.dataobject configuration: map-underscore-to-camel-case: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto 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 c91ec14..43dae81 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.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/MovieController.class index 4a3966d..98d9c7c 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/TmdbScraperController.class b/wangpan-tmdb-service/target/classes/com/wangpan/controller/TmdbScraperController.class index e2a3209..ba4669b 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/service/TmdbScraperService.class b/wangpan-tmdb-service/target/classes/com/wangpan/service/TmdbScraperService.class index 2a0d177..4c13811 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-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar b/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar index 2becd08..157534a 100644 Binary files a/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar and b/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar differ diff --git a/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar.original b/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar.original index f0a8877..8f09c4f 100644 Binary files a/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar.original and b/wangpan-tmdb-service/target/wangpan-tmdb-service-1.0-SNAPSHOT.jar.original differ diff --git a/wangpan-user-service/target/classes/application.yml b/wangpan-user-service/target/classes/application.yml index be275e6..2e9508e 100644 --- a/wangpan-user-service/target/classes/application.yml +++ b/wangpan-user-service/target/classes/application.yml @@ -14,7 +14,7 @@ spring: # Jasypt 加密配置 jasypt: encryptor: - password: ${JASYPT_ENCRYPTOR_PASSWORD:wangpan-secret-key-2024} + password: ${JASYPT_ENCRYPTOR_PASSWORD} algorithm: PBEWITHHMACSHA512ANDAES_256 key-obtention-iterations: 1000 pool-size: 1 @@ -24,7 +24,7 @@ jasypt: logging: level: - com.wangpan: DEBUG + com.wangpan: INFO # MyBatis-Plus 配置 mybatis-plus: @@ -32,10 +32,16 @@ mybatis-plus: type-aliases-package: com.wangpan.common.dal.dataobject configuration: map-underscore-to-camel-case: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto logic-delete-field: isDeleted logic-delete-value: 1 logic-not-delete-value: 0 + +# MinIO 对象存储配置(头像上传用) +minio: + endpoint: ENC(nDpSqjv62odavtIjInqIzcjmWua20QGTKKfKsJlxgCTkWGWj/JJsIAEfsLIzKjpbeAMl/mxVJuPQv8o58b46gQ==) + accessKey: ENC(YM+d/P5KM/QqGFcbbxcZlM+jH0dTgaYlGiYOJ04dIyBX+Z4fu+h05tdylTy0SroK) + secretKey: ENC(BKqQFlceb8mGmAMWbmXFVV1US1Ib+24VApZCci0xyz+xAqL9MQetHJKsrWW1Vib2) + bucketName: wangpan diff --git a/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class b/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class new file mode 100644 index 0000000..6b77119 Binary files /dev/null and b/wangpan-user-service/target/classes/com/wangpan/controller/ProfileController.class differ diff --git a/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index b522138..741b4ac 100644 --- a/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -4,3 +4,4 @@ com\wangpan\service\UserService.class com\wangpan\UserServiceApplication.class com\wangpan\controller\UserController.class com\wangpan\controller\AuthController.class +com\wangpan\controller\ProfileController.class diff --git a/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index fe04e74..6032528 100644 --- a/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/wangpan-user-service/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,7 @@ D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\service\UserService.java D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\UserServiceApplication.java D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\config\DatabaseInitializer.java +D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\controller\ProfileController.java D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\controller\AuthController.java D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\controller\UserController.java D:\java2\wangpan\java\wangpan-user-service\src\main\java\com\wangpan\controller\LoginLogController.java diff --git a/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar b/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar index 9799167..229255d 100644 Binary files a/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar and b/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar differ diff --git a/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar.original b/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar.original index 9371ae3..5da831d 100644 Binary files a/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar.original and b/wangpan-user-service/target/wangpan-user-service-1.0-SNAPSHOT.jar.original differ
获取当前登录用户的基本信息(不含密码等敏感字段)。
修改当前登录用户的用户名。
校验规则:
修改当前登录用户的头像。
流程:
支持的图片格式:PNG、JPG/JPEG、GIF、WebP
从当前用户的电影库中随机抽取3部电影用于首页展示,每次请求返回不同的推荐结果。
从当前用户的电影库中随机抽取3部电影用于首页展示。
推荐规则:
从 wp_drive_movie 表查询当前用户所有电影,按文件夹分组返回,每个文件夹最多返回 10 条电影数据。支持分页:pageNo 控制文件夹分页。
wp_drive_movie
查询单部电影的刮削状态,返回三种状态:刮削中(scraping)、刮削失败(failed)、刮削成功(success)。
文件通过 Base64 编码上传,服务端解码后存储到 MinIO,返回文件访问 URL。自动检测 MIME 类型(mp4/mkv/avi → video/mp4)。
只记录文件名,不上传文件数据。创建后通过 TMDB 刮削接口补充电影的海报、描述、评分等信息。自动检测 MIME 类型(mp4/mkv/avi → video/mp4)。
用于 TMDB 刮削有误时,用户可自定义修改文件名等信息。所有字段均为可选,只更新传入的字段。
上传自定义图标图片替换自动抓取的 logo。上传后会自动删除旧的 MinIO 图片,防止硬盘空间浪费。系统每 24 小时自动清理无用图片。
multipart/form-data
获取当前用户的电影数量统计,按刮削类型和分类分组。
支持两种方式传递 movieId:
1. URL 查询参数:?movieId=1
?movieId=1
2. 请求体 JSON:
手动触发 TMDB 定时扫描任务,查找需要刮削的电影并执行刮削。无需请求体。
删除指定电影的 TMDB 刮削缓存,下次刮削时将重新从 TMDB 获取数据。