Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
涂亚平
/
template
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 4166d169
authored
May 14, 2025
by
涂亚平
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
名字规范
1 parent
97dda540
Hide whitespace changes
Inline
Side-by-side
Showing
58 changed files
with
269 additions
and
146 deletions
pom.xml
src/main/java/com/zhongzhi/ZhongzhiApplication.java → src/main/java/com/template/ZhongzhiApplication.java
src/main/java/com/zhongzhi/common/configure/AliyunSmsProperties.java → src/main/java/com/template/common/configure/AliyunSmsProperties.java
src/main/java/com/zhongzhi/common/configure/MybatisPlusConfig.java → src/main/java/com/template/common/configure/MybatisPlusConfig.java
src/main/java/com/zhongzhi/common/configure/RemoteProperties.java → src/main/java/com/template/common/configure/RemoteProperties.java
src/main/java/com/zhongzhi/common/configure/SecurityConfig.java → src/main/java/com/template/common/configure/SecurityConfig.java
src/main/java/com/zhongzhi/common/configure/SwaggerConfig.java → src/main/java/com/template/common/configure/SwaggerConfig.java
src/main/java/com/zhongzhi/common/configure/VODConfig.java → src/main/java/com/template/common/configure/VODConfig.java
src/main/java/com/zhongzhi/common/configure/WebConfig.java → src/main/java/com/template/common/configure/WebConfig.java
src/main/java/com/zhongzhi/common/constant/Code.java → src/main/java/com/template/common/constant/Code.java
src/main/java/com/zhongzhi/common/constant/MemberType.java → src/main/java/com/template/common/constant/MemberType.java
src/main/java/com/zhongzhi/common/constant/Platform.java → src/main/java/com/template/common/constant/Platform.java
src/main/java/com/zhongzhi/common/constant/ProjectAssigned.java → src/main/java/com/template/common/constant/ProjectAssigned.java
src/main/java/com/zhongzhi/common/constant/ProjectReview.java → src/main/java/com/template/common/constant/ProjectReview.java
src/main/java/com/zhongzhi/common/constant/ProjectSchedule.java → src/main/java/com/template/common/constant/ProjectSchedule.java
src/main/java/com/zhongzhi/common/constant/ProjectStatus.java → src/main/java/com/template/common/constant/ProjectStatus.java
src/main/java/com/zhongzhi/common/constant/ProjectType.java → src/main/java/com/template/common/constant/ProjectType.java
src/main/java/com/zhongzhi/common/constant/SMSTemplate.java → src/main/java/com/template/common/constant/SMSTemplate.java
src/main/java/com/zhongzhi/common/constant/SmsCode.java → src/main/java/com/template/common/constant/SmsCode.java
src/main/java/com/zhongzhi/common/exception/GlobalExceptionHandler.java → src/main/java/com/template/common/exception/GlobalExceptionHandler.java
src/main/java/com/zhongzhi/common/exception/HttpException.java → src/main/java/com/template/common/exception/HttpException.java
src/main/java/com/zhongzhi/common/generator/CodeGenerator.java → src/main/java/com/template/common/generator/CodeGenerator.java
src/main/java/com/zhongzhi/common/handler/MetaHandler.java → src/main/java/com/template/common/handler/MetaHandler.java
src/main/java/com/zhongzhi/common/interceptor/AuthenticationInterceptor.java → src/main/java/com/template/common/interceptor/AuthenticationInterceptor.java
src/main/java/com/zhongzhi/common/interceptor/JwtAuthenticationEntryPoint.java → src/main/java/com/template/common/interceptor/JwtAuthenticationEntryPoint.java
src/main/java/com/zhongzhi/common/interceptor/JwtAuthenticationTokenFilter.java → src/main/java/com/template/common/interceptor/JwtAuthenticationTokenFilter.java
src/main/java/com/zhongzhi/common/interceptor/RestAuthenticationAccessDeniedHandler.java → src/main/java/com/template/common/interceptor/RestAuthenticationAccessDeniedHandler.java
src/main/java/com/zhongzhi/common/utils/AliyunSmsUtil.java → src/main/java/com/template/common/utils/AliyunSmsUtil.java
src/main/java/com/zhongzhi/common/utils/ApplicationContextUtil.java → src/main/java/com/template/common/utils/ApplicationContextUtil.java
src/main/java/com/zhongzhi/common/utils/DateFormatUtil.java → src/main/java/com/template/common/utils/DateFormatUtil.java
src/main/java/com/zhongzhi/common/utils/EncryptUtil.java → src/main/java/com/template/common/utils/EncryptUtil.java
src/main/java/com/template/common/utils/EncryptionUtil.java
src/main/java/com/zhongzhi/common/utils/ExcelColumn.java → src/main/java/com/template/common/utils/ExcelColumn.java
src/main/java/com/zhongzhi/common/utils/ExcelUtil.java → src/main/java/com/template/common/utils/ExcelUtil.java
src/main/java/com/zhongzhi/common/utils/IpAddressUtil.java → src/main/java/com/template/common/utils/IpAddressUtil.java
src/main/java/com/zhongzhi/common/utils/JwtUtil.java → src/main/java/com/template/common/utils/JwtUtil.java
src/main/java/com/zhongzhi/common/utils/Localstorage.java → src/main/java/com/template/common/utils/Localstorage.java
src/main/java/com/zhongzhi/common/utils/LoginRequired.java → src/main/java/com/template/common/utils/LoginRequired.java
src/main/java/com/zhongzhi/common/utils/RandomUtil.java → src/main/java/com/template/common/utils/RandomUtil.java
src/main/java/com/zhongzhi/common/utils/ResponseData.java → src/main/java/com/template/common/utils/ResponseData.java
src/main/java/com/zhongzhi/common/utils/Signature.java → src/main/java/com/template/common/utils/Signature.java
src/main/java/com/zhongzhi/common/utils/SysLog.java → src/main/java/com/template/common/utils/SysLog.java
src/main/java/com/zhongzhi/common/utils/VodUtil.java → src/main/java/com/template/common/utils/VodUtil.java
src/main/java/com/zhongzhi/controller/AuthController.java → src/main/java/com/template/controller/AuthController.java
src/main/java/com/zhongzhi/controller/OssController.java → src/main/java/com/template/controller/OssController.java
src/main/java/com/zhongzhi/dao/UserMapper.java → src/main/java/com/template/dao/UserMapper.java
src/main/java/com/zhongzhi/dto/UserDTO.java → src/main/java/com/template/dto/UserDTO.java
src/main/java/com/zhongzhi/model/base/BaseModel.java → src/main/java/com/template/model/base/BaseModel.java
src/main/java/com/zhongzhi/model/base/UserModel.java → src/main/java/com/template/model/base/UserModel.java
src/main/java/com/zhongzhi/service/UserService.java → src/main/java/com/template/service/UserService.java
src/main/java/com/zhongzhi/service/impl/UserServiceImpl.java → src/main/java/com/template/service/impl/UserServiceImpl.java
src/main/java/com/zhongzhi/vo/ExcelFieldVO.java → src/main/java/com/template/vo/ExcelFieldVO.java
src/main/java/com/zhongzhi/vo/ResponseVO.java → src/main/java/com/template/vo/ResponseVO.java
src/main/java/com/zhongzhi/vo/oss/GetSecretVO.java → src/main/java/com/template/vo/oss/GetSecretVO.java
src/main/java/com/zhongzhi/vo/oss/UploadFileVO.java → src/main/java/com/template/vo/oss/UploadFileVO.java
src/main/resources/application-dev.properties
src/main/resources/application-prod.properties
src/main/resources/mybatis-generator.properties
pom.xml
View file @
4166d16
...
...
@@ -9,8 +9,8 @@
<relativePath/>
</parent>
<groupId>
com.
zhongzhi
</groupId>
<artifactId>
zhongzhi
</artifactId>
<groupId>
com.
template
</groupId>
<artifactId>
template
</artifactId>
<version>
1.0
</version>
<properties>
...
...
@@ -176,6 +176,18 @@
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itext-asian
</artifactId>
<version>
${itext-asian.version}
</version>
</dependency>
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itextpdf
</artifactId>
<version>
${itextpdf.version}
</version>
</dependency>
</dependencies>
<repositories>
...
...
src/main/java/com/
zhongzhi
/ZhongzhiApplication.java
→
src/main/java/com/
template
/ZhongzhiApplication.java
View file @
4166d16
package
com
.
zhongzhi
;
package
com
.
template
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
...
...
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@MapperScan
(
basePackages
=
{
"com.
zhongzhi
.dao"
})
@MapperScan
(
basePackages
=
{
"com.
template
.dao"
})
@SpringBootApplication
public
class
ZhongzhiApplication
{
...
...
src/main/java/com/
zhongzhi
/common/configure/AliyunSmsProperties.java
→
src/main/java/com/
template
/common/configure/AliyunSmsProperties.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
...
...
src/main/java/com/
zhongzhi
/common/configure/MybatisPlusConfig.java
→
src/main/java/com/
template
/common/configure/MybatisPlusConfig.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
com.baomidou.mybatisplus.core.config.GlobalConfig
;
import
com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
;
import
com.
zhongzhi
.common.handler.MetaHandler
;
import
com.
template
.common.handler.MetaHandler
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
src/main/java/com/
zhongzhi
/common/configure/RemoteProperties.java
→
src/main/java/com/
template
/common/configure/RemoteProperties.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.context.annotation.PropertySource
;
...
...
src/main/java/com/
zhongzhi
/common/configure/SecurityConfig.java
→
src/main/java/com/
template
/common/configure/SecurityConfig.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
com.
zhongzhi
.common.interceptor.JwtAuthenticationEntryPoint
;
import
com.
zhongzhi
.common.interceptor.JwtAuthenticationTokenFilter
;
import
com.
zhongzhi
.common.utils.EncryptUtil
;
import
com.
template
.common.interceptor.JwtAuthenticationEntryPoint
;
import
com.
template
.common.interceptor.JwtAuthenticationTokenFilter
;
import
com.
template
.common.utils.EncryptUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.context.annotation.Bean
;
...
...
src/main/java/com/
zhongzhi
/common/configure/SwaggerConfig.java
→
src/main/java/com/
template
/common/configure/SwaggerConfig.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
@@ -26,7 +26,7 @@ public class SwaggerConfig {
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
pathMapping
(
"/"
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.
zhongzhi
.controller"
))
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.
template
.controller"
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
apiInfo
(
new
ApiInfoBuilder
()
...
...
src/main/java/com/
zhongzhi
/common/configure/VODConfig.java
→
src/main/java/com/
template
/common/configure/VODConfig.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
...
...
src/main/java/com/
zhongzhi
/common/configure/WebConfig.java
→
src/main/java/com/
template
/common/configure/WebConfig.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
configure
;
package
com
.
template
.
common
.
configure
;
import
com.
zhongzhi
.common.interceptor.AuthenticationInterceptor
;
import
com.
template
.common.interceptor.AuthenticationInterceptor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
src/main/java/com/
zhongzhi
/common/constant/Code.java
→
src/main/java/com/
template
/common/constant/Code.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
import
lombok.Getter
;
...
...
src/main/java/com/
zhongzhi
/common/constant/MemberType.java
→
src/main/java/com/
template
/common/constant/MemberType.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/Platform.java
→
src/main/java/com/
template
/common/constant/Platform.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/ProjectAssigned.java
→
src/main/java/com/
template
/common/constant/ProjectAssigned.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
import
lombok.Data
;
...
...
src/main/java/com/
zhongzhi
/common/constant/ProjectReview.java
→
src/main/java/com/
template
/common/constant/ProjectReview.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/ProjectSchedule.java
→
src/main/java/com/
template
/common/constant/ProjectSchedule.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/ProjectStatus.java
→
src/main/java/com/
template
/common/constant/ProjectStatus.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/ProjectType.java
→
src/main/java/com/
template
/common/constant/ProjectType.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/constant/SMSTemplate.java
→
src/main/java/com/
template
/common/constant/SMSTemplate.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
public
class
SMSTemplate
{
...
...
src/main/java/com/
zhongzhi
/common/constant/SmsCode.java
→
src/main/java/com/
template
/common/constant/SmsCode.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
constant
;
package
com
.
template
.
common
.
constant
;
/**
* <p>
...
...
src/main/java/com/
zhongzhi
/common/exception/GlobalExceptionHandler.java
→
src/main/java/com/
template
/common/exception/GlobalExceptionHandler.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
exception
;
package
com
.
template
.
common
.
exception
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.
zhongzhi
.common.configure.RemoteProperties
;
import
com.
zhongzhi
.common.constant.Code
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
template
.common.configure.RemoteProperties
;
import
com.
template
.common.constant.Code
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.vo.ResponseVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.formula.functions.T
;
import
org.springframework.http.converter.HttpMessageNotReadableException
;
...
...
src/main/java/com/
zhongzhi
/common/exception/HttpException.java
→
src/main/java/com/
template
/common/exception/HttpException.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
exception
;
package
com
.
template
.
common
.
exception
;
import
com.
zhongzhi
.common.configure.RemoteProperties
;
import
com.
template
.common.configure.RemoteProperties
;
/**
* 异常处理
...
...
src/main/java/com/
zhongzhi
/common/generator/CodeGenerator.java
→
src/main/java/com/
template
/common/generator/CodeGenerator.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
generator
;
package
com
.
template
.
common
.
generator
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException
;
...
...
@@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.generator.config.*;
import
com.baomidou.mybatisplus.generator.config.po.TableInfo
;
import
com.baomidou.mybatisplus.generator.config.rules.NamingStrategy
;
import
com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine
;
import
com.
zhongzhi
.model.base.BaseModel
;
import
com.
template
.model.base.BaseModel
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
src/main/java/com/
zhongzhi
/common/handler/MetaHandler.java
→
src/main/java/com/
template
/common/handler/MetaHandler.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
handler
;
package
com
.
template
.
common
.
handler
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
org.apache.ibatis.reflection.MetaObject
;
...
...
src/main/java/com/
zhongzhi
/common/interceptor/AuthenticationInterceptor.java
→
src/main/java/com/
template
/common/interceptor/AuthenticationInterceptor.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
interceptor
;
package
com
.
template
.
common
.
interceptor
;
import
com.auth0.jwt.interfaces.Claim
;
import
com.
zhongzhi
.common.constant.Code
;
import
com.
zhongzhi
.common.constant.SmsCode
;
import
com.
zhongzhi
.common.exception.HttpException
;
import
com.
zhongzhi
.common.utils.JwtUtil
;
import
com.
zhongzhi
.common.utils.Localstorage
;
import
com.
zhongzhi
.common.utils.LoginRequired
;
import
com.
template
.common.constant.Code
;
import
com.
template
.common.constant.SmsCode
;
import
com.
template
.common.exception.HttpException
;
import
com.
template
.common.utils.JwtUtil
;
import
com.
template
.common.utils.Localstorage
;
import
com.
template
.common.utils.LoginRequired
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
...
...
src/main/java/com/
zhongzhi
/common/interceptor/JwtAuthenticationEntryPoint.java
→
src/main/java/com/
template
/common/interceptor/JwtAuthenticationEntryPoint.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
interceptor
;
package
com
.
template
.
common
.
interceptor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.
zhongzhi
.common.constant.Code
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
template
.common.constant.Code
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.vo.ResponseVO
;
import
org.springframework.security.core.AuthenticationException
;
import
org.springframework.security.web.AuthenticationEntryPoint
;
import
org.springframework.stereotype.Component
;
...
...
src/main/java/com/
zhongzhi
/common/interceptor/JwtAuthenticationTokenFilter.java
→
src/main/java/com/
template
/common/interceptor/JwtAuthenticationTokenFilter.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
interceptor
;
package
com
.
template
.
common
.
interceptor
;
import
com.auth0.jwt.interfaces.Claim
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.
zhongzhi
.common.constant.Code
;
import
com.
zhongzhi
.common.exception.HttpException
;
import
com.
zhongzhi
.common.utils.JwtUtil
;
import
com.
zhongzhi
.common.utils.Localstorage
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.dao.UserMapper
;
import
com.
zhongzhi
.model.base.UserModel
;
import
com.
template
.common.constant.Code
;
import
com.
template
.common.exception.HttpException
;
import
com.
template
.common.utils.JwtUtil
;
import
com.
template
.common.utils.Localstorage
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.dao.UserMapper
;
import
com.
template
.model.base.UserModel
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
...
...
src/main/java/com/
zhongzhi
/common/interceptor/RestAuthenticationAccessDeniedHandler.java
→
src/main/java/com/
template
/common/interceptor/RestAuthenticationAccessDeniedHandler.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
interceptor
;
package
com
.
template
.
common
.
interceptor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.
zhongzhi
.common.constant.Code
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
template
.common.constant.Code
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.vo.ResponseVO
;
import
org.springframework.security.access.AccessDeniedException
;
import
org.springframework.security.web.access.AccessDeniedHandler
;
import
org.springframework.stereotype.Component
;
...
...
src/main/java/com/
zhongzhi
/common/utils/AliyunSmsUtil.java
→
src/main/java/com/
template
/common/utils/AliyunSmsUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
...
...
@@ -6,11 +6,11 @@ import com.aliyuncs.DefaultAcsClient;
import
com.aliyuncs.IAcsClient
;
import
com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest
;
import
com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse
;
import
com.
zhongzhi
.common.configure.AliyunSmsProperties
;
import
com.
template
.common.configure.AliyunSmsProperties
;
import
com.aliyuncs.profile.DefaultProfile
;
import
com.aliyuncs.profile.IClientProfile
;
import
com.
zhongzhi
.common.constant.SMSTemplate
;
import
com.
zhongzhi
.common.exception.HttpException
;
import
com.
template
.common.constant.SMSTemplate
;
import
com.
template
.common.exception.HttpException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpEntity
;
...
...
src/main/java/com/
zhongzhi
/common/utils/ApplicationContextUtil.java
→
src/main/java/com/
template
/common/utils/ApplicationContextUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
...
...
src/main/java/com/
zhongzhi
/common/utils/DateFormatUtil.java
→
src/main/java/com/
template
/common/utils/DateFormatUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
...
...
src/main/java/com/
zhongzhi
/common/utils/EncryptUtil.java
→
src/main/java/com/
template
/common/utils/EncryptUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.amdelamar.jhash.Hash
;
import
com.amdelamar.jhash.algorithms.Type
;
...
...
src/main/java/com/template/common/utils/EncryptionUtil.java
0 → 100644
View file @
4166d16
package
com
.
template
.
common
.
utils
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.IvParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
import
java.nio.charset.StandardCharsets
;
import
java.security.MessageDigest
;
import
java.util.Base64
;
import
java.util.Random
;
/**
* 敏感数据加密解密
*/
public
class
EncryptionUtil
{
// AES加密
public
static
String
encrypt
(
String
data
,
String
key
,
String
salt
)
throws
Exception
{
// 生成密钥
byte
[]
keyBytes
=
generateKey
(
key
,
salt
);
SecretKeySpec
secretKeySpec
=
new
SecretKeySpec
(
keyBytes
,
"AES"
);
// 初始化向量
byte
[]
ivBytes
=
new
byte
[
16
];
System
.
arraycopy
(
keyBytes
,
0
,
ivBytes
,
0
,
Math
.
min
(
keyBytes
.
length
,
ivBytes
.
length
));
IvParameterSpec
ivParameterSpec
=
new
IvParameterSpec
(
ivBytes
);
// 加密
Cipher
cipher
=
Cipher
.
getInstance
(
"AES/CBC/PKCS5Padding"
);
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
secretKeySpec
,
ivParameterSpec
);
byte
[]
encryptedBytes
=
cipher
.
doFinal
(
data
.
getBytes
(
StandardCharsets
.
UTF_8
));
// 返回Base64编码的密文
return
Base64
.
getEncoder
().
encodeToString
(
encryptedBytes
);
}
// AES解密
public
static
String
decrypt
(
String
encryptedData
,
String
key
,
String
salt
)
throws
Exception
{
// 生成密钥
byte
[]
keyBytes
=
generateKey
(
key
,
salt
);
SecretKeySpec
secretKeySpec
=
new
SecretKeySpec
(
keyBytes
,
"AES"
);
// 初始化向量
byte
[]
ivBytes
=
new
byte
[
16
];
System
.
arraycopy
(
keyBytes
,
0
,
ivBytes
,
0
,
Math
.
min
(
keyBytes
.
length
,
ivBytes
.
length
));
IvParameterSpec
ivParameterSpec
=
new
IvParameterSpec
(
ivBytes
);
// 解密
Cipher
cipher
=
Cipher
.
getInstance
(
"AES/CBC/PKCS5Padding"
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
secretKeySpec
,
ivParameterSpec
);
byte
[]
decryptedBytes
=
cipher
.
doFinal
(
Base64
.
getDecoder
().
decode
(
encryptedData
));
// 返回解密后的字符串
return
new
String
(
decryptedBytes
,
StandardCharsets
.
UTF_8
);
}
// 生成密钥(加盐)
private
static
byte
[]
generateKey
(
String
key
,
String
salt
)
throws
Exception
{
MessageDigest
sha
=
MessageDigest
.
getInstance
(
"SHA-256"
);
byte
[]
keyBytes
=
(
key
+
salt
).
getBytes
(
StandardCharsets
.
UTF_8
);
keyBytes
=
sha
.
digest
(
keyBytes
);
return
keyBytes
;
}
// 方法:生成指定长度的随机字符串
public
static
String
generateRandomString
(
int
length
)
{
// 定义字符集(可以根据需要修改字符集)
String
characters
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
;
// 创建一个随机数生成器
Random
random
=
new
Random
();
StringBuilder
sb
=
new
StringBuilder
(
length
);
// 随机选择字符并拼接
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
int
index
=
random
.
nextInt
(
characters
.
length
());
sb
.
append
(
characters
.
charAt
(
index
));
}
return
sb
.
toString
();
}
public
static
void
main
(
String
[]
args
)
{
try
{
String
data
=
"Hello, World!"
;
String
key
=
"youhehulian"
;
// 密钥
String
salt
=
generateRandomString
(
8
);
// 盐值
System
.
out
.
println
(
"salt:"
+
salt
);
// 加密
String
encryptedData
=
encrypt
(
data
,
key
,
salt
);
System
.
out
.
println
(
"Encrypted Data: "
+
encryptedData
);
// 解密
String
decryptedData
=
decrypt
(
encryptedData
,
key
,
salt
);
System
.
out
.
println
(
"Decrypted Data: "
+
decryptedData
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/java/com/
zhongzhi
/common/utils/ExcelColumn.java
→
src/main/java/com/
template
/common/utils/ExcelColumn.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
java.lang.annotation.*
;
...
...
src/main/java/com/
zhongzhi
/common/utils/ExcelUtil.java
→
src/main/java/com/
template
/common/utils/ExcelUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.
zhongzhi
.common.exception.HttpException
;
import
com.
zhongzhi
.vo.ExcelFieldVO
;
import
com.
template
.common.exception.HttpException
;
import
com.
template
.vo.ExcelFieldVO
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFCellStyle
;
...
...
src/main/java/com/
zhongzhi
/common/utils/IpAddressUtil.java
→
src/main/java/com/
template
/common/utils/IpAddressUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
javax.servlet.http.HttpServletRequest
;
import
java.net.InetAddress
;
...
...
src/main/java/com/
zhongzhi
/common/utils/JwtUtil.java
→
src/main/java/com/
template
/common/utils/JwtUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.JWTVerifier
;
...
...
@@ -19,9 +19,9 @@ import java.util.Map;
*/
public
class
JwtUtil
{
private
static
final
Long
EXPIRE_TIME
=
24
*
6
0
*
60
*
1000L
;
private
static
final
Long
EXPIRE_TIME
=
3
0
*
60
*
1000L
;
p
rivate
static
final
String
SECRET
=
"PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D"
;
p
ublic
static
final
String
SECRET
=
"PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D"
;
/**
* 生成Token
...
...
src/main/java/com/
zhongzhi
/common/utils/Localstorage.java
→
src/main/java/com/
template
/common/utils/Localstorage.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
src/main/java/com/
zhongzhi
/common/utils/LoginRequired.java
→
src/main/java/com/
template
/common/utils/LoginRequired.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
java.lang.annotation.*
;
...
...
src/main/java/com/
zhongzhi
/common/utils/RandomUtil.java
→
src/main/java/com/
template
/common/utils/RandomUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
java.util.Date
;
import
java.util.Random
;
...
...
src/main/java/com/
zhongzhi
/common/utils/ResponseData.java
→
src/main/java/com/
template
/common/utils/ResponseData.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.
zhongzhi
.common.configure.RemoteProperties
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
template
.common.configure.RemoteProperties
;
import
com.
template
.vo.ResponseVO
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
...
...
src/main/java/com/
zhongzhi
/common/utils/Signature.java
→
src/main/java/com/
template
/common/utils/Signature.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
sun.misc.BASE64Encoder
;
...
...
src/main/java/com/
zhongzhi
/common/utils/SysLog.java
→
src/main/java/com/
template
/common/utils/SysLog.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
java.lang.annotation.*
;
...
...
src/main/java/com/
zhongzhi
/common/utils/VodUtil.java
→
src/main/java/com/
template
/common/utils/VodUtil.java
View file @
4166d16
package
com
.
zhongzhi
.
common
.
utils
;
package
com
.
template
.
common
.
utils
;
import
com.tencentcloudapi.common.Credential
;
import
com.tencentcloudapi.common.exception.TencentCloudSDKException
;
...
...
@@ -6,8 +6,8 @@ import com.tencentcloudapi.common.profile.ClientProfile;
import
com.tencentcloudapi.common.profile.HttpProfile
;
import
com.tencentcloudapi.vod.v20180717.VodClient
;
import
com.tencentcloudapi.vod.v20180717.models.*
;
import
com.
zhongzhi
.common.configure.VODConfig
;
import
com.
zhongzhi
.common.exception.HttpException
;
import
com.
template
.common.configure.VODConfig
;
import
com.
template
.common.exception.HttpException
;
import
org.springframework.stereotype.Component
;
/**
...
...
src/main/java/com/
zhongzhi
/controller/AuthController.java
→
src/main/java/com/
template
/controller/AuthController.java
View file @
4166d16
package
com
.
zhongzhi
.
controller
;
package
com
.
template
.
controller
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.dto.UserDTO
;
import
com.
zhongzhi
.service.UserService
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.dto.UserDTO
;
import
com.
template
.service.UserService
;
import
com.
template
.vo.ResponseVO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
src/main/java/com/
zhongzhi
/controller/OssController.java
→
src/main/java/com/
template
/controller/OssController.java
View file @
4166d16
package
com
.
zhongzhi
.
controller
;
package
com
.
template
.
controller
;
import
com.aliyun.oss.ClientException
;
...
...
@@ -6,10 +6,10 @@ import com.aliyun.oss.OSS;
import
com.aliyun.oss.OSSClientBuilder
;
import
com.aliyun.oss.OSSException
;
import
com.aliyun.oss.model.*
;
import
com.
zhongzhi
.common.utils.ResponseData
;
import
com.
zhongzhi
.vo.ResponseVO
;
import
com.
zhongzhi
.vo.oss.GetSecretVO
;
import
com.
zhongzhi
.vo.oss.UploadFileVO
;
import
com.
template
.common.utils.ResponseData
;
import
com.
template
.vo.ResponseVO
;
import
com.
template
.vo.oss.GetSecretVO
;
import
com.
template
.vo.oss.UploadFileVO
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
src/main/java/com/
zhongzhi
/dao/UserMapper.java
→
src/main/java/com/
template
/dao/UserMapper.java
View file @
4166d16
package
com
.
zhongzhi
.
dao
;
package
com
.
template
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.
zhongzhi
.model.base.UserModel
;
import
com.
template
.model.base.UserModel
;
public
interface
UserMapper
extends
BaseMapper
<
UserModel
>
{
...
...
src/main/java/com/
zhongzhi
/dto/UserDTO.java
→
src/main/java/com/
template
/dto/UserDTO.java
View file @
4166d16
package
com
.
zhongzhi
.
dto
;
package
com
.
template
.
dto
;
import
lombok.Data
;
...
...
src/main/java/com/
zhongzhi
/model/base/BaseModel.java
→
src/main/java/com/
template
/model/base/BaseModel.java
View file @
4166d16
package
com
.
zhongzhi
.
model
.
base
;
package
com
.
template
.
model
.
base
;
import
com.baomidou.mybatisplus.annotation.FieldFill
;
import
com.baomidou.mybatisplus.annotation.FieldStrategy
;
...
...
@@ -31,5 +31,5 @@ public class BaseModel {
*/
@JsonIgnore
@TableLogic
private
LocalDateTime
delete
Tim
e
;
private
LocalDateTime
delete
Dat
e
;
}
src/main/java/com/
zhongzhi
/model/base/UserModel.java
→
src/main/java/com/
template
/model/base/UserModel.java
View file @
4166d16
package
com
.
zhongzhi
.
model
.
base
;
package
com
.
template
.
model
.
base
;
import
lombok.Data
;
import
org.springframework.security.core.GrantedAuthority
;
...
...
src/main/java/com/
zhongzhi
/service/UserService.java
→
src/main/java/com/
template
/service/UserService.java
View file @
4166d16
package
com
.
zhongzhi
.
service
;
package
com
.
template
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.
zhongzhi
.dto.UserDTO
;
import
com.
zhongzhi
.model.base.UserModel
;
import
com.
template
.dto.UserDTO
;
import
com.
template
.model.base.UserModel
;
public
interface
UserService
extends
IService
<
UserModel
>
{
...
...
src/main/java/com/
zhongzhi
/service/impl/UserServiceImpl.java
→
src/main/java/com/
template
/service/impl/UserServiceImpl.java
View file @
4166d16
package
com
.
zhongzhi
.
service
.
impl
;
package
com
.
template
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.zhongzhi.common.constant.Code
;
import
com.zhongzhi.common.utils.JwtUtil
;
import
com.zhongzhi.common.utils.Localstorage
;
import
com.zhongzhi.dao.UserMapper
;
import
com.zhongzhi.dto.UserDTO
;
import
com.zhongzhi.model.base.UserModel
;
import
com.zhongzhi.service.UserService
;
import
com.template.common.constant.Code
;
import
com.template.common.utils.EncryptUtil
;
import
com.template.common.utils.JwtUtil
;
import
com.template.common.utils.Localstorage
;
import
com.template.dao.UserMapper
;
import
com.template.dto.UserDTO
;
import
com.template.model.base.UserModel
;
import
com.template.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.authentication.AuthenticationManager
;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
...
...
@@ -19,6 +20,8 @@ import org.springframework.security.core.userdetails.UserDetailsService;
import
org.springframework.security.core.userdetails.UsernameNotFoundException
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
@Service
public
class
UserServiceImpl
extends
ServiceImpl
<
UserMapper
,
UserModel
>
implements
UserService
,
UserDetailsService
{
...
...
@@ -46,7 +49,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserModel> implemen
Authentication
authentication
=
authenticationManager
.
authenticate
(
upToken
);
SecurityContextHolder
.
getContext
().
setAuthentication
(
authentication
);
UserDetails
userDetails
=
userDetailsService
.
loadUserByUsername
(
userDTO
.
getUsername
());
System
.
out
.
println
(
"user======>"
+
Localstorage
.
getUser
());
Localstorage
.
remove
();
String
token
=
JwtUtil
.
generateToken
(
userDetails
);
return
token
;
}
...
...
@@ -54,4 +60,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserModel> implemen
public
void
loginOut
()
{
Localstorage
.
remove
();
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
EncryptUtil
.
encrypt
(
"123456"
));
}
}
src/main/java/com/
zhongzhi
/vo/ExcelFieldVO.java
→
src/main/java/com/
template
/vo/ExcelFieldVO.java
View file @
4166d16
package
com
.
zhongzhi
.
vo
;
package
com
.
template
.
vo
;
import
lombok.Data
;
...
...
src/main/java/com/
zhongzhi
/vo/ResponseVO.java
→
src/main/java/com/
template
/vo/ResponseVO.java
View file @
4166d16
package
com
.
zhongzhi
.
vo
;
package
com
.
template
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
...
...
src/main/java/com/
zhongzhi
/vo/oss/GetSecretVO.java
→
src/main/java/com/
template
/vo/oss/GetSecretVO.java
View file @
4166d16
package
com
.
zhongzhi
.
vo
.
oss
;
package
com
.
template
.
vo
.
oss
;
import
lombok.Data
;
...
...
src/main/java/com/
zhongzhi
/vo/oss/UploadFileVO.java
→
src/main/java/com/
template
/vo/oss/UploadFileVO.java
View file @
4166d16
package
com
.
zhongzhi
.
vo
.
oss
;
package
com
.
template
.
vo
.
oss
;
import
lombok.Data
;
...
...
src/main/resources/application-dev.properties
View file @
4166d16
# 本地环境配置
# 端口号
server.port
=
23507
server.port
=
65000
# 数据源配置
# 数据源配置
spring.datasource.url
=
jdbc:mysql://139.224.253.21:3306/template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
...
...
src/main/resources/application-prod.properties
View file @
4166d16
# 生产环境配置
# 端口号
server.port
=
23507
server.tomcat.connection-
timeout
=
600000
# 数据源配置
spring.datasource.url
=
jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/lida?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.type
=
com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-
name
=
com.mysql.cj.jdbc.Driver
spring.datasource.username
=
ykadmin_new
spring.datasource.password
=
youkedb608@good
spring.datasource.druid.initialSize
=
5
spring.datasource.druid.minIdle
=
5
spring.datasource.druid.maxActive
=
20
spring.datasource.druid.maxWait
=
600000
spring.datasource.druid.timeBetweenEvictionRunsMillis
=
600000
spring.datasource.druid.minEvictableIdleTimeMillis
=
300000
spring.datasource.druid.validationQuery
=
SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle
=
true
spring.datasource.druid.testOnBorrow
=
false
spring.datasource.druid.testOnReturn
=
false
spring.datasource.druid.poolPreparedStatements
=
true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize
=
20
spring.datasource.druid.useGlobalDataSourceStat
=
true
mybatis-plus.configuration.log-
impl
=
org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
## 生产环境配置
## 端口号
#server.port=65000
#server.tomcat.connection-timeout=600000
## 数据源配置
#spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/lida?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.username=ykadmin_new
#spring.datasource.password=youkedb608@good
#spring.datasource.druid.initialSize=5
#spring.datasource.druid.minIdle=5
#spring.datasource.druid.maxActive=20
#spring.datasource.druid.maxWait=600000
#spring.datasource.druid.timeBetweenEvictionRunsMillis=600000
#spring.datasource.druid.minEvictableIdleTimeMillis=300000
#spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
#spring.datasource.druid.testWhileIdle=true
#spring.datasource.druid.testOnBorrow=false
#spring.datasource.druid.testOnReturn=false
#spring.datasource.druid.poolPreparedStatements=true
#spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
#spring.datasource.druid.useGlobalDataSourceStat=true
#
#mybatis-plus.configuration.log-
impl
=
org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
src/main/resources/mybatis-generator.properties
View file @
4166d16
...
...
@@ -2,11 +2,11 @@
outputDir
=
/src/main/java/
author
=
DengMin
# 父的包名
setParent
=
com.
zhongzhi
setParent
=
com.
template
# mapper.xml文件生成路径
mapperPath
=
/src/main/resources/mapper/
# 数据库地址
url
=
jdbc:mysql://139.224.253.21:3306/
gtja
?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
url
=
jdbc:mysql://139.224.253.21:3306/
template
?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
driverName
=
com.mysql.cj.jdbc.Driver
userName
=
root
password
=
ykhladmin302
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment