From daf38866721a89079c2f6b4fd4ac745623841f08 Mon Sep 17 00:00:00 2001 From: cjh <18505142974@163.com> Date: Fri, 30 May 2025 15:06:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9vlog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/ruoyi-common-mybatis/pom.xml | 5 + .../mybatis/core/page/TableDataInfo.java | 2 +- .../content/config/InterceptorConfig.java | 117 ----- .../consumer/content/config/MinIOConfig.java | 3 +- .../content/config/SpringSecurityConfig.java | 30 -- .../content/controller/RabbitMQConsumer.java | 1 + .../controller/UserInfoController.java | 1 + .../content/controller/VlogController.java | 5 +- .../intercepter/PassportInterceptor.java | 3 + .../intercepter/UserTokenInterceptor.java | 2 + ruoyi-modules/ruoyi-content/pom.xml | 15 + .../domain/base/BaseInfoProperties.java | 1 + .../domain/exceptions/GraceException.java | 3 +- .../exceptions/GraceExceptionHandler.java | 5 +- .../domain/exceptions/MyCustomException.java | 3 +- .../content/enums/UserInfoModifyType.java | 4 +- .../com/wzj/soopin/content/idworker/Code.java | 35 -- .../wzj/soopin/content/idworker/DayCode.java | 19 - .../com/wzj/soopin/content/idworker/Id.java | 29 -- .../wzj/soopin/content/idworker/IdWorker.java | 91 ---- .../content/idworker/InvalidSystemClock.java | 7 - .../content/idworker/RandomCodeStrategy.java | 11 - .../com/wzj/soopin/content/idworker/Sid.java | 64 --- .../com/wzj/soopin/content/idworker/Test.java | 12 - .../content/idworker/WorkerIdStrategy.java | 9 - .../strategy/DayPrefixRandomCodeStrategy.java | 41 -- .../strategy/DefaultRandomCodeStrategy.java | 197 -------- .../strategy/DefaultWorkerIdStrategy.java | 205 -------- .../content/idworker/strategy/FileLock.java | 132 ------ .../content/idworker/utils/IPv4Utils.java | 1 - .../content/idworker/utils/Serializes.java | 118 ----- .../content/mapper/mapper/CommentMapper.java | 3 + .../content/mapper/mapper/FansMapper.java | 6 + .../content/mapper/mapper/UsersMapper.java | 10 +- .../content/mapper/mapper/VlogMapper.java | 50 +- .../mapper/repository/MessageRepository.java | 1 + .../content/service/CommentService.java | 10 +- .../soopin/content/service/FansService.java | 15 +- .../soopin/content/service/MsgService.java | 2 +- .../soopin/content/service/VlogService.java | 7 +- .../service/impl/CommentServiceImpl.java | 5 + .../content/service/impl/FansServiceImpl.java | 31 +- .../content/service/impl/MsgServiceImpl.java | 14 +- .../service/impl/UserMemberServiceImpl.java | 5 +- .../content/service/impl/UserServiceImpl.java | 61 +-- .../content/service/impl/VlogServiceImpl.java | 33 +- .../wzj/soopin/content/utils/CommonUtil.java | 436 ++++++++++++++++++ .../utils/DefaultRandomCodeStrategy.java | 1 - .../utils/DefaultWorkerIdStrategy.java | 5 +- .../content/{idworker => }/utils/HttpReq.java | 2 +- .../content/{idworker => }/utils/Ip.java | 2 +- .../wzj/soopin/content/utils/MinIOUtils.java | 432 +++++++++++++++++ .../soopin/content/utils/PagedGridResult.java | 62 +-- .../content/{idworker => }/utils/Props.java | 5 +- .../com/wzj/soopin/content/utils/QcCloud.java | 60 +++ .../content/utils/RestTemplateUtil.java | 211 +++++++++ .../com/wzj/soopin/content/utils/Sid.java | 2 +- .../content/{idworker => }/utils/Utils.java | 2 +- 58 files changed, 1382 insertions(+), 1262 deletions(-) delete mode 100644 ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/InterceptorConfig.java delete mode 100644 ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/SpringSecurityConfig.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Code.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/DayCode.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Id.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/IdWorker.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/InvalidSystemClock.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/RandomCodeStrategy.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Sid.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Test.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/WorkerIdStrategy.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DayPrefixRandomCodeStrategy.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultRandomCodeStrategy.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultWorkerIdStrategy.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/FileLock.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/IPv4Utils.java delete mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Serializes.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/CommonUtil.java rename ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/{idworker => }/utils/HttpReq.java (98%) rename ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/{idworker => }/utils/Ip.java (96%) create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/MinIOUtils.java rename ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/{idworker => }/utils/Props.java (95%) create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/QcCloud.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/RestTemplateUtil.java rename ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/{idworker => }/utils/Utils.java (98%) diff --git a/ruoyi-common/ruoyi-common-mybatis/pom.xml b/ruoyi-common/ruoyi-common-mybatis/pom.xml index d79ba284a..9a4387316 100644 --- a/ruoyi-common/ruoyi-common-mybatis/pom.xml +++ b/ruoyi-common/ruoyi-common-mybatis/pom.xml @@ -47,6 +47,11 @@ p6spy p6spy + + org.dromara.warm + warm-flow-core + 1.6.8 + diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java index 370f47995..2c3a32a29 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serial; + import java.io.Serializable; import java.util.List; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/InterceptorConfig.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/InterceptorConfig.java deleted file mode 100644 index 2498b7c32..000000000 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/InterceptorConfig.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.wzj.soopin.consumer.content.config; - -import com.imooc.intercepter.PassportInterceptor; -import com.imooc.intercepter.UserTokenInterceptor; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.ssl.SSLContexts; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpMethod; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import javax.net.ssl.SSLContext; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; - -@Configuration -public class InterceptorConfig implements WebMvcConfigurer { - - private String[] CORS_HTTP_METHODS = { HttpMethod.HEAD.name(), HttpMethod.GET.name(), HttpMethod.POST.name(), - HttpMethod.PUT.name(), HttpMethod.DELETE.name(), HttpMethod.OPTIONS.name(), HttpMethod.PATCH.name() }; - - private static final long CORS_MAX_AGE = 30 * 24 * 60 * 60; - - @Bean - public PassportInterceptor passportInterceptor() { - return new PassportInterceptor(); - } - - @Bean - public UserTokenInterceptor userTokenInterceptor() { - return new UserTokenInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(passportInterceptor()).addPathPatterns("/passport/getSMSCode"); - - registry.addInterceptor(userTokenInterceptor()).addPathPatterns("/userInfo/modifyUserInfo") - .addPathPatterns("/userInfo/modifyImage"); - } - - @Order(Ordered.HIGHEST_PRECEDENCE) - @Bean - public CorsFilter corsFilter() { - // 添加跨域配置信息 - CorsConfiguration config = new CorsConfiguration(); - // 设置访问源地址 - config.addAllowedOriginPattern("*"); - // 设置访问源请求头 - config.addAllowedHeader("*"); - // 设置是否发送Cookie信息 - config.setAllowCredentials(true); - // 设置访问源请求方法 - Arrays.stream(CORS_HTTP_METHODS).forEach(method -> config.addAllowedMethod(method)); - // 设置请求最大有效时长 - config.setMaxAge(CORS_MAX_AGE); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - // 配置跨域 - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - - @Primary - @Bean - public RestTemplate restTemplate() { - PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); - // 连接池最大连接数 - connManager.setMaxTotal(1000); - // 每个主机的并发 - connManager.setDefaultMaxPerRoute(500); - - CloseableHttpClient httpClient = HttpClients.custom()// - .setConnectionManager(connManager)// 设置HTTP连接管理器 - .build(); - return buildRestTemplate(httpClient); - } - - @Bean - public RestTemplate restTemplateIgnoreSSL() - throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { - SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, (chain, authType) -> true).build(); - SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, - NoopHostnameVerifier.INSTANCE); - - CloseableHttpClient httpClient = HttpClients.custom()// - .setSSLSocketFactory(sslSocketFactory)// - .build(); - return buildRestTemplate(httpClient); - } - - private RestTemplate buildRestTemplate(CloseableHttpClient httpClient) { - HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory( - httpClient); - // 获取链接超时时间 - httpRequestFactory.setConnectionRequestTimeout(3000); - // 指客户端和服务器建立连接的timeout - httpRequestFactory.setConnectTimeout(3000); - // 读取数据的超时时间 - httpRequestFactory.setReadTimeout(120000); - return new RestTemplate(httpRequestFactory); - } -} diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/MinIOConfig.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/MinIOConfig.java index 91340f0ef..8d853d74d 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/MinIOConfig.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/MinIOConfig.java @@ -1,6 +1,7 @@ package com.wzj.soopin.consumer.content.config; -import com.imooc.utils.MinIOUtils; + +import com.wzj.soopin.content.utils.MinIOUtils; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/SpringSecurityConfig.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/SpringSecurityConfig.java deleted file mode 100644 index 10273d059..000000000 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/config/SpringSecurityConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.wzj.soopin.consumer.content.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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; - -/** - * spring security配置类. - * - * @author lzc - * @version 1.0 - */ -@Configuration -public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.authorizeRequests().antMatchers("/**").permitAll() // 所有请求都可以访问 - .and().csrf().disable() // 跨域请求关闭 - .headers().frameOptions().disable(); // 资源下载权限关闭 - } - - @Bean - PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } -} diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/RabbitMQConsumer.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/RabbitMQConsumer.java index 52402edd1..566462fef 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/RabbitMQConsumer.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/RabbitMQConsumer.java @@ -4,6 +4,7 @@ package com.wzj.soopin.consumer.content.controller; import com.wzj.soopin.content.domain.base.RabbitMQConfig; import com.wzj.soopin.content.domain.exceptions.GraceException; import com.wzj.soopin.content.domain.mo.MessageMO; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; import com.wzj.soopin.content.enums.MessageEnum; import com.wzj.soopin.content.service.MsgService; import com.wzj.soopin.content.utils.JsonUtils; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/UserInfoController.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/UserInfoController.java index 00364ae24..317d9554f 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/UserInfoController.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/UserInfoController.java @@ -11,6 +11,7 @@ import com.wzj.soopin.content.enums.UserInfoModifyType; import com.wzj.soopin.content.result.GraceJSONResult; import com.wzj.soopin.content.result.ResponseStatusEnum; import com.wzj.soopin.content.service.UserService; +import com.wzj.soopin.content.utils.MinIOUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/VlogController.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/VlogController.java index b30f450aa..2f817ef6f 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/VlogController.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/controller/VlogController.java @@ -5,8 +5,11 @@ package com.wzj.soopin.consumer.content.controller; import com.wzj.soopin.consumer.content.config.MinIOConfig; import com.wzj.soopin.content.domain.base.BaseInfoProperties; import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.result.GraceJSONResult; import com.wzj.soopin.content.service.VlogService; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.QcCloud; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -22,7 +25,7 @@ import java.util.Map; @Api(tags = "VlogController 短视频相关业务功能的接口") @RequestMapping("vlog") @RestController -@RefreshScope + public class VlogController extends BaseInfoProperties { @Autowired private VlogService vlogService; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/PassportInterceptor.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/PassportInterceptor.java index a6446b1c4..e37c05df8 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/PassportInterceptor.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/PassportInterceptor.java @@ -2,6 +2,9 @@ package com.wzj.soopin.consumer.content.intercepter; import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.exceptions.GraceException; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; +import com.wzj.soopin.content.utils.IPUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; diff --git a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/UserTokenInterceptor.java b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/UserTokenInterceptor.java index c195b5b5b..34e29ad36 100644 --- a/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/UserTokenInterceptor.java +++ b/ruoyi-front/ruoyi-consumer/src/main/java/com/wzj/soopin/consumer/content/intercepter/UserTokenInterceptor.java @@ -2,6 +2,8 @@ package com.wzj.soopin.consumer.content.intercepter; import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.exceptions.GraceException; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; diff --git a/ruoyi-modules/ruoyi-content/pom.xml b/ruoyi-modules/ruoyi-content/pom.xml index e73cf50d0..01221f887 100644 --- a/ruoyi-modules/ruoyi-content/pom.xml +++ b/ruoyi-modules/ruoyi-content/pom.xml @@ -14,6 +14,21 @@ + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + io.minio + minio + 8.2.1 + org.springframework.boot spring-boot-starter-amqp diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java index d355e136f..77b7e6009 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java @@ -4,6 +4,7 @@ package com.wzj.soopin.content.domain.base; import com.github.pagehelper.PageInfo; + import com.wzj.soopin.content.utils.PagedGridResult; import com.wzj.soopin.content.utils.RedisOperator; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceException.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceException.java index 0d3e52bf2..a403cbadb 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceException.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceException.java @@ -1,6 +1,7 @@ package com.wzj.soopin.content.domain.exceptions; -import com.imooc.grace.result.ResponseStatusEnum; + +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; /** * 优雅的处理异常,统一封装 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceExceptionHandler.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceExceptionHandler.java index 735a04d93..2fdfaea3a 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceExceptionHandler.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/GraceExceptionHandler.java @@ -1,7 +1,8 @@ package com.wzj.soopin.content.domain.exceptions; -import com.imooc.grace.result.GraceJSONResult; -import com.imooc.grace.result.ResponseStatusEnum; + +import com.wzj.soopin.content.domain.result.GraceJSONResult; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/MyCustomException.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/MyCustomException.java index c8d9ac898..021980d9e 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/MyCustomException.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/exceptions/MyCustomException.java @@ -1,6 +1,7 @@ package com.wzj.soopin.content.domain.exceptions; -import com.imooc.grace.result.ResponseStatusEnum; + +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; /** * 自定义异常 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java index ae29d469a..454f105b0 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java @@ -1,7 +1,7 @@ package com.wzj.soopin.content.enums; -import com.imooc.exceptions.GraceException; -import com.imooc.grace.result.ResponseStatusEnum; +import com.wzj.soopin.content.domain.exceptions.GraceException; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; /** * @Desc: 修改用户信息类型 枚举 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Code.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Code.java deleted file mode 100644 index 13cc01c81..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Code.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.wzj.soopin.content.idworker; - -import org.n3r.idworker.strategy.DefaultRandomCodeStrategy; - -public class Code { - private static RandomCodeStrategy strategy; - - static { - RandomCodeStrategy strategy = new DefaultRandomCodeStrategy(); - strategy.init(); - configure(strategy); - } - - public static synchronized void configure(RandomCodeStrategy custom) { - if (strategy == custom) return; - if (strategy != null) strategy.release(); - - strategy = custom; - } - - /** - * Next Unique code. - * The max length will be 1024-Integer.MAX-Integer.MAX(2147483647) which has 4+10+10+2*1=26 characters. - * The min length will be 0-0. - * - * @return unique string code. - */ - public static synchronized String next() { - long workerId = Id.getWorkerId(); - int prefix = strategy.prefix(); - int next = strategy.next(); - - return String.format("%d-%03d-%06d", workerId, prefix, next); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/DayCode.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/DayCode.java deleted file mode 100644 index f9170b651..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/DayCode.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.wzj.soopin.content.idworker; - -import org.n3r.idworker.strategy.DayPrefixRandomCodeStrategy; - -public class DayCode { - static RandomCodeStrategy strategy; - - static { - DayPrefixRandomCodeStrategy dayPrefixCodeStrategy = new DayPrefixRandomCodeStrategy("yyMM"); - dayPrefixCodeStrategy.setMinRandomSize(7); - dayPrefixCodeStrategy.setMaxRandomSize(7); - strategy = dayPrefixCodeStrategy; - strategy.init(); - } - - public static synchronized String next() { - return String.format("%d-%04d-%07d", Id.getWorkerId(), strategy.prefix(), strategy.next()); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Id.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Id.java deleted file mode 100644 index 9368a15c0..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Id.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.wzj.soopin.content.idworker; - -import org.n3r.idworker.strategy.DefaultWorkerIdStrategy; - -public class Id { - private static WorkerIdStrategy workerIdStrategy; - private static IdWorker idWorker; - - static { - configure(DefaultWorkerIdStrategy.instance); - } - - public static synchronized void configure(WorkerIdStrategy custom) { - if (workerIdStrategy == custom) return; - - if (workerIdStrategy != null) workerIdStrategy.release(); - workerIdStrategy = custom; - workerIdStrategy.initialize(); - idWorker = new IdWorker(workerIdStrategy.availableWorkerId()); - } - - public static long next() { - return idWorker.nextId(); - } - - public static long getWorkerId() { - return idWorker.getWorkerId(); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/IdWorker.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/IdWorker.java deleted file mode 100644 index 235b1a314..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/IdWorker.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.wzj.soopin.content.idworker; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.security.SecureRandom; - -public class IdWorker { - protected long epoch = 1288834974657L; -// protected long epoch = 1387886498127L; // 2013-12-24 20:01:38.127 - - - protected long workerIdBits = 10L; - protected long maxWorkerId = -1L ^ (-1L << workerIdBits); - protected long sequenceBits = 11L; - - protected long workerIdShift = sequenceBits; - protected long timestampLeftShift = sequenceBits + workerIdBits; - protected long sequenceMask = -1L ^ (-1L << sequenceBits); - - protected long lastMillis = -1L; - - protected final long workerId; - protected long sequence = 0L; - protected Logger logger = LoggerFactory.getLogger(IdWorker.class); - - public IdWorker(long workerId) { - this.workerId = checkWorkerId(workerId); - - logger.debug("worker starting. timestamp left shift {}, worker id {}", timestampLeftShift, workerId); - } - - public long getEpoch() { - return epoch; - } - - private long checkWorkerId(long workerId) { - // sanity check for workerId - if (workerId > maxWorkerId || workerId < 0) { - int rand = new SecureRandom().nextInt((int) maxWorkerId + 1); - logger.warn("worker Id can't be greater than {} or less than 0, use a random {}", maxWorkerId, rand); - return rand; - } - - return workerId; - } - - public synchronized long nextId() { - long timestamp = millisGen(); - - if (timestamp < lastMillis) { - logger.error("clock is moving backwards. Rejecting requests until {}.", lastMillis); - throw new InvalidSystemClock(String.format( - "Clock moved backwards. Refusing to generate id for {} milliseconds", lastMillis - timestamp)); - } - - if (lastMillis == timestamp) { - sequence = (sequence + 1) & sequenceMask; - if (sequence == 0) - timestamp = tilNextMillis(lastMillis); - } else { - sequence = 0; - } - - lastMillis = timestamp; - long diff = timestamp - getEpoch(); - return (diff << timestampLeftShift) | - (workerId << workerIdShift) | - sequence; - } - - protected long tilNextMillis(long lastMillis) { - long millis = millisGen(); - while (millis <= lastMillis) - millis = millisGen(); - - return millis; - } - - protected long millisGen() { - return System.currentTimeMillis(); - } - - public long getLastMillis() { - return lastMillis; - } - - public long getWorkerId() { - return workerId; - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/InvalidSystemClock.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/InvalidSystemClock.java deleted file mode 100644 index f83465a20..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/InvalidSystemClock.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.wzj.soopin.content.idworker; - -public class InvalidSystemClock extends RuntimeException { - public InvalidSystemClock(String message) { - super(message); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/RandomCodeStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/RandomCodeStrategy.java deleted file mode 100644 index 6a25fbeb0..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/RandomCodeStrategy.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.wzj.soopin.content.idworker; - -public interface RandomCodeStrategy { - void init(); - - int prefix(); - - int next(); - - void release(); -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Sid.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Sid.java deleted file mode 100644 index de0a5329f..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Sid.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.wzj.soopin.content.idworker; - -import org.n3r.idworker.strategy.DefaultWorkerIdStrategy; -import org.n3r.idworker.utils.Utils; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Date; - -@Component -public class Sid { - private static WorkerIdStrategy workerIdStrategy; - private static IdWorker idWorker; - - static { - configure(DefaultWorkerIdStrategy.instance); - } - - - public static synchronized void configure(WorkerIdStrategy custom) { - if (workerIdStrategy != null) { - workerIdStrategy.release(); - } - workerIdStrategy = custom; - idWorker = new IdWorker(workerIdStrategy.availableWorkerId()) { - @Override - public long getEpoch() { - return Utils.midnightMillis(); - } - }; - } - - /** - * 一天最大毫秒86400000,最大占用27比特 - * 27+10+11=48位 最大值281474976710655(15字),YK0XXHZ827(10字) - * 6位(YYMMDD)+15位,共21位 - * - * @return 固定21位数字字符串 - */ - - public static String next() { - long id = idWorker.nextId(); - String yyMMdd = new SimpleDateFormat("yyMMdd").format(new Date()); - return yyMMdd + String.format("%014d", id); - } - - - /** - * 返回固定16位的字母数字混编的字符串。 - */ - public String nextShort() { - long id = idWorker.nextId(); - String yyMMdd = new SimpleDateFormat("yyMMdd").format(new Date()); - return yyMMdd + Utils.padLeft(Utils.encode(id), 10, '0'); - } - - public static void main(String[] args) { - String aa = new Sid().nextShort(); - String bb = new Sid().next(); - - System.out.println(aa); - System.out.println(bb); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Test.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Test.java deleted file mode 100644 index cd6f73523..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/Test.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.wzj.soopin.content.idworker; - -public class Test { - - public static void main(String[] args) { - - for (int i = 0 ; i < 1000 ; i ++) { -// System.out.println(Sid.nextShort()); - } - } - -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/WorkerIdStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/WorkerIdStrategy.java deleted file mode 100644 index 6bd66ff3b..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/WorkerIdStrategy.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.wzj.soopin.content.idworker; - -public interface WorkerIdStrategy { - void initialize(); - - long availableWorkerId(); - - void release(); -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DayPrefixRandomCodeStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DayPrefixRandomCodeStrategy.java deleted file mode 100644 index 7f1981afe..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DayPrefixRandomCodeStrategy.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.wzj.soopin.content.idworker.strategy; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class DayPrefixRandomCodeStrategy extends DefaultRandomCodeStrategy { - private final String dayFormat; - private String lastDay; - - public DayPrefixRandomCodeStrategy(String dayFormat) { - this.dayFormat = dayFormat; - } - - @Override - public void init() { - String day = createDate(); - if (day.equals(lastDay)) - throw new RuntimeException("init failed for day unrolled"); - - lastDay = day; - - availableCodes.clear(); - release(); - - prefixIndex = Integer.parseInt(lastDay); - if (tryUsePrefix()) return; - - throw new RuntimeException("prefix is not available " + prefixIndex); - } - - private String createDate() { - return new SimpleDateFormat(dayFormat).format(new Date()); - } - - @Override - public int next() { - if (!lastDay.equals(createDate())) init(); - - return super.next(); - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultRandomCodeStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultRandomCodeStrategy.java deleted file mode 100644 index f903942cb..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultRandomCodeStrategy.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.wzj.soopin.content.idworker.strategy; - -import org.n3r.idworker.Id; -import org.n3r.idworker.RandomCodeStrategy; -import org.n3r.idworker.utils.Utils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.security.SecureRandom; -import java.util.ArrayDeque; -import java.util.BitSet; -import java.util.Queue; - -public class DefaultRandomCodeStrategy implements RandomCodeStrategy { - public static final int MAX_BITS = 1000000; - - Logger log = LoggerFactory.getLogger(DefaultRandomCodeStrategy.class); - - File idWorkerHome = Utils.createIdWorkerHome(); - volatile FileLock fileLock; - BitSet codesFilter; - - int prefixIndex = -1; - File codePrefixIndex; - - int minRandomSize = 6; - int maxRandomSize = 6; - - public DefaultRandomCodeStrategy() { - destroyFileLockWhenShutdown(); - } - - @Override - public void init() { - release(); - - while (++prefixIndex < 1000) { - if (tryUsePrefix()) return; - } - - throw new RuntimeException("all prefixes are used up, the world maybe ends!"); - } - - public DefaultRandomCodeStrategy setMinRandomSize(int minRandomSize) { - this.minRandomSize = minRandomSize; - return this; - } - - public DefaultRandomCodeStrategy setMaxRandomSize(int maxRandomSize) { - this.maxRandomSize = maxRandomSize; - return this; - } - - protected boolean tryUsePrefix() { - codePrefixIndex = new File(idWorkerHome, Id.getWorkerId() + ".code.prefix." + prefixIndex); - - if (!createPrefixIndexFile()) return false; - if (!createFileLock()) return false; - if (!createBloomFilter()) return false; - - log.info("get available prefix index file {}", codePrefixIndex); - - return true; - } - - private boolean createFileLock() { - if (fileLock != null) fileLock.destroy(); - fileLock = new FileLock(codePrefixIndex); - return fileLock.tryLock(); - } - - private boolean createBloomFilter() { - codesFilter = fileLock.readObject(); - if (codesFilter == null) { - log.info("create new bloom filter"); - codesFilter = new BitSet(MAX_BITS); // 2^24 - } else { - int size = codesFilter.cardinality(); - if (size >= MAX_BITS) { - log.warn("bloom filter with prefix file {} is already full", codePrefixIndex); - return false; - } - log.info("recreate bloom filter with cardinality {}", size); - } - - return true; - } - - private void destroyFileLockWhenShutdown() { - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - release(); - } - }); - } - - private boolean createPrefixIndexFile() { - try { - codePrefixIndex.createNewFile(); - return codePrefixIndex.exists(); - } catch (IOException e) { - e.printStackTrace(); - log.warn("create file {} error {}", codePrefixIndex, e.getMessage()); - } - return false; - } - - @Override - public int prefix() { - return prefixIndex; - } - - static final int CACHE_CODES_NUM = 1000; - - SecureRandom secureRandom = new SecureRandom(); - Queue availableCodes = new ArrayDeque(CACHE_CODES_NUM); - - @Override - public int next() { - if (availableCodes.isEmpty()) generate(); - - return availableCodes.poll(); - } - - @Override - public synchronized void release() { - if (fileLock != null) { - fileLock.writeObject(codesFilter); - fileLock.destroy(); - fileLock = null; - } - } - - private void generate() { - for (int i = 0; i < CACHE_CODES_NUM; ++i) - availableCodes.add(generateOne()); - - fileLock.writeObject(codesFilter); - } - - private int generateOne() { - while (true) { - int code = secureRandom.nextInt(max(maxRandomSize)); - boolean existed = contains(code); - - code = !existed ? add(code) : tryFindAvailableCode(code); - if (code >= 0) return code; - - init(); - } - } - - private int tryFindAvailableCode(int code) { - int next = codesFilter.nextClearBit(code); - if (next != -1 && next < max(maxRandomSize)) return add(next); - - next = codesFilter.previousClearBit(code); - if (next != -1) return add(next); - - return -1; - } - - private int add(int code) { - codesFilter.set(code); - return code; - } - - private boolean contains(int code) { - return codesFilter.get(code); - } - - - private int max(int size) { - switch (size) { - case 1: // fall through - case 2: // fall through - case 3: // fall through - case 4: - return 10000; - case 5: - return 100000; - case 6: - return 1000000; - case 7: - return 10000000; - case 8: - return 100000000; - case 9: - return 1000000000; - default: - return Integer.MAX_VALUE; - } - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultWorkerIdStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultWorkerIdStrategy.java deleted file mode 100644 index b0372941c..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/DefaultWorkerIdStrategy.java +++ /dev/null @@ -1,205 +0,0 @@ -package com.wzj.soopin.content.idworker.strategy; - -import org.n3r.idworker.WorkerIdStrategy; -import org.n3r.idworker.utils.HttpReq; -import org.n3r.idworker.utils.Ip; -import org.n3r.idworker.utils.Props; -import org.n3r.idworker.utils.Utils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.security.SecureRandom; -import java.util.Properties; -import java.util.Random; - -public class DefaultWorkerIdStrategy implements WorkerIdStrategy { - static long workerIdBits = 10L; - static long maxWorkerId = -1L ^ (-1L << workerIdBits); - static Random random = new SecureRandom(); - - public static final WorkerIdStrategy instance = new DefaultWorkerIdStrategy(); - - private final Properties props = - Props.tryProperties("idworker-client.properties", Utils.DOT_IDWORKERS); - private final String idWorkerServerUrl = - props.getProperty("server.address", "http://id.worker.server:18001"); - - String userName = System.getProperty("user.name"); - - String ipDotUsername = Ip.ip + "." + userName; - String ipudotlock = ipDotUsername + ".lock."; - int workerIdIndex = ipudotlock.length(); - long workerId; - FileLock fileLock; - - Logger logger = LoggerFactory.getLogger(DefaultWorkerIdStrategy.class); - private boolean inited; - - - private void init() { - workerId = findAvailWorkerId(); - if (workerId >= 0) { - destroyFileLockWhenShutdown(); - startSyncThread(); - } else { - syncWithWorkerIdServer(); - workerId = findAvailWorkerId(); - if (workerId < 0) workerId = increaseWithWorkerIdServer(); - } - - if (workerId < 0) workerId = tryToCreateOnIp(); - if (workerId < 0) { - logger.warn("DANGEROUS!!! Try to use random worker id."); - workerId = tryToRandomOnIp(); // Try avoiding! it could cause duplicated - } - - if (workerId < 0) { - logger.warn("the world may be ended!"); - throw new RuntimeException("the world may be ended"); - } - } - - private void destroyFileLockWhenShutdown() { - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - fileLock.destroy(); - } - }); - } - - private void startSyncThread() { - new Thread() { - @Override - public void run() { - syncWithWorkerIdServer(); - } - }.start(); - } - - private long increaseWithWorkerIdServer() { - String incId = HttpReq.get(idWorkerServerUrl) - .req("/inc") - .param("ipu", ipDotUsername) - .exec(); - if (incId == null || incId.trim().isEmpty()) return -1L; - - long lid = Long.parseLong(incId); - - return checkAvail(lid); - } - - private long tryToCreateOnIp() { - long wid = Ip.lip & maxWorkerId; - - return checkAvail(wid); - } - - private long tryToRandomOnIp() { - long avaiWorkerId = -1L; - long tryTimes = -1; - - while (avaiWorkerId < 0 && ++tryTimes < maxWorkerId) { - long wid = Ip.lip & random.nextInt((int) maxWorkerId); - - avaiWorkerId = checkAvail(wid); - } - return avaiWorkerId; - } - - private long checkAvail(long wid) { - long availWorkerId = -1L; - try { - File idWorkerHome = Utils.createIdWorkerHome(); - new File(idWorkerHome, ipudotlock + String.format("%04d", wid)).createNewFile(); - availWorkerId = findAvailWorkerId(); - } catch (IOException e) { - logger.warn("checkAvail error", e); - } - - return availWorkerId; - } - - private void syncWithWorkerIdServer() { - String syncIds = HttpReq.get(idWorkerServerUrl).req("/sync") - .param("ipu", ipDotUsername).param("ids", buildWorkerIdsOfCurrentIp()) - .exec(); - if (syncIds == null || syncIds.trim().isEmpty()) return; - - String[] syncIdsArr = syncIds.split(","); - File idWorkerHome = Utils.createIdWorkerHome(); - for (String syncId : syncIdsArr) { - try { - new File(idWorkerHome, ipudotlock + syncId).createNewFile(); - } catch (IOException e) { - logger.warn("create workerid lock file error", e); - } - } - } - - private String buildWorkerIdsOfCurrentIp() { - StringBuilder sb = new StringBuilder(); - File idWorkerHome = Utils.createIdWorkerHome(); - for (File lockFile : idWorkerHome.listFiles()) { - // check the format like 10.142.1.151.lock.0001 - if (!lockFile.getName().startsWith(ipudotlock)) continue; - - String workerId = lockFile.getName().substring(workerIdIndex); - if (!workerId.matches("\\d\\d\\d\\d")) continue; - - if (sb.length() > 0) sb.append(','); - sb.append(workerId); - } - - return sb.toString(); - } - - - /** - * Find the local available worker id. - * - * @return -1 when N/A - */ - private long findAvailWorkerId() { - File idWorkerHome = Utils.createIdWorkerHome(); - - for (File lockFile : idWorkerHome.listFiles()) { - // check the format like 10.142.1.151.lock.0001 - if (!lockFile.getName().startsWith(ipudotlock)) continue; - - String workerId = lockFile.getName().substring(workerIdIndex); - if (!workerId.matches("\\d\\d\\d\\d")) continue; - - FileLock fileLock = new FileLock(lockFile); - if (!fileLock.tryLock()) { - fileLock.destroy(); - continue; - } - - this.fileLock = fileLock; - return Long.parseLong(workerId); - } - - return -1; - } - - @Override - public void initialize() { - if (inited) return; - init(); - this.inited = true; - } - - @Override - public long availableWorkerId() { - return workerId; - } - - @Override - public void release() { - if (fileLock != null) fileLock.destroy(); - inited = false; - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/FileLock.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/FileLock.java deleted file mode 100644 index 04017ab84..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/strategy/FileLock.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.wzj.soopin.content.idworker.strategy; - - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.nio.channels.Channels; -import java.nio.channels.ClosedChannelException; -import java.nio.channels.FileChannel; -import java.nio.channels.OverlappingFileLockException; - -/** - * A file lock a la flock/funlock - *

- * The given path will be created and opened if it doesn't exist. - */ -public class FileLock { - private final File file; - private FileChannel channel; - private java.nio.channels.FileLock flock = null; - Logger logger = LoggerFactory.getLogger(FileLock.class); - - public FileLock(File file) { - this.file = file; - - try { - file.createNewFile(); // create the file if it doesn't exist - channel = new RandomAccessFile(file, "rw").getChannel(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - - /** - * Lock the file or throw an exception if the lock is already held - */ - public void lock() { - try { - synchronized (this) { - logger.trace("Acquiring lock on {}", file.getAbsolutePath()); - flock = channel.lock(); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - /** - * Try to lock the file and return true if the locking succeeds - */ - public boolean tryLock() { - synchronized (this) { - logger.trace("Acquiring lock on {}", file.getAbsolutePath()); - try { - // weirdly this method will return null if the lock is held by another - // process, but will throw an exception if the lock is held by this process - // so we have to handle both cases - flock = channel.tryLock(); - return flock != null; - } catch (OverlappingFileLockException e) { - return false; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - /** - * Unlock the lock if it is held - */ - public void unlock() { - synchronized (this) { - logger.trace("Releasing lock on {}", file.getAbsolutePath()); - if (flock == null) return; - try { - flock.release(); - } catch (ClosedChannelException e) { - // Ignore - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - /** - * Destroy this lock, closing the associated FileChannel - */ - public void destroy() { - synchronized (this) { - unlock(); - if (!channel.isOpen()) return; - - try { - channel.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - - @SuppressWarnings("unchecked") - public T readObject() { - try { - InputStream is = Channels.newInputStream(channel); - ObjectInputStream objectReader = new ObjectInputStream(is); - return (T) objectReader.readObject(); - } catch (EOFException e) { - } catch (Exception e) { - throw new RuntimeException(e); - } - - return null; - } - - - public synchronized boolean writeObject(Object object) { - if (!channel.isOpen()) return false; - - try { - channel.position(0); - OutputStream out = Channels.newOutputStream(channel); - ObjectOutputStream objectOutput = new ObjectOutputStream(out); - objectOutput.writeObject(object); - return true; - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/IPv4Utils.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/IPv4Utils.java deleted file mode 100644 index 32f57f5ae..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/IPv4Utils.java +++ /dev/null @@ -1 +0,0 @@ -package com.wzj.soopin.content.idworker.utils; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Serializes.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Serializes.java deleted file mode 100644 index 3b78ee548..000000000 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Serializes.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.wzj.soopin.content.idworker.utils; - -import java.io.*; -import java.nio.channels.FileChannel; -import java.util.ArrayList; -import java.util.List; - -public class Serializes { - - @SuppressWarnings("unchecked") - public static List readObjects(File file) { - ArrayList objects = new ArrayList(); - ObjectInputStream objectReader = null; - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - objectReader = new ObjectInputStream(fis); - while (true) - objects.add((T) objectReader.readObject()); - - } catch (EOFException e) { - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - closeQuietly(objectReader); - closeQuietly(fis); - } - - return objects; - } - - - @SuppressWarnings("unchecked") - public static T readObject(File file) { - ObjectInputStream objectReader = null; - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - objectReader = new ObjectInputStream(fis); - return (T) objectReader.readObject(); - - } catch (EOFException e) { - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - closeQuietly(objectReader); - closeQuietly(fis); - } - - return null; - } - - public static void writeObject(File file, Object object) { - ObjectOutputStream objectOutput = null; - FileOutputStream fos = null; - try { - fos = new FileOutputStream(file); - objectOutput = new ObjectOutputStream(fos); - objectOutput.writeObject(object); - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - closeQuietly(objectOutput); - closeQuietly(fos); - } - } - - public static void writeObject(FileOutputStream fos, Object object) { - FileChannel channel = fos.getChannel(); - if (!channel.isOpen()) throw new RuntimeException("channel is closed"); - - try { - channel.position(0); - ObjectOutputStream objectOutput = new ObjectOutputStream(fos); - objectOutput.writeObject(object); - fos.flush(); - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - } - } - - public static void writeObjects(File file, Object... objects) { - ObjectOutputStream objectOutput = null; - FileOutputStream fos = null; - try { - fos = new FileOutputStream(file); - objectOutput = new ObjectOutputStream(fos); - - for (Object object : objects) - objectOutput.writeObject(object); - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - closeQuietly(objectOutput); - closeQuietly(fos); - } - - } - - public static void closeQuietly(OutputStream os) { - if (os != null) try { - os.close(); - } catch (IOException e) { - // ignore - } - } - - - public static void closeQuietly(InputStream is) { - if (is != null) try { - is.close(); - } catch (IOException e) { - // ignore - } - - } -} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/CommentMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/CommentMapper.java index 8c8b41f89..035cf85d8 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/CommentMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/CommentMapper.java @@ -7,4 +7,7 @@ import org.springframework.stereotype.Repository; @Repository public interface CommentMapper extends BaseMapperPlus { + Comment selectByPrimaryKey(String id); + + void delete(Comment pendingDelete); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/FansMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/FansMapper.java index 5b434fd24..77307afe1 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/FansMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/FansMapper.java @@ -13,6 +13,12 @@ import java.util.Map; public interface FansMapper extends BaseMapperPlus { + int updateByPrimaryKeySelective(Fans record); public List> getFollowedVlogerIds(@Param("currentUserId")String currentUserId,@Param("vlogerIds")List vlogerIds); + int insert(@Param("fansData") Map vlogData); + + public List selectByExample(@Param("paramMap") Map map); + + int delete(@Param("id") String id); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java index 5c49f2488..830fa0ca0 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java @@ -1,18 +1,20 @@ package com.wzj.soopin.content.mapper.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.wzj.soopin.content.domain.bo.UpdatedUserBO; import com.wzj.soopin.content.domain.po.Users; import com.wzj.soopin.content.domain.vo.UsersVO; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.util.List; @Mapper -public interface UsersMapper extends BaseMapperPlus { +public interface UsersMapper extends BaseMapper { @Select("SELECT * FROM t_users WHERE nickname LIKE CONCAT('%', #{nickname}, '%')") List searchByNickname(String nickname); @@ -30,4 +32,8 @@ public interface UsersMapper extends BaseMapperPlus { int updateVnum(UpdatedUserBO user); @Select("SELECT * FROM t_users WHERE imooc_num = #{imoocNum}") List selectByImoocNum(@Param("imoocNum") String imoocNum); + + Users selectByPrimaryKey(String userId); + + void updateByPrimaryKeySelective(Users users); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java index b5bfc8f38..7998d65e9 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java @@ -1,20 +1,56 @@ package com.wzj.soopin.content.mapper.mapper; -import com.wzj.soopin.content.domain.po.Vlog; -import com.wzj.soopin.content.domain.vo.IndexVlogVO; -import com.wzj.soopin.content.domain.vo.VlogerVO; -import org.apache.ibatis.annotations.Param; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.springframework.stereotype.Repository; +import com.wzj.soopin.content.domain.vo.IndexVlogVO; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; +//@Repository +//public interface VlogMapper extends MyMapper { +//} @Repository -public interface VlogMapper extends BaseMapperPlus { +public interface VlogMapper { +// public List updateVlogStatus(@Param("paramMap") Map map); + /** + * 通用动态更新方法 + * @param primaryKey 主键字段名 + * @param idValue 主键值 + * @param updateFields 待更新的字段Map(key=字段名, value=字段值) + * @return 影响的行数 + */ + int dynamicUpdate( + @Param("primaryKey") String primaryKey, + @Param("idValue") Object idValue, + @Param("updateFields") Map updateFields + ); + /** + * Vlog表多条件动态更新 + * @param updateFields 需要更新的字段及值(Map结构) + * @param conditions 更新条件(Map结构) + * @return 受影响的行数 + */ + int updateVlogByConditions( + @Param("updates") Map updateFields, + @Param("conditions") Map conditions + ); + /** + * 单条插入vlog记录 + * @param vlogData 插入数据的键值对(key=列名, value=列值) + * @return 影响的行数 + */ + int dynamicInsert(@Param("vlogData") Map vlogData); + + /** + * 批量插入vlog记录 + * @param vlogList 插入数据列表(每个Map代表一行数据) + * @return 影响的行数 + */ + int dynamicBatchInsert(@Param("vlogList") List> vlogList); public List selectMyPublic(@Param("paramMap")Map map); public List getVlogDetailFromId(@Param("paramMap")Map map); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java index fb2662465..62bfe7239 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java @@ -1,6 +1,7 @@ package com.wzj.soopin.content.mapper.repository; import com.wzj.soopin.content.domain.mo.MessageMO; +import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/CommentService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/CommentService.java index c17b4d949..9f83a81b7 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/CommentService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/CommentService.java @@ -4,7 +4,7 @@ package com.wzj.soopin.content.service; import com.wzj.soopin.content.domain.bo.CommentBO; import com.wzj.soopin.content.domain.po.Comment; import com.wzj.soopin.content.domain.vo.CommentVO; -import org.dromara.common.mybatis.core.page.TableDataInfo; +import com.wzj.soopin.content.utils.PagedGridResult; public interface CommentService { @@ -16,10 +16,10 @@ public interface CommentService { /** * 查询评论的列表 */ - public TableDataInfo queryVlogComments(String vlogId, - String userId, - Integer page, - Integer pageSize); + public PagedGridResult queryVlogComments(String vlogId, + String userId, + Integer page, + Integer pageSize); /** * 删除评论 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java index 9387c0fff..6ad69b699 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java @@ -1,8 +1,7 @@ package com.wzj.soopin.content.service; -import com.wzj.soopin.content.domain.vo.FansVO; -import org.dromara.common.mybatis.core.page.TableDataInfo; +import com.wzj.soopin.content.utils.PagedGridResult; public interface FansService { @@ -24,14 +23,14 @@ public interface FansService { /** * 查询我关注的博主列表 */ - public TableDataInfo queryMyFollows(String myId, - Integer page, - Integer pageSize); + public PagedGridResult queryMyFollows(String myId, + Integer page, + Integer pageSize); /** * 查询我的粉丝列表 */ - public TableDataInfo queryMyFans(String myId, - Integer page, - Integer pageSize); + public PagedGridResult queryMyFans(String myId, + Integer page, + Integer pageSize); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/MsgService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/MsgService.java index 61553e207..b44f8c5bb 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/MsgService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/MsgService.java @@ -1,6 +1,6 @@ package com.wzj.soopin.content.service; -import com.imooc.mo.MessageMO; + import com.wzj.soopin.content.domain.mo.MessageMO; import java.util.List; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java index 473d5fd9c..0cf026450 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java @@ -1,10 +1,9 @@ package com.wzj.soopin.content.service; -import com.imooc.bo.VlogBO; -import com.imooc.pojo.Vlog; -import com.imooc.utils.PagedGridResult; -import com.imooc.vo.IndexVlogVO; +import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.domain.po.Vlog; +import com.wzj.soopin.content.domain.vo.IndexVlogVO; +import com.wzj.soopin.content.utils.PagedGridResult; public interface VlogService { /** diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java index 0899f0fd8..b84999163 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java @@ -2,16 +2,21 @@ package com.wzj.soopin.content.service.impl; +import com.github.pagehelper.PageHelper; import com.wzj.soopin.content.domain.base.BaseInfoProperties; import com.wzj.soopin.content.domain.bo.CommentBO; import com.wzj.soopin.content.domain.po.Comment; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.CommentVO; +import com.wzj.soopin.content.enums.MessageEnum; +import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.mapper.CommentMapper; import com.wzj.soopin.content.mapper.mapper.CommentMapperCustom; import com.wzj.soopin.content.service.CommentService; import com.wzj.soopin.content.service.MsgService; import com.wzj.soopin.content.service.VlogService; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.Sid; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java index 4456b6a94..1eddad537 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java @@ -1,34 +1,39 @@ package com.wzj.soopin.content.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageHelper; +import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.base.RabbitMQConfig; import com.wzj.soopin.content.domain.mo.MessageMO; import com.wzj.soopin.content.domain.po.Fans; import com.wzj.soopin.content.domain.vo.FansVO; import com.wzj.soopin.content.domain.vo.VlogerVO; +import com.wzj.soopin.content.enums.MessageEnum; import com.wzj.soopin.content.mapper.mapper.FansMapper; import com.wzj.soopin.content.mapper.mapper.FansMapperCustom; import com.wzj.soopin.content.service.FansService; import com.wzj.soopin.content.service.MsgService; +import com.wzj.soopin.content.utils.JsonUtils; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.Sid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.enums.YesOrNo; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP; + @Service @Slf4j @RequiredArgsConstructor -public class FansServiceImpl implements FansService { +public class FansServiceImpl extends BaseInfoProperties implements FansService { private final FansMapper fansMapper; @@ -133,18 +138,20 @@ public class FansServiceImpl implements FansService { } @Override - public TableDataInfo queryMyFollows(String myId, - Integer page, - Integer pageSize) { + public PagedGridResult queryMyFollows(String myId, + Integer page, + Integer pageSize) { Map map = new HashMap<>(); map.put("myId", myId); - Page pageData = fansMapperCustom.selectVoPage(new PageQuery(pageSize,page).build(), - new QueryWrapper().eq("myId",myId)); - return TableDataInfo.build(pageData); + PageHelper.startPage(page, pageSize); + List list = fansMapperCustom.queryMyFollows(map); + + return setterPagedGrid(list, page); } + @Override public PagedGridResult queryMyFans(String myId, Integer page, diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java index eba7629be..641608c48 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java @@ -1,13 +1,13 @@ package com.wzj.soopin.content.service.impl; -import com.imooc.base.BaseInfoProperties; -import com.imooc.enums.MessageEnum; -import com.imooc.mo.MessageMO; -import com.imooc.pojo.Users; -import com.imooc.repository.MessageRepository; -import com.imooc.service.MsgService; -import com.imooc.service.UserService; + +import com.wzj.soopin.content.domain.base.BaseInfoProperties; import com.wzj.soopin.content.domain.mo.MessageMO; +import com.wzj.soopin.content.domain.po.Users; +import com.wzj.soopin.content.enums.MessageEnum; +import com.wzj.soopin.content.mapper.repository.MessageRepository; +import com.wzj.soopin.content.service.MsgService; +import com.wzj.soopin.content.service.UserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserMemberServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserMemberServiceImpl.java index 6fff04bee..e57568682 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserMemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserMemberServiceImpl.java @@ -1,7 +1,8 @@ package com.wzj.soopin.content.service.impl; -import com.imooc.mapper.UserMemberMapper; -import com.imooc.service.UserMemberService; + +import com.wzj.soopin.content.mapper.mapper.UserMemberMapper; +import com.wzj.soopin.content.service.UserMemberService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java index c3be780a6..a89f96eda 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java @@ -2,27 +2,32 @@ package com.wzj.soopin.content.service.impl; import com.github.pagehelper.PageHelper; import com.google.common.collect.Maps; -import com.imooc.base.BaseInfoProperties; -import com.imooc.bo.UpdatedUserBO; -import com.imooc.enums.Sex; -import com.imooc.enums.UserInfoModifyType; -import com.imooc.enums.YesOrNo; -import com.imooc.exceptions.GraceException; -import com.imooc.grace.result.ResponseStatusEnum; -import com.imooc.mapper.FansMapper; -import com.imooc.mapper.FansMapperCustom; -import com.imooc.mapper.UserMemberMapper; -import com.imooc.mapper.UsersMapper; -import com.imooc.mo.Token; -import com.imooc.pojo.UserMember; -import com.imooc.pojo.Users; -import com.imooc.service.FansService; -import com.imooc.service.UserService; -import com.imooc.utils.*; -import com.imooc.vo.UsersVO; + +import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.bo.UpdatedUserBO; +import com.wzj.soopin.content.domain.exceptions.GraceException; +import com.wzj.soopin.content.domain.mo.Token; +import com.wzj.soopin.content.domain.po.UserMember; +import com.wzj.soopin.content.domain.po.Users; +import com.wzj.soopin.content.domain.result.ResponseStatusEnum; +import com.wzj.soopin.content.domain.vo.UsersVO; +import com.wzj.soopin.content.enums.Sex; +import com.wzj.soopin.content.enums.UserInfoModifyType; +import com.wzj.soopin.content.enums.YesOrNo; +import com.wzj.soopin.content.mapper.mapper.FansMapper; +import com.wzj.soopin.content.mapper.mapper.FansMapperCustom; +import com.wzj.soopin.content.mapper.mapper.UserMemberMapper; +import com.wzj.soopin.content.mapper.mapper.UsersMapper; +import com.wzj.soopin.content.service.FansService; +import com.wzj.soopin.content.service.UserService; +import com.wzj.soopin.content.utils.DateUtil; +import com.wzj.soopin.content.utils.DesensitizationUtil; +import com.wzj.soopin.content.utils.GsonUtil; +import com.wzj.soopin.content.utils.Sid; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.n3r.idworker.Sid; + import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -32,13 +37,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import tk.mybatis.mapper.entity.Example; -import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static com.imooc.base.BaseInfoProperties.REDIS_USER_TOKEN; + /** * @author vercen @@ -105,8 +108,8 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService { user.setDistrict(""); user.setDescription("这家伙很懒,什么都没留下~"); user.setCanImoocNumBeUpdated(YesOrNo.YES.type); - user.setCreatedTime(new Date()); - user.setUpdatedTime(new Date()); +// user.setCreatedTime(new Date()); +// user.setUpdatedTime(new Date()); usersMapper.insert(user); @@ -215,10 +218,10 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService { user.setDescription("这家伙很懒,什么都没留下~"); user.setBgImg(""); user.setCanImoocNumBeUpdated(YesOrNo.YES.type); - user.setCreatedTime(new Date()); - user.setUpdatedTime(new Date()); +// user.setCreatedTime(new Date()); +// user.setUpdatedTime(new Date()); - int row = usersMapper.insert(user); + int row = usersMapper.inset(user); if (row > 0) { Map result = Maps.newHashMap(); @@ -292,8 +295,8 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService { user.setDistrict(""); user.setDescription("这家伙很懒,什么都没留下~"); user.setCanImoocNumBeUpdated(YesOrNo.YES.type); - user.setCreatedTime(new Date()); - user.setUpdatedTime(new Date()); +// user.setCreatedTime(new Date()); +// user.setUpdatedTime(new Date()); // 短视频用户与商城账号关系 UserMember userMember = new UserMember(); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index dce694650..71597778d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -4,23 +4,24 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; -import com.imooc.base.BaseInfoProperties; -import com.imooc.bo.VlogBO; -import com.imooc.enums.MessageEnum; -import com.imooc.enums.YesOrNo; -import com.imooc.mapper.MyLikedVlogMapper; -import com.imooc.mapper.VlogMapper; -import com.imooc.mapper.VlogMapperCustom; -import com.imooc.pojo.MyLikedVlog; -import com.imooc.pojo.Vlog; -import com.imooc.service.FansService; -import com.imooc.service.MsgService; -import com.imooc.service.VlogService; -import com.imooc.utils.PagedGridResult; -import com.imooc.vo.IndexVlogVO; + +import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; +import com.wzj.soopin.content.domain.vo.IndexVlogVO; +import com.wzj.soopin.content.enums.MessageEnum; +import com.wzj.soopin.content.enums.YesOrNo; +import com.wzj.soopin.content.mapper.mapper.MyLikedVlogMapper; +import com.wzj.soopin.content.mapper.mapper.VlogMapper; +import com.wzj.soopin.content.mapper.mapper.VlogMapperCustom; +import com.wzj.soopin.content.service.FansService; +import com.wzj.soopin.content.service.MsgService; +import com.wzj.soopin.content.service.VlogService; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.Sid; import org.apache.commons.lang3.StringUtils; -import org.n3r.idworker.Sid; + import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -493,7 +494,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { likedVlog.setVlogId(vlogId); likedVlog.setUserId(userId); - myLikedVlogMapper.delete(likedVlog); + myLikedVlogMapper.deleteById(likedVlog); } @Override diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/CommonUtil.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/CommonUtil.java new file mode 100644 index 000000000..87367f5c0 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/CommonUtil.java @@ -0,0 +1,436 @@ +package com.wzj.soopin.content.utils; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.nio.charset.Charset; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 通用工具类 + * + * @version 1.0.0 + * @author Leon + * + */ +public final class CommonUtil { + + private CommonUtil() { + } + + /** + * 判断数组是否为空 + * + * @param array + * @return + */ + public static boolean isEmpty(T[] array) { + return array == null || (array != null && array.length == 0); + } + + /** + * 判断集合是否为空 + * + * @param collection + * @return + */ + public static boolean isEmpty(Collection collection) { + return collection == null || collection.isEmpty(); + } + + /** + * 判断映射是否为空 + * + * @param map + * @return + */ + public static boolean isEmpty(Map map) { + return map == null || map.isEmpty(); + } + + /** + * 判断文件是否为空 + * + * @param file + * @return + */ + public static boolean isEmpty(MultipartFile file) { + return file == null || file.isEmpty(); + } + + /** + * 判断引用类型是否为空 + * + * @param + * @param value + * @return + */ + public static boolean isEmpty(T val) { + return Optional.ofNullable(val).map(t -> false).orElseGet(() -> true); + } + + /** + * 获得线程安全的List + * + * @return + */ + public static List syncList(List list) { + if (isEmpty(list)) { + return Collections.synchronizedList(Lists.newArrayList()); + } + return Collections.synchronizedList(list); + } + + /** + * 获得线程安全的Set + * + * @return + */ + public static Set syncSet(Set set) { + if (isEmpty(set)) { + return Collections.synchronizedSet(Sets.newHashSet()); + } + return Collections.synchronizedSet(set); + } + + /** + * 获得线程安全的Map + * + * @return + */ + public static Map syncMap(Map map) { + if (isEmpty(map)) { + return new ConcurrentHashMap<>(); + } + return Collections.synchronizedMap(map); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Short val, short target) { + return Optional.ofNullable(val).map(t -> t.shortValue() == target).orElseGet(() -> false); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Integer val, int target) { + return Optional.ofNullable(val).map(t -> t.intValue() == target).orElseGet(() -> false); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Long val, long target) { + return Optional.ofNullable(val).map(t -> t.longValue() == target).orElseGet(() -> false); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Float val, float target) { + return Optional.ofNullable(val).map(t -> t.floatValue() == target).orElseGet(() -> false); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Double val, double target) { + return Optional.ofNullable(val).map(t -> t.doubleValue() == target).orElseGet(() -> false); + } + + /** + * 判断与目标值是否相等 + * + * @param value + * @param target + * @return + */ + public static boolean isEquals(Boolean val, boolean target) { + return Optional.ofNullable(val).map(t -> t.booleanValue() == target).orElseGet(() -> false); + } + + /** + * 获取map中的值,null值转换为空字符串 + * + * @param map + * @param key + * @return + */ + public static String getValue(Map map, String key) { + if (isEmpty(map)) { + return StringUtils.EMPTY; + } + return Optional.ofNullable(map.get(key)).map(t -> StringUtils.trim(t.toString())) + .orElseGet(() -> StringUtils.EMPTY); + } + + /** + * String转int类型 + * + * @param val + * @return + */ + public static int getIntValue(String val) { + if (StringUtils.isNotBlank(val)) { + return Integer.parseInt(StringUtils.trim(val)); + } + throw new NumberFormatException("String转int异常"); + } + + /** + * Integer类型转int类型 + * + * @param val + * @return + */ + public static int getIntValue(Integer val) { + return Optional.ofNullable(val).map(t -> t.intValue()) + .orElseThrow(() -> new NumberFormatException("Integer类型转int异常")); + } + + /** + * String转double类型 + * + * @param val + * @return + */ + public static double getDoubleValue(String val) { + if (StringUtils.isNotBlank(val)) { + return Double.parseDouble(StringUtils.trim(val)); + } + throw new NumberFormatException("String转double异常"); + } + + /** + * Double类型转double类型 + * + * @param val + * @return + */ + public static double getDoubleValue(Double val) { + return Optional.ofNullable(val).map(t -> t.doubleValue()) + .orElseThrow(() -> new NumberFormatException("Double类型转double异常")); + } + + /** + * String转float类型 + * + * @param val + * @return + */ + public static float getFloatValue(String val) { + if (StringUtils.isNotBlank(val)) { + return Float.parseFloat(StringUtils.trim(val)); + } + throw new NumberFormatException("String转float异常"); + } + + /** + * Float类型转float类型 + * + * @param val + * @return + */ + public static float getFloatValue(Float val) { + return Optional.ofNullable(val).map(t -> t.floatValue()) + .orElseThrow(() -> new NumberFormatException("Float类型转float异常")); + } + + /** + * String转long类型 + * + * @param val + * @return + */ + public static long getLongValue(String val) { + if (StringUtils.isNotBlank(val)) { + return Long.parseLong(StringUtils.trim(val)); + } + throw new NumberFormatException("String转long异常"); + } + + /** + * Long类型转long类型 + * + * @param val + * @return + */ + public static long getLongValue(Long val) { + return Optional.ofNullable(val).map(t -> t.longValue()) + .orElseThrow(() -> new NumberFormatException("Long类型转long异常")); + } + + /** + * String转byte数组 + * + * @param val 字符串 + * @param cs + * @return + */ + public static byte[] stringToBytes(String val, Charset charset) { + if (StringUtils.isBlank(val)) { + return new byte[0]; + } + return Optional.ofNullable(charset).map(t -> val.getBytes(t)).orElseGet(() -> val.getBytes()); + } + + /** + * byte数组转String + * + * @param bytes + * @param cs + * @return + */ + public static String bytesToString(byte[] bytes, Charset charset) { + if (bytes == null) { + return null; + } + return Optional.ofNullable(charset).map(t -> new String(bytes, t)).orElseGet(() -> new String(bytes)); + } + + /** + * List转数组 + * + * @param list + * @param t + * @return + */ + public static T[] listToArray(List list, T[] t) { + if (isEmpty(list)) { + return null; + } + return list.toArray(t); + } + + /** + * Set转数组 + * + * @param set + * @param t + * @return + */ + public static T[] setToArray(Set set, T[] t) { + if (isEmpty(set)) { + return null; + } + return set.toArray(t); + } + + /** + * Set转List + * + * @param set + * @return + */ + public static List setToList(Set set) { + if (isEmpty(set)) { + return Collections.emptyList(); + } + return set.stream().collect(Collectors.toList()); + } + + /** + * 数组转List + * + * @param array + * @return + */ + public static List arrayToList(T[] array) { + if (isEmpty(array)) { + return Collections.emptyList(); + } + return Arrays.stream(array).collect(Collectors.toList()); + } + + /** + * List转Set + * + * @param list + * @return + */ + public static Set listToSet(List list) { + if (isEmpty(list)) { + return Collections.emptySet(); + } + return list.stream().collect(Collectors.toSet()); + } + + /** + * 数组转Set + * + * @param array + * @return + */ + public static Set arrayToSet(T[] array) { + if (isEmpty(array)) { + return Collections.emptySet(); + } + return Arrays.stream(array).collect(Collectors.toSet()); + } + + /** + * 拼接字符串 + * + * @param list + * @param regex + * @param parallel + * @param function + * @return + */ + public static String concatString(Collection list, String regex, boolean parallel, Function fn) { + if (isEmpty(list)) { + return null; + } + if (StringUtils.isEmpty(regex)) { + regex = ","; + } + Stream stream = parallel ? list.parallelStream() : list.stream(); + if (fn != null) { + return stream.map(t -> fn.apply(t)).collect(Collectors.joining(regex)); + } + return stream.map(String::valueOf).collect(Collectors.joining(regex)); + } + + /** + * 拼接url参数字符串 + * + * @param paramMap + * @return + */ + public static String getUrlParamStr(Map paramMap) { + return isEmpty(paramMap) ? "" : Joiner.on("&").withKeyValueSeparator("=").join(paramMap); + } + + public static String getSimpleUUID() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultRandomCodeStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultRandomCodeStrategy.java index 9310ad59f..80eb920fe 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultRandomCodeStrategy.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultRandomCodeStrategy.java @@ -1,7 +1,6 @@ package com.wzj.soopin.content.utils; -import com.wzj.soopin.content.idworker.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultWorkerIdStrategy.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultWorkerIdStrategy.java index 6e331ee91..617586efc 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultWorkerIdStrategy.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/DefaultWorkerIdStrategy.java @@ -1,10 +1,7 @@ package com.wzj.soopin.content.utils; -import com.wzj.soopin.content.idworker.utils.HttpReq; -import com.wzj.soopin.content.idworker.utils.Ip; -import com.wzj.soopin.content.idworker.utils.Props; -import com.wzj.soopin.content.idworker.utils.Utils; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/HttpReq.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/HttpReq.java similarity index 98% rename from ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/HttpReq.java rename to ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/HttpReq.java index 5218ae0e3..40865eda4 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/HttpReq.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/HttpReq.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.content.idworker.utils; +package com.wzj.soopin.content.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Ip.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Ip.java similarity index 96% rename from ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Ip.java rename to ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Ip.java index cafaf0cc9..c518c6b8f 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Ip.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Ip.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.content.idworker.utils; +package com.wzj.soopin.content.utils; import org.slf4j.Logger; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/MinIOUtils.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/MinIOUtils.java new file mode 100644 index 000000000..2920bade1 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/MinIOUtils.java @@ -0,0 +1,432 @@ +package com.wzj.soopin.content.utils; + +import io.minio.*; +import io.minio.http.Method; +import io.minio.messages.Bucket; +import io.minio.messages.DeleteObject; +import io.minio.messages.Item; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; + +/** + * MinIO工具类 + */ +@Slf4j +public class MinIOUtils { + + private static MinioClient minioClient; + + private static String endpoint; + private static String bucketName; + private static String accessKey; + private static String secretKey; + private static Integer imgSize; + private static Integer fileSize; + + + private static final String SEPARATOR = "/"; + + public MinIOUtils() { + } + + public MinIOUtils(String endpoint, String bucketName, String accessKey, String secretKey, Integer imgSize, Integer fileSize) { + MinIOUtils.endpoint = endpoint; + MinIOUtils.bucketName = bucketName; + MinIOUtils.accessKey = accessKey; + MinIOUtils.secretKey = secretKey; + MinIOUtils.imgSize = imgSize; + MinIOUtils.fileSize = fileSize; + createMinioClient(); + } + + /** + * 创建基于Java端的MinioClient + */ + public void createMinioClient() { + try { + if (null == minioClient) { + log.info("开始创建 MinioClient..."); + minioClient = MinioClient + .builder() + .endpoint(endpoint) + .credentials(accessKey, secretKey) + .build(); + createBucket(bucketName); + log.info("创建完毕 MinioClient..."); + } + } catch (Exception e) { + log.error("MinIO服务器异常:{}", e); + } + } + + /** + * 获取上传文件前缀路径 + * @return + */ + public static String getBasisUrl() { + return endpoint + SEPARATOR + bucketName + SEPARATOR; + } + + /****************************** Operate Bucket Start ******************************/ + + /** + * 启动SpringBoot容器的时候初始化Bucket + * 如果没有Bucket则创建 + * @throws Exception + */ + private static void createBucket(String bucketName) throws Exception { + if (!bucketExists(bucketName)) { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + } + } + + /** + * 判断Bucket是否存在,true:存在,false:不存在 + * @return + * @throws Exception + */ + public static boolean bucketExists(String bucketName) throws Exception { + return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); + } + + + /** + * 获得Bucket的策略 + * @param bucketName + * @return + * @throws Exception + */ + public static String getBucketPolicy(String bucketName) throws Exception { + String bucketPolicy = minioClient + .getBucketPolicy( + GetBucketPolicyArgs + .builder() + .bucket(bucketName) + .build() + ); + return bucketPolicy; + } + + + /** + * 获得所有Bucket列表 + * @return + * @throws Exception + */ + public static List getAllBuckets() throws Exception { + return minioClient.listBuckets(); + } + + /** + * 根据bucketName获取其相关信息 + * @param bucketName + * @return + * @throws Exception + */ + public static Optional getBucket(String bucketName) throws Exception { + return getAllBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst(); + } + + /** + * 根据bucketName删除Bucket,true:删除成功; false:删除失败,文件或已不存在 + * @param bucketName + * @throws Exception + */ + public static void removeBucket(String bucketName) throws Exception { + minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); + } + + /****************************** Operate Bucket End ******************************/ + + + /****************************** Operate Files Start ******************************/ + + /** + * 判断文件是否存在 + * @param bucketName 存储桶 + * @param objectName 文件名 + * @return + */ + public static boolean isObjectExist(String bucketName, String objectName) { + boolean exist = true; + try { + minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build()); + } catch (Exception e) { + exist = false; + } + return exist; + } + + /** + * 判断文件夹是否存在 + * @param bucketName 存储桶 + * @param objectName 文件夹名称 + * @return + */ + public static boolean isFolderExist(String bucketName, String objectName) { + boolean exist = false; + try { + Iterable> results = minioClient.listObjects( + ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(false).build()); + for (Result result : results) { + Item item = result.get(); + if (item.isDir() && objectName.equals(item.objectName())) { + exist = true; + } + } + } catch (Exception e) { + exist = false; + } + return exist; + } + + /** + * 根据文件前缀查询文件 + * @param bucketName 存储桶 + * @param prefix 前缀 + * @param recursive 是否使用递归查询 + * @return MinioItem 列表 + * @throws Exception + */ + public static List getAllObjectsByPrefix(String bucketName, + String prefix, + boolean recursive) throws Exception { + List list = new ArrayList<>(); + Iterable> objectsIterator = minioClient.listObjects( + ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(recursive).build()); + if (objectsIterator != null) { + for (Result o : objectsIterator) { + Item item = o.get(); + list.add(item); + } + } + return list; + } + + /** + * 获取文件流 + * @param bucketName 存储桶 + * @param objectName 文件名 + * @return 二进制流 + */ + public static InputStream getObject(String bucketName, String objectName) throws Exception { + return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build()); + } + + /** + * 断点下载 + * @param bucketName 存储桶 + * @param objectName 文件名称 + * @param offset 起始字节的位置 + * @param length 要读取的长度 + * @return 二进制流 + */ + public InputStream getObject(String bucketName, String objectName, long offset, long length)throws Exception { + return minioClient.getObject( + GetObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .offset(offset) + .length(length) + .build()); + } + + /** + * 获取路径下文件列表 + * @param bucketName 存储桶 + * @param prefix 文件名称 + * @param recursive 是否递归查找,false:模拟文件夹结构查找 + * @return 二进制流 + */ + public static Iterable> listObjects(String bucketName, String prefix, + boolean recursive) { + return minioClient.listObjects( + ListObjectsArgs.builder() + .bucket(bucketName) + .prefix(prefix) + .recursive(recursive) + .build()); + } + + /** + * 使用MultipartFile进行文件上传 + * @param bucketName 存储桶 + * @param file 文件名 + * @param objectName 对象名 + * @param contentType 类型 + * @return + * @throws Exception + */ + public static ObjectWriteResponse uploadFile(String bucketName, MultipartFile file, + String objectName, String contentType) throws Exception { + InputStream inputStream = file.getInputStream(); + return minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .contentType(contentType) + .stream(inputStream, inputStream.available(), -1) + .build()); + } + + /** + * 上传本地文件 + * @param bucketName 存储桶 + * @param objectName 对象名称 + * @param fileName 本地文件路径 + */ + public static ObjectWriteResponse uploadFile(String bucketName, String objectName, + String fileName) throws Exception { + return minioClient.uploadObject( + UploadObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .filename(fileName) + .build()); + } + + /** + * 通过流上传文件 + * + * @param bucketName 存储桶 + * @param objectName 文件对象 + * @param inputStream 文件流 + */ + public static ObjectWriteResponse uploadFile(String bucketName, String objectName, InputStream inputStream) throws Exception { + return minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .stream(inputStream, inputStream.available(), -1) + .build()); + } + + /** + * 创建文件夹或目录 + * @param bucketName 存储桶 + * @param objectName 目录路径 + */ + public static ObjectWriteResponse createDir(String bucketName, String objectName) throws Exception { + return minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .stream(new ByteArrayInputStream(new byte[]{}), 0, -1) + .build()); + } + + /** + * 获取文件信息, 如果抛出异常则说明文件不存在 + * + * @param bucketName 存储桶 + * @param objectName 文件名称 + */ + public static String getFileStatusInfo(String bucketName, String objectName) throws Exception { + return minioClient.statObject( + StatObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .build()).toString(); + } + + /** + * 拷贝文件 + * + * @param bucketName 存储桶 + * @param objectName 文件名 + * @param srcBucketName 目标存储桶 + * @param srcObjectName 目标文件名 + */ + public static ObjectWriteResponse copyFile(String bucketName, String objectName, + String srcBucketName, String srcObjectName) throws Exception { + return minioClient.copyObject( + CopyObjectArgs.builder() + .source(CopySource.builder().bucket(bucketName).object(objectName).build()) + .bucket(srcBucketName) + .object(srcObjectName) + .build()); + } + + /** + * 删除文件 + * @param bucketName 存储桶 + * @param objectName 文件名称 + */ + public static void removeFile(String bucketName, String objectName) throws Exception { + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .build()); + } + + /** + * 批量删除文件 + * @param bucketName 存储桶 + * @param keys 需要删除的文件列表 + * @return + */ + public static void removeFiles(String bucketName, List keys) { + List objects = new LinkedList<>(); + keys.forEach(s -> { + objects.add(new DeleteObject(s)); + try { + removeFile(bucketName, s); + } catch (Exception e) { + log.error("批量删除失败!error:{}",e); + } + }); + } + + /** + * 获取文件外链 + * @param bucketName 存储桶 + * @param objectName 文件名 + * @param expires 过期时间 <=7 秒 (外链有效时间(单位:秒)) + * @return url + * @throws Exception + */ + public static String getPresignedObjectUrl(String bucketName, String objectName, Integer expires) throws Exception { + GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().expiry(expires).bucket(bucketName).object(objectName).build(); + return minioClient.getPresignedObjectUrl(args); + } + + /** + * 获得文件外链 + * @param bucketName + * @param objectName + * @return url + * @throws Exception + */ + public static String getPresignedObjectUrl(String bucketName, String objectName) throws Exception { + GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder() + .bucket(bucketName) + .object(objectName) + .method(Method.GET).build(); + return minioClient.getPresignedObjectUrl(args); + } + + /** + * 将URLDecoder编码转成UTF8 + * @param str + * @return + * @throws UnsupportedEncodingException + */ + public static String getUtf8ByURLDecoder(String str) throws UnsupportedEncodingException { + String url = str.replaceAll("%(?![0-9a-fA-F]{2})", "%25"); + return URLDecoder.decode(url, "UTF-8"); + } + + /****************************** Operate Files End ******************************/ + + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/PagedGridResult.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/PagedGridResult.java index 782ccc962..2773aa194 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/PagedGridResult.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/PagedGridResult.java @@ -11,39 +11,39 @@ import java.util.List; */ public class PagedGridResult { - private int page; // 当前页数 - private long total; // 总页数 - private long records; // 总记录数 - private List rows; // 每行显示的内容 + private int page; // 当前页数 + private long total; // 总页数 + private long records; // 总记录数 + private List rows; // 每行显示的内容 - public int getPage() { - return page; - } - public void setPage(int page) { - this.page = page; - } + public int getPage() { + return page; + } + public void setPage(int page) { + this.page = page; + } - public long getTotal() { - return total; - } + public long getTotal() { + return total; + } - public void setTotal(long total) { - this.total = total; - } + public void setTotal(long total) { + this.total = total; + } - public void setTotal(int total) { - this.total = total; - } - public long getRecords() { - return records; - } - public void setRecords(long records) { - this.records = records; - } - public List getRows() { - return rows; - } - public void setRows(List rows) { - this.rows = rows; - } + public void setTotal(int total) { + this.total = total; + } + public long getRecords() { + return records; + } + public void setRecords(long records) { + this.records = records; + } + public List getRows() { + return rows; + } + public void setRows(List rows) { + this.rows = rows; + } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Props.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Props.java similarity index 95% rename from ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Props.java rename to ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Props.java index 16c869e66..c906b8673 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Props.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Props.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.content.idworker.utils; +package com.wzj.soopin.content.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -6,8 +6,9 @@ import org.slf4j.LoggerFactory; import java.io.*; import java.util.Properties; +import static com.squareup.okhttp.internal.Util.closeQuietly; import static java.io.File.separator; -import static org.n3r.idworker.utils.Serializes.closeQuietly; + public class Props { static Logger log = LoggerFactory.getLogger(Props.class); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/QcCloud.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/QcCloud.java new file mode 100644 index 000000000..b0addbabe --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/QcCloud.java @@ -0,0 +1,60 @@ +package com.wzj.soopin.content.utils; + +import com.qcloud.vod.VodUploadClient; +import com.qcloud.vod.model.VodUploadRequest; +import com.qcloud.vod.model.VodUploadResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.nio.file.Files; + + +@Component +public class QcCloud { + @Autowired + private TencentCloudProperties tencentCloudProperties; + public String getSecretId() { + return tencentCloudProperties.getSecretId(); + } + + public String getSecretKey() { + return tencentCloudProperties.getSecretKey(); + } + + public String getRegion() { + return "ap-guangzhou";// 腾讯云 VOD 和 COS 使用相同区域 + } + + + + public String uploadViaTempFile(String fileName) throws Exception { + //确保 vlogdata 目录存在 +// String storagePath = new File(System.getProperty("user.dir"), "vlogdata").getAbsolutePath(); +// String storagePath = "/Users/wuzhongjie/Desktop/vlog-1.0.0/vlogdata"; // 本地 + String storagePath = "/data/vlogdata"; // 生产 + + System.out.println("腾讯云服务:绝对路径: " + storagePath); + File storageDir = new File(storagePath); + // 组装完整的文件路径 + File sourceFile = new File(storageDir, fileName); + System.out.println("腾讯云服务:完整文件路径: " + sourceFile.toPath()); + + if (!sourceFile.exists()) { + throw new RuntimeException("腾讯云服务:文件不存在: " + sourceFile.getAbsolutePath()); + } + try { + VodUploadClient client = new VodUploadClient(getSecretId(), getSecretKey()); + VodUploadRequest request = new VodUploadRequest(); + request.setMediaFilePath(sourceFile.getAbsolutePath());// 指定本地文件路径 + request.setProcedure("视频处理"); // 智能审核+水印 + // 上传文件 + VodUploadResponse response = client.upload(getRegion(), request); +// return response; + return response.getFileId(); + } finally { + // 删除本地文件 + Files.deleteIfExists(sourceFile.toPath()); + } + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/RestTemplateUtil.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/RestTemplateUtil.java new file mode 100644 index 000000000..5c3fb4ace --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/RestTemplateUtil.java @@ -0,0 +1,211 @@ +package com.wzj.soopin.content.utils; + + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.*; +import org.springframework.stereotype.Component; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import net.sf.json.JSONObject; +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; + +import static com.wzj.soopin.content.utils.CommonUtil.getUrlParamStr; +import static org.apache.commons.collections4.MapUtils.isEmpty; + + +/** + * RestTemplate工具类 + * + * @version 1.0.0 + * @author Leon + * + */ +@Component +public final class RestTemplateUtil { + + private static RestTemplate TEMPLATE; + + private static RestTemplate TEMPLATE_IGNORE_SSL; + + @Resource(name = "restTemplate") + private RestTemplate restTemplate; + + @Resource(name = "restTemplateIgnoreSSL") + private RestTemplate restTemplateIgnoreSSL; + + private RestTemplateUtil() { + } + + @PostConstruct + private void init() { + TEMPLATE = this.restTemplate; + TEMPLATE_IGNORE_SSL = this.restTemplateIgnoreSSL; + } + + /** + * GET请求 + * + * @param + * @param mediaType + * @param headerHandler + * @param headerData + * @param url + * @param param + * @param valueType + * @param responseHandler + */ + public static void get(MediaType mediaType, Consumer headerHandler, Map headerData, + String url, Map param, Class valueType, Consumer> responseHandler) { + HttpHeaders headers = new HttpHeaders(); + Optional.ofNullable(mediaType).ifPresent(t -> headers.setContentType(t)); + // 请求头信息 + buildHttpHeaders(headers, headerHandler, headerData); + // 构建请求 + HttpEntity entity = new HttpEntity<>(headers); + ResponseEntity responseEntity = buildRestTemplate(url).exchange(buildUrl(url, param), HttpMethod.GET, entity, + valueType); + // 处理响应 + responseHandler(responseEntity, responseHandler); + } + + /** + * POST请求 + * + * @param + * @param mediaType + * @param headerHandler + * @param headerData + * @param url + * @param param + * @param valueType + * @param responseHandler + */ + public static void post(MediaType mediaType, Consumer headerHandler, + Map headerData, String url, JSONObject param, Class valueType, + Consumer> responseHandler) { + HttpHeaders headers = new HttpHeaders(); + if (mediaType == null) { + headers.setContentType(MediaType.APPLICATION_JSON); + } else { + headers.setContentType(mediaType); + } + // 请求头信息 + buildHttpHeaders(headers, headerHandler, headerData); + // 构建请求 + HttpEntity entity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = buildRestTemplate(url).exchange(url, HttpMethod.POST, entity, valueType); + // 处理响应 + responseHandler(responseEntity, responseHandler); + } + + /** + * POST请求 + * + * @param + * @param mediaType + * @param headerHandler + * @param headerData + * @param url + * @param param + * @param valueType + * @param responseHandler + */ + public static void post(MediaType mediaType, Consumer headerHandler, + Map headerData, String url, MultiValueMap param, Class valueType, + Consumer> responseHandler) { + HttpHeaders headers = new HttpHeaders(); + if (mediaType == null) { + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + } else { + headers.setContentType(mediaType); + } + // 请求头信息 + buildHttpHeaders(headers, headerHandler, headerData); + // 构建请求 + HttpEntity> entity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = buildRestTemplate(url).postForEntity(url, entity, valueType); + // 处理响应 + responseHandler(responseEntity, responseHandler); + } + + /** + * PUT请求 + * + * @param + * @param headerHandler + * @param headerData + * @param url + * @param jsonBody + * @param valueType + * @param responseHandler + */ + public static void put(Consumer headerHandler, Map headerData, String url, + String jsonBody, Class valueType, Consumer> responseHandler) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + // 请求头信息 + buildHttpHeaders(headers, headerHandler, headerData); + // 构建请求 + HttpEntity entity = new HttpEntity<>(jsonBody, headers); + ResponseEntity responseEntity = buildRestTemplate(url).exchange(url, HttpMethod.PUT, entity, valueType); + // 处理响应 + responseHandler(responseEntity, responseHandler); + } + + /** + * 构建请求模板 + * + * @param + * @return + */ + private static RestTemplate buildRestTemplate(String url) { + boolean ssl = StringUtils.startsWithIgnoreCase(url, "https"); + return ssl ? TEMPLATE_IGNORE_SSL : TEMPLATE; + } + + /** + * 构建请求头信息 + * + * @param headers + * @param headerHandler + * @param headerData + */ + private static void buildHttpHeaders(HttpHeaders headers, Consumer headerHandler, + Map headerData) { + Optional.ofNullable(headerHandler).ifPresent(t -> t.accept(headers)); + if (!isEmpty(headerData)) { + headerData.forEach((k, v) -> headers.add(k, v)); + } + } + + /** + * 构建请求url + * + * @param url + * @param param + * @return + */ + private static String buildUrl(String url, Map param) { + if (isEmpty(param)) { + return url; + } + String paramStr = getUrlParamStr(param); + return url + "?" + paramStr; + } + + /** + * 响应处理 + * + * @param + * @param responseEntity + * @param responseHandler + */ + private static void responseHandler(ResponseEntity responseEntity, + Consumer> responseHandler) { + Optional.ofNullable(responseHandler).ifPresent(t -> t.accept(responseEntity)); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Sid.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Sid.java index 4774f1eba..40fd882a0 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Sid.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Sid.java @@ -1,6 +1,6 @@ package com.wzj.soopin.content.utils; -import com.wzj.soopin.content.idworker.utils.Utils; + import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Utils.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Utils.java similarity index 98% rename from ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Utils.java rename to ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Utils.java index eca2fa470..ef5d65c4d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/idworker/utils/Utils.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/utils/Utils.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.content.idworker.utils; +package com.wzj.soopin.content.utils; import java.io.*; import java.sql.Timestamp;