From 27f48ff43a15d3163b33086f10a69b85b63e21b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=93=86=E5=93=86=E5=92=AF=E5=93=86=E5=93=86=E5=92=AF?= <1754274446@qq.com> Date: Thu, 24 Apr 2025 19:37:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=99=BB=E5=BD=95=E8=81=94?= =?UTF-8?q?=E9=80=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../luojia-island/.idea/misc.xml | 2 +- .../common/config/MybatisConfig.java | 14 + .../common/config/WebMvcConfig.java | 2 +- .../common/exception/FileException.java | 7 + .../common/interceptor/AuthInterceptor.java | 1 - .../luojia_channel/common/utils/JWTUtil.java | 4 +- .../common/utils/RedisUtil.java | 2 +- .../advice/GlobalExceptionHandler.class | Bin 1713 -> 1705 bytes .../common/config/MybatisConfig.class | Bin 427 -> 1321 bytes .../common/config/RedisConfig.class | Bin 3210 -> 3210 bytes .../common/config/WebMvcConfig.class | Bin 1564 -> 1556 bytes .../common/constants/RedisConstant.class | Bin 483 -> 483 bytes .../luojia_channel/common/domain/Result.class | Bin 4295 -> 4201 bytes .../domain/UserDTO$UserDTOBuilder.class | Bin 2295 -> 2207 bytes .../common/domain/UserDTO.class | Bin 3995 -> 3899 bytes .../common/exception/BaseException.class | Bin 813 -> 813 bytes .../common/exception/FileException.class | Bin 0 -> 487 bytes .../common/exception/UserException.class | Bin 487 -> 487 bytes .../common/interceptor/AuthInterceptor.class | Bin 3391 -> 3391 bytes .../luojia_channel/common/utils/JWTUtil.class | Bin 8062 -> 8056 bytes .../common/utils/RedisUtil$ZSetItem.class | Bin 3194 -> 3105 bytes .../common/utils/RedisUtil.class | Bin 10484 -> 10429 bytes .../common/utils/UserContext.class | Bin 2521 -> 2490 bytes .../luojia-island/package-lock.json | 6 + .../luojia-island/pom.xml | 13 + .../luojia-island/service/pom.xml | 8 +- .../modules/file/config/MinioConfig.java | 31 ++ .../modules/file/constants/FileConstant.java | 7 + .../modules/file/dto/CompleteUploadDTO.java | 17 ++ .../modules/file/dto/UploadChunkDTO.java | 22 ++ .../modules/file/dto/UploadFileDTO.java | 15 + .../modules/file/entity/LjFile.java | 32 +++ .../modules/file/mapper/LjFileMapper.java | 9 + .../modules/file/service/FileService.java | 15 + .../file/service/impl/FileServiceImpl.java | 267 ++++++++++++++++++ .../modules/file/utils/GeneratePathUtil.java | 35 +++ .../modules/file/utils/ValidateFileUtil.java | 102 +++++++ .../modules/user/Config/SecurityConfig.java | 30 -- .../user/controller/UserInfoController.java | 31 +- .../user/controller/UserLoginController.java | 5 +- .../modules/user/dto/UserChangeInfoDTO.java | 20 ++ .../modules/user/dto/UserLoginDTO.java | 1 + .../modules/user/dto/UserRegisterDTO.java | 4 - .../modules/user/entity/User.java | 25 +- .../modules/user/service/UserInfoService.java | 9 + .../user/service/UserLoginService.java | 3 +- .../service/impl/UserInfoServiceImpl.java | 88 +++++- .../service/impl/UserLoginServiceImpl.java | 29 +- ...rameterUtil.java => ValidateUserUtil.java} | 38 ++- .../src/main/resources/application-local.yaml | 23 +- .../src/main/resources/application.yaml | 5 + .../src/main/resources/db/luojia_channel.sql | 86 +++++- .../com/luojia_channel/FileServiceTests.java | 96 +++++++ .../LuojiaChannelApplicationTests.java | 9 + .../target/classes/application-local.yaml | 23 +- .../service/target/classes/application.yaml | 5 + .../LuojiaChannelApplication.class | Bin 764 -> 764 bytes .../modules/file/config/MinioConfig.class | Bin 0 -> 1432 bytes .../modules/file/constants/FileConstant.class | Bin 0 -> 521 bytes ...teUploadDTO$CompleteUploadDTOBuilder.class | Bin 0 -> 2371 bytes .../modules/file/dto/CompleteUploadDTO.class | Bin 0 -> 3922 bytes ...UploadChunkDTO$UploadChunkDTOBuilder.class | Bin 0 -> 2957 bytes .../modules/file/dto/UploadChunkDTO.class | Bin 0 -> 5147 bytes .../UploadFileDTO$UploadFileDTOBuilder.class | Bin 0 -> 2228 bytes .../modules/file/dto/UploadFileDTO.class | Bin 0 -> 3479 bytes .../file/entity/LjFile$LjFileBuilder.class | Bin 0 -> 3617 bytes .../modules/file/entity/LjFile.class | Bin 0 -> 7247 bytes .../modules/file/mapper/LjFileMapper.class | Bin 0 -> 419 bytes .../modules/file/service/FileService.class | Bin 0 -> 847 bytes .../file/service/impl/FileServiceImpl.class | Bin 0 -> 13955 bytes .../modules/file/utils/GeneratePathUtil.class | Bin 0 -> 2089 bytes .../modules/file/utils/ValidateFileUtil.class | Bin 0 -> 7413 bytes .../modules/user/Config/SecurityConfig.class | Bin 4173 -> 0 bytes .../modules/user/constant/UserConstant.class | Bin 578 -> 578 bytes .../user/controller/UserInfoController.class | Bin 619 -> 3475 bytes .../user/controller/UserLoginController.class | Bin 2886 -> 2994 bytes .../modules/user/dto/UserChangeInfoDTO.class | Bin 0 -> 4820 bytes .../modules/user/dto/UserLoginDTO.class | Bin 2418 -> 2418 bytes .../modules/user/dto/UserRegisterDTO.class | Bin 4768 -> 3805 bytes .../modules/user/entity/User.class | Bin 8841 -> 9275 bytes .../modules/user/mapper/UserMapper.class | Bin 413 -> 413 bytes .../user/service/UserInfoService.class | Bin 351 -> 661 bytes .../user/service/UserLoginService.class | Bin 859 -> 892 bytes .../service/impl/UserInfoServiceImpl.class | Bin 800 -> 5056 bytes .../service/impl/UserLoginServiceImpl.class | Bin 9184 -> 9778 bytes .../user/utils/AnonymousUserUtil.class | Bin 3278 -> 3249 bytes .../user/utils/ValidateParameterUtil.class | Bin 5504 -> 0 bytes .../modules/user/utils/ValidateUserUtil.class | Bin 0 -> 7198 bytes .../target/classes/db/luojia_channel.sql | 86 +++++- .../com/luojia_channel/FileServiceTests.class | Bin 0 -> 3246 bytes .../LuojiaChannelApplicationTests.class | Bin 0 -> 447 bytes .../vue-frontend/package-lock.json | 257 ++++++++++++++++- .../luojia-island/vue-frontend/package.json | 4 +- .../vue-frontend/src/components/Login.vue | 159 +++++++---- .../vue-frontend/src/components/Register.vue | 141 ++++++--- .../luojia-island/vue-frontend/src/main.js | 3 + .../vue-frontend/src/router/index.js | 2 +- .../vue-frontend/src/utils/request.js | 36 +++ .../luojia-island/vue-frontend/vue.config.js | 14 +- 99 files changed, 1623 insertions(+), 220 deletions(-) create mode 100644 珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/exception/FileException.java create mode 100644 珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/exception/FileException.class create mode 100644 珞珈岛-项目相关文件/luojia-island/package-lock.json create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/config/MinioConfig.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/constants/FileConstant.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/CompleteUploadDTO.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadChunkDTO.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadFileDTO.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/entity/LjFile.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/mapper/LjFileMapper.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/FileService.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/impl/FileServiceImpl.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/GeneratePathUtil.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/ValidateFileUtil.java delete mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/Config/SecurityConfig.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.java rename 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/{ValidateParameterUtil.java => ValidateUserUtil.java} (71%) create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/FileServiceTests.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/LuojiaChannelApplicationTests.java create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/config/MinioConfig.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/constants/FileConstant.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/CompleteUploadDTO$CompleteUploadDTOBuilder.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/CompleteUploadDTO.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadChunkDTO$UploadChunkDTOBuilder.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadChunkDTO.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadFileDTO$UploadFileDTOBuilder.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadFileDTO.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile$LjFileBuilder.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/mapper/LjFileMapper.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/service/FileService.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/service/impl/FileServiceImpl.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/utils/GeneratePathUtil.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/utils/ValidateFileUtil.class delete mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/Config/SecurityConfig.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.class delete mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/utils/ValidateParameterUtil.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/utils/ValidateUserUtil.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/FileServiceTests.class create mode 100644 珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/LuojiaChannelApplicationTests.class create mode 100644 珞珈岛-项目相关文件/luojia-island/vue-frontend/src/utils/request.js diff --git a/珞珈岛-项目相关文件/luojia-island/.idea/misc.xml b/珞珈岛-项目相关文件/luojia-island/.idea/misc.xml index 82dbec8..4731638 100644 --- a/珞珈岛-项目相关文件/luojia-island/.idea/misc.xml +++ b/珞珈岛-项目相关文件/luojia-island/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/MybatisConfig.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/MybatisConfig.java index 5c2b3bf..9577ba0 100644 --- a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/MybatisConfig.java +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/MybatisConfig.java @@ -1,7 +1,21 @@ package com.luojia_channel.common.config; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(); + // 设置单页最大限制(如不限制可设为 -1) + paginationInterceptor.setMaxLimit(1000L); + // 设置是否溢出总页数(true:自动调整页码,false:抛出异常) + paginationInterceptor.setOverflow(true); + interceptor.addInnerInterceptor(paginationInterceptor); + return interceptor; + } } diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/WebMvcConfig.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/WebMvcConfig.java index e74ed52..891e804 100644 --- a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/WebMvcConfig.java +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/config/WebMvcConfig.java @@ -12,7 +12,7 @@ public class WebMvcConfig implements WebMvcConfigurer { private final AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { - // 登录拦截器 + // 拦截器 registry.addInterceptor(authInterceptor) .excludePathPatterns("/user/login", "/user/register" diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/exception/FileException.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/exception/FileException.java new file mode 100644 index 0000000..747057f --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/exception/FileException.java @@ -0,0 +1,7 @@ +package com.luojia_channel.common.exception; + +public class FileException extends BaseException{ + public FileException(String msg){ + super(500, msg); + } +} diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/interceptor/AuthInterceptor.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/interceptor/AuthInterceptor.java index 90cdbce..c937694 100644 --- a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/interceptor/AuthInterceptor.java +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/interceptor/AuthInterceptor.java @@ -34,7 +34,6 @@ public class AuthInterceptor implements HandlerInterceptor { response.setHeader("New-Access-Token", JWTUtil.TOKEN_PREFIX + user.getAccessToken()); response.setHeader("New-Refresh-Token", user.getRefreshToken()); } - // 将用户信息存入请求上下文 UserContext.setUser(user); return true; } catch (UserException ex) { diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/JWTUtil.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/JWTUtil.java index e3c134a..30330fb 100644 --- a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/JWTUtil.java +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/JWTUtil.java @@ -27,7 +27,7 @@ public final class JWTUtil { private static final long ACCESS_EXPIRATION = 60 * 60 * 1000; //一小时 private static final long REFRESH_EXPIRATION = 60 * 60 * 24 * 15 * 1000; //15天 - private static final Long NEED_REFRESH_TTL = 7L; + private static final long NEED_REFRESH_TTL = 60 * 60 * 24 * 7 * 1000; //7天 private static final String USER_ID_KEY = "userId"; private static final String USER_NAME_KEY = "username"; public static final String TOKEN_PREFIX = "Bearer "; @@ -144,7 +144,7 @@ public final class JWTUtil { String newAccessToken = generateAccessToken(user); String newRefreshToken = generateRefreshToken(user); // 惰性刷新refreshToken - Long ttl = redisUtil.getExpire(redisKey, TimeUnit.DAYS); + Long ttl = redisUtil.getExpire(redisKey, TimeUnit.MILLISECONDS); if(ttl < NEED_REFRESH_TTL) redisUtil.set(redisKey, newRefreshToken, REFRESH_EXPIRATION, TimeUnit.MILLISECONDS); user.setAccessToken(newAccessToken); diff --git a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/RedisUtil.java b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/RedisUtil.java index 25f0160..20494f9 100644 --- a/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/RedisUtil.java +++ b/珞珈岛-项目相关文件/luojia-island/common/src/main/java/com/luojia_channel/common/utils/RedisUtil.java @@ -48,7 +48,7 @@ public class RedisUtil { public boolean hasKey(String key) { Boolean result = redisTemplate.hasKey(key); - return result != null; + return result != null && result; } public Long getExpire(String key, TimeUnit timeUnit){ diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/advice/GlobalExceptionHandler.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/advice/GlobalExceptionHandler.class index e78f77a9a0cc076890c1097a8d4fc20e3880bd98..e387a870ad639b75a6af312888c514043c3c6a74 100644 GIT binary patch delta 705 zcmYjO-BQy~5dKb*HfeiOYAc|@3Rso?fB`L5uz*^rsI4$wc;k2x+nBbN#z~^%9nTQ+ z3ObH6UWm>hc;N%+Gw=dFgyW_#YG!u7?4CW}x4UOo{h-!={QmYGzzVkF5FpBsI3kEL zq z9UKa|>`9Eu7~>enDTa}MthK)3xAHqxCNPO9 z8Pgo+kfY9Q$I{*YvvN;w*p_8F!AG&4yud)6Ok##3kHQ--|kx}MY#8rkFKc%T{d)w#^^oOSVvhM}&r42QXYgm%8%yAu6|EK2v zD*LY&BT~(7n?arxVv^VCx(rJVKUE3dvMyu6bD@%9|2cXvLIj zt3TXk5RKS73hf?X(86UBu22*uTqP6<=|#w|QKS>nq=*#1g6-0efE(n)V?f1C@*x2g z;1+6x47agPB;n-_q@mF4XUJ)_w1<&BWC(UnAK`;`>x{-iEdD3gi!$8B}-E39@+iJU@a<8(D*yjbh!5Li=~x) aRK7qC=VJfOl^~HOYuW6g`g_Ixu~FlqzTuzfdU!p{>+f1*+0wtHm}kapP*F;{d@LL2fHCPL@7=i{=iGDedmq`0#DD(z@)bZ0TN(lki{g7= zO8ihVNewDPyk|T!%6((UDsMjSnQd?IGA$a)LM>En_q#h?ug;)M=N~et4SUR+JFV58lj%6kOoAh)aWC*~~O%G~^j#{{=VthU;<^P!vg) z4VN&hq0BJnPiU*Dd5$?08Fb6^TBhq7mN||qSkO?R!H??axJt`;$C}Y42FSu2997iB zZ??En!ZOEA++yHFw(2;xBiG^YW?e@K4UQGrEA}rvYN(@$H4S$dawIDkeJ>`{-flbrgP>I zSQ}@3AswjH7bt#2B5|&;kL*5jWG)|KUWE)^D;(mw0*ck?+&;kS2dW=xjrs#mP~Qac i)hB%c$syrL08!%}B^fpd7G&f|bj!c*`?}=Bo4{WMeSJFs diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/MybatisConfig.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/MybatisConfig.class index 4552619f1ddc717ac87716d6ed580a4d32bdb783..eaaa2fefe14a7cbd7b065893fd6e805bdbfd4416 100644 GIT binary patch literal 1321 zcmb_cZBG+H5Pr5T92|$d6j1OD-|z~BLrwfrH9;Z?dKIFkiGDHLc3T$jcAI+v{8#z~ zj3oX5e~G`sICob;8WU;aU9x+#GxN;s%rp1>=htrl9^-+D9P$PV76vfLFuu$8xZ`ov zcDCxfq7g9+K9WjCPZ;ucsb*k^VXdKkr_Qx6n>u#8YBQ0~pqj`J(7ou%|1dF*2?LWB zikM=!aC$RWt2TqN$Guo=wHS)_^OAd3T`^%|#==EhVi*ZUROJV*^d;4!X!qKdYKirn zh0C~-S#Rx$pyla(hJyVrQ5(2s;X3BYoj04ki8E~2Zr_FIMX4n1xyi7SAbGLgmHd5U zhf|R}hmL&eN<*ubZ2xY`dMZ(l>$)iz#$2hy%h<1r;0>>PbTaAc2KQ<_kcr$qEJQmp zWLQlTK7W`B!%UYdJ!D{bW|#W8{@*!80Y>C0#TeHA3+8m^55Aocn4#Ja`oEY Jot)kWegV)4dE@{9 delta 156 zcmZ3S1PU-QZ~;k>G>GH| al00BGE0E>|%kzOreg*-s3PuJ&1_l6~KoHXa diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/RedisConfig.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/RedisConfig.class index ed5f031a315baba0aa5bcea603e9eb06a09b5727..658a2e96ea2d913cc01a876cecd52e9debafbb07 100644 GIT binary patch delta 947 zcmZWnO;1x%5Iwi=wePikrSefq5fBuG(qgF}pn@QRA_^#0izuQ`sZeYvwp9{cbZc1I zToMw*TwI@|^fc;u{N3a|XA40|fdc$I-_ z)W}LTE^6h1IuiDk@qmGP)Cg2%6S=sVdYFhMGD$O)e4NNw=^6|)^4S+PpljG;pqa*R zHQ>;&SD;?L)azNg#Y)wJ{RR%8O+I%Fx`XJ@5Hb)(XTcNc5l|P>*&M5kEt-$aNXlHA zkHm7Bw2 delta 922 zcmZWm%T7~K6kX@OdwZ_MS}8>?f+A2_t)QsLO9aISFJB#EOzA zHK8$-%%m1miP_ZLRAO*^COwf8-<1mSS$n8!^O=R5aP_bl(oJs7r?T0l%)%stE2{L6 znAQE2M%(n%u@{I;+0h%u+b?MI?>J1gEJznbX73)a_BI8U^vg=hY_UZT;%9O zzX+=%zCm0vF~m?y5+U(S4eA`1aYejV2Z9XOI2;%@1~I~M9izh0dX1a7ZQ_;~)5@s# z4#vci)-PUI&n+8Mm^N`wwD{_%)Q1_7^u5#q2JVVqzDIf59}QQbNJnJIB;=>tqVQ#5 zQ-KU_FK{Z5jqQaUB*x?y(7BVu5_B`V^@ddhS13^sqEo&E0(tDFi+dd?MVJsn86wb7 zPPu|T81EZ)xY-3ZUp4z5O l3)M&>MbkBmZ@ioM=U|d>nnHf$eTrGk5wa=E-~qCT`~_d%h8X|= diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/WebMvcConfig.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/config/WebMvcConfig.class index c4253892bc6c8ebc21d08aa453bf0b4f042b73ab..3ccb3b220b89f114b15f8bce43073fc800312562 100644 GIT binary patch delta 487 zcmY+9&q@MO6vn?hGdensrlVPDTJ~4RY)oiZE?Ol-Eri5XXo!s12s#BWqGuQ;Xi?A$ zv=Pc6s0VQ0zJ2cy9ksuUd(QdJJ>T!#dm~@Uk-^8)3xI9p+~B~A5M(&uWXM>(h@}Rt z>piao7u+Hw86L>?5!m9S!mJq_Eh_H+)OfwYhHz8!5#O*9o92HY<8TKpJ-INePRK%=|7~=m{9aI~& zW0S$Tr5n1LXW)~mLlN@~J7ZMNdav61{J>5KhJ7n^FF0Z`%+XPXpQHbBR41@Nd686! zx*X+bTD=GBLv%dDTjrICVp&iE#Xf?i-pI5>(FdNQA7KOt8^SWF@Ys$Otdb%Sl1R}C zm1+k&Ck0Y5q{%y6n5X&SLP>qZjGBG``{g@nl5YNRr5~;|dj2<;gdb}(JhWseb66im K4cV{m2Ji{r7f7=J delta 466 zcmYjN%}N4M7(I7poY8Tzar~*&{(salosgC#(MoC2LMU8BSWGe^7HWa3dWGQzZGw7* zpbUa~0H367FA#lBU@h)F-?`s+&pG$rYWJEx{C@iYu#KVufg$f6CEU$ON`b_nH|tk* zt5t6|to@UwecDqXGwkvmp~%04sJmC@Ogu9JV3^RLz^`HwVFkMTSoUc!5OF{6Sd8DW zSYe7GXkB*gj@3GEIBh>>7(%}X9lPOldv-@f60-_Y3>C7dkis11d06Q4hB#E@EvN1D zO5BnzbQL1jHKdVe5Hr~W{vh?QsiYu2TE-{~JxZWD0F^LE?3j82VKQevLmMFEdq=b; z8u4mPGN!8oBo3dvOAEBeX&BHELKqPej1wjh#iG~qWUz!~VkC$atb+X4i1-*WkZ~Fr z3Y4WzEm>8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ci0q047X$Coj6TRRDh9zD=8;2IXfq_xWtN)fyFsLC3WJf zPG@$Yu?#>g$-v3L#lXnG4d(Fx`Fu!xexM8^$YLNV2vngD<})y`YHep=oV<-u7XW3C B9Z~=Q delta 173 zcmaFN{Fs^d)W2Q(7#J9A86?;lm?qkoh_W-VFfs^aC6*=X=OpH(>-#5Vr6y0zw`b&> zxL!?(fmuT{jFExGIX@+pi-DOzkcWYnfp6lg zPG_JL(0nEaNd{I1HU>rpb})|v$mc@ha|2}u20 B9Y+8F diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/Result.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/Result.class index e8f3cd2f4498df0dee24b4d58a2d1a692ab0dcf8..251713fa04a9323f13358a985a66f7630e0d1d19 100644 GIT binary patch literal 4201 zcmbVP-E$LF6hAlFd^Al<8~Q;gBEPJ?D3S=i_ev{P+1UL^MSY z5)`6vjI<<0C@QFHOMj^6OS-j@zqYnz6kS2lNz*djX+hykcD0S-)E1*elG-UL=tR*j z=Sx+4%hc}{H+9Q0N_mLNwv}JE%erahmkg&`f)%Z3uN#6yfh}|E9_(D#UAv#Y#m zAW4Vl9YOJ;Ze4g#)k}hUGfk9lv+}!1Izof+x?#Ap-ig3Ufmhy3(hwa3U07MG&OpbrK0 zm-TI9*0zeed&6|GY&ouOxsIT-EmE=X=aJ+p;Y%aq~5J0_?o4RUhGWvjDygwp*{k)}(E;Y}N-iuvE2NvuqTsho)nq z3T7-;F?DCquoxf;UMn!jxbx;+_WWBPAIeu5sG6l}YC^3-<@KO(|!iFQ;-83p_9$b+_UiWSDL~87bWxq{Gxtxr&nun7)uDOn7S1)ca z>N~0dM6NFt7B2ux#lH=tzsQg@A9rneCbaJ6kqIP?I-8)xvR$ndjd_zBPrJNmPV!ZP zqCaojuH#np9a;U(z9_9H$e{Z%+TdQfDQKv6>zLLqXbDJQDPEupuZ# zY4nnAt(OdEXu-C(t2+|`h$=ty?)Vgp z@s0Naj6!_Ddr#cqB)9~!c{X`-+@RVY?k*Cy=8+}UMKR_O) zGx+Yq4uV|`mfNU7?8pjNlJpaNQF#<-_!|xHWHGy%TlANVU%;ee_ z)}}D-2xBwBFku5J$kTAyN9Ppa%YeehJAbD5t#0}w)eGeP-$NpyM!nT;4_Z=cdd|sn zUXzSr2fK`jfU8eDS2IA!+#L5#9dsp>E8(#sUG*rK=dpK|<`m2`3TB4~Q~Z_lw}t{+ z`vWLDRJar-ra(sQf@gPL**yol%xF8?JviLV>Os${q`6%s0|$?Tfjb48+c-xg&CWv4B%B`BAS>YULplAsXO4x?2uWF9ITveZ0mTsYtgY zEcJ9P($zf8YOD55Ud8O_xHkGbwWqZg)cu%}qiO9K9rx9<;}NK2$D`>8>qK8r>M?bsBk8EGq;a-u zfeMu|y(9tc#dSz8Hn@9~Up_fE>2%Qn}O+MU8(#skFHQ#yL+T%w1yv z2h-FqV5s6Cd`r}_#xG?Ry5$Ccf`0?S3un#Wc=81?*EKPzO&#i**yP~coARQnrcvsr zFEG*qhnZ7sGsl-ndj;qkI2Ho5k`S-3tu_y_pqC=Pg0G|1i=ft!#9!|AIWAysp(!SU zX}~A@91y9oGs$qs?wL~Os|A52jr~+pC3F|r$Je}0Yk0=tuZWLH+n6OVDv?Dyl>QH& CjxX5& literal 4295 zcmbVO+j1LK7F|bb-RySanAnMu5S+n)EZY(HfNvq#2~n_<5F10n45Tf0?2e^wBehKN z2YkZRyv*C=B@ay1Bs0ZSP0hRjHQ&Pn4}`GxIW4IjD@IUdx%b&;_d0v8eL4OApTGGJ zfH{1TK|D3Ro55Yr`K+?#_`X{$QB@24(ne5oJim0qZ8WQ42A0C$U1!%RRULn` zbZz~vTL~4cO0eN7sIo$`*4R`STIv|Bgmur~oT1f*6FPhM3;_3XE8eE>gv~l(lB=uK zq-QB4@nH!7{D_;rZB#igTkIvQw@ybgjb^3dHYm*%x-ix22?Q_Cu1@bqm@f#ay}}qr zvpCa7W?vNc4=GF(dVZg7TzZNdJ!7=UvhFxu^$A*{0__=#{(Srte_~YqR@9b<^WAFr zxA=DRDZX{-qMl(}&Sf^;Q2I!B54-*3jiw)ZHMi{VdJT^aal!Y4&snELD?zhfaW8o?zx&Nic2+8ncT4wPi2=9EZt&e82peJD*)j9B(TBUJX0WX= z)+uAp-wn3ilA**za>=QLLH$b!v8M3nI4hC00le(^8&$V4wiE>0&7GN;4+br++4JHm zFOT?UWd2DEp$q*H#DY_;u6Ut4b2tqziyeh$4MPRF)92LWC`(fwQVDZvT){5$`=Gv1 zbs7z~kpYwQ!oK*sMU+8P;q<|#EI|`K&ahpQER7@*ay?T@$mOh`yqdY&uVovDDf3F9 zrO_P5Aa}l^y~XFz;y-buc=7>-$p;uIPCdZ!zf+&Y3H~1;Hu#79YL)|=r?}x_d`3qlDV_Z$^-6PsH+gQps3isvkj>hI{l)n@|s`$u}$(QJv;ijOE zI;)+DAElzB5}Flr)KPtuM47`l*=X@Qp)t-y?ha^o)epsP5XWNP4n*mTd^1#xW3r7q zrE$*_SI+Dg+!GVsP)}%7Lw7&Tr8p#sk`$$5&q>XI3Q)m$OvINdOI)w;DfMxIve2C> z{sTwvQ;4&ij`^L63ZTQXXe7l-2K=u;k35;cUZHtUw3&JHK<|(L-XqT8EgtbCF-wd{ z5|GwS(`gk`6vlnSeY)KmX`KajH{UarD0{-uD1WTP6glS*$Mk^*POw3HJ}e1{tLA{S$v3h^pe8DB!7REJuWU@3m9T(%)j}9tQHMe7a?1Nwr(CMmIUVY#eImw2Alim>tG#EO7)T*gA_? z*5mFRKWMH}varhWa*a|7x7ah+DWzk>uo+c>!T5j}H+c3L^kuR?;ZO$3euR+>lKji6 zM>uZ8T${r8NuecQS^FuZcZztdF5#|w1Dgc38knXGL~f2w)wEi9RDcw>rA+xrMC2#? z;z#Oas4Nc7%vy7&24}V;Ik)F@R%FSXWCthiAv5(5t6E>4wqzr3MLSu^6t_-w&%o;j zKgvLoBWg{LtQ6z_h*E-A%FFneAtW({W4KAliUqS6u`L{5f%TX~TjW?N(#pqU{_m_4 zq8LW1Wze#*_Nr(`Ms9VTa~}vS&l(mYga-b~|H3EVzyS^#O2bizojiy}n#h97{|VfQ YnsyUgT+3MZ`3vwlSCYXxLhK^{3q>3|@&Et; diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/UserDTO$UserDTOBuilder.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/UserDTO$UserDTOBuilder.class index beeb7dd55ae3861e4575cefdbb9be4db7d77b885..91487ba66391f1556d8ba9c43a13fef68c0e0d7b 100644 GIT binary patch literal 2207 zcmb_d>rNX-6#m9sY@AInmm1RCNCT-2ls+4mpbz5}p^M|os0l*O=z5sWev z_W2R_L$3Dxt@^$Q48!O>sie8jFjOkgg&WS zTKNs#;!^o9ViEnkvo-J5^|lNfA|li_eW*5wv35#X(`v6`DK2;zM}Z+{trTwwhRKxO zwuz*(ob)hdEzj{F5OKVt4}`J^Uw9~5y%&kUA`v$`AF`NbC=Kd!9y9pT#^n-2wUnao zxS5ijJA-J-yOR|6D;}=m8pBMBABYXD0&ZSP)1+N&xH2)r@BbHHuTu<{er+owTcWCt zWGw5Uc%+mz+(_cLfev-6t`GcQgc1=qqETTO-p~z7!gx(8@vPmdi)e?_L2Io89`5o; zTG=UwO;Zxm-P)j`?kW!=e9{wu@@JqGo(j{{jpsa~S~4Oc=boksTn0afVx(?Mn_;;$ zI11e}XLLf&Fij^<--2_AA-}ELQ6L^m8*b0NqZMmNr=N+~Z0eYvX<=P!6Pt)1CU=d; zNAW`*KjKyvw{5+xGR&XCOLas~#ZOq05`4@9qoZSnztf>{h6(529#b$`sHlHLYkPvVp(kqnf|11ohO3`8rM8zu4%ewgWvCMj z(@dQd409xn(t4fNjO~6sI_h&hI_hyB@{j>d@_)K&2{hB`nM0<;ci7nfes^bc(_=!PmLCJu^>-Q7xLJz~)cUHIcD z_rpIwFn$szhi`>BqB`||sz3h3!1zhb9ljOL;urhlPY;Zr(-;Vk|lmMEk)k?SsJ zv;Se{x5ZbKf>$_CV}i!?8(i$4kR-RWeRI2vZyfeRDnmvb#ctfUxD0#>x!4DJ1S^D< nq0&p=<=c*K2H(+|Bew5p+`&&IO_FVnezg^h;U4beAufId#!l)t literal 2295 zcmbuA|85gU5XZmk#5u>gk~I8ENGZ?+a7^I%(L$+7ftUs?45^xwswxs%pBKEzc{jRS zN8(NT7_9^XQK=8mhpIYzw=|d7A};;oyt}irpPiYV8UOY7yFUReWwz-HFr0gTD_<-%>B?)Ms`I*?Z`y7B5_wKZMczIB@ENeNOxO$E4VL|h`AAMI#RMY z#k<1p?*i9NEK}qJ4?~e88+uD920s?hW07>+a_p8=(tOJ>QdxY$Fk07bQN{>9_3;S~ zF-$h45|4Y`mWVevnPczJA&;K$SlYD{j+%}n`))QrGF0To!%EKhG#ZN^O&bTpjE^G5 zD9De5>FDjVy{lCjT^D&OHz4mh-6WQ#v4rkHXTYvXD1krkoA4ZRmKHe^suxi&9f6eE+Js> zc6ihiYtI?Z&FXqFhR487pfJnTO>)$hUp z6Bx?tx)+CHRoaC2T~%MQ?vtl0TARegd^=05q>Qiejfa~I3%dc5YKQ7A$V|&zSmmM7 z@k{F)rTedW51e)ee85#Z63IeS>#g2)t>5IFWY58km)l~1`Y$>C0daSTI*+1tX+&*u z3^z)kj_~lk-)?kWtzz3vqrJ?QPTQGnJa(RIGIp8oGRtg{qS&Cm8P_A8B!V9B&|avA z6^65Y;TseX5BI3bKCDVTHj5sm@MDpf2Rbo0L)AG#*)@uS?F_W?Xl2I|jRjl4eKIQL zJ{cADKAGiEw>Kjb`o?c@U++GUm6Nl;7&lGS3M`=av0>{YA{h%7b z3$*W5FTBR_>TfhHU_a_urs7bf?EIW1?V=@55q}&f4&u)Z&Cg=y_~R*m;$Z&Cq4`<- z9e*O_`v>z+4b9Kq(((P2e+FMr82872#l6|gADI8S`ih?573SzWN#ChAI6L@3vbUZ2 z_iZa!9KfzqO4@vwwcNL;=F#tP8Tb%<*1?PTGR=vv_LzR1WF>;%qHh_uX*Ep-F#5Z= RLy2$~b$o|etfnXD{{c-||DFH< diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/UserDTO.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/domain/UserDTO.class index 35fbe8df60944ad4a11a9de0a153c462f7effa0b..01242609daba7a26f3424bc9c5936f3f7096d665 100644 GIT binary patch literal 3899 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 ZroaJhU4~;${(>&INX^B+NT=&o{}=9_9%%po diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/exception/FileException.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/exception/FileException.class new file mode 100644 index 0000000000000000000000000000000000000000..16c547ca530f05cfcf0df0fd6a47595c4411b740 GIT binary patch literal 487 zcma)(%Sr<=6o&tFZtYlY>!o{lRlz}ARs|IWVHBa#t)$a1lQNUYOh$YySAq*4z~^x- zo_GO^E}B4c{-2ZY|={p+C5YXZ)T=Iag^kGNn}MaBCc(xghvl=D)!kga2?0?x~&% zhE6P%xT=eZC~x>ACucR*3D3v8lvaP6uE}J@upckd+T0C>3{Fv{miwnIhVG>>nVw$r zk{7~=l4^t_U6+Zl5IQu++O-61BB1xSgVFTRA{CN4hV$vSwtMVt=LzhQ%m$WdwI2jZ hZNf*JqW)JRma#$#gy^74upY%8Jqm49o7M)_J^&|2edhoG literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/exception/UserException.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/exception/UserException.class index 1926715c37d401b579f5ac6a0c0f9d99a80d976b..d98b1d1b0e17711ce91bf2f20f248a59a001ca7d 100644 GIT binary patch delta 114 zcmaFP{G3_*)W2Q(7#J9A8AP}km>8JZ8CZB2SQ*$R@~ThFmXH$D@bt+_EKAhSNz6;v z4=yRn%uBb{3}a{Dn8<4~u~B~F;qB_|Kz$&<2!yN*oIoBIkmtz23>N3q5@h_My`6z^ I@E?fjmc` VC=-z8)DmR;qP?AgWAZ{qHvmsZAMyYI diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/interceptor/AuthInterceptor.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/interceptor/AuthInterceptor.class index b7ac15456d7453070cf1a82e9f9c7d4d5154c0c7..0f5c82cd68e80253f843366d4207d7a3b226c153 100644 GIT binary patch delta 1327 zcmY*Z+jA3D82_DQvnSb{^pdvFv?zsInr<3`P}&kGS}NEoz28t2-KI;ry(A&Ky@;2B zctQIVkC#y#oWAp*j+TZ8@kwX&!FOl;5A?-HAJA_%j5Ew6Iln#M?f3h>Z*#xtev|&o zgL^*!=)+e*_!uJntIk5cXk9fNE1wHPL4ZRQ;0Vf_OqX|APpigIeIYqvUM`yULUJm< zWadH;h;UR1RHKIBcxk(-q&Jsjca4T9>Nx5J8nB0(F9CO2wjY`_j(IsyOx>|zhCcZ|Yuxt?_>RD>hb{p4)~gk7or2F+?G2#`3Dk;E#6e!G2jW%SJAn8l77-GY*4#%F0>JX-~)u$4co^PwCfnMH$G?%fHkFU!~SE z=yE*ROiOS+s5lE2N$aUx@ISgDq&BlOY!s%9xn+~%okz+{Iz%cVO zl3UuwrXYO`%k+)9%T0^uBb-AXeiQ(frIXX`jYO1{;rAh}B%+}T3h3V<98+R}9n_}P zn7V_#KjC0!^f3?K!+xNQgMM^InB8+OUodI$iV{u2K~jy^c4i7cP2}^7x^VZ4=k% zKck+ybDdBCZ*P)=4&MU|a@_DfjsH?kl|yhS9IYJLiUo`l?RUvvp#tyWCZUL*a)K&> zYEZLj$3Cd^9jB?bTV2!d;-}%mYSog55`uE2V zegQCm?>IaRJ;g_L;tsD5a;OZ|^Y)6}xoBrnouf1JPSWMjMTg#7{Og2B>enmH;kBfb zbJN*Ofx{=huQ=4G4rOPZ3RE-r2AAErY(Bki%L`uk5#V^L7!GR|4xqL;+1ql6q3UvM z+_{=}3Ujf^?1Gaqz))v_qryZ3j&K|nd+K4~Wj+c!ibgTUW{hS$&2fw&B+-s4mE>wc ztN5FRkAw*I1!pxjm`pl_!hTLaH5j%KL9OWWG#D{-a&%C%_(l&=XcxN0O;2C{GYmB{ z^a(sBn$ct7S+o+?l;i&AEMqm%hd9SchDh;Iqo`NBl7{RE8FQe@#|*^c?n|KJ&Am1TLLlfn@K^b+bbQ~MlBx!4dg2M1T#(9pL z<+pi{>^cYI@N>jClzophOyfPe?^CEUs3xcyQB1S@fNFk7vQFAZbQ1G8MTjIOGkhN( zha>k8{DCwNa`cz?fErwDp`&*H+W(E2<&m;-Esc>P}~ zZR55{n#OkRGdzh#SMvaU+>D6CqAbrIP$frfnl> zr$hZ_ES_$6hZ+h5)=d~QMkr&)6QNEcJ>F|f`;m_#9U6QBMf>B)xP4F{zoK$bgJ0mD z)y2q7(xL8?11I?4gU-)0Y18V8`B93s8p?F6LqMQn^(|tlDI=Z?o#1C31IGl4$4pxe zx?%!>ipn0PY{E#6g?duSv3(^d$1NH*=-7x`1=cLsLOZDRbjB8FuJC+zY-GZW+WVHz zc=vV}`LIdACrwBiQ>HXxi;mlHyFiJnmYf$TU!+*Xw&GOHk8QX^!*(5aVh7j6Q=y4; zDmiP8*r`b~8S0+3(*oK^CZ33ymcZ@YWQ8?t&ij4ExEuFqsL)Y~DuL}wmqy}aNyE-q zW@}$)s&GJv(?uMql4UP3pjSYJm8k-xMIMuLcFNgJwYPyjt z>KmJz8tWRG>l>OHORy6m4ZC#g2KC#t)EHvp+D-h^wCp4e5*Vns8ACj-bzN~oU^UbW zlr9jbgC_e?ha#zDla6NWrN7gr-IY#f%vdW4wbLb(3L3e7-wh@Bu#ePqBGU~_x%UAb z2XQYcp52=y*yW|_&1mmOE7~-)>*zpOASfftNW@2s5hFBeq-{yLPBWQAEI2;W*U}hZS%v#sD?2e<5GmzS{3XP8r!h!wB)IVi5n(k^K{gl zmR6}O7tW4+ND#CEnH#RX@Y)-%J@t)e&R)NG(T_Ni5~b8CnhyH#hyYPAk=9`&L$xh) zI$=banL50-wT~NC#C#-UCZnb|0WO+ffdYOMV^+s$oS~i5hLtvzmI5{2-LuFo3(@w3 z5uZvkRX>XF)A0Q|egN+i*swI_on`bqQ|p4~Jz0Mt+9Y#+P{$A9hneGyQCp_Z^{y@p zt15@2$PeiFprnnT+vd32iVx}dQGA$zt?Y5=FVM7tL7sF%71L?P`U2VAxY6*0z@1Ai zQdXETCbOKAHT)P=UHCrtqL>&zt>Yv3aYjiZHAcI86p<67^%JahV`HYp6#b0A9jve0 zlmo6`ICt&SPrq^grRy)h_^sETxPI}_%G=AN&J++ z#wlacWFrzaY#B7!mV}YHC^6+&wSbvB<;QuvsNpj@F36ayylFMql`!^M;(YiSW_|_b z8&@t9$7|1iNOJviIzEptFx;3PEM^+ne;l?_Q(1;GsFu3g<#^={z*yYbustZoMID#$ z5=ode%~-!VYME(Pxy`F@KP12UqK=pGB?gM+e4z{=ZsQd(e zS;|H;mM~qayLlnH+=3Ni!JC5Ky%IjWO5l{hYae?-d9DsWr{l}A9BB-8S$CXTvw8MV z00O@tnfHq<5MI)&F47y(9(Mh*j$e^EBA>g-^!jT$ejQ&WeV9WHSwj|8j%*2K<@inF z;&o0|!D9Tjj^DxWG6js8Nt3nBY>h_EblS!3;JfhPiaHnL_jUY%6i}WO;L=J-D8?V* zk2U;>jz7hp3EZY)N(QMsAh_i^Byl^zo}UdvZ&y!GS0vnitgj;?u+<^WYU|19^Y{xL ze~G_x+IGj~0_|SBU3lMNE3a|NLwf1}}Vb^M+5uhXvOjscXH;AvpcNMszB@6g}R zf_NU+bo@Q8(}V0L1dgn#h}y|@VD~%eHYg7Q|DfX^Wl1jO&K@87@i_ij$2ajU2ZLv~`!Y7I~;nzh8MPTF7ig%bT)t$GiGl2fAeYExPHAY?)J3<;VTu!~Nk%=c0vWec^D&aQ4l>Ko9fWiAcDAxT|CM zX!w*AxvUs+Yqg}WwKwc6(g%(m4fhQn=RRHcF#@_G5%P<{+#eobzulgSu{~Vd6Hl6b znW+)e8jy8f?wyJni9y4P%dtCIV2{i0{YKSIW`*3*p9rW^b60YdAyReoWr-R^Gif_D zWm>Z6sx$mrPdsu$?maPUyBTxCVs+0J&KZjSh^pRL;MUbT3O250?ifV%JZ7nbr$C;0nw7|7 zO|GY;IVFa-zLZ+VtS4E~w1{m)CyA=-Xn%Cvj7~B@;z@zy-uPIQw^h1)_a&ROlXoeM zyk*v|)E=+^d5b86*D~eh5K|dBpjuFs(gGw5N8UomT$MBzo4S@0i(OfMd zXoa>sgz*)VMSoVLEQ?Djeii`+wvWiV^x);d>YbDmCh8LIgzShb2l?&(Xu`c@^G8w{ zD{3B&%TUzai?p4RZOrm+8X8<72~{~~g(Zhxp2ICOWiu#3?L0H5l01z|inpawcAA~- zw8QoE+9Gk(FM33;Ci>VTiDT@M78o8+&Jd1}W31D#=hEqOUW&L2olQGcTbSO_lS)ly zrdMe7JcM2J;Q-ZLVfp=@^=`O&n*?`@b|aC9#Cad%6YnAUM|cRH$K~Rd-1-uZH+aTD1jRwRRgPw6U z0`gEt**be{Y7(U^xo%RKhyq2?+M&Es&MdUq9FH3IEo@$ERBm!glOJ6%lO29vtAgza90&r~wagCWa=lg{!L^O~q~Ec8;jC*ebTs z8Xq1KcZlsoHAbuMq}BOi2j5Feop*O}{%+0`3bBYUlA@ftG?`fy;t9Ja!fvIQ@Q37X}LhrC0GIucP$R1+4G8 zfVF*>@l@cWeE)1d#3lOaPW1Es?{W1zgeP52w6Ng@A}GTEBWRFs@8d1_DY9Y+hj2f^ zcz|yWzIg~I`8$MR&OVG$j3{_I$>mOzh)Ob`P~D$bDeHD)yQmShWY7J4yHkW{G40Lq zXk6@)kwST4v71kMVh`W1M^Rbvn`qWx^5*sNb`4LKWJ$D(?}exn^)7}}E`~GjjA38Z z%lJg?D|jB5!@09A%s(w*uBs)vEd^D{*ml1q+G$*6XoQ| z>lHVg6O=4vZ(*7uN$2nyGm+W4tsGx@=9AD0E}$U)^L+2%;pex&2gth*D*Lu6W^Bpn z?O4h-1Er#w+1X)+4|#85Q^6sTr9+icg10p;9kwx`e4LwJm7deV9w!}UWeII zP$PZ(tJxs?4ds0<{w;c)Kfl*fq*!tpe>jIfZ_$F<9R9i-U#A7@)r(+JIfm5RH>!h$ zbNEK}(#-l{R-wlc#1l*`Pof4-)6XA43qH!U@(iQsSwwk#7{_xtzf#?t-IL0%yl&>4 z<1ari-}cgT`P{Q#wD75bJ2s1bd@AI=yTyJ!6>;|+;($2FL!gYIjmUcoHIDnurJ8@uSRBmeI^tfU?mNBAqdu}&`O;&Uls W>E`&j`r9uCIOpg1gg7ZqA^06GZ7~-B literal 8062 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 diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/utils/RedisUtil$ZSetItem.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/utils/RedisUtil$ZSetItem.class index b7323008b82afdb1686c0ba618f98912db631d1f..a91f9b1b92023eb9682f68f9164ef5b4377c92e0 100644 GIT binary patch literal 3105 zcmbVOYf}?f7=BK&n+ryW6p&QwrJ|Am##&o70b0ciQ9w%&TWzaL*dZ&)F3p}W<3H*2 z2h=ZqXlJUO@k6KmVrTke`U`69b9PT43A95ULiSvq^Io3!Iq&9=zhC|WU{t&gRm*klTAoXF&&@ZbQ}gqS_NwFG<#6PF*_I_~*9FW?tJbsy z`sW^7n^wMNxoi2`E067pEGqMf6q4v6%&&NjF4$GCxl*%>J%puF*pFU;M8$HiebcmR z0)wMFEoSd4a5{wp=qGs1mgUgwz-YD&y=8a+gK-R{a8TJ!cLyjCvz0Gj8O@~dE)Io8 zm&24gjq0R&Fo5?`ID(_ZRxQ6eUBToZ3nZhZYX5f>K>&WTA@3KI$?5w$#Y$}GMOG`xoBMhr= z&T;L9W_`tOELkL5)yb<^wPmZ}sJUJ=WYuA4=jZ;v0_ba~)8vzlmf1^hVQ-S*Pt&M5 znhg>;wAgf|Q@2a*rsF#d`LgSJ(vl7tRoT?M`ii%nzhS#}!;JsiMA`+IK zw`J8^y<;`3x-IPnO~pp(FUvi3T+6ECxK@>d2#*1JvT8R3dK7mfTHgDD#nvp`(icQ; z>Dh(1p(dw@*k>l(#XM#^N_Y=eq97Hk3Z*>q@!8pHDApjFN z!&$y#Lk4?RYk)~))U=LAe2kIm0q)m@~+Hr_# z^@XIWY?|O!Z@AeJnW;O*EzB{d2!*~7Ja6MOJ`-ePk^i6LK4+>!MsOPsXzfdUjYr7* E11~6F*8l(j literal 3194 zcmbVOZF3V<6n<{An>PXtwJpRVq6A6Olpvx&`l3)?8fZ&xN>NZ?n_ilw$!^VVI>SG4 z`~mWX4>}|0@WIh9IOC7;7x?zv-A%h8kwK=-?!D)n`cb7^ z^8EnyT;78jTW(vf*_0J)+jLBxK5tpJYq+LuISRaCH`naV(iLgRmf^~Ef@`z(x=euD z6m&!d2IoynF1DL%vbACmLY=c~Mq|}znQ9*hHMedO^Yr}x=Zs!QyCENLbzslE2Hq5N zp9y%X`aE{?6fmi>Jd{ELNpkA!a5|Ffr8K`P5X})+Ez%3pt=sEMM$2eQSGJh8Iv%*{ zIv#lPj?1swMuWCp27Z4`=5Hk#%zG&uN0w+c!@8ubl`x+|25%-2!FUQskyWyZ6!st` zAZ)gZ?bc;WAgKzF4fxNTT&BGqf zUf$nKX1#R}iVz=&B+nU?9!2pkV%1XT}Vgc{|b>a%_-Md|evu3^cen4Orc+U-_NUN+UW z+_y80PN*3pkega5hj0R?Grb}bdcn3`$88x~es4QTtm3m6ZVF^~2bO7V+nciFC+9PD z*{Hd8>!G6XbAhkJNe0$F;GAKtH>8uDx9!dLRye(0KD!RCa2E72zulWfnEwD`)@U@U zrYk20qqq^r7tCgtq|V6Bc}+7dibuT5GcEE0sS1aEYqnuHj&x$U%WL?`bB*`610BPf zz_A_z`%x0Zy1?O=o3fpJ{^(*+I_{k9xOj*2Ai_2t;2#GzcQJ1l=bodDYc=OME@R(1PgS?s2i|<<4*m<4>^vdj``R{wQr!LVoya<#VMH+105;d|jLg9pPH%^dd!q zG`~yO7qgoWyB>R0*QzX>H-z_DRbeUDfy0F7kfXlWp-9uAs$zY-@GW%h@%XP0-$0K% z9{&Ymp;&l|W8RjF++vZBvNrJ>_GGl@*#8KriH!CXg^oqBtka}ej%IXa6Mc@MN7$Ru zGtrKb_L#o3o@SWyW7uJ{juT$9jG&5=$7dE7agwqK3YfwBTxqyM5>IiZV*z9MfUBrS zg3o_FAi>8t%{)K!C`rWPe_~$@;xCNG5aEBE%Y*(hu~VfJBu!IapS`4UVhXSPx?)RZ z^k4mUp87lV?B5qykK`tYzsnVKNOD%GEGUNOPf zGj;-AHVTG=40p*_5`W5E!#s2H2iZao^Cms2VK`X$5sTh9C={Qd=VIRTM%oeIG;qd4 zB+?&wgWlvE@Tl{o>1KLm$CsnKz%AGoAqde-*r zw4O;qdB-PES~QeG0~(V^S!jZ#aLa3^pwQ$l7LK_2X**ja6L{yZ?w>Zn-n&L$v<@J#3%u7@Bzg3G+%C}n9n;o zFFlo6a8Bhio>tpV3%%&0^aYXrXoU13E{#5puS2(QT0CRG!XS1j)H{zXX7aRd6!CRQ zh0qVVZq~7L+U?R7cHy9o(Y>IW=cV=_VlGJjog@*c;hjM27*^)K_o>y2k; zaLK~g;~NwjGKFysu5eET_S&+Ql84ChO%}cxZ>O~~Igg?+$`tN+Efh;}%s5gwDGu;X z3*UlA6;i$foTe}ech=|uGP}YB9>cdL@onM)->z_LElyNPLSau$;v5cJzoel?=F-P4 zdWmudj%dKW8FmvagX~GBlX#w9S92rUBfdB4ISWl##tTV&%EC|MXB76mcE9bJ zy13}fYFjbfS&>b#-dIZRA*QMIW&Es#pTp1lbB!4*=Nb#8@Qe7RB!1b#i}*~12K)(B z^sKgJxjQ&4Ykt+jXYp&ydKaX-J$Y6sTh| zoG40lnX(yH>~zN589O^|=QHwb1{2;~hM8tytY!x#bMbkH9Zq|QbHgFgJ^CD5#?U*T zR|c83dgVGJu|j7hb0lII>|9A{@6^oT5Jg|Dcq1rdSqMu)N=DHm|DJ4B_N!%iHk`iNvj#jU2Y z3O_VdgX_&XdF~_?-c++(p-5eYa!Jy9Pxl`Rvmrgwk@nVw@cDE*o>I$BnXUxT&9E1Acnq~`!R5h`Zt2JJla4r}&+I)V> ztugx?DR+L0#fLxW&a)3de>%M(?+pK^Z3Yn4#(hK^V^%Hg&--T*y#wh_D3>WU~lNS61QpAxkWd}Ju9VaI^h&N|3HM1+{P^A6}-H? z=y#Qc)_QeEO5LgMN~*gpb&uj9&_P!!<&L?&#G7`d%W=U+F$yRYp)FlrJ+1*XS0(T&lze%JGHWp z=L2fLr3UoV0eL!Tshz5~P4#m3G|F!-dA$R0sMdzk=9Wi0!nmI~ljFsif}rI@7R zvF?_&r?N%!wTNvzx_E}0!Z_OHdk{~T{)kU8{4qa3@Dl{@yX9K}uh;S22K)(U{wbdx z=bVI$_CE);gyg_7nqxSz>qRsT?pne%A4Nhv&G!lX8UK|75^&Smf-U%S-u3%y@fY|@ zJ_+r=!e5iV-2Dyyma|*<_w)EWqWwKbt>E21@ZCS^k=QHfPU4vZ{NbNC(ikHVa5;2Xgqh2c^7GicgKhoT&nceEI3z*#$FuO^! z7z@LHo)7~2uLgFGu=N~k4`8=-)kOmCpmuj^z}smFt_T3z1Hg6zC~v=jf76V$vj@)B;Yg1s4yNNd5OPMN%l!%y>pd*Byv0z9Ich~X;Uyo|4n@u=!d zIS5-chx=)=dnw+*kgj(H{OqFZzC?b@K_??Gb3_!8K#VpvcIf4RpDX?cm+`-Ng}e!u z6GjznzQ@lF3@&3Xjw*wXpcO|#N@)w2Xfsv-+VB;8m2^Y#{S`u7#;a?>)iB3&nbG|FX($vLs&Qp#s795F2n|jw zaoj|kS*n?QiYDJ|@~;VvcMJ^nE#qBvRYog>6c`;AQW{0}Hr1k9jk-+wW%5@od?mnb z2KXrg3sZx>2?O9g4Oj5)u7)Li=abM(4RqFZC8a8KHI%)%U7P=5YUvSb=_300bxf-G zF^Fjf0}BrZ79I@h)SzKd=1Ikp@-wI_R+98K>nz)#lS>2CE9hgE)wb`bBQcPSFHBI) z)CSdV?0=aC6b8CVLT&9#EaQ9Xv8TSjt3JXv-_ELeS#$1J*sg%{u7L9{b&aWPU1}rm z5?qsH7J7+bB`@_yUgn5+sjqe}0~eI+-a++uuEXi~ug>YCM19x)AE(!@!|4wOoc?gx zEBv1B-Q@J~*TbpWv{I*P6QgMjopw>D-D>k%vGjrJSb9P;=O?4}V(Gf5Sh|izy{xWR zTMY1u#LHM(#)qmC?|U__-#bPp-pJCX)D3Fu8b}|mMta}6NPe~`r&I|mDs$VKNIy}H z^#0e0giomLMy5l&O5$oM1?@7Pid7}R4{0Dj1GfZG+G3(q1POYu=hTf1Qpv9O8`7!% z=kav^z$c;njg4$T{2pvWh-|nA^EW=F@RnYzjvJt$*{fq8;+Nnab(2p_?O^Ur$sUf= z1pIL>kv4DVr?B*3|1z#B@ZV1>e*SCqZ2Y(`tI;#Z!>=gMK^C)e{_K2O{%cCZXd za`m@7J5`_R=aY0_eTcn^8^C(FjCce1e*l=7o_UpT^iU!gijy<$H4SHjyb5Qr{*}Ff z-vatTF*V4NLZWIHs5vduptckR-H6}3ir;z`o37w@pT%}js|xkg9jq;#w8+hZqS9(N zuT;3Yh0|{3eS))>)NQ<@Mb+(yt0A?QKmYDtbw~~KT{qME65k&twPie}M(P{Y5p_%* HN7w%WJm1GD#^UCB@2cpU5W>5{O4*NS55D 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 diff --git a/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/utils/UserContext.class b/珞珈岛-项目相关文件/luojia-island/common/target/classes/com/luojia_channel/common/utils/UserContext.class index 9379b3ec701eebb763a3952b632c34bc0c020572..86a83fbcbff195bfee2e5f195de304bbddd9647c 100644 GIT binary patch literal 2490 zcmbVNYg5}s6g_Jm!a@P#LP^qwP{_kLP1H0^`mjq&3=|p#Qfz3`7hTJ1ERZFSBs0yw z>SKm+bKp0m4u{qyWk0H4B9k-~t2K@CF~X2|UG zL$2H0+0!?x`@#$uhKrVC1&a&=xrLoHMvzvZY8ZvaaKm()y4`m7Exv0uxZ?<0CsWgP z^mbs`zP{}XujD#`_?eIQFkr0y_rtl{D?Mc7M+`{XQ3eGd+PF_gOZF0*ASF&8$ zRB;h+DR^7MCCo5n!@A^J_03jbxem7(RJXp-wryUu1tIsUEvlj`tdJ!_W;MKnIffzL zYS~X1F25`|bgj1?Q|8cD;|}f8MO@Kv71wBqP2OU-6Q?^NAYOlWW{Hy1uz)(Dtb2Qi9!tXVEw-yM@I9!(hp+ z5!kq4Ibx&TtO~CZQJD>;xx+mxEG04y1`W$+xY;L%-0iNTKuHu5t~?wRnd=kUEj|)8 zmDdi#@@J1C9v+II;np5;k2ggiJSsR%CqfpmULzI1lv&8Eq>w5cm3h{kx=X63QS9yz zz^ex-qLxC&$Z5$mh3{9~1L4pfl3`2KJ>fTEiyBcKEq$bD+VSP0mff~zid9RVnT(u{ zuZ>$$TV%TLx`7{fycI3QA0Nh7Dz;EoP|>gr+L^hI3@zu7D$otytkyV1@H#gG*P|mf zN*mA_{hd^K926y3<4(;M{uRS@58AClLRs;06PB*P%9EBzx}SYAO4&a)d4a{qC2reg zD-eYY^5a8ztYRA9YFNff2H!Ij|BJp7iwb2xct1+KT@7DgEdyd=@qgmQ+eV0{M6798 z#~O|5a-2_rC7b)c@D=PcTz!qyUi>Jadv~V4E8Q~@nYc}_ScY_0)U644)H_48BLL zoE!NKO8yAvI`Q(&1{2#dR z43~i;%(Ek0e}NmnkY@_A$SBDKwb|n&DkiZSCP_;=PeZ<$K)&@V@-!iz?}<#bo`(Eh zKjceCeBP{{i4W0u6l(Gq!A+Zd>j+e9LZd z&l9dmqNeoBcIdc)xe*AzB)w4l6lxe?$nNkxZo1stHrJ{<+0C`-DD^4a9R6CtUGj(&`i_pspv47YnE@lt6i3oQ_#DmGc> zdYB%|e|l5L8@R0DO@{MbOKxBiSEw=sPb#@o#pC`JqKdU6&-qt(OiXwr!iKCp=00zV zQ23N{W;@PdrA7tHO{aWW(%UYmP;VHxi5$g4sto5kl#+lnICuU~}blk!n4Y$c- zl)tL2xz-9D>2cS9iFX)uSzm3tZrr(Cw;IHucGwoiX-;Mh+{JqggS^#p_ZhAn1{|r@ z+n%i)nM=urQoMzG20p-tlwy;&815$SPB2J{)ahBFd~BeABC%2Wi*7)SyK!>dsc|f5 zpg9;hqJpYC!?0@bidUC3G;~V(20U7SnxMwtZVHIclu3N-cTc+)+u8 z=z)}B5c<3o6E4v41{TH~b1>)Z~dzi*&|4a%4(dMIM}D_zRO zG6rAfUdVgy<{lI@qG7Ud6O!ii#p^E#9cZucwH0BJK)Qg^0jZS?S zihddBBpD{j49V2r@b565JjKXw82g2eeRz$Y%8agXE|MrP`ivxoCavmrF#izE+L3@+dz0V}WfXjR5TzhW$ZfJ;aAdKAxDigqN0F@(49HtA2%{~)7-f+Io@ zh=Q{cxJiOL!1WiHewcrTndejm9N>L+fRA3_{?DWt=M_5{qg=-Sb)wVmlgLR%@!~Y( z2Px#zapVa?zR(q!$Z;C-QZMAoggn_5nJ9J|@^UZaDMG&56?uhj4#}dL253>8KR@2J zn?#sg1fe+9k4NNIymysql-connector-java ${mysql.version} + @@ -81,6 +82,12 @@ 1.2.83 + + + com.baomidou + mybatis-plus-spring-boot3-starter + + cn.hutool @@ -88,6 +95,12 @@ 5.8.24 + + + io.minio + minio + 8.5.12 + diff --git a/珞珈岛-项目相关文件/luojia-island/service/pom.xml b/珞珈岛-项目相关文件/luojia-island/service/pom.xml index 808083b..ebc0e28 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/pom.xml +++ b/珞珈岛-项目相关文件/luojia-island/service/pom.xml @@ -20,12 +20,6 @@ 1.0.0 - - - com.baomidou - mybatis-plus-spring-boot3-starter - - org.springframework.boot @@ -49,6 +43,7 @@ org.springframework.cloud spring-cloud-starter-bootstrap + org.springframework.cloud spring-cloud-starter-loadbalancer @@ -60,6 +55,7 @@ spring-boot-starter-test test + diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/config/MinioConfig.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/config/MinioConfig.java new file mode 100644 index 0000000..a7e7950 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/config/MinioConfig.java @@ -0,0 +1,31 @@ +package com.luojia_channel.modules.file.config; + +import io.minio.MinioClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MinioConfig { + @Value("${minio.endpoint}") + private String endpoint; + @Value("${minio.accessKey}") + private String accessKey; + @Value("${minio.secretKey}") + private String secretKey; + + @Bean + public MinioClient minioClient() { + try { + MinioClient minioClient = MinioClient.builder() + .endpoint(endpoint) + .credentials(accessKey, secretKey) + .build(); + return minioClient; + } catch (Exception e){ + e.printStackTrace(); + } + return null; + } + +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/constants/FileConstant.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/constants/FileConstant.java new file mode 100644 index 0000000..ac1b747 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/constants/FileConstant.java @@ -0,0 +1,7 @@ +package com.luojia_channel.modules.file.constants; + +public class FileConstant { + public static final String CHUNK_BUCKET = "chunks"; + public static final String CHUNK_PREFIX = "file:chunks:"; + public static final long MAX_UPLOAD_SIZE = 10*1024*1024; +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/CompleteUploadDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/CompleteUploadDTO.java new file mode 100644 index 0000000..6c4963c --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/CompleteUploadDTO.java @@ -0,0 +1,17 @@ +package com.luojia_channel.modules.file.dto; + +import lombok.Builder; +import lombok.Data; + +// 合并分片DTO +@Data +@Builder +public class CompleteUploadDTO { + private String fileMd5; + + private Integer totalChunks; + + private String fileType; + + private String fileName; +} \ No newline at end of file diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadChunkDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadChunkDTO.java new file mode 100644 index 0000000..dea4d8a --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadChunkDTO.java @@ -0,0 +1,22 @@ +package com.luojia_channel.modules.file.dto; + +import lombok.Builder; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +@Data +@Builder +public class UploadChunkDTO { + // 分片文件 + private MultipartFile file; + // 整个文件的md5 + private String fileMd5; + // 分片序号,从0开始 + private Integer chunkNumber; + // 分片总数 + private Integer totalChunks; + + private String fileType; + + private String fileName; +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadFileDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadFileDTO.java new file mode 100644 index 0000000..84451cc --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/dto/UploadFileDTO.java @@ -0,0 +1,15 @@ +package com.luojia_channel.modules.file.dto; + +import lombok.Builder; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +@Data +@Builder +public class UploadFileDTO { + private MultipartFile file; + // 文件类型,image or video + private String fileType; + // 文件md5 + private String fileMd5; +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/entity/LjFile.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/entity/LjFile.java new file mode 100644 index 0000000..ab7d3c5 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/entity/LjFile.java @@ -0,0 +1,32 @@ +package com.luojia_channel.modules.file.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@TableName("lj_file") +@Builder +public class LjFile { + private Long id; + + private String fileName; + + private String fileUrl; + + private Long fileSize; + + private String fileMd5; + + private String fileType; + + private Integer fileStatus; // 0正在上传,1上传成功,2失败,3待审核 + + private Long userId; // 上传用户id + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/mapper/LjFileMapper.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/mapper/LjFileMapper.java new file mode 100644 index 0000000..24b2761 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/mapper/LjFileMapper.java @@ -0,0 +1,9 @@ +package com.luojia_channel.modules.file.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luojia_channel.modules.file.entity.LjFile; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface LjFileMapper extends BaseMapper { +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/FileService.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/FileService.java new file mode 100644 index 0000000..b47baae --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/FileService.java @@ -0,0 +1,15 @@ +package com.luojia_channel.modules.file.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.luojia_channel.modules.file.dto.CompleteUploadDTO; +import com.luojia_channel.modules.file.dto.UploadChunkDTO; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.file.entity.LjFile; + +public interface FileService extends IService { + Boolean createBucket(String name); + Boolean deleteBucket(String name); + Long uploadFile(UploadFileDTO uploadFileDTO); + Boolean uploadChunk(UploadChunkDTO chunkDTO); + Long completeUpload(CompleteUploadDTO completeDTO); +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/impl/FileServiceImpl.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..bca6b0d --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/service/impl/FileServiceImpl.java @@ -0,0 +1,267 @@ +package com.luojia_channel.modules.file.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luojia_channel.common.exception.FileException; +import com.luojia_channel.common.utils.RedisUtil; +import com.luojia_channel.common.utils.UserContext; +import com.luojia_channel.modules.file.dto.UploadChunkDTO; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.file.dto.CompleteUploadDTO; +import com.luojia_channel.modules.file.entity.LjFile; +import com.luojia_channel.modules.file.mapper.LjFileMapper; +import com.luojia_channel.modules.file.service.FileService; +import com.luojia_channel.modules.file.utils.GeneratePathUtil; +import com.luojia_channel.modules.file.utils.ValidateFileUtil; +import io.minio.*; +import io.minio.messages.DeleteError; +import io.minio.messages.DeleteObject; +import io.minio.messages.Item; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.TimeUnit; + +import static com.luojia_channel.modules.file.constants.FileConstant.CHUNK_BUCKET; +import static com.luojia_channel.modules.file.constants.FileConstant.CHUNK_PREFIX; + +@Service +@Slf4j +@RequiredArgsConstructor +public class FileServiceImpl extends ServiceImpl implements FileService { + private final MinioClient minioClient; + private final RedisUtil redisUtil; + private final ValidateFileUtil validateFileUtil; + private final GeneratePathUtil generatePathUtil; + + private void init(){ + createBucket("videos"); + createBucket("images"); + createBucket("chunks"); + } + + @Override + public Boolean createBucket(String name){ + try { + boolean isExist = minioClient. + bucketExists(BucketExistsArgs.builder().bucket(name).build()); + if (!isExist) { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build()); + } + } catch (Exception e) { + throw new FileException("创建桶失败"); + } + return true; + } + + @Override + public Boolean deleteBucket(String name){ + try { + minioClient.removeBucket(RemoveBucketArgs.builder().bucket(name).build()); + } catch (Exception e) { + throw new FileException("删除桶失败"); + } + return true; + } + + // 普通上传 + @Override + @Transactional(rollbackFor = Exception.class) + public Long uploadFile(UploadFileDTO fileDTO) { + validateFileUtil.validateFile(fileDTO); + Long fileId = validateFileUtil.getExistedFileId(fileDTO.getFileMd5()); + if(fileId != null){ + return fileId; + } + // 普通上传 + try { + String fileName = fileDTO.getFile().getOriginalFilename(); + String bucket = generatePathUtil.getBucketName(fileDTO.getFileType()); + String objectName = generatePathUtil.getObjectName(fileName, + fileDTO.getFileMd5()); + minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucket) + .object(objectName) + .stream(fileDTO.getFile().getInputStream(), + fileDTO.getFile().getSize(), -1) + .build() + ); + return saveFileToDB(fileName, objectName, fileDTO.getFile().getSize(), + fileDTO.getFileMd5(), fileDTO.getFileType(), 1); + } catch (Exception e) { + log.error("文件上传失败: {}", e.getMessage()); + throw new FileException("文件上传失败"); + } + } + + private Long saveFileToDB(String fileName, String fileUrl, Long fileSize, + String fileMd5, String fileType, Integer fileStatus){ + Long userId = UserContext.getUserId(); + if(userId == null){ + throw new FileException("不存在的用户试图上传文件"); + } + LjFile file= LjFile.builder() + .fileName(fileName) + .fileUrl(fileUrl) + .fileSize(fileSize) + .fileMd5(fileMd5) + .fileType(fileType) + .fileStatus(fileStatus) + .userId(userId) + .createTime(LocalDateTime.now()) + .updateTime(LocalDateTime.now()) + .build(); + if (!save(file)) { + throw new FileException("文件记录保存失败"); + } + return file.getId(); + } + + // 分片上传 + @Override + public Boolean uploadChunk(UploadChunkDTO chunkDTO) { + // 验证分片信息 + validateFileUtil.validateChunk(chunkDTO); + // 判断整个文件是否存在 + if (validateFileUtil.getExistedFileId(chunkDTO.getFileMd5()) != null) { + return true; + } + // 检查分片是否已上传 + if (validateFileUtil.isChunkUploaded(chunkDTO.getFileMd5(), chunkDTO.getChunkNumber())) { + return true; + } + // 保存分片到MinIO临时Bucket + String objectName = generatePathUtil + .getChunkObjectName(chunkDTO.getFileMd5(), chunkDTO.getChunkNumber()); + // 一小时内保存进度 + String key = CHUNK_PREFIX + chunkDTO.getFileMd5(); + try { + minioClient.putObject( + PutObjectArgs.builder() + .bucket(CHUNK_BUCKET) + .object(objectName) + .stream(chunkDTO.getFile().getInputStream(), + chunkDTO.getFile().getSize(), -1) + .build() + ); + redisUtil.sAdd(key, chunkDTO.getChunkNumber()); + redisUtil.expire(key, 1, TimeUnit.HOURS); + return true; + } catch (Exception e) { + // 遇到异常删除已上传的分片 + try { + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket(CHUNK_BUCKET) + .object(objectName) + .build()); + redisUtil.sRemove(key, chunkDTO.getChunkNumber()); + } catch (Exception ex) { + log.error("删除分片失败: {}", ex.getMessage(), ex); + } + log.error("分片上传失败: {}", e.getMessage()); + throw new FileException("分片上传失败"); + } + } + + + // 合并分片 + @Override + @Transactional(rollbackFor = Exception.class) + public Long completeUpload(CompleteUploadDTO completeDTO) { + // 验证分片完整性 + if (!validateFileUtil. + areAllChunksUploaded(completeDTO.getFileMd5(), completeDTO.getTotalChunks())) { + throw new FileException("存在未上传的分片"); + } + // 合并分片到目标Bucket + String bucket = generatePathUtil.getBucketName(completeDTO.getFileType()); + String objectName = generatePathUtil + .getObjectName(completeDTO.getFileName(), completeDTO.getFileMd5()); + try { + List sources = new ArrayList<>(); + for (int i = 0; i < completeDTO.getTotalChunks(); i++) { + String chunkObjectName = generatePathUtil + .getChunkObjectName(completeDTO.getFileMd5(), i); + sources.add( + ComposeSource.builder() + .bucket(CHUNK_BUCKET) + .object(chunkObjectName) + .build()); + } + minioClient.composeObject( + ComposeObjectArgs.builder() + .sources(sources) + .bucket(bucket) + .object(objectName) + .build()); + + // 获得文件大小 + long fileSize = minioClient.statObject( + StatObjectArgs.builder() + .bucket(bucket) + .object(objectName) + .build() + ).size(); + // 保存文件到数据库 + Long fileId = saveFileToDB(completeDTO.getFileName(), objectName, fileSize, + completeDTO.getFileMd5(), completeDTO.getFileType(), 3); + // 删除临时分片 + deleteChunks(completeDTO.getFileMd5()); + return fileId; + } catch (Exception e) { + log.error("合并分片失败: {}", e.getMessage()); + throw new FileException("合并分片失败"); + } + } + + // 删除临时分片,与遍历删除相比该操作只需要进行一次io + public void deleteChunks(String fileMd5) { + try { + // 获取需要删除的对象列表 + Iterable> items = minioClient.listObjects( + ListObjectsArgs.builder() + .bucket(CHUNK_BUCKET) + .prefix(fileMd5 + "/") + .build() + ); + // 转换为 DeleteObject 列表 + List deleteObjects = new ArrayList<>(); + for (Result result : items) { + Item item = result.get(); + log.info("要删除的分片文件:{}", item.objectName()); + deleteObjects.add(new DeleteObject(item.objectName())); + } + // 执行删除操作 + if (!deleteObjects.isEmpty()) { + log.info("正在删除 {} 个分片文件", deleteObjects.size()); + Iterable> results = minioClient.removeObjects( + RemoveObjectsArgs.builder() + .bucket(CHUNK_BUCKET) + .objects(deleteObjects) + .build() + ); + // 遍历结果以触发删除 + for (Result result : results) { + DeleteError error = result.get(); + if (error != null) { + log.error("删除文件 {} 失败: {}", error.objectName(), error.message()); + } + } + redisUtil.delete(CHUNK_PREFIX + fileMd5); + log.info("分片删除完成"); + } else { + log.warn("未找到需要删除的分片文件,fileMd5={}", fileMd5); + } + } catch (Exception e) { + log.error("删除分片失败: {}", e.getMessage(), e); + throw new FileException("删除分片失败"); + } + } + +} + diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/GeneratePathUtil.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/GeneratePathUtil.java new file mode 100644 index 0000000..38e4b92 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/GeneratePathUtil.java @@ -0,0 +1,35 @@ +package com.luojia_channel.modules.file.utils; + +import com.luojia_channel.common.exception.FileException; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; + +@Component +public class GeneratePathUtil { + public String getBucketName(String fileType) { + return switch (fileType) { + case "image" -> "images"; + case "video" -> "videos"; + default -> throw new FileException("无效的文件类型"); + }; + } + + // 分片对象路径格式:fileMd5/chunk_{number} + public String getChunkObjectName(String fileMd5, int chunkNumber) { + return String.format("%s/chunk_%d", fileMd5, chunkNumber); + } + + // year/month/day/fileMd5/suffix + public String getObjectName(String fileName, String fileMd5) { + String suffix = fileName.contains(".") ? + fileName.substring(fileName.lastIndexOf(".")) : ""; + LocalDate now = LocalDate.now(); + return String.format("%d/%02d/%02d/%s%s", + now.getYear(), + now.getMonthValue(), + now.getDayOfMonth(), + fileMd5, + suffix); + } +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/ValidateFileUtil.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/ValidateFileUtil.java new file mode 100644 index 0000000..6da65fc --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/file/utils/ValidateFileUtil.java @@ -0,0 +1,102 @@ +package com.luojia_channel.modules.file.utils; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.luojia_channel.common.exception.FileException; +import com.luojia_channel.common.utils.RedisUtil; +import com.luojia_channel.modules.file.dto.UploadChunkDTO; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.file.entity.LjFile; +import com.luojia_channel.modules.file.mapper.LjFileMapper; +import io.minio.MinioClient; +import io.minio.StatObjectArgs; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +import static com.luojia_channel.modules.file.constants.FileConstant.*; + +@Component +@RequiredArgsConstructor +public class ValidateFileUtil { + private final LjFileMapper ljFileMapper; + private final RedisUtil redisUtil; + private final GeneratePathUtil generatePathUtil; + private final MinioClient minioClient; + // 验证分片参数 + public void validateChunk(UploadChunkDTO chunkDTO) { + if (chunkDTO.getFile().isEmpty()) { + throw new FileException("分片数据不能为空"); + } + if (StrUtil.isBlank(chunkDTO.getFileMd5())) { + throw new FileException("文件MD5缺失"); + } + if (chunkDTO.getChunkNumber() < 0) { + throw new FileException("分片编号不能为负数"); + } + if (chunkDTO.getTotalChunks() <= 0) { + throw new FileException("总分片数必须大于0"); + } + if(chunkDTO.getChunkNumber() >= chunkDTO.getTotalChunks()){ + throw new FileException("分片序号不能大于分片总数"); + } + } + // 校验普通文件上传 + public void validateFile(UploadFileDTO dto) { + if (dto.getFile().isEmpty()) { + throw new FileException("文件不能为空"); + } + // MD5校验 + if (StrUtil.isBlank(dto.getFileMd5())) { + throw new FileException("文件MD5缺失"); + } + // 类型校验 + if (!Arrays.asList("image", "video").contains(dto.getFileType())) { + throw new FileException("不支持的文件类型"); + } + // 大小校验 + if(dto.getFile().getSize() > MAX_UPLOAD_SIZE){ + throw new FileException("上传文件大小过大"); + } + } + + // 秒传检查 + public Long getExistedFileId(String fileMd5) { + LjFile file = ljFileMapper.selectOne(Wrappers.lambdaQuery() + .eq(LjFile::getFileMd5, fileMd5)); + if(file == null){ + return null; + } + return file.getId(); + } + + // 检查分片是否已上传 + public boolean isChunkUploaded(String fileMd5, int chunkNumber) { + String objectName = generatePathUtil.getChunkObjectName(fileMd5, chunkNumber); + String redisKey = CHUNK_PREFIX + fileMd5; + // 检查redis中是否已记录该分片 + if (redisUtil.sIsMember(redisKey, chunkNumber)) { + return true; + } + try { + minioClient.statObject( + StatObjectArgs.builder() + .bucket(CHUNK_BUCKET) + .object(objectName) + .build() + ); + return true; + } catch (Exception e) { + return false; + } + } + + // 检查所有分片是否已上传 + public boolean areAllChunksUploaded(String fileMd5, int totalChunks) { + String key = CHUNK_PREFIX + fileMd5; + List uploadedChunks = redisUtil.sGet(key); + return uploadedChunks.size() == totalChunks; + } +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/Config/SecurityConfig.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/Config/SecurityConfig.java deleted file mode 100644 index 726d3cf..0000000 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/Config/SecurityConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.luojia_channel.modules.user.Config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.SecurityFilterChain; - -@Configuration -public class SecurityConfig { - @Bean - public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { - http - .csrf(csrf -> csrf.disable()) //禁用CSRF保护 - .cors(cors -> cors.disable()) //禁用CORS测试,似乎需要,没有详细测试过 - .authorizeHttpRequests(auth -> auth - .requestMatchers("/user/login", - "/user/register", - "/user/hello").permitAll() //允许所有用户访问登录和注册接口 - .anyRequest().authenticated() //其他请求需要认证 - ); - return http.build(); - } - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } -} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserInfoController.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserInfoController.java index be109f5..03ef416 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserInfoController.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserInfoController.java @@ -1,11 +1,38 @@ package com.luojia_channel.modules.user.controller; +import com.luojia_channel.common.domain.Result; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.user.dto.UserChangeInfoDTO; +import com.luojia_channel.modules.user.service.UserInfoService; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/user/info") @RequiredArgsConstructor public class UserInfoController { + private final UserInfoService userInfoService; + @PostMapping("/update") + public Result updateInfo(@RequestBody UserChangeInfoDTO userChangeInfoDTO){ + userInfoService.updateInfo(userChangeInfoDTO); + return Result.success(); + } + + @PostMapping("/password") + public Result updatePassword(@RequestParam String password){ + userInfoService.updatePassword(password); + return Result.success(); + } + + @PostMapping("/avatar") + public Result updateAvatar(@RequestParam("file") MultipartFile file, + @RequestParam("fileType") String fileType, + @RequestParam("fileMd5") String fileMd5) { + UploadFileDTO fileDTO = UploadFileDTO.builder() + .file(file).fileType(fileType).fileMd5(fileMd5) + .build(); + userInfoService.updateAvatar(fileDTO); + return Result.success(); + } } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserLoginController.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserLoginController.java index af6edb5..1a3347e 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserLoginController.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/controller/UserLoginController.java @@ -5,6 +5,7 @@ import com.luojia_channel.common.domain.UserDTO; import com.luojia_channel.modules.user.dto.UserLoginDTO; import com.luojia_channel.modules.user.dto.UserRegisterDTO; import com.luojia_channel.modules.user.service.UserLoginService; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -24,8 +25,8 @@ public class UserLoginController { } @PostMapping("/logout") - public Result logout(@RequestParam String accessToken){ - userLoginService.logout(accessToken); + public Result logout(HttpServletRequest request){ + userLoginService.logout(request); return Result.success(); } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.java new file mode 100644 index 0000000..210ff7b --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.java @@ -0,0 +1,20 @@ +package com.luojia_channel.modules.user.dto; + +import lombok.Data; + +@Data +public class UserChangeInfoDTO { + private String username; + + private String phone; + + private String email; + + private String studentId; + + private String avatar; + + private Integer gender; + + private String college; +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserLoginDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserLoginDTO.java index 7021946..e544b75 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserLoginDTO.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserLoginDTO.java @@ -6,5 +6,6 @@ import lombok.Data; public class UserLoginDTO { // 用户标志,支持学号,手机号,邮箱 private String userFlag; + private String password; } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserRegisterDTO.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserRegisterDTO.java index a64cbc1..fd149cc 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserRegisterDTO.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/dto/UserRegisterDTO.java @@ -6,8 +6,6 @@ import lombok.Data; public class UserRegisterDTO { private String username; - private String realName; - private String password; private String phone; @@ -15,6 +13,4 @@ public class UserRegisterDTO { private String email; private String studentId; - - private String captcha; } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/entity/User.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/entity/User.java index d49d1b4..fa8fe48 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/entity/User.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/entity/User.java @@ -14,44 +14,29 @@ public class User implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; - /** - * 用户名 - */ + private String username; - /** - * 实名 - */ private String realName; - /** - * 密码 - */ private String password; - /** - * 注册手机号 - */ private String phone; - /** - * 邮箱 - */ private String email; + private String studentId; + /** - * 学号 + * 头像url */ - private String studentId; + private String avatar; /** * 性别(0未知,1男,2女) */ private Integer gender; - /** - * 创建时间 - */ private LocalDateTime createTime; private LocalDateTime updateTime; diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserInfoService.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserInfoService.java index 6982d38..e7e26db 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserInfoService.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserInfoService.java @@ -1,7 +1,16 @@ package com.luojia_channel.modules.user.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.user.dto.UserChangeInfoDTO; import com.luojia_channel.modules.user.entity.User; +import org.springframework.web.multipart.MultipartFile; public interface UserInfoService extends IService { + + void updateInfo(UserChangeInfoDTO userChangeInfoDTO); + + void updatePassword(String password); + + void updateAvatar(UploadFileDTO uploadFileDTO); } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserLoginService.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserLoginService.java index 9330f11..420dcdd 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserLoginService.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/UserLoginService.java @@ -5,6 +5,7 @@ import com.luojia_channel.common.domain.UserDTO; import com.luojia_channel.modules.user.dto.UserLoginDTO; import com.luojia_channel.modules.user.dto.UserRegisterDTO; import com.luojia_channel.modules.user.entity.User; +import jakarta.servlet.http.HttpServletRequest; public interface UserLoginService extends IService { @@ -12,7 +13,7 @@ public interface UserLoginService extends IService { UserDTO checkLogin(String accessToken, String refreshToken); - void logout(String accessToken); + void logout(HttpServletRequest request); UserDTO register(UserRegisterDTO userRegisterDTO); } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserInfoServiceImpl.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserInfoServiceImpl.java index d72f795..5208191 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserInfoServiceImpl.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserInfoServiceImpl.java @@ -1,13 +1,99 @@ package com.luojia_channel.modules.user.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.crypto.digest.BCrypt; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luojia_channel.common.exception.UserException; +import com.luojia_channel.common.utils.UserContext; +import com.luojia_channel.modules.file.dto.UploadFileDTO; +import com.luojia_channel.modules.file.service.impl.FileServiceImpl; +import com.luojia_channel.modules.file.utils.GeneratePathUtil; +import com.luojia_channel.modules.file.utils.ValidateFileUtil; +import com.luojia_channel.modules.user.dto.UserChangeInfoDTO; import com.luojia_channel.modules.user.entity.User; import com.luojia_channel.modules.user.mapper.UserMapper; import com.luojia_channel.modules.user.service.UserInfoService; - +import com.luojia_channel.modules.user.utils.ValidateUserUtil; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +import java.io.InputStream; +import java.time.LocalDateTime; @Service +@RequiredArgsConstructor public class UserInfoServiceImpl extends ServiceImpl implements UserInfoService { + private final UserMapper userMapper; + private final ValidateUserUtil validateUserUtil; + private final FileServiceImpl minioService; + private final GeneratePathUtil generatePathUtil; + private final ValidateFileUtil validateFileUtil; + + @Override + public void updateInfo(UserChangeInfoDTO userChangeInfoDTO) { + Long userId = UserContext.getUserId(); + User currentUser = userMapper.selectById(userId); + if(currentUser == null){ + throw new UserException("用户不存在"); + } + validateUserUtil.validateFormats(userChangeInfoDTO, userId); + User user = BeanUtil.copyProperties(userChangeInfoDTO, User.class); + user.setId(userId); + user.setUpdateTime(LocalDateTime.now()); + updateById(user); + } + + @Override + public void updatePassword(String password) { + Long userId = UserContext.getUserId(); + User user = userMapper.selectById(userId); + if(user == null){ + throw new UserException("用户不存在"); + } + if (!password.matches(ValidateUserUtil.PASSWORD_REGEX)) { + throw new UserException("密码格式不符合要求"); + } + if (BCrypt.checkpw(password, user.getPassword())) { + throw new UserException("修改密码不能与原密码相同"); + } + String encodedPassword = BCrypt.hashpw(password, BCrypt.gensalt()); + user.setPassword(encodedPassword); + user.setUpdateTime(LocalDateTime.now()); + updateById(user); + } + + @Override + public void updateAvatar(UploadFileDTO uploadFileDTO) { + Long userId = UserContext.getUserId(); + User user = userMapper.selectById(userId); + if(user == null){ + throw new UserException("用户不存在"); + } + validateFileUtil.validateFile(uploadFileDTO); + try { + + // TODO 下述工作应该是前端干的---------- + /* + InputStream inputStream = uploadFileDTO.getFile().getInputStream(); + String fileMd5 = DigestUtils.md5DigestAsHex(inputStream); + String fileType = "image"; + uploadFileDTO.setFileType(fileType); + uploadFileDTO.setFileMd5(fileMd5); + + // TODO ending--------- + */ + + minioService.uploadFile(uploadFileDTO); + String filePath = generatePathUtil + .getObjectName(uploadFileDTO.getFile().getOriginalFilename(), + uploadFileDTO.getFileMd5()); + // 直接设置成url,省去一次读数据库操作 + user.setAvatar(filePath); + updateById(user); + } catch (Exception e) { + throw new UserException("上传头像失败"); + } + } } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserLoginServiceImpl.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserLoginServiceImpl.java index 14aed94..f978234 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserLoginServiceImpl.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/service/impl/UserLoginServiceImpl.java @@ -2,6 +2,7 @@ package com.luojia_channel.modules.user.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.BCrypt; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -15,7 +16,8 @@ import com.luojia_channel.modules.user.mapper.UserMapper; import com.luojia_channel.modules.user.service.UserLoginService; import com.luojia_channel.common.utils.JWTUtil; import com.luojia_channel.common.utils.RedisUtil; -import com.luojia_channel.modules.user.utils.ValidateParameterUtil; +import com.luojia_channel.modules.user.utils.ValidateUserUtil; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,7 +37,7 @@ public class UserLoginServiceImpl extends ServiceImpl implemen private final UserMapper userMapper; private final RedisUtil redisUtil; private final JWTUtil jwtUtil; - private final ValidateParameterUtil validateParameterUtil; + private final ValidateUserUtil validateUserUtil; /** * 根据用户标志获得用户学号,用于登录 @@ -46,17 +48,17 @@ public class UserLoginServiceImpl extends ServiceImpl implemen if (StrUtil.isBlank(userFlag)) { throw new UserException("用户标识不能为空"); } - // 使用正则表达式判断类型,之前直接判断长度,虽然不合法的数据在数据库中仍然查不到 + //使用正则表达式判断类型,之前直接判断长度,虽然不合法的数据在数据库中仍然查不到 boolean isEmail = userFlag.contains("@"); - boolean isPhone = !isEmail && userFlag.matches(ValidateParameterUtil.PHONE_REGEX); + boolean isPhone = !isEmail && userFlag.matches(ValidateUserUtil.PHONE_REGEX); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); if (isEmail) { wrapper.eq(User::getEmail, userFlag); } else if (isPhone) { wrapper.eq(User::getPhone, userFlag); } else { - // 默认学号登录 - wrapper.eq(User::getStudentId, userFlag); + //默认用户名登录 + wrapper.eq(User::getUsername, userFlag); } User user = userMapper.selectOne(wrapper); if (user == null) { @@ -89,9 +91,8 @@ public class UserLoginServiceImpl extends ServiceImpl implemen public UserDTO login(UserLoginDTO userLoginDTO) { String userFlag = userLoginDTO.getUserFlag(); String password = userLoginDTO.getPassword(); - // TODO 选择密码加密格式 User user = getUserByFlag(userFlag); - if(!user.getPassword().equals(password)) { + if (!BCrypt.checkpw(password, user.getPassword())) { throw new UserException("密码错误"); } UserDTO userDTO = UserDTO.builder() @@ -115,11 +116,14 @@ public class UserLoginServiceImpl extends ServiceImpl implemen /** * 登出 - * @param accessToken */ @Override - public void logout(String accessToken) { + public void logout(HttpServletRequest request) { + String accessToken = request.getHeader("Authorization"); Long userId = UserContext.getUserId(); + if(userId == null){ + throw new UserException("用户不存在"); + } // 删除refreshToken String refreshKey = REFRESH_TOKEN_PREFIX + userId; redisUtil.delete(refreshKey); @@ -141,8 +145,11 @@ public class UserLoginServiceImpl extends ServiceImpl implemen @Transactional(rollbackFor = Exception.class) public UserDTO register(UserRegisterDTO userRegisterDTO) { // 校验注册参数 - validateParameterUtil.validateUser(userRegisterDTO); + validateUserUtil.validateRegisterUser(userRegisterDTO); User user = BeanUtil.copyProperties(userRegisterDTO, User.class); + // 加密 + String encodedPassword = BCrypt.hashpw(userRegisterDTO.getPassword(), BCrypt.gensalt()); + user.setPassword(encodedPassword); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); save(user); diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateParameterUtil.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateUserUtil.java similarity index 71% rename from 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateParameterUtil.java rename to 珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateUserUtil.java index 917b187..a61d2d5 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateParameterUtil.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/user/utils/ValidateUserUtil.java @@ -3,6 +3,7 @@ package com.luojia_channel.modules.user.utils; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.luojia_channel.common.exception.UserException; +import com.luojia_channel.modules.user.dto.UserChangeInfoDTO; import com.luojia_channel.modules.user.dto.UserRegisterDTO; import com.luojia_channel.modules.user.entity.User; import com.luojia_channel.modules.user.mapper.UserMapper; @@ -11,12 +12,12 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor -public class ValidateParameterUtil { +public class ValidateUserUtil { // 参数校验正则表达式,学号校验不一定正确 public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$"; public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; public static final String STUDENTID_REGEX = "^(?:\\d{12,13}|[A-Z]{2}\\d{8,10})$"; - public static final String PASSWORD_REGEX = "^\\w{4,32}$"; + public static final String PASSWORD_REGEX = "^\\w{6,32}$"; private final UserMapper userMapper; /** @@ -24,7 +25,7 @@ public class ValidateParameterUtil { * 可能需要前端在用户选择注册方式时只暴露出一个文本框 * @param userRegisterDTO */ - public void validateUser(UserRegisterDTO userRegisterDTO) { + public void validateRegisterUser(UserRegisterDTO userRegisterDTO) { String username = userRegisterDTO.getUsername(); String password = userRegisterDTO.getPassword(); String phone = userRegisterDTO.getPhone(); @@ -54,15 +55,12 @@ public class ValidateParameterUtil { // 格式校验,未来更改用户信息时可能使用 - // TODO 实际上,用户更改信息校验时数据库查询的不是是否存在,而是是否等于要修改的用户 public void validateFormats(UserRegisterDTO userRegisterDTO) { String username = userRegisterDTO.getUsername(); String password = userRegisterDTO.getPassword(); String phone = userRegisterDTO.getPhone(); String email = userRegisterDTO.getEmail(); String studentId = userRegisterDTO.getStudentId(); - String captcha = userRegisterDTO.getCaptcha(); - // 仅对非空字段做格式校验 if (userMapper.exists(Wrappers.lambdaQuery() .eq(User::getUsername, username))) { @@ -71,11 +69,31 @@ public class ValidateParameterUtil { if(!password.matches(PASSWORD_REGEX)){ throw new UserException("密码格式错误"); } + validateUserFlag(phone, email, studentId, null); + } + + public void validateFormats(UserChangeInfoDTO userChangeInfoDTO, Long currentUserId){ + String username = userChangeInfoDTO.getUsername(); + String phone = userChangeInfoDTO.getPhone(); + String email = userChangeInfoDTO.getEmail(); + String studentId = userChangeInfoDTO.getStudentId(); + // String college = userChangeInfoDTO.getCollege(); + if (userMapper.exists(Wrappers.lambdaQuery() + .eq(User::getUsername, userChangeInfoDTO.getUsername()) + .ne(currentUserId != null, User::getId, currentUserId))) { + throw new UserException("用户名已被使用"); + } + + validateUserFlag(phone, email, studentId, currentUserId); + } + + private void validateUserFlag(String phone, String email, String studentId, Long currentUserId) { if(StrUtil.isNotBlank(phone)){ if(!phone.matches(PHONE_REGEX)) throw new UserException("手机号格式错误"); if (userMapper.exists(Wrappers.lambdaQuery() - .eq(User::getPhone, phone))) { + .eq(User::getPhone, phone) + .ne(currentUserId != null, User::getId, currentUserId))) { throw new UserException("手机已存在"); } } @@ -83,7 +101,8 @@ public class ValidateParameterUtil { if(!email.matches(EMAIL_REGEX)) throw new UserException("邮箱格式错误"); if (userMapper.exists(Wrappers.lambdaQuery() - .eq(User::getEmail, email))) { + .eq(User::getEmail, email) + .ne(currentUserId != null, User::getId, currentUserId))) { throw new UserException("邮箱已存在"); } } @@ -91,7 +110,8 @@ public class ValidateParameterUtil { if(!studentId.matches(STUDENTID_REGEX)) throw new UserException("学号格式错误"); if (userMapper.exists(Wrappers.lambdaQuery() - .eq(User::getStudentId, studentId))) { + .eq(User::getStudentId, studentId) + .ne(currentUserId != null, User::getId, currentUserId))) { throw new UserException("学号已存在"); } } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml index 13f3ed3..8ded89f 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml @@ -1,22 +1,8 @@ # 本地开发环境 -#lj: -# db: -# host: 192.168.59.129 -# password: Forely123! -# redis: -# host: 192.168.59.129 -# port: 6379 -# password: Forely123! -# rabbitmq: -# host: 192.168.59.129 -# port: 5672 -# username: admin -# password: Forely123! - lj: db: host: localhost - passwprd: 123456 + password: 123456 redis: host: localhost port: 6379 @@ -25,4 +11,9 @@ lj: host: localhost port: 15672 username: root - password: 123456 \ No newline at end of file + password: 123456 + minio: + endpoint: http://localhost:9000 + accessKey: minioadmin + secretKey: minioadmin + diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application.yaml b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application.yaml index 9b4645d..2baa5e6 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application.yaml +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application.yaml @@ -36,6 +36,11 @@ spring: concurrency: 5 max-concurrency: 10 prefetch: 1 +# minio配置 +minio: + endpoint: ${lj.minio.endpoint} + accessKey: ${lj.minio.accessKey} + secretKey: ${lj.minio.secretKey} mybatis-plus: configuration: diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/db/luojia_channel.sql b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/db/luojia_channel.sql index 94bfe34..7be5cea 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/db/luojia_channel.sql +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/db/luojia_channel.sql @@ -1,4 +1,6 @@ +## 用户表 +DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', `username` VARCHAR(50) NOT NULL COMMENT '用户名', @@ -7,6 +9,7 @@ CREATE TABLE `user` ( `phone` VARCHAR(20) UNIQUE COMMENT '注册手机号', `email` VARCHAR(100) UNIQUE COMMENT '邮箱', `student_id` VARCHAR(20) UNIQUE COMMENT '学号', + `avatar` VARCHAR(255) COMMENT '头像URL', `gender` TINYINT DEFAULT 0 COMMENT '性别(0未知,1男,2女)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', @@ -18,4 +21,85 @@ CREATE TABLE `user` ( UNIQUE INDEX `uk_phone` (`phone`), UNIQUE INDEX `uk_email` (`email`), UNIQUE INDEX `uk_student_id` (`student_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; + +## 文件表 +DROP TABLE IF EXISTS `lj_file`; +CREATE TABLE `lj_file` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `file_name` VARCHAR(255) NOT NULL COMMENT '文件名', + `file_url` VARCHAR(512) NOT NULL COMMENT 'MinIO存储路径', + `file_size` BIGINT NOT NULL COMMENT '文件大小(字节)', + `file_md5` VARCHAR(32) NOT NULL COMMENT '文件MD5值', + `file_type` VARCHAR(50) NOT NULL COMMENT '文件类型(image/video)', + `file_status` INT NOT NULL DEFAULT 0 COMMENT '文件状态(0:正在上传, 1:上传成功, 2:失败或删除, 3:审核中)', + `user_id` BIGINT NOT NULL COMMENT '上传用户ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件存储表'; + +## 图文帖子表 +DROP TABLE IF EXISTS `post`; +CREATE TABLE `post` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `title` VARCHAR(255) NOT NULL COMMENT '标题', + `cover_id` BIGINT NOT NULL COMMENT '封面图片ID', + `content` TEXT NOT NULL COMMENT '文字内容', + `like_count` INT DEFAULT 0 COMMENT '点赞数', + `comment_count` INT DEFAULT 0 COMMENT '评论数', + `favorite_count` INT DEFAULT 0 COMMENT '收藏数', + `user_id` BIGINT NOT NULL COMMENT '发布用户ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), + FOREIGN KEY (`cover_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图文帖子表'; + +## 帖子图片关联表 +DROP TABLE IF EXISTS `post_image`; +CREATE TABLE `post_image` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `post_id` BIGINT NOT NULL COMMENT '图文帖子ID', + `file_id` BIGINT NOT NULL COMMENT '图片文件ID', + FOREIGN KEY (`post_id`) REFERENCES `post`(`id`), + FOREIGN KEY (`file_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图文帖子与图片关联表'; + +## 视频表 +DROP TABLE IF EXISTS `video`; +CREATE TABLE `video` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `title` VARCHAR(255) NOT NULL COMMENT '标题', + `cover_id` BIGINT NOT NULL COMMENT '封面图片ID', + `video_file_id` BIGINT NOT NULL COMMENT '视频文件ID', + `play_count` BIGINT DEFAULT 0 COMMENT '播放次数', + `like_count` INT DEFAULT 0 COMMENT '点赞数', + `comment_count` INT DEFAULT 0 COMMENT '评论数', + `favorite_count` INT DEFAULT 0 COMMENT '收藏数', + `user_id` BIGINT NOT NULL COMMENT '发布用户ID', + `duration` INT NOT NULL COMMENT '视频时长(秒)', + `category` VARCHAR(50) NOT NULL COMMENT '分类(如“音乐”、“游戏”)', + `tags` VARCHAR(255) COMMENT '标签(逗号分隔)', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), + FOREIGN KEY (`cover_id`) REFERENCES `lj_file`(`id`), + FOREIGN KEY (`video_file_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频表'; + +## 评论表 +DROP TABLE IF EXISTS `comment`; +CREATE TABLE `comment` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `content` TEXT NOT NULL COMMENT '评论内容', + `user_id` BIGINT NOT NULL COMMENT '评论用户ID', + `post_type` VARCHAR(20) NOT NULL COMMENT '帖子类型(post/video)', + `post_id` BIGINT NOT NULL COMMENT '关联的帖子ID', + `parent_comment_id` BIGINT COMMENT '父评论ID', + `top_id` BIGINT COMMENT '顶层评论ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表'; + + diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/FileServiceTests.java b/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/FileServiceTests.java new file mode 100644 index 0000000..f2723e1 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/FileServiceTests.java @@ -0,0 +1,96 @@ +package com.luojia_channel; + +import com.luojia_channel.common.utils.RedisUtil; +import com.luojia_channel.modules.file.dto.CompleteUploadDTO; +import com.luojia_channel.modules.file.dto.UploadChunkDTO; +import com.luojia_channel.modules.file.service.FileService; +import com.luojia_channel.modules.file.service.impl.FileServiceImpl; +import com.luojia_channel.modules.file.utils.GeneratePathUtil; +import com.luojia_channel.modules.file.utils.ValidateFileUtil; +import io.minio.MinioClient; +import io.minio.PutObjectArgs; +import io.minio.RemoveObjectArgs; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockMultipartFile; + +import java.util.concurrent.TimeUnit; + +import static com.luojia_channel.modules.file.constants.FileConstant.CHUNK_PREFIX; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest +public class FileServiceTests { + @Autowired + private FileServiceImpl fileService; + + @Autowired + private MinioClient minioClient; // 模拟 MinIO 客户端 + + @Autowired + private RedisUtil redisUtil; // 模拟 Redis + + @Autowired + private ValidateFileUtil validateFileUtil; // 模拟验证工具 + + @Autowired + private GeneratePathUtil generatePathUtil; // 模拟路径生成工具 + + + // 其他辅助变量(如测试文件内容、MD5 等) + private static final String TEST_FILE_NAME = "test.jpg"; + private static final String TEST_FILE_MD5 = "test_md5"; + private static final String TEST_FILE_CONTENT = "test_content"; + private static final int TOTAL_CHUNKS = 2; + @Test + public void testUploadChunk_NormalCase() throws Exception { + // 准备测试数据 + MockMultipartFile file = new MockMultipartFile( + "file", + TEST_FILE_NAME, + "image", + TEST_FILE_CONTENT.getBytes() + ); + UploadChunkDTO chunkDTO = UploadChunkDTO.builder().build(); + chunkDTO.setFile(file); + chunkDTO.setFileMd5(TEST_FILE_MD5); + chunkDTO.setChunkNumber(0); + chunkDTO.setTotalChunks(TOTAL_CHUNKS); + chunkDTO.setFileType("image"); + chunkDTO.setFileName(TEST_FILE_NAME); + + fileService.uploadChunk(chunkDTO); + + } + + @Test + public void testCompleteUpload_Success() throws Exception { + // 准备合并前的环境 + CompleteUploadDTO completeDTO = CompleteUploadDTO.builder().build(); + completeDTO.setFileMd5(TEST_FILE_MD5); + completeDTO.setTotalChunks(TOTAL_CHUNKS); + completeDTO.setFileType("image"); + completeDTO.setFileName(TEST_FILE_NAME); + //fileService.completeUpload(completeDTO); + fileService.deleteChunks(TEST_FILE_MD5); + //fileService.deleteBucket("chunks"); + /* + try { + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket("chunks") + .object("test_md5/chunk_0") + .build() + ); + System.out.println("删除成功"); + } catch (Exception e) { + System.err.println("删除失败: " + e.getMessage()); + } + */ + } +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/LuojiaChannelApplicationTests.java b/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/LuojiaChannelApplicationTests.java new file mode 100644 index 0000000..b82b9d8 --- /dev/null +++ b/珞珈岛-项目相关文件/luojia-island/service/src/test/java/com/luojia_channel/LuojiaChannelApplicationTests.java @@ -0,0 +1,9 @@ +package com.luojia_channel; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class LuojiaChannelApplicationTests { + + +} diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/application-local.yaml b/珞珈岛-项目相关文件/luojia-island/service/target/classes/application-local.yaml index 13f3ed3..8ded89f 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/target/classes/application-local.yaml +++ b/珞珈岛-项目相关文件/luojia-island/service/target/classes/application-local.yaml @@ -1,22 +1,8 @@ # 本地开发环境 -#lj: -# db: -# host: 192.168.59.129 -# password: Forely123! -# redis: -# host: 192.168.59.129 -# port: 6379 -# password: Forely123! -# rabbitmq: -# host: 192.168.59.129 -# port: 5672 -# username: admin -# password: Forely123! - lj: db: host: localhost - passwprd: 123456 + password: 123456 redis: host: localhost port: 6379 @@ -25,4 +11,9 @@ lj: host: localhost port: 15672 username: root - password: 123456 \ No newline at end of file + password: 123456 + minio: + endpoint: http://localhost:9000 + accessKey: minioadmin + secretKey: minioadmin + diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/application.yaml b/珞珈岛-项目相关文件/luojia-island/service/target/classes/application.yaml index 9b4645d..2baa5e6 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/target/classes/application.yaml +++ b/珞珈岛-项目相关文件/luojia-island/service/target/classes/application.yaml @@ -36,6 +36,11 @@ spring: concurrency: 5 max-concurrency: 10 prefetch: 1 +# minio配置 +minio: + endpoint: ${lj.minio.endpoint} + accessKey: ${lj.minio.accessKey} + secretKey: ${lj.minio.secretKey} mybatis-plus: configuration: diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/LuojiaChannelApplication.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/LuojiaChannelApplication.class index 67437d2550d0b008fba0bafe78949124dbcdb091..dbe2f8a3764e08abaeae429f5756da18c6c770e3 100644 GIT binary patch delta 211 zcmYL@O%4G;5QSg0X+1wZOwSOpu(8t-c6MwW!Ufn87vKz&b`dKg;Q&?+G!fN9q89H} z;M>eBT}b<`~2fXeb0463uckcnL_eoxR)4z02^)>9RL6T delta 214 zcmYL>y$!-J6ol_NF;1KWaQG7i4P}I&O9d4}umH5M0nA{zU;!4O0;OO8Dh7%W&q={6 z?(}qbUoC5yy}#89zy>n~Vb{w*A+(dZA%xr0{-6;cP9f28V>%}q1_OnhP&gx|))|>% zh>^V=-Ib~faowK)`3e<1a=RJ%;#k*}#A(r{anJ Q?!VWZ0JAMl_Tu>b%7 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/config/MinioConfig.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/config/MinioConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..09527facd0e3cafe0db52e687c9b56a05710072b GIT binary patch literal 1432 zcmb7E*-jKe6g|ZN4MQXQGJpyrD2vdFh|3@fsEKjVLBaRYx{m#X2Cvp|FL zi`#)Vk=yep4_Jvq?U!TLK*? z`FgSIs_j?@ei}D1W@FqmM9Vgl7_Y?A-C7N$s{}IdD#Tn?YdX>ePc8U<5KCjmN6h4d zu;fI>rnDZ)vicZ=TTVeqpXHNo9E5ugi&`~s)}&WaIYQkr2Z6TXPf0gT9ToI5D|*B` z&g^OCabn4=T?&eH(vsJ{dQ&MERJbY$&@@HhN^ebu+T5$m+IT}Jh%eu9MBJ3%JnHxE zb9g3-H9Rq;5*lr<+wU6$KbK$GX@j{P31-S~9Y7MV`kr&oeX=&F~T3eN4}{3Qc1 zWlAbAdr^N&iB%;`ib%)yD~?^bXze;MxJQ`HB7f!~sUde&VAK{cQA95+Tcf4ICZ|UBuZ<+Jg*w zsgc0|A2mp7q7PC(!+5iJKpz9B#X~$wyk)D19#e~W-&^!;@?)^)xTi2jTEjp0h&#{w OQ?4{MIvM{NGJgTy)@6VI literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/constants/FileConstant.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/constants/FileConstant.class new file mode 100644 index 0000000000000000000000000000000000000000..9db4451e5dd1db797342f6f192deb5f20b96f06e GIT binary patch literal 521 zcmbVJ%TB^j5Iq+tAQpKT-)`Kg3%fH09|=~7XaypV5I4=GT%lNQlRo?&f5DZB3qQb* zGENbZwVRVUGjnI=ocsCp{sG_|yBWj~Pa&Z~L6RXq=FePnxEyMY{#aN6L-Nd)c5uNE z-#_T4kY+fx+==Fd?%3w0HR4hVN1M2V&=J1&Xgfl)T zzpbCdZSQg?6lrAX0&5h?Cx8CFd0(m4dTHb-6YVSg)JqJxyK>L$ zG>u02%52phDh%vKA)&wvz>v`0fuJtKmZBa``oe4TzC)R!;ac43a?g(VESU&KHZ46d z{wJ5TWLj?MSt2rlp|I%1QKTGuNRjr(L83gIl+sk*f0)8^pIv6cbnO{}4~7!$hH1S?YsTns!bWPFu#woFvsrYW{%(lz89mwb zD>Ih)W3b;&(YNSs0)bMPqq_l^Be!vf))HO)H0YlIcQJ4ZsuIv7Y|Y>Moo;XGF@y7{ zV(1c~$T@nqGI)(kJwLX49yG_ z&vQ@kG4L*OF@-#YMPg-W^h&h$d-3_HZ5m(Dnx$wD==u_0(Qbl#v-DSA#RyighNrmx E53wgIivR!s literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/CompleteUploadDTO.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/CompleteUploadDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..e7e557290c545883f84719916910d1be95f4a0d6 GIT binary patch literal 3922 zcmb_eU2hvz8h%bZ;~6`XG)bGJZVOwsDa1~KcY*TZv_KpB5lGU~gm&953ln=9Pcxng z_P7!f*NCf?_6mf=?N(a#VyS46Ktj7WU1@*Q^6|VgV`uER6jd8#=DhQs=RD{AI`8p+ zfBNnR0H+Y-F@%f(&4P}s!q_eQwq5pYf2(|P^OjQ$6|yH?-wj_^$jlb6bVr6&7^|0ysTZ^*CsD*tPQy30|(Ds(p2*^vJwBXiyI##{<}r;-p1U2ka0E}$gsSbI{itnw3X`)b zbK__(7OxBVcNUJ~8HLd;C)`LoI5}HPt?9TZIXY%xM)5eOcIfY@%wQCP$T2GrL{Z^=}8;PC4E&KE3DcY8W&>R`?>Fz62PPUau8-^O|Zdd3LMiFnR~~kS49&z_!BiJ#iZp4g(E^r+*#F3W;NfXV`Uz z*hV$Jd5cmSlFKd{d5uLQZ!V6be002m3|^(=5vOxJRQeXGGiiC&uWdZ(zu>vh>81R7 z>CX?Q-*W~Y6&$JZE`5Jxvtit+`nOd2|aUn?q4uh=SvT8 zDEg%E^x8aM6>Z@^7%pfJF@6WuLP2|g-**tlD>@;^E7^iBnCwGL+`&jeFJx1oV#Oe+ zSTPHRfXoDB6wDN8zLFzozLGEG1e8xexkA1J((cmgOzI5Aq1cJN>DI|TT);9zF^RA6 zHe19Heg7-op)P|GKEnzn4d=0qRZ2SF4%R4T*^tiRA|(S&c7jWkO#F?<@m)$ee2&Ao zOev3b+VL{>8Rq{mYQX#vQwE0kZ>k@0Fcx!<5If~{p)dcM{Mt^c_cap^3#_zY;5XNjs{70#uiU%r=lbu8C$F~#pc-D9T*D_Q2tQ# z$19pl6trZ8z_KaWF0x;nfQ?@8E`GoSm-LETo4Gyff41p1q9 yTn_PlGL=Lz-B&dHIVzy{@fVK5JdF=1nUp@{a}#xbO)yl`)VVD4TRa9n3cmmdJpecW literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadChunkDTO$UploadChunkDTOBuilder.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/dto/UploadChunkDTO$UploadChunkDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..21907463b4a3c4d41b787658fa4bbeda3aa7d021 GIT binary patch literal 2957 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 literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile$LjFileBuilder.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile$LjFileBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..b7bf51f568a0399e658f49313d7fa70265538d8b GIT binary patch literal 3617 zcmdT{-BQ~|6#kY!8%GoeD3tsWibIV_5NVtKIiw9v3A6?hOi0>ZbcD49fh;l7ni={8 zeS|(nJCjak(wR=Ld)F80^sIIbGSV<6T;*b=-Q%<0IeYe;^U44G_xdjY3wWMG7rHa( zG0=-XhWws&Xqm3%?U?J^d%P|f`tCcPBOWkx7iYHmkwt$7IRlqqFqG?l!*rYeo@4!3 z-?coCyJo|;n=TK{pB$H)+!KyCGOK$_v?{3AV$*SL9x!w{Hd(Bmn5_EVPFb3G$G{-+ z3|R@XW;Hm&P)x5T0!M2O85owD8L9a!aOLiI4U9_fqTMy;XD)^B85loST($2>*;NDA zj?HWy9Yl&Z3{2oALrx;rge96G!*I;{iYNFE4OD!)5yx!h>_tIeXwbA|zF=5-w`Id*xLZ7@lXOX0;j5@IjL`OzR(qUo zxtiY$>Rk3`hD)kL&q+Pnyv9SZ?1w}G`9ZA{X(QMT?B^&evTip|RL z5NL>s<+?RT@NyRG48Q0Iv{6;ju@~6wn=LYG&53SWQ^_)|Igv|iDjjRh6_v=9;tDxC zp@>L+-2E5W41=*kd>T|-D-1c6!a$o#8PphVB_f^{$PAt_+&Ej67)(VSlSE-%)O_WK z0dYJSKBiS4z3ffga>w}Ut~I_~wBwJa z$7iHte3dsEe>8zVp6>rx$M`A-HNIT5`+qGR|4PUBDxWpJT(sj);6d8`Uhf!R)rQ8O zNZ?PU$A7Y8d{t)}e=31LjW5&uFLaErYF6V@9PI z)sel|m(v4Kr&Vf=re C+xR*F literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/entity/LjFile.class new file mode 100644 index 0000000000000000000000000000000000000000..f5d7a2ef155bc7058b0510e0bfb4c846d84eaea8 GIT binary patch literal 7247 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 DqlHRH literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/mapper/LjFileMapper.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/mapper/LjFileMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..8b0e683f031e2ac8ba193960df49ffda36ba0d5f GIT binary patch literal 419 zcmb7=O-jT-5QSflI&nq?U3vkR*1}~}(1ojr;DB4HWZF!J{s~F9FjsTo0X&pgiKB=M z!9~{()%B?Fy}iG@0=U3IhKa&i6&%?V8pDs(ioMsCTv#TndwMcfljFA49Tm-ubhl%Z zVO!y_;b$hxzNWjf(N)YaRiHtx0ldKq-zV%OYnq!eZgQ+tl7(+aWp zEt(hq6g(dn{sPiInz-Ho<(Ij_d=XMt=>bsT=qKsvaF4?AeUc@oA53pbtFOEdQNV)l w6;6uK)x<4VD@|tPC9(1A1ASVSi#G~e@^-|0NR>&PU>CD7&#@Eh<;G-q1jQYw&9ETQlB#oXhK8)xXl)Vsz z#T)1K&@wnVZDiz48%o`-olQYE#wZlJMnycL?HK=Agd#wTVZ{TUswFT7- X+D@Py*v+6lqFjOf3 literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/service/impl/FileServiceImpl.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/service/impl/FileServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a14a8f987fe79d896cbb145820d655989a4f70e1 GIT binary patch literal 13955 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 literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/utils/GeneratePathUtil.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/file/utils/GeneratePathUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..ae7534e97e871a2d2fd30a6130d8b28cfdb61319 GIT binary patch literal 2089 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 V6c6wfC2)+!hvdoEc!ck;;~!;k7>@t| diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/constant/UserConstant.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/constant/UserConstant.class index 948c368358903c3ba7c15d20198a0e2ab592e619..e26cf5a8a0f0e38b70d62791751120b7f5061055 100644 GIT binary patch delta 195 zcmX@aa)`y|)W2Q(7#J9A8RWSbm>8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ch}TLjJ9Xwoj6;WQDEYJPgWM^{FKzmYK%R}>_Ed97+4r2 z88{iZ7#JD2fjlM#9w46&iO&z@3o;17<%NNKQ6#-#5Vr6x}-c3|Y3 zxJ8+fXW|V{IX0Wjyv!0iMh0dL%`ip=7U%qwR4xW)1_>Sp5eCu8YK%R}KslhPEDVwi ztPE@nj125R9uorxkk5t0=LYh58TjDx{6M}S5?=@?!w51HNQwbX&mWSw)DbH20c{Pp)Ae*$=f7Y#_DMnO_VE$Rdw z<=uj2hwiqezsPUtj$_(d!8JnL^tI48JuUA#f#=#b$#wFx&W1Z(SrTZLhved_>Fro~ zQ{Z9dB$2!!k5=TBucjMOj|K%P6^&2@?w?VPKq@R6dSFUe0;9br0x|+O0y9kqY)03f ztSzPcvMDs7SwV}6^Jo>g83Tw*1=rCGx1d{&wqp9B9SA6Xn9rNOFEG&C7pFe%T4aBl zii>C$Xeyboto!~e*E0kz_GY&A9bK~tQCkf>%h`+&cA!(i2P!V(LxI5+XA&w3?|ZgNKtbf(0} zvBe{i98IYxEr)PV!LW)E+!tus&)lWlwwY&z)Qwq=6^ski^!8;1a>we48c~%ZjdO8q zbuoFSU4xNo&RCAQ7#4D-x2ET0I<;opyl!W8&ysw3F&S)GEa1m+3ie`na)(R{oR_B# zwHEfa6Q#zROJ6RS!Io<*>oV&D(<8)&Rcq7HgV3WX!GG?^u>*Z5>sm&7oHll@gic@; z%&g^Gbm64qxPcy6u0wdkRcke8Iflk>PWi01?E1liUM$Mq#-!fS?T{uZS}7+5x(;ip z_~4A{R?P20(+{Rx<2BVidfx)Bl3n%1O0RA`;G%M?7FhZ>@?)LepzW(1d2c6|t&W^W zvwt{!D?Mu6(UsVCTg7vORk2rV=H)IJeZPi|E2SzOO5mse+3eVWDjL7=QQsXqxs0n# zQL>$0E*HwIvlCO0tr^=brw(@-eY4Yu*(-`9nEq_fI$74#I zAYCiS0F!(Yn8GyQP276I=jqoFK9xP=nj*OHDG3g9n5}~2LM)CB;^?e`V-E9_I6=9@ zF~?U4M;N0ZV=oyoVj^A5Q7 z=*l&^_Bxu;g*J5KDtaQI_e$a_4(sNbWdfxN&Q9}@JG(j2%%g_)n(-M{C})EE=W2Kq zJOpmUWL4|Pxg@MQaLe>n%9;~VlR@>kG- HZ_)4%I%o78 delta 226 zcmbO%{hCGK)W2Q(7#J9A8N}Hcm>3ysCpR!jPrSf7Ifhl1nVo@Uat({h7QO zsYUvkd1?6!iVTcEtsuY%gh2faObqNm9vhIy0i-#BSRX9Mz`&}toq=m3P=JYn2dV_5 qfEUQ-0V)A1VBllm2g?h9NkIl7AT0z`FASu)MSzM#qZt^B8N>jI@E^W326g@3lk}V6{C=hId6G%cL+aVp6fQfA-v4fL%f^@%w&jnpjL5~BLN>Xhnt?EJ zNFMxrlGLrG0UoRz+kR{~D&+3`b{rVhmNgYAqVskTXd{f$0b#yg)nSuI2cZg@Ppm6X zb-2%;$~v#BpuwrfC9?dnj?4pba6p1&GkYlfnEcG~q;;GhJfzFZE1s4l{)TS+M5p~Q zJewmHXg3#UY)74QxND{EB04TTY*SCYxNUDe zlhn)o;4q~uOI2UD>w2Hxm4OU}kqt_$!j6tZPi`sOBIj&{yRO^&!MJKWI{gR?UDFgn z(^ID-Mp1P)Q(s4Lzd&@wWat5?iQAth8f9rbg-i6kOtTHz&(L>z=^5DapU7wM2VVP? zRx&8lJ4e#MDJ;_abVm|PSf&~2;0ivV{i`(2()~#vPEQ8c@S)qLUQXK|e*+fb6I`dY zJfnqAX~5{#|Lh11r&2M@9f4s5pZ74Vkm(MF8z~r8U&b(xHHvo z-0lJjIC}(+byRvd*1I@vrr@|mg6FV+F?aMenpu)_rL!s2UvS42I}!=?9S?7(Sl%GH zi`YyoR}!ZROTXjYrRC>fztK7Uft~JirqB&+!KF$!uvyIFjs-}@zih($ literal 2886 zcmcImYjYDf6g_fcZ{nB+T%HA5NO?F(L6jC6aAF>zP>Lx`lIBZ?w(?qal&qz6R~x23 zp)>t4?Myp;eCQA8k79bYUOxhxam-9Ucr9tK?m4>W-mCrZ)j$6NSi%zzIfj~V+B}HO zrV`)z8$xRt@V05jfsA+@$&mX-+t3674Zo&&-L#Zm?yY$kXE?kmb_5TEZt-W0P3c=& za(ffoRT=ImUozaT4}+pD&a{t{?yWN91Bc7-qB7J=)0)1A2W!u&vsqh+OWSDPG;N_Y zUy)H9Si+fHRV^)S91`K54-#u}I4Kuy$G=9rPOZe+sJ6h#;nO7I+%mncX1Ig>zrf&3$cn@bh zoMyP3K{P9kN;r%68N4X=eHoEJOO^WT6*5v%PS=%|U&ZZ)4A%sy&rq%#Uj*wSRBoOw zj@u1IXm_(RYlM;}txCP>rTk;KKGfqIHAfxbsk9rW*-Ii~HWA8}iYTENzTdxSE9s_D zOZk@rh8VGeCwceuF7@Y2xP*@w#DS6Q<}bsvQ*$7Su481R@~#x=3OcZj@}fYE!o<|x zcV+adb)9FVjP_j1Nj%-$ck@cyNs>@i7sF3W;JCqXY_Pn#WY%5Xe&$MXfnmNf${jEz zlDb_pTas>^@<8pT&Z%{7$RIEbclPgi@l8Lju@`vaY65P&sI;=RB)r1}+VifQU1vC* zHuA@MC*!^-*8|gTm@WQDY8eVEo7E!5@Sub{_?%&^;#?G0O&t32p>pl!q)Vpy?wkLr zYiZQIN6;^_{SOB^?kHQ6n`GeXO1@2Sp01NI`j{b=+?_(BJdHg}(ElXOawuYo{@{{}31G{Y4t*8BH9YOSs(QP|4shJDkH@CWjMyaJYi2eGXR=4jk7oo`L;wANx8P zy7NDL?fjoO?3?}b7n3uep>Uqv1OFCo_wjEf_*E>BIvpJrGk7c|(AQ|23vQuY%Lw^Q z0_U`IB6LDdWrw@u`ChWdNW9J=YUv@0bAMuaZvGFHf1@{p0v<}dbp$N-1S}@G(-SaH ZS&^fNxUG*8+GQGjLG#B%qmx2k{tv=hE&u=k diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserChangeInfoDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..cce978be3d13e6509c5f82133a780568998edec8 GIT binary patch literal 4820 zcmb_gU2_{}6@Fe>(yru{rP#HTCFzG-75tG@U@%QrNg#ET#$YEQP7~4q?ONJcisfBb zS_Q&46mEJ`7%pJA;F8QRnc-t-I@4h~^rp;k%@thnE4U$)=j?~HmPGC8Fyqyp_nhZ_ z-hIzL=e&~t`k!~+1#lWa&Lf2}4QT@zWED!c?K^g*WxHFIOPjZyny-*O)pVQw8HKUA z`D;1o$Z5zM7>A*-T=RA+t*&>wX}?ly*skleDmz}i+j2UUZpUd?>b_TbiN*?pTh6L` z%X{JKB?VoAuD#n50McP(*1G_$Li~O5i%-mnBo;{Ir43#Ljb)EOCC; zz_a2sh}?+tC4uJ*SQ3y&J{zP=yr&GRgWf#7D{(SX_?&^y<1E)}*qz3TSLX|)ELJBe zrWFG(;GDwY9edkZ@!Xp2UvK&ZxgFnj{f@%Vl4*-Jk;u&d%M)jKm^%3$qSX}A;WmnE zP1m{D-Pv^7SMAMKpiHl3x31akri>$J+HW+um1oyJlJctxN3V2Uzq!L&xYO)3Nqp9I zJ>T}5%#&0@%iG!Xwks5m)3$x5&MD)aq!#vwFWSZYHJ0wW<2SteWxLI~@|`x>bWRLZ z5t@M(r~rC<3XtlF-+O4svYko3tvIK$P@WSaNhm09ZwW`$z{2(XhLqa4B&-}4o)LI^ z!$J`3H-m{V+;`*yK+pq76-J{`7z&y}FBFX?f?2(;pim5FCOqL|g)M?93FEzCFhA-6 z3WYG*A8+_}ZF}9`jWm(Dd}Vc=%2%r_<+ju5w%9hc-X?S9{(iFM=;^cN=vnjS#8YYI z_!0DSZ#muf!q?2yZ+P8y%{ku`ea=XK*wa{_kyc72Jnwma$8X!ap(HxREWVM)U3^o+ zx1>tHtx)cF-KKlT+jc798e!p{w`;!FzN_$yqzEElNP59`>umGoHP74b?pBA3E#cWS z@#@`OX9WCa0w1^3ge#(0v0JT;rtegBd{^P-PzL7WRG(JIp9oSdMv!VTda0H{m};>? zb&3@w{j{2=C{}r%wO3kpr{i=q{6OL9p`?wyGEuO?CCgFn!a>Uda1V_{p1k+mC^K5 z2c?%X?$J*V(Qk~VpE)SKbcY`OksXUm`PhfAP=I*N-nez!SlcM)~4#epu-ff5Et! zejkVK!8l>2A7Cy}q1f)kG&D0a1B`ZhJ zl9e}e0?J3AoS9F6maTDumMy~^7myKwXeB@=tpY(OtqHRrpos`nFeehAs#PSYYL(2Q zfJzalXqIA7`aY|0EYY(wLG|AclNZ;ln#FZ|nVFwf25#^`NTG~}c$vO2{y6y;ZqiDV z=7A?GmuhG)b#&7WoEge6_Pw*4F(inItrM2!;s_n_wnRC{uKUkKU8=jRAJW{hlQa&+614 zc+Zpcy;Aj5`g9=JW2I_?a@9+V_n@74fHSX(f6+=yz)VLGT|^v)Dpn>4QNO_?-OR+H zB`X_*vb_*h9nM;|v>-%5N3*mzbkfp;klqVX=HaZWl?y^tcr+^)gpQ4t+O2SNQD(;Q zE}FQ_%w#BpZCbMVw<#l$+Ee%yc4(z>2Cu`VC3$SXqm_kE+3nKO@Fte<8Z8~a!C?wd zq(+gbElhksM_Plf6omn$J|Jy>oD#=0GBF^=r1!caST+IcBL}?^SlbKk<3|LdDf-Zq z{;bilXd?gl5^j+AK}$6$-sf$>3#87zBgo;tuaRabM^49ej_YJgx8Jhxif9 F{{o^IQr-Xn literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserLoginDTO.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserLoginDTO.class index c3048260336eae9db68bbf8043339194309d98af..fc6b25594856f76dc694219b1180170428bd3d42 100644 GIT binary patch literal 2418 zcmb7FTXWk~5dMxW*|MV~PH57agpyJh;y9_(3y|7Lpmnarxl9wn3_QSzeI`~SOF@#u z^q(;N0P>Otn1L|U2L@is48MV&!6T*Yv1D6uJQT*4vuCyE+ud(>kADCA+0OtLu$@E% z(Kr+xDq;+&Lw>^ZCbtgqTl)<88-t4C|mM@dtDa zN^tF%yY5%EQ%#a`NXIZv79-8Ro(P2mUWd)FVg+#rHK>HY~B(sP7ABm+zb8eYk8_xVgt2 zL+%5m;?)fDcenh1%Tr_+d(yBxqb}C16T>wK^Py$g9`_8&L%K8V`o4XXUlo>cxF@P~ zq|Xi0e4#8smf1aOtqtMT?CLgmcwKnHAvAfg#V!N0FSbNbQU=xbYQkaYmuY1>{WH+i zhZMd+t8EwpgN~wq$K#cw4SpODrEWi2-&iKs>r{P5xDAsUJ`qApWIBg6&-T+{NbcAT zry^DiS%RT(gWr}dP02p8ZO`=_e(Y!M4#rSQVhPJ}tjI=LWyo~8->^>XBa!#v{oYyO z70-5_GJGBGn!wNpUE@}jCM{F8?W4wV@p3DLG#3u;K0Ova%s&g+x8^CN3Lr|{G4_F`3oOf^uhZS&luQ~W;l@#BxOFM}UP;BV$#DJOO{sJ~1Gqtx z8=+B*(1-4)rbJf>tqD*YAx8SQX_u!Rqg9>y3GDl(**o+f^Ocw+Sr6narf8Q7o=(%s z2HvHfvc)EOp=>Me1;uJ+KH}x%4IMMEW1n@q3yF|_%q;STOn0wdVLJ?e)D&F>QKlP*fTMZ8Orf>mn2_efH)fib*K zQVes1KS3`{?Jo?(p}oLp91;3z>;#VVr?s(P;royiv&!N_^|gI1N+LaI2gEHud-PZeuKt(MB2B0h7D>t9IySV55w z(n|0|lZ4Zw@!mw<_fdn8qD0CA6euK>C@Yc_K@zi=r!b?qNwcs(lF}sYF_f32P>3|f zh$t}jl8ie0h*XR~Z5gy|l#41d>+0pj_RP&mSju`pCM=VChPQz3;q%G$uY-XglkjyA d#RtuDe29m%YJ~WRertG4yCg{;Q9EoQ{SSKQ&}0Ar literal 2418 zcmb7F-%}e^6#g#RO#&Q&`WZMY}xGM?gpp- ziQ^w&U;3akT4(y;=u4gPZ}89XQLW$2Zb)ciTPMlhbI(0{&Ue0Z&du-tJoy>G0yb0V z5tuJ~wSrUk?%VS7a#gynatbxCQg>8Ps0Yd~R6?)tF@<$+&vuu#@1|e~4BeN9vfxN} zuW)zwzAA?TX>Gmi$UT9P_15uL=-cjIiRTA02)^?Cia`IK3bo6~dUSfGoBhPSx*OUx zwdNk$fxYXf8?NhxGPFH6&>iy-^+I6Kf{CQSiFMmmcj~oW zL=>Fh|~*85m#gjJh9FRuSzE*MkivKeQlLyuWV>CpW_dyZq%ohi=jkjD)b zR=vum^kq$j$|nl_V$-2OQhiyM4%NpzM4XpqKJ8<~H!PgN1PLxn_m;NS%Ci>I=#Lydu$g+>g7s!we$$~BHPi@O_=<(A zC<>gc$$hoxxn&uCVuuXl2BCCAl6IvF?Oh7dsUnnXwrhvi8+dm#-s=`hxF*oI<<NbRvnH zX|P(^_T;CV?Xn^vQynyPODu&u0%u-q$~r|X;2aw~ z!KUcphqK?1IEY;JRB{%m@8d4XT|ZZgzXD~!)y(~Xf$u2v-~^xAgh~wYX~ps|bjJxj zKreAL`f85GagunSM^vQq9t|Ov{}BV9P` zjPVr14`Iz^jK?_Fw3sZKG?^?WGp4plKE=pG3}nnqvT0;IVyr|*$yOr_NBmSVg}0f& z7`AYpW$Zx~OPHoEfgG-5hLV95c2JIzi4EqKrW^iAA_n5zu0%W7&yH0uAVs(FOkBvy?&_I|!WJ17i1U)TW2>50RRCjKUXMKUp;NLB@zr(wcA{o$gNLrO0axDS`L#4lWXsiOYDG zl14I*ON5!gB>U|$C8I&wZ5Yp}Fi4sZB#O&3K3n@9tr&yZG-%ow$5k|Ay!X1!+!e;x zb2_LK*2z5~K)h)92IEYGzR0`q*t!mW!b11qIDQ=@@Ij-NAL0hrG~ul9w~E``=|9|$ J*h_bj`4=UN$+Z9g diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserRegisterDTO.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/dto/UserRegisterDTO.class index 00e0e31feee76bb80786614fb00d7aeff3c4599d..a30aaea59ed7abda542d0c45ace199e98f57d973 100644 GIT binary patch literal 3805 zcmbVOZF3V<6n<`!eM!1~p->=z2pVjgQlcO#DMg{QP;H^M1r$`+CTp`a*{#V2hmX!U zj-y}nla45Qq;AUra(rQbWo>7Yu|^O zS`S?Csk5w`4vh?gQuv2=H zHLqT@9B;aqqIZ{p-Pl9Ag6T|tP&dm014EG~2ceD)UzXs#2A;+~fv#oClUolqx@~AU zvLM{5JiKQNJS(|XOA^;4!vO=&H5lf?0HlA&z_9e|WS)~TNau)wgAM1T3`05(8OTYe zLF7U!k{Dhva2Q8OQ8H_#3Ae~2q%70@6!WNom+-Q{j*7WrO}I|M^e)*RK~Bvx9j_+f zL}Ly^SRd4rc{-eqKqA;-?~LtO=jxRutGZ||m3`UWf?2+3R&6;Boe8gGbC*YFo*=2l z1a{BY9nY><)6NaMW|Q`$USp5cqE ziCN1lxy3oN%9LdelT9vcC`&QqNa`7wzKYb2-llc}!d;u~Va_p~U9V(S1-fPUnO14^ z`2L6^05mE>AOy4=DWAcw4sJ169*%-3zf77_;i$)7)vOnR-e6_K)4kxCg_T)zHB?HO zo1dPYWK7e{`>Iu|m)R$hk*y{(tzD^^a1UxGd}1mS;nqDjIBS8_f?KZ^tSMWj$hNk& zaY!}_igC(yy_#1wR|8dQy(-KUmQc`8loi0GnO0A+og40ol?$E_6vdQT@Z9Q6fv=^=+AX((q4L8qL!k7sJfMX}0C+M464qs%f|`aA4i}bP8Jo+vMKILn(i7 zM%d4;6=N4t_|I1Zt(a`#{+(Uhzq42ScXnvrd%@g?O57_P| zi+V`A{p+%%^NW{k7fvCHkD7hgKJADVDzILLn4T<=6 z=s>i!ov3?5BEC^N5N&TK>fMm&RlJ6{uUejjQgt;u@-wu~vTY9#2xOCz%KQ*G$#n{w z5&GJ+Jk^=Ld$aU1?V9wx>*yys)AwzbUS@NXzJDG4>CW_9H%l*zq)9)pj()N;{r1h$ z%i3$w?_5XEPnkekagVZfQ=$hW*>9mFZjby9{TnFp+avd&&mPR)LE0bEc>28qDiyO@j0gq^0!; zD4S0bl+CBoNeN1Ypkz7~0gdLn2pY{B=`IN}LJ+M6C~=#i#Uq_T@w5KpAmnDQKEM>t z@Vo}_2hOtX#E`*{n5Hj|EWX3*v=Y3&z#IHmFpJMHLrX;&D;%AHhAJ$aqow0ZvYn@u z#8*^tj#diX5ZQBgqVOQ(k%Z-YwvAoL?^DvSr;C4h*Gc+$-`MfQ zxSuF{`o>C36TNTb7PQejc>bF7XYvU-kxqm&x=fy6YA~<(Q_LHGk)Bo>Q`x-gPpQo* zW>c_gG_UznOr&s?=1=YEEc<-0%`nC|KE)y~Fh&KR;3BOUh587W7`z5?ZD}fUf z_-$GW{}1CbEfpSi;0i6x7x8bT9?_A|pbJ6aAjBh5w8k;%7=Y3MG%$&^t`Me1U@c_3 zHw0^I!7Y4;iExR&Zb@rZ=Q%EHYu@iPUoxk8FoNpulEO=oc@6T)@*2I17lHOSPmpl3 kKXFwkM)Wlw$Gd)tzK5&4>%?8-^*#jw1ro4Xa}}ij2Lo`bXaE2J literal 4768 zcmcInOK%(375=XHm?1f$XvKCsjhn;{-Rfb7Z60kidQ_2Q*>WY@l^nZGnkFN1B92AQ zDCE$o`+n@Y>0{HPi!5WHFwmrE93UuyW|IP4ch#=?E4pc#erIO*kVu*)z_srGb{`>w102c654Py#Vm;HLF*79$<_ABM8?RieERQD^bn$s+`nogrs3H;Iv zG`5^ww;4E%)oWKYBozub?OS%KW_!D(D?2xxa-g6~f@jwqg~^R>csppg-tHXZ4acrs z4&(a1-E6+$H!2FL{i^RVCFRs@x2BM32Ca(Y1?!AyWqUv1v=nl?P9W2W=#NfK4|>2O zTP-he>(07&%Wb+lHRpNH^8-6@eXl8Vs`>RDf3I}G@tlSoI2Fz*x#Cxx3=|$RkV0Bv zV#D>E%dPs3)3|1nLh}5wUAt~KTp7pCWKea<`RvB0s2?9Iud@|bL!SN_1DZTt{8!`B zi2t(&bn)xrmpX~_aRZsQ^Sl&IoKG0Yiqjx+yInyEe9k~l0$B!DqH>CR+JGVMT(h^Z z$EN!0I(?n1z3Bv1zjD=XaQUbLzPco~Um+T`C(h|I7EU)Z!%1>#^meAk32_)tNFnXK z-m+_?JurhvS##4bW;x?88Tc}uA!FJ0&I?+c&lwm;K8pnA3_Oiz#J6DJg!mM`YT%K` zdfvdJk+ovrRAikuP>ie#20o9xg7ObaH-0|F=?7J(p)fAXUhL{TANqS75uhvd7|?Y@ zfUf*wK-ZBC9}#bgT*M!bqENg~;!r%whgm&aXClh%@fabbv!li%KzFci=El%fgkmaNj9sS2KK<#@NnJUb5?w>YzH^ofRpo@f$arU&94XOwqMEr zKhMB+l%97zH&_hocU|hYZ=ep3%HQ@|jk2@mN_#nasJlKXos&Cm+4qBH(6INTt=G(= zg*Pb==h$(%ZJ{7s=d1w)Y-?|G7`HjqtKRK zC`KqFF*-7mK`f&MHO;QG&W~DSrN*x6G&THC;Y?rs2317Ej};z$FqHC-%Ey+%Wu{d5 zQI+oqtug87;hh~kyt8SCclPP<&bA!h*@t<5hzx9H%$wjS%~65(BfLtq74NB;KVkB1 z8e=%hUxCnxWBfH@`#2uvNJ;-2LS&9c#P&Ia=;UZb?7l;Y9vh8_&3g#Z>CuST`-c#n z8I6dajv+)-qY=$umLfX5{1(Z_WW8r*-^JuRwEEZoc!WT-{-O;Lp~6|BQ*7AOlES&+ z^yaAaqU{d77ScaCoc`pf^s;3-^m<5N8czS%sPwWEJM@{5{tLtDPmfA38@xlG4e7r) zoc_$H^wKvv^tq7!sp0ffqtZ(|>d+e@Jr7p>!W_Fu(H&v8IW;@;7E;N(vmZkJ4ynZ5 z*}p(-o}IaeXTu?luUtOMA1it8ugICnk8tD;jB{r49;`NE-bxWNZ>7zYVA3C9@(#w$ zl$q`UEm|5ui$G?d=I87NtqGOp`S}~P3iu}9 z;Ra4<`hSqupgzWN4GI3~G*3ik=F^((Hg%EDNy;I=Uu<}em60x(5|v3o@7DxV?SisI zmpJu~lrM!+<^h(ehkESTAL+}I^uxm3d~zWa?8(Ahm2%Y!vv;7KyN7SRD*kyZDFHJX zM|2T!6k4=WVTk$-lXNrH4lP;fFqH0usOl(d+0w!g1s!K;?a->FhatTaqRgYLH7gT_ zsPH%|6NXL>mfCC4%f*#R-~)Ucudp&H3gJ~+^78M&X0;M{0&il6RuYT&8OpR$T>L63 zw0LHt>>OGeeu1a(8Z8~ar&xDsWke)u7x_=3t-TKyc+jcjbSxGn|FZP&n4UxFd+-N;S`Hpc6L>w`wGA|R X*Ez-8yuOR?b0q(({{TP2PhkEJy^kfm diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/entity/User.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/entity/User.class index 5d6f8874e894e1cbeceeb4c4e8833030ca796702..2a6f89d87029dd1305fb2ce9ecc676a5e7a4400d 100644 GIT binary patch literal 9275 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 delta 17 YcmbQsJePSw-(-G9`H6jvll2($0XG5#@&Et; diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/service/UserInfoService.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/service/UserInfoService.class index f2f64e315af1977db15577b313f00b4ced199084..d9a397165bb446ff711b4a5ebe190e60402f71e2 100644 GIT binary patch delta 325 zcmcc5G?i80)W2Q(7#J9A8ARC`m>3z%CkrwvOf<;kD=kP#EJ^juOUq|uu+o?;z^GWC zQj)J9TAW(soROH94wiBW@we6tV`LEUO)bgDPYFmYO3Y0yNi8a7WDqPxSINi#H8dcx zxVSvOD20(hRKq7Lu`E$P2WX&va7j^SUOL!3jsmz69*9F6%M#g35{noa%s_6D(M-$C zN!15Cs30dlF~tqYg*k?|6j^BEuGWduR3h0J85kLuftVHOS!NbS26hGxAdeHsV`XIE iVqgFYaWn8Bgm}S1d<^^uApxLbCI&$;Da0TQrbPhl&Qk*=Qu~mVMk%5tc8HibdatsVi4D4W%gMkxF Ga{&OQ<_Qh} diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/service/UserLoginService.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/service/UserLoginService.class index c31f63a03dad13453a8db0378bf77cc0a39ee454..496c49c10a8136cce92b7200850cf0c544c1ae7c 100644 GIT binary patch delta 221 zcmcc3_J@t@)W2Q(7#J9A86+oi{g^DsD9p=KTAW(slb@cM=Mv&SS&6a3Tt~wvD=|B< zs3cJzC{>n|TB4s(Qc|Gr0VIMU0zs*TrK!aw)|z3A4D3Y^&g27(&66{jnkPFlsTQy? zGB7eQ12HSmHWn73Dh3W9j}ypaWn|z2iZL>9Gw?u#IGGrDfiiqxVSWYygi1lMkPw3~ TLP!Ltl8HeSOo}mxgJ}r>keMh+ delta 197 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 T^*_x+Xq5=uvQak6^~n7%&kj>G diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/utils/AnonymousUserUtil.class b/珞珈岛-项目相关文件/luojia-island/service/target/classes/com/luojia_channel/modules/user/utils/AnonymousUserUtil.class index c561a9832cfd5bf5b0adc8e5cd9be26db1020800..99b79711c3237aeed30cfe9c990b4382a54e0dfd 100644 GIT binary patch delta 1264 zcmY+D+jCP@6vlr$w|$bFHfdUF12(;;=F*E+DcAxs5XnB0v{nNHB~k{s8$4L#xIU2&l})cB|+ zqN%f~r$G@jzk6c)6yC{9et0pn(0@)5ip5j^)=A~ElRY66O~oqBissn=zM3&db(xnI z9?`^X;v@=X-Gxtf2mQ3trfIk7;88_g;YOVqa`yN;d0g{^&2GBP$Ifu2LgyDQr*i38 zg){?O~rSsvR(mt|qI6gEmibsBpHs+AV4ppNN-d>C+ss>1V)v z>Z&()UG3#51~o%AM>(d57tY7MQhhO#SM-^79Wev$WJ4#%ZBFol!n2f}+a_?*M~ag+ zFLKI6^&xfIOzGx&A7?nL87-2Lg#QSAbYdox&KG_f{bto&q13$j!gI;2>Q&QdT?+&} zEc>|1TbgU4pZUs)n_sQZD=gkoSaVCcnd$K{W$~U_@z%LMP(;mdR@9?eRYb&%EDO0* zE;qY$fd&!zj7;p1Jr@zg3l-%S>y+&o<7N3W4(b3NEQ!v4hjSfos4Ns%r(%PLV6b(A zT`-hf=iv<+q1%=CmT1^@hopmUci4T0#}r+j9iGo9`<^``heJ=^rstlZdfSp!9R8YT z)_JaodtUJ+fo{F!hxNVIo5Em#5z^8Oqexa<#JTob<#u+%^V~uxR@Xl!a6Cq z1ao3@a%76RN90Nff6hsb;xo@HOv;Rvj55WvblEA}Gb5f;Dy5he&n4A+rOJ8S(xXd` zS5|b$Np=IyznLCDYg#n5n$Y&!DL3ep=7OIE!MT;R5&c*szbPfxrGZOg(PT-t!J-VU zq1ttZ?^8R}_QR$|p^>6QZ8rs2oc4x)*K%=+#AfP)DWWCra@>iOxI5&|23eBHoF$%q z)Son!xYceGnko_6&qcw=-ZCh}oMHos+q{%W-l8|rdW-0qgd9xB>Jk2MrK+T3{U-JS zgFxxr6aj(K$#In0cpVZBN+8IqTNN&eb#Yl%2e0w^R`iP4H{@3?(Kn^f+okngRwU+= L|L^l59})fsrR~*$ delta 1298 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 literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/classes/db/luojia_channel.sql b/珞珈岛-项目相关文件/luojia-island/service/target/classes/db/luojia_channel.sql index 94bfe34..7be5cea 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/target/classes/db/luojia_channel.sql +++ b/珞珈岛-项目相关文件/luojia-island/service/target/classes/db/luojia_channel.sql @@ -1,4 +1,6 @@ +## 用户表 +DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', `username` VARCHAR(50) NOT NULL COMMENT '用户名', @@ -7,6 +9,7 @@ CREATE TABLE `user` ( `phone` VARCHAR(20) UNIQUE COMMENT '注册手机号', `email` VARCHAR(100) UNIQUE COMMENT '邮箱', `student_id` VARCHAR(20) UNIQUE COMMENT '学号', + `avatar` VARCHAR(255) COMMENT '头像URL', `gender` TINYINT DEFAULT 0 COMMENT '性别(0未知,1男,2女)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', @@ -18,4 +21,85 @@ CREATE TABLE `user` ( UNIQUE INDEX `uk_phone` (`phone`), UNIQUE INDEX `uk_email` (`email`), UNIQUE INDEX `uk_student_id` (`student_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; + +## 文件表 +DROP TABLE IF EXISTS `lj_file`; +CREATE TABLE `lj_file` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `file_name` VARCHAR(255) NOT NULL COMMENT '文件名', + `file_url` VARCHAR(512) NOT NULL COMMENT 'MinIO存储路径', + `file_size` BIGINT NOT NULL COMMENT '文件大小(字节)', + `file_md5` VARCHAR(32) NOT NULL COMMENT '文件MD5值', + `file_type` VARCHAR(50) NOT NULL COMMENT '文件类型(image/video)', + `file_status` INT NOT NULL DEFAULT 0 COMMENT '文件状态(0:正在上传, 1:上传成功, 2:失败或删除, 3:审核中)', + `user_id` BIGINT NOT NULL COMMENT '上传用户ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件存储表'; + +## 图文帖子表 +DROP TABLE IF EXISTS `post`; +CREATE TABLE `post` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `title` VARCHAR(255) NOT NULL COMMENT '标题', + `cover_id` BIGINT NOT NULL COMMENT '封面图片ID', + `content` TEXT NOT NULL COMMENT '文字内容', + `like_count` INT DEFAULT 0 COMMENT '点赞数', + `comment_count` INT DEFAULT 0 COMMENT '评论数', + `favorite_count` INT DEFAULT 0 COMMENT '收藏数', + `user_id` BIGINT NOT NULL COMMENT '发布用户ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), + FOREIGN KEY (`cover_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图文帖子表'; + +## 帖子图片关联表 +DROP TABLE IF EXISTS `post_image`; +CREATE TABLE `post_image` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `post_id` BIGINT NOT NULL COMMENT '图文帖子ID', + `file_id` BIGINT NOT NULL COMMENT '图片文件ID', + FOREIGN KEY (`post_id`) REFERENCES `post`(`id`), + FOREIGN KEY (`file_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图文帖子与图片关联表'; + +## 视频表 +DROP TABLE IF EXISTS `video`; +CREATE TABLE `video` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `title` VARCHAR(255) NOT NULL COMMENT '标题', + `cover_id` BIGINT NOT NULL COMMENT '封面图片ID', + `video_file_id` BIGINT NOT NULL COMMENT '视频文件ID', + `play_count` BIGINT DEFAULT 0 COMMENT '播放次数', + `like_count` INT DEFAULT 0 COMMENT '点赞数', + `comment_count` INT DEFAULT 0 COMMENT '评论数', + `favorite_count` INT DEFAULT 0 COMMENT '收藏数', + `user_id` BIGINT NOT NULL COMMENT '发布用户ID', + `duration` INT NOT NULL COMMENT '视频时长(秒)', + `category` VARCHAR(50) NOT NULL COMMENT '分类(如“音乐”、“游戏”)', + `tags` VARCHAR(255) COMMENT '标签(逗号分隔)', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), + FOREIGN KEY (`cover_id`) REFERENCES `lj_file`(`id`), + FOREIGN KEY (`video_file_id`) REFERENCES `lj_file`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频表'; + +## 评论表 +DROP TABLE IF EXISTS `comment`; +CREATE TABLE `comment` ( + `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + `content` TEXT NOT NULL COMMENT '评论内容', + `user_id` BIGINT NOT NULL COMMENT '评论用户ID', + `post_type` VARCHAR(20) NOT NULL COMMENT '帖子类型(post/video)', + `post_id` BIGINT NOT NULL COMMENT '关联的帖子ID', + `parent_comment_id` BIGINT COMMENT '父评论ID', + `top_id` BIGINT COMMENT '顶层评论ID', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表'; + + diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/FileServiceTests.class b/珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/FileServiceTests.class new file mode 100644 index 0000000000000000000000000000000000000000..5793fba0c7a80a46cb357759340e5e2e5b5bd5e4 GIT binary patch literal 3246 zcmb_e3sVzU6#gy&H-tqc6sq{H*d`{jYDKX@1!C0HBv=x#*0$*;xrBv%r27Er``!K> zXFAboXZi#BqdGlz6G%d0QK!SO*?aCi-+t$w@0@%8{^yUs0NlWDA@m_2pE zS2tBfSIw%jSX$?0m*K#yW@_$DhCn2`A|c2yW!Y85so9!YUA0w%Z&~(+Vp!!3Ws8@T zEWKns-PLNU?cULJ9z=+tf0f=O$P8!8mZ9jLwXUhf@|tRzTvx=hJhwNsGB0q)b%Hp^ z5OnEvYQ0ts;xNO2W~f!d3Ny%JqFA;}mz!<~Z(vNqxQsV(q$7a5D;N?^mAeburRNSF}u9%D#EGOdUk4vCksJYI;dgm3~UC7hCR8fO?T_lV1|DxS_AMFg)@TuWK5 z>6Thau6gFh?ZP61RPr>v!fl33B$|13gvn08g$7z8gtM5Ga8AbCc!%NM{{>8G@Ch?q zeJ#2~>;$4R&Lc*#JKWa?!<9&;m!yQ6j2$H@9hyo+SAw|E)JV~&ObcK|#zkCW2sMGT zm1%~t9vK$7dly$EOv|{6YYZbT5u`~~Rgn;BQ`J4bxXLgdNk`j6(Oluja$UxINH83v zPx@KSc}7WikGFqz$D^T{8!~S0_!KNx)qO`tL@*~~UPLg|jG(Yx=C8UW?fa;Tf*KE@gku6tQtP#A8l8k|Num$|wqX$rUcPr=drNqf4IYY6f4? z9Id4DdDA4dx|(HDC!Oh8u_ek3bvw1}TK2X=y}jw6%zLi2rP;hfwK8PTfnp_fjk-4# zN=CC3-=bt&c3L(_t2JlY)pUkfFV)b#8kVVew8BxAb{3Q8VX9oMqPkohD-D2|UH~24 zxdF4X$5WtHxyfxpd!V{&uZDJak0+rWETr;<;+=FRRm{z2Qw-s@&eA-97>1Ly$*yX; z#K+?_Zh2*IQ&SshjgyPHLMm6FPbCzvTM^hd8z{Q>#dGSSo z@Pg&tqwz{F3LPoy(J83;r=FB~%~z>}uNg*Lt$lZf;kZw2-J_e0vhLM1m)nY3)06^* zvlCWlffw^$xy&8fn;{aO-$wifa_yyPc4CnueI%5(JiF|Rl#Z#rn>!_V(>dF74@;Ki zDq`yu{}%MbRr3CIjGCj{3_(uQ&B{*ds^f^8&sbZM==059#c-sHS#t_!=zQrT2@TSd z4jC|fMxz7ts|sPEgmRay0^Vg?MYYSe25paR0_)fyo9<%|V**CoI8I};Z9GC_3$@+# zpCdr;bc3a*O$ZA8GWs1j{|xM@59!cTOasT^(o=3MfQL;QF>KLnz;}M?zXA9Eg!Cvp z7#S-cIbedF0F@q4E z5akJ6!ZyC3TzpCM{bc!SH%H(2L4CU$)E2E0*^E8MVjYD{Opt#RYmojZCP+Vy3DO@6 z(qi(H7U`38V+PTYh{P~57^9oPG2}=h59lga^hu64;F}~ROyWCyPn3F73*ZMr?8A?{ Zgny#(&-5QA>sh+;{6fN8Cj4J9_%9xAilhJl literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/LuojiaChannelApplicationTests.class b/珞珈岛-项目相关文件/luojia-island/service/target/test-classes/com/luojia_channel/LuojiaChannelApplicationTests.class new file mode 100644 index 0000000000000000000000000000000000000000..9b8f13eef9cf9eceaafff5145f640add153c2797 GIT binary patch literal 447 zcmb7AF-`+95F95Vfe=VYM~A3@0wW5V08)rVbpnY*X_3#Ei;p`y^7(*oQ6W+A03L-{ zJJd*6@{D(OZO`u4_s1uI3kH*_sjhW+eg98e$Dvt<-MiX&U8=dRGqo&;S4c literal 0 HcmV?d00001 diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/package-lock.json b/珞珈岛-项目相关文件/luojia-island/vue-frontend/package-lock.json index 5106798..52e13eb 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/package-lock.json +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/package-lock.json @@ -10,7 +10,9 @@ "dependencies": { "axios": "^1.8.4", "core-js": "^3.8.3", - "vue": "^3.2.13" + "element-plus": "^2.9.8", + "vue": "^3.2.13", + "vue-router": "^4.5.0" }, "devDependencies": { "@babel/core": "^7.12.16", @@ -1759,6 +1761,15 @@ "node": ">=6.9.0" } }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -1769,6 +1780,15 @@ "node": ">=10.0.0" } }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -1829,6 +1849,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -2008,6 +2053,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", @@ -2209,6 +2265,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", @@ -2321,6 +2392,12 @@ "@types/node": "*" } }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.18.0", "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.0.tgz", @@ -3052,6 +3129,12 @@ "dev": true, "license": "ISC" }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, "node_modules/@vue/reactivity": { "version": "3.5.13", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", @@ -3146,6 +3229,94 @@ "dev": true, "license": "MIT" }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -3605,6 +3776,12 @@ "dev": true, "license": "MIT" }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", @@ -4927,6 +5104,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz", @@ -5332,6 +5515,32 @@ "dev": true, "license": "ISC" }, + "node_modules/element-plus": { + "version": "2.9.8", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.8.tgz", + "integrity": "sha512-srViUaUdfblBKGMeuEPiXxxKlH5aUmKqEwmhb/At9Sj91DbU6od/jYN1955cTnzt3wTSA7GfnZF7UiRX9sdRHg==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.13", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5495,7 +5704,6 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { @@ -7573,9 +7781,25 @@ "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, "license": "MIT" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -7876,6 +8100,12 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -8313,6 +8543,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -11546,6 +11782,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/package.json b/珞珈岛-项目相关文件/luojia-island/vue-frontend/package.json index 3bc7c87..2ea451a 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/package.json +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/package.json @@ -10,7 +10,9 @@ "dependencies": { "axios": "^1.8.4", "core-js": "^3.8.3", - "vue": "^3.2.13" + "element-plus": "^2.9.8", + "vue": "^3.2.13", + "vue-router": "^4.5.0" }, "devDependencies": { "@babel/core": "^7.12.16", diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue index 8ef9e07..caadc96 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue @@ -3,13 +3,13 @@

登录

- + @@ -17,7 +17,7 @@