Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
master-5.0
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
注册表
注册表
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
svn
master-5.0
Commits
7b42ba3e
提交
7b42ba3e
authored
10月 29, 2019
作者:
liupengfei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
--no commit message
上级
849aa409
隐藏空白字符变更
内嵌
并排
正在显示
39 个修改的文件
包含
1981 行增加
和
169 行删除
+1981
-169
TxAdviceInterceptor.java
...ava/com/zrqx/core/commons/aspect/TxAdviceInterceptor.java
+91
-0
ConfigServerParams.java
...java/com/zrqx/core/commons/config/ConfigServerParams.java
+39
-0
RedisConfig.java
...c/main/java/com/zrqx/core/commons/config/RedisConfig.java
+90
-0
StringToDateConverter.java
...a/com/zrqx/core/commons/config/StringToDateConverter.java
+55
-0
Swagger2Config.java
...ain/java/com/zrqx/core/commons/config/Swagger2Config.java
+72
-0
WebAppConfig.java
.../main/java/com/zrqx/core/commons/config/WebAppConfig.java
+56
-0
CustomExceptionHandler.java
...zrqx/core/commons/interceptor/CustomExceptionHandler.java
+70
-0
CustomRequestInterceptor.java
...qx/core/commons/interceptor/CustomRequestInterceptor.java
+72
-0
FeignHeaderInterceptor.java
...zrqx/core/commons/interceptor/FeignHeaderInterceptor.java
+41
-0
InterceptorConfig.java
.../com/zrqx/core/commons/interceptor/InterceptorConfig.java
+41
-0
TxManagerHttpRequestServiceImpl.java
...rqx/core/commons/lcn/TxManagerHttpRequestServiceImpl.java
+28
-0
TxManagerTxUrlServiceImpl.java
.../com/zrqx/core/commons/lcn/TxManagerTxUrlServiceImpl.java
+22
-0
TxTransactionInterceptor.java
...a/com/zrqx/core/commons/lcn/TxTransactionInterceptor.java
+22
-0
BaseRedis.java
.../src/main/java/com/zrqx/core/commons/redis/BaseRedis.java
+138
-0
Redis.java
core/src/main/java/com/zrqx/core/commons/redis/Redis.java
+67
-0
BooleanStatusEnum.java
.../src/main/java/com/zrqx/core/enums/BooleanStatusEnum.java
+4
-4
EnvironmentEnum.java
core/src/main/java/com/zrqx/core/enums/EnvironmentEnum.java
+73
-0
LinkTypeEnum.java
core/src/main/java/com/zrqx/core/enums/LinkTypeEnum.java
+4
-4
ResponseCodeEnum.java
core/src/main/java/com/zrqx/core/enums/ResponseCodeEnum.java
+6
-12
EnvironmentInterface.java
...in/java/com/zrqx/core/enums/env/EnvironmentInterface.java
+59
-0
AbstractEnvironment.java
...ava/com/zrqx/core/enums/env/impl/AbstractEnvironment.java
+46
-0
ProductEnvironmentImpl.java
.../com/zrqx/core/enums/env/impl/ProductEnvironmentImpl.java
+58
-0
TestEnvironmentImpl.java
...ava/com/zrqx/core/enums/env/impl/TestEnvironmentImpl.java
+68
-0
OrderInvoiceStatusEnum.java
...ava/com/zrqx/core/enums/order/OrderInvoiceStatusEnum.java
+2
-2
EbookOptionEnum.java
...in/java/com/zrqx/core/enums/resource/EbookOptionEnum.java
+2
-2
SqlConditionEnum.java
...c/main/java/com/zrqx/core/enums/sql/SqlConditionEnum.java
+114
-0
SqlConditionInterface.java
...n/java/com/zrqx/core/enums/sql/SqlConditionInterface.java
+26
-0
LikeSqlCondition.java
...n/java/com/zrqx/core/enums/sql/impl/LikeSqlCondition.java
+64
-0
ListSqlCondition.java
...n/java/com/zrqx/core/enums/sql/impl/ListSqlCondition.java
+73
-0
RegexpSqlCondition.java
...java/com/zrqx/core/enums/sql/impl/RegexpSqlCondition.java
+55
-0
SimpleSqlCondition.java
...java/com/zrqx/core/enums/sql/impl/SimpleSqlCondition.java
+74
-0
BusinessValidateException.java
...va/com/zrqx/core/exception/BusinessValidateException.java
+0
-36
LoginValidateException.java
.../java/com/zrqx/core/exception/LoginValidateException.java
+0
-37
ParameterValidateException.java
...a/com/zrqx/core/exception/ParameterValidateException.java
+0
-35
SqlXMLLanguageDriver.java
.../main/java/com/zrqx/core/mapper/SqlXMLLanguageDriver.java
+61
-0
CodeUtils.java
.../src/main/java/com/zrqx/core/util/datatype/CodeUtils.java
+58
-0
StringUtils.java
...rc/main/java/com/zrqx/core/util/datatype/StringUtils.java
+166
-0
ExceptionUtils.java
...ain/java/com/zrqx/core/util/exception/ExceptionUtils.java
+34
-0
CallBack.java
core/src/main/java/com/zrqx/core/util/response/CallBack.java
+30
-37
没有找到文件。
core/src/main/java/com/zrqx/core/commons/aspect/TxAdviceInterceptor.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
aspect
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.sql.DataSource
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.springframework.aop.Advisor
;
import
org.springframework.aop.aspectj.AspectJExpressionPointcut
;
import
org.springframework.aop.support.DefaultPointcutAdvisor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource
;
import
org.springframework.transaction.interceptor.RollbackRuleAttribute
;
import
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute
;
import
org.springframework.transaction.interceptor.TransactionAttribute
;
import
org.springframework.transaction.interceptor.TransactionInterceptor
;
/**
*
* @author lpf
* @date 2018年12月26日下午5:25:20
*/
@Aspect
@Order
(
1
)
@Configuration
public
class
TxAdviceInterceptor
{
private
static
final
int
TX_METHOD_TIMEOUT
=
120
;
public
static
final
String
AOP_POINTCUT_EXPRESSION
=
"(execution(* com.zrqx..service..*Impl.*(..)))"
;
@Autowired
private
PlatformTransactionManager
transactionManager
;
@Bean
(
name
=
"transactionManager"
)
public
PlatformTransactionManager
transactionManager
(
DataSource
dataSource
)
{
return
new
DataSourceTransactionManager
(
dataSource
);
}
@Bean
public
TransactionInterceptor
txAdvice
()
{
NameMatchTransactionAttributeSource
source
=
new
NameMatchTransactionAttributeSource
();
/*只读事务,不做更新操作*/
RuleBasedTransactionAttribute
readOnlyTx
=
new
RuleBasedTransactionAttribute
();
readOnlyTx
.
setReadOnly
(
true
);
readOnlyTx
.
setPropagationBehavior
(
TransactionDefinition
.
PROPAGATION_REQUIRED
);
/*当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务*/
RuleBasedTransactionAttribute
requiredTx
=
new
RuleBasedTransactionAttribute
();
requiredTx
.
setRollbackRules
(
Collections
.
singletonList
(
new
RollbackRuleAttribute
(
Exception
.
class
)));
requiredTx
.
setPropagationBehavior
(
TransactionDefinition
.
PROPAGATION_REQUIRED
);
requiredTx
.
setTimeout
(
TX_METHOD_TIMEOUT
);
Map
<
String
,
TransactionAttribute
>
txMap
=
new
HashMap
<>();
txMap
.
put
(
"add*"
,
requiredTx
);
txMap
.
put
(
"save*"
,
requiredTx
);
txMap
.
put
(
"insert*"
,
requiredTx
);
txMap
.
put
(
"update*"
,
requiredTx
);
txMap
.
put
(
"batch*"
,
requiredTx
);
txMap
.
put
(
"delete*"
,
requiredTx
);
txMap
.
put
(
"get*"
,
readOnlyTx
);
txMap
.
put
(
"query*"
,
readOnlyTx
);
txMap
.
put
(
"select*"
,
readOnlyTx
);
txMap
.
put
(
"page*"
,
readOnlyTx
);
txMap
.
put
(
"list*"
,
readOnlyTx
);
source
.
setNameMap
(
txMap
);
TransactionInterceptor
txAdvice
=
new
TransactionInterceptor
(
transactionManager
,
source
);
return
txAdvice
;
}
@Bean
public
Advisor
txAdviceAdvisor
()
{
AspectJExpressionPointcut
pointcut
=
new
AspectJExpressionPointcut
();
pointcut
.
setExpression
(
AOP_POINTCUT_EXPRESSION
);
return
new
DefaultPointcutAdvisor
(
pointcut
,
txAdvice
());
//return new DefaultPointcutAdvisor(pointcut, txAdvice);
}
}
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/config/ConfigServerParams.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
config
;
import
lombok.Data
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
com.zrqx.core.enums.EnvironmentEnum
;
import
com.zrqx.core.enums.env.EnvironmentInterface
;
import
com.zrqx.core.enums.env.impl.ProductEnvironmentImpl
;
import
com.zrqx.core.enums.env.impl.TestEnvironmentImpl
;
/**
* 根据环境或者服务名称有效的类
* @author lpf
* @date 2019年5月15日下午3:58:54
*/
@Data
@Configuration
public
class
ConfigServerParams
{
/** 服务环境 {@link EnvironmentEnum} */
@Value
(
"${server.environment}"
)
private
String
env
;
@Bean
public
EnvironmentInterface
environmentInterface
(){
if
(
isTest
())
{
return
new
TestEnvironmentImpl
();
}
return
new
ProductEnvironmentImpl
();
}
public
boolean
isTest
(){
return
EnvironmentEnum
.
TEST
.
getCode
().
equals
(
env
);
}
}
core/src/main/java/com/zrqx/core/commons/config/RedisConfig.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
config
;
import
java.lang.reflect.Method
;
import
org.springframework.cache.CacheManager
;
import
org.springframework.cache.annotation.CachingConfigurerSupport
;
import
org.springframework.cache.annotation.EnableCaching
;
import
org.springframework.cache.interceptor.KeyGenerator
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.cache.RedisCacheConfiguration
;
import
org.springframework.data.redis.cache.RedisCacheManager
;
import
org.springframework.data.redis.cache.RedisCacheWriter
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.RedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
/**
* redis 配置类
* @author pc
*
*/
@Configuration
@EnableCaching
public
class
RedisConfig
extends
CachingConfigurerSupport
{
@Bean
public
KeyGenerator
keyGenerator
()
{
return
new
KeyGenerator
()
{
@Override
public
Object
generate
(
Object
target
,
Method
method
,
Object
...
params
)
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
target
.
getClass
().
getName
());
sb
.
append
(
method
.
getName
());
for
(
Object
obj
:
params
)
{
sb
.
append
(
obj
.
toString
());
}
return
sb
.
toString
();
}
};
}
/*@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
// 设置缓存过期时间
// rcm.setDefaultExpiration(60);//秒
return rcm;
}*/
@Bean
public
CacheManager
cacheManager
(
RedisConnectionFactory
redisConnectionFactory
)
{
RedisCacheConfiguration
redisCacheConfiguration
=
RedisCacheConfiguration
.
defaultCacheConfig
()
//.entryTtl(Duration.ofHours(1)) // 设置缓存有效期一小时
;
return
RedisCacheManager
.
builder
(
RedisCacheWriter
.
nonLockingRedisCacheWriter
(
redisConnectionFactory
))
.
cacheDefaults
(
redisCacheConfiguration
).
build
();
}
@Bean
public
RedisTemplate
<
String
,
Object
>
redisTemplate
(
RedisConnectionFactory
factory
)
{
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<>();
redisTemplate
.
setConnectionFactory
(
factory
);
// key序列化方式,但是如果方法上有Long等非String类型的话,会报类型转换错误
// 所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer
RedisSerializer
<
String
>
redisSerializer
=
new
StringRedisSerializer
();
// Long类型不可以会出现异常信息;
redisTemplate
.
setKeySerializer
(
redisSerializer
);
Jackson2JsonRedisSerializer
jackson2JsonRedisSerializer
=
new
Jackson2JsonRedisSerializer
(
Object
.
class
);
ObjectMapper
om
=
new
ObjectMapper
();
om
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
om
.
enableDefaultTyping
(
ObjectMapper
.
DefaultTyping
.
NON_FINAL
);
jackson2JsonRedisSerializer
.
setObjectMapper
(
om
);
redisTemplate
.
setValueSerializer
(
jackson2JsonRedisSerializer
);
redisTemplate
.
setHashValueSerializer
(
jackson2JsonRedisSerializer
);
redisTemplate
.
afterPropertiesSet
();
return
redisTemplate
;
}
}
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/config/StringToDateConverter.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
config
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
org.springframework.core.convert.converter.Converter
;
/**
* 字符串转换为Date
* @author lpf
* @date 2018年7月10日下午4:02:01
*/
public
class
StringToDateConverter
implements
Converter
<
String
,
Date
>
{
private
static
final
List
<
String
>
formarts
=
new
ArrayList
<
String
>(
4
);
static
{
formarts
.
add
(
"yyyy-MM"
);
formarts
.
add
(
"yyyy-MM-dd"
);
formarts
.
add
(
"yyyy-MM-dd hh:mm"
);
formarts
.
add
(
"yyyy-MM-dd HH:mm:ss"
);
}
@Override
public
Date
convert
(
String
source
)
{
String
value
=
source
.
trim
();
if
(
""
.
equals
(
value
))
{
return
null
;
}
if
(
source
.
matches
(
"^\\d{4}-\\d{1,2}$"
)){
return
parseDate
(
source
,
formarts
.
get
(
0
));
}
else
if
(
source
.
matches
(
"^\\d{4}-\\d{1,2}-\\d{1,2}$"
)){
return
parseDate
(
source
,
formarts
.
get
(
1
));
}
else
if
(
source
.
matches
(
"^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$"
)){
return
parseDate
(
source
,
formarts
.
get
(
2
));
}
else
if
(
source
.
matches
(
"^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$"
)){
return
parseDate
(
source
,
formarts
.
get
(
3
));
}
else
{
throw
new
IllegalArgumentException
(
"Invalid boolean value '"
+
source
+
"'"
);
}
}
public
Date
parseDate
(
String
dateStr
,
String
format
)
{
Date
date
=
null
;
try
{
DateFormat
dateFormat
=
new
SimpleDateFormat
(
format
);
date
=
(
Date
)
dateFormat
.
parse
(
dateStr
);
}
catch
(
Exception
e
)
{
}
return
date
;
}
}
core/src/main/java/com/zrqx/core/commons/config/Swagger2Config.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
config
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
com.zrqx.core.enums.env.EnvironmentInterface
;
import
com.zrqx.core.util.spring.SpringContextUtils
;
/**
* 访问地址
* http://ip:port/swagger-ui.html
最常用的5个注解
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
其它若干
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiClass
@ApiError
@ApiErrors
@ApiParamImplicit
@ApiParamsImplicit
*/
@EnableSwagger2
@Configuration
public
class
Swagger2Config
{
@Value
(
"${spring.application.name}"
)
private
String
serverName
;
@Autowired
private
EnvironmentInterface
environmentInterface
;
@Bean
public
Docket
createRestApi
()
{
return
environmentInterface
.
createRestApi
(
apiInfo
());
}
//构建 api文档的详细信息函数
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
//页面标题
.
title
(
serverName
+
" 测试使用 Swagger2 构建RESTful API"
)
//描述
.
description
(
serverName
+
"服务 API 描述"
)
//创建人
//.contact(new Contact("", "www.baidu.com", "cxinchang@126.com"))
//版本号
.
version
(
"4.0"
)
.
build
();
}
}
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/config/WebAppConfig.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
config
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.Set
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.convert.converter.Converter
;
import
org.springframework.format.support.FormattingConversionServiceFactoryBean
;
import
org.springframework.web.bind.support.ConfigurableWebBindingInitializer
;
import
org.springframework.web.servlet.config.annotation.CorsRegistry
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
import
com.zrqx.core.commons.interceptor.InterceptorConfig
;
import
com.zrqx.core.constant.sysuser.SysUserRequestPath
;
@Configuration
public
class
WebAppConfig
implements
WebMvcConfigurer
{
/**
* 跨域支持
*/
@Override
public
void
addCorsMappings
(
CorsRegistry
registry
)
{
registry
.
addMapping
(
"/**"
).
allowedOrigins
(
"*"
).
allowedMethods
(
"*"
).
allowCredentials
(
false
).
maxAge
(
3600
);
}
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
//注册自定义拦截器,添加拦截路径和排除拦截路径
registry
.
addInterceptor
(
new
InterceptorConfig
()).
addPathPatterns
(
SysUserRequestPath
.
BG
+
"/**"
)
.
excludePathPatterns
(
SysUserRequestPath
.
BG
+
SysUserRequestPath
.
PERMISSIONS
+
SysUserRequestPath
.
LOGIN
);
}
@Bean
public
Converter
<
String
,
Date
>
stringToDateConverter
()
{
StringToDateConverter
conver
=
new
StringToDateConverter
();
return
conver
;
}
@Bean
public
FormattingConversionServiceFactoryBean
conversionService
()
{
FormattingConversionServiceFactoryBean
bean
=
new
FormattingConversionServiceFactoryBean
();
Set
<
Converter
<?,
?>>
set
=
new
HashSet
<
Converter
<?,
?>>();
set
.
add
(
stringToDateConverter
());
bean
.
setConverters
(
set
);
return
bean
;
}
public
ConfigurableWebBindingInitializer
webBindingInitializer
(
@Autowired
ConfigurableWebBindingInitializer
config
)
{
config
.
setConversionService
(
conversionService
().
getObject
());
return
config
;
}
}
core/src/main/java/com/zrqx/core/commons/interceptor/CustomExceptionHandler.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
interceptor
;
import
com.zrqx.core.enums.ResponseCodeEnum
;
import
com.zrqx.core.enums.env.EnvironmentInterface
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.util.exception.ExceptionUtils
;
import
com.zrqx.core.util.response.CallBack
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.validation.BindException
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseStatus
;
import
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.sql.SQLException
;
import
java.util.Date
;
import
java.util.List
;
/**
* 异常处理通知
* @author lpf
* @date 2019年10月29日上午11:01:49
*/
@ControllerAdvice
public
class
CustomExceptionHandler
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
CustomExceptionHandler
.
class
);
@Autowired
private
EnvironmentInterface
environmentInterface
;
@ExceptionHandler
(
Exception
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
@ResponseBody
public
Object
handlerException
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Exception
e
){
e
.
printStackTrace
();
String
errorMsg
=
ExceptionUtils
.
getMessage
(
"请求地址:"
+
request
.
getRequestURI
()
+
";"
,
e
);
logger
.
error
(
errorMsg
,
e
);
return
CallBack
.
exception
(
errorMsg
);
}
@ExceptionHandler
(
BaseException
.
class
)
@ResponseStatus
(
HttpStatus
.
OK
)
@ResponseBody
public
Object
handlerException
(
HttpServletRequest
request
,
HttpServletResponse
response
,
BaseException
e
){
logger
.
error
(
e
.
getMessage
(),
e
);
String
errorMsg
=
ExceptionUtils
.
getMessage
(
"请求地址:"
+
request
.
getRequestURI
()
+
";"
,
e
);
return
CallBack
.
baseException
(
errorMsg
);
}
@ExceptionHandler
(
SQLException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
@ResponseBody
public
Object
handlerException
(
HttpServletRequest
request
,
SQLException
e
){
logger
.
error
(
"数据库异常:"
+
e
.
getMessage
(),
e
);
String
errorMsg
=
environmentInterface
.
handlerException
(
request
,
e
);
return
CallBack
.
exception
(
errorMsg
);
}
}
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/interceptor/CustomRequestInterceptor.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
interceptor
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
feign.RequestInterceptor
;
import
feign.RequestTemplate
;
@Component
public
class
CustomRequestInterceptor
implements
RequestInterceptor
{
@Autowired
private
ObjectMapper
objectMapper
;
@Override
public
void
apply
(
RequestTemplate
template
)
{
// feign 不支持 GET 方法传 POJO, json body转query
if
(
template
.
method
().
equals
(
"GET"
)
&&
template
.
body
()
!=
null
)
{
try
{
JsonNode
jsonNode
=
objectMapper
.
readTree
(
template
.
body
());
template
.
body
(
null
);
Map
<
String
,
Collection
<
String
>>
queries
=
new
HashMap
<>();
buildQuery
(
jsonNode
,
""
,
queries
);
template
.
queries
(
queries
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
private
void
buildQuery
(
JsonNode
jsonNode
,
String
path
,
Map
<
String
,
Collection
<
String
>>
queries
)
{
if
(!
jsonNode
.
isContainerNode
())
{
// 叶子节点
if
(
jsonNode
.
isNull
())
{
return
;
}
Collection
<
String
>
values
=
queries
.
get
(
path
);
if
(
null
==
values
)
{
values
=
new
ArrayList
<>();
queries
.
put
(
path
,
values
);
}
values
.
add
(
jsonNode
.
asText
());
return
;
}
if
(
jsonNode
.
isArray
())
{
// 数组节点
Iterator
<
JsonNode
>
it
=
jsonNode
.
elements
();
while
(
it
.
hasNext
())
{
buildQuery
(
it
.
next
(),
path
,
queries
);
}
}
else
{
Iterator
<
Map
.
Entry
<
String
,
JsonNode
>>
it
=
jsonNode
.
fields
();
while
(
it
.
hasNext
())
{
Map
.
Entry
<
String
,
JsonNode
>
entry
=
it
.
next
();
if
(
StringUtils
.
hasText
(
path
))
{
buildQuery
(
entry
.
getValue
(),
path
+
"."
+
entry
.
getKey
(),
queries
);
}
else
{
// 根节点
buildQuery
(
entry
.
getValue
(),
entry
.
getKey
(),
queries
);
}
}
}
}
}
core/src/main/java/com/zrqx/core/commons/interceptor/FeignHeaderInterceptor.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
interceptor
;
import
feign.RequestInterceptor
;
import
feign.RequestTemplate
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
/**
* Feign配置
* 使用FeignClient进行服务间调用,传递headers信息
* @author lw
* @date 2018年10月17日下午2:48:44
*/
@Component
@Configuration
public
class
FeignHeaderInterceptor
implements
RequestInterceptor
{
@Override
public
void
apply
(
RequestTemplate
requestTemplate
)
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
!=
null
)
{
HttpServletRequest
request
=
attributes
.
getRequest
();
// 前台token
if
(
request
.
getHeader
(
"Y-Token"
)
!=
null
){
requestTemplate
.
header
(
"Y-Token"
,
request
.
getHeader
(
"Y-Token"
));
}
// 后台token
if
(
request
.
getHeader
(
"X-Token"
)
!=
null
){
requestTemplate
.
header
(
"X-Token"
,
request
.
getHeader
(
"X-Token"
));
}
// 请求标识
if
(
request
.
getHeader
(
"sign"
)
!=
null
){
requestTemplate
.
header
(
"sign"
,
request
.
getHeader
(
"sign"
));
}
}
}
}
core/src/main/java/com/zrqx/core/commons/interceptor/InterceptorConfig.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
interceptor
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
public
class
InterceptorConfig
implements
HandlerInterceptor
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
InterceptorConfig
.
class
);
/**
* 进入controller层之前拦截请求
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @return
* @throws Exception
*/
@Override
public
boolean
preHandle
(
HttpServletRequest
httpServletRequest
,
HttpServletResponse
httpServletResponse
,
Object
o
)
throws
Exception
{
logger
.
info
(
"--------------处理请求之前的处理操作---------------"
);
return
true
;
}
@Override
public
void
postHandle
(
HttpServletRequest
httpServletRequest
,
HttpServletResponse
httpServletResponse
,
Object
o
,
ModelAndView
modelAndView
)
throws
Exception
{
logger
.
info
(
"--------------处理请求完成后视图渲染之前的处理操作---------------"
);
}
@Override
public
void
afterCompletion
(
HttpServletRequest
httpServletRequest
,
HttpServletResponse
httpServletResponse
,
Object
o
,
Exception
e
)
throws
Exception
{
logger
.
info
(
"---------------视图渲染之后的操作--------------------------"
);
}
}
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/lcn/TxManagerHttpRequestServiceImpl.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
lcn
;
/**
* create by lorne on 2017/11/18
*/
// @Service
public
class
TxManagerHttpRequestServiceImpl
{}
/*implements TxManagerHttpRequestService{
private static final Logger log = LoggerFactory.getLogger(TxManagerHttpRequestServiceImpl.class);
@Override
public String httpGet(String url) {
log.info("httpGet-start");
String res = HttpUtils.get(url);
log.info("httpGet-end");
return res;
}
@Override
public String httpPost(String url, String params) {
log.info("httpPost-start");
String res = HttpUtils.post(url,params);
log.info("httpPost-end");
return res;
}
}*/
core/src/main/java/com/zrqx/core/commons/lcn/TxManagerTxUrlServiceImpl.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
lcn
;
/**
* create by lorne on 2017/11/18
*/
// @Service
public
class
TxManagerTxUrlServiceImpl
{}
/*implements TxManagerTxUrlService{
private static final Logger log = LoggerFactory.getLogger(TxManagerTxUrlServiceImpl.class);
@Value("${tm.manager.url}")
private String url;
@Override
public String getTxUrl() {
log.info("load tm.manager.url ");
return url;
}
}
*/
\ No newline at end of file
core/src/main/java/com/zrqx/core/commons/lcn/TxTransactionInterceptor.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
lcn
;
//@Aspect
//@Component
public
class
TxTransactionInterceptor
{}
/*implements Ordered {
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
@Autowired
private TxManagerInterceptor txManagerInterceptor;
@Around(TxAdviceInterceptor.AOP_POINTCUT_EXPRESSION)
public Object around(ProceedingJoinPoint point)throws Throwable{
return txManagerInterceptor.around(point);
}
}*/
core/src/main/java/com/zrqx/core/commons/redis/BaseRedis.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
redis
;
import
java.io.IOException
;
import
java.util.HashSet
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.connection.jedis.JedisConnectionFactory
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.util.JsonUtil.JsonUtil
;
import
com.zrqx.core.util.datatype.StringUtils
;
/**
* redis 基础操作类
* @author lpf
* @date 2019年10月29日上午9:21:31
*/
public
abstract
class
BaseRedis
{
private
final
static
Logger
log
=
LoggerFactory
.
getLogger
(
BaseRedis
.
class
);
protected
StringRedisTemplate
stringRedisTemplate
;
private
final
String
SET_ERROR
=
"redis 存储信息时错误"
;
private
final
String
GET_NULL_ERROR
=
"redis获取信息时为空;"
;
protected
abstract
void
setStringRedisTemplate
(
StringRedisTemplate
stringRedisTemplate
);
/**
* 添加到redis
* @param token
* Key
* @param obj
* Value
* @param timeout
* 过期时间
* @param unit
* TimeUnitEnum 时间格式
* @throws IOException
*/
public
void
set
(
String
token
,
Object
obj
,
long
timeout
,
TimeUnit
unit
)
throws
BaseException
{
try
{
stringRedisTemplate
.
opsForValue
().
set
(
token
,
fmtObj
(
obj
),
timeout
,
unit
);
}
catch
(
Exception
e
)
{
this
.
exception
(
SET_ERROR
,
e
);
}
}
public
void
set
(
String
token
,
Object
obj
,
long
timeout
)
throws
IOException
{
try
{
stringRedisTemplate
.
opsForValue
().
set
(
token
,
fmtObj
(
obj
),
timeout
,
TimeUnit
.
SECONDS
);
}
catch
(
Exception
e
)
{
this
.
exception
(
SET_ERROR
,
e
);
}
}
private
void
exception
(
String
error
,
Exception
e
)
throws
BaseException
{
log
.
error
(
error
,
e
);
throw
new
BaseException
(
error
,
e
);
}
public
String
fmtObj
(
Object
obj
)
throws
IOException
{
return
obj
instanceof
String
?
obj
.
toString
():
JsonUtil
.
bean2Json
(
obj
);
}
public
Set
<
String
>
keys
(
String
k
)
{
if
(
StringUtils
.
isBlank
(
k
))
{
return
new
HashSet
<
String
>();
}
return
stringRedisTemplate
.
keys
(
k
);
}
/**
* 获取全部keys
* @return
* @author lpf
* @date: 2019年10月29日 上午11:00:10
*/
public
Set
<
String
>
keys
(){
return
this
.
keys
(
"*"
);
}
/**
* 根据key删除redis中的数据
* @param key 不能为null
* @throws IOException
*/
public
void
delete
(
String
key
){
stringRedisTemplate
.
delete
(
key
);
}
public
void
deletePattern
(
String
key
)
{
Set
<
String
>
set
=
keys
(
key
);
set
.
forEach
(
this
::
delete
);
}
/**
* 更换redis库
* @param num
* @author lpf
* @date: 2019年10月29日 上午9:46:39
*/
public
void
updateDatebase
(
int
num
)
{
JedisConnectionFactory
jedisConnectionFactory
=
(
JedisConnectionFactory
)
stringRedisTemplate
.
getConnectionFactory
();
jedisConnectionFactory
.
setDatabase
(
num
);
stringRedisTemplate
.
setConnectionFactory
(
jedisConnectionFactory
);
}
/**
* 查询key 的值
* @param key
* @return
* @author lpf
* @date: 2019年10月29日 上午9:49:53
*/
public
String
get
(
String
key
)
{
return
stringRedisTemplate
.
opsForValue
().
get
(
key
);
}
public
<
T
>
T
get
(
String
key
,
Class
<
T
>
clazz
)
{
String
value
=
this
.
get
(
key
);
if
(
StringUtils
.
isBlank
(
value
))
{
String
error
=
GET_NULL_ERROR
+
"key:"
+
key
;
this
.
exception
(
error
,
new
NullPointerException
(
error
));
}
try
{
return
JsonUtil
.
json2Bean
(
value
,
clazz
);
}
catch
(
Exception
e
)
{
this
.
exception
(
GET_NULL_ERROR
+
"解析JSON失败,value:"
+
value
+
";class:"
+
clazz
,
e
);
}
return
null
;
}
}
core/src/main/java/com/zrqx/core/commons/redis/Redis.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
commons
.
redis
;
import
java.util.Enumeration
;
import
javax.servlet.http.HttpServletRequest
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.form.member.fg.permissions.LoginMemberInfo
;
import
com.zrqx.core.model.sysuser.user.User
;
/**
* Redis消息管理 ,调用时不能用多线程调用
* @author lpf
*/
@Component
public
class
Redis
extends
BaseRedis
{
@Override
protected
void
setStringRedisTemplate
(
@Autowired
StringRedisTemplate
stringRedisTemplate
)
{
super
.
stringRedisTemplate
=
stringRedisTemplate
;
}
private
final
String
FG_TOKEN
=
"y-token"
;
private
final
String
BG_TOKEN
=
"x-token"
;
public
String
getBgToken
()
{
return
this
.
getToken
(
BG_TOKEN
);
}
public
String
getFgToken
()
{
return
this
.
getToken
(
FG_TOKEN
);
}
public
User
getUser
()
{
return
super
.
get
(
getBgToken
(),
User
.
class
);
}
public
LoginMemberInfo
getMember
()
{
return
super
.
get
(
getFgToken
(),
LoginMemberInfo
.
class
);
}
public
String
getToken
(
String
tokenName
)
{
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
Enumeration
<
String
>
headerNames
=
request
.
getHeaderNames
();
String
token
=
null
;
while
(
headerNames
.
hasMoreElements
())
{
String
key
=
(
String
)
headerNames
.
nextElement
();
if
(
key
.
toLowerCase
().
equals
(
tokenName
)){
token
=
request
.
getHeader
(
key
);
}
}
if
(
token
==
null
)
{
throw
new
BaseException
(
"请求头:"
+
tokenName
+
"为空,获取不到用户"
);
}
return
token
;
}
}
core/src/main/java/com/zrqx/core/enums/BooleanStatusEnum.java
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
;
import
com.zrqx.core.constant.resource.ValidateMessage
;
import
com.zrqx.core.exception.
ParameterValidat
eException
;
import
com.zrqx.core.exception.
Bas
eException
;
public
enum
BooleanStatusEnum
{
...
...
@@ -33,7 +33,7 @@ public enum BooleanStatusEnum {
return
true
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
/**
...
...
@@ -51,7 +51,7 @@ public enum BooleanStatusEnum {
return
BooleanStatusEnum
.
name
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
/**
...
...
@@ -69,7 +69,7 @@ public enum BooleanStatusEnum {
return
BooleanStatusEnum
.
code
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
public
String
getCode
()
{
...
...
core/src/main/java/com/zrqx/core/enums/EnvironmentEnum.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
;
import
java.util.HashMap
;
import
java.util.stream.Stream
;
import
com.zrqx.core.enums.interfaces.EnumsInterface
;
/**
* 0:测试环境
* 1:生产环境
* @author lpf
* @date 2019年3月22日上午10:04:17
*/
public
enum
EnvironmentEnum
implements
EnumsInterface
<
String
>{
/** 测试环境 */
TEST
(
"0"
,
"测试环境"
),
/** 生产环境 */
PRODUCT
(
"1"
,
"生产环境"
);
//状态码
private
final
String
code
;
private
final
String
name
;
private
static
final
HashMap
<
String
,
String
>
MAP
=
new
HashMap
<
String
,
String
>();
static
{
stream
().
forEach
(
e
->
{
MAP
.
put
(
e
.
code
,
e
.
name
);
});
}
/**
* @return
* @author lpf
* @date: 2019年3月18日 下午5:05:16
*/
public
static
Stream
<
EnvironmentEnum
>
stream
(){
return
Stream
.
of
(
values
());
}
private
EnvironmentEnum
(
String
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
/**
* 判断名称是否有效
* @param name
* @return
* @author lpf
* @date: 2018年6月11日 下午6:30:16
*/
public
static
boolean
isExist
(
String
code
)
{
return
stream
().
anyMatch
(
e
->
e
.
code
.
equals
(
code
));
}
/**
* 通过ID获取中文名称
* @param code
* @return
*/
public
static
String
getName
(
String
code
)
{
return
stream
().
filter
(
e
->
e
.
code
.
equals
(
code
)).
findFirst
().
map
(
e
->
e
.
name
).
orElse
(
null
);
}
public
String
getCode
()
{
return
code
;
}
public
String
getName
()
{
return
name
;
}
public
static
HashMap
<
String
,
String
>
getMap
()
{
return
MAP
;
}
}
core/src/main/java/com/zrqx/core/enums/LinkTypeEnum.java
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
;
import
com.zrqx.core.constant.resource.ValidateMessage
;
import
com.zrqx.core.exception.
ParameterValidat
eException
;
import
com.zrqx.core.exception.
Bas
eException
;
/**
* 链接类型枚举
...
...
@@ -37,7 +37,7 @@ public enum LinkTypeEnum {
return
true
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
/**
...
...
@@ -55,7 +55,7 @@ public enum LinkTypeEnum {
return
LinkTypeEnum
.
name
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
/**
...
...
@@ -73,7 +73,7 @@ public enum LinkTypeEnum {
return
LinkTypeEnum
.
code
;
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
public
String
getCode
()
{
...
...
core/src/main/java/com/zrqx/core/enums/ResponseCodeEnum.java
浏览文件 @
7b42ba3e
...
...
@@ -10,20 +10,14 @@ package com.zrqx.core.enums;
*/
public
enum
ResponseCodeEnum
{
/**
0
,操作成功" */
OK
(
0
,
"操作成功"
),
/**
200
,操作成功" */
OK
(
20
0
,
"操作成功"
),
/** -1,操作失败" */
FAIL
(-
1
,
"操作失败"
),
/** -2,验证不通过" */
VALIDATE
(-
2
,
"验证不通过"
),
/** -3,服务器异常" */
EXCEPTION
(-
3
,
"服务器异常"
),
/** -4 接口调用 参数类型转换异常*/
BIND_EXCEPTION
(-
4
,
"不合法的参数"
),
/** -5 接口调用缺少必填参数 */
MISS_EXCEPTION
(-
5
,
"缺少必填参数"
),
/** -6 登录过期或未登录 */
NO_LOGIN
(-
6
,
"请重新登录"
);
/** 500,服务器异常" */
EXCEPTION
(
500
,
"服务器异常"
),
/** 600, BaseException */
BASE_EXCEPTION
(
600
,
"BaseException"
);
private
final
int
code
;
private
final
String
msg
;
private
ResponseCodeEnum
(
int
code
,
String
msg
)
{
...
...
core/src/main/java/com/zrqx/core/enums/env/EnvironmentInterface.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
env
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
java.sql.SQLException
;
import
javax.servlet.http.HttpServletRequest
;
import
com.zrqx.core.commons.config.ConfigServerParams
;
import
com.zrqx.core.enums.EnvironmentEnum
;
import
com.zrqx.core.enums.interfaces.EnumsBindBean
;
/**
* {@link ConfigServerParams}
* 服务环境绑定的操作
* @author lpf
* @date 2019年3月22日上午11:34:19
*/
public
interface
EnvironmentInterface
extends
EnumsBindBean
<
EnvironmentEnum
>
{
/**
* swaager-ui对象
* @return
* @author lpf
* @date: 2019年3月22日 下午1:42:20
*/
Docket
createRestApi
(
ApiInfo
info
);
/**
* sql异常处理方案 测试环境需要返回出去,生产环境sql异常不能返回出去。
* @param request
* @param e
* @return
* @author lpf
* @date: 2019年10月29日 上午11:48:40
*/
String
handlerException
(
HttpServletRequest
request
,
SQLException
e
);
/**
* 生成样书申请编码
* 测试环境: ZRQX + YS + 2随机字母 + yyyyMMddHHmmssSSSS
* 生产环境: YS + 2随机字母 + yyyyMMddHHmmssSSSS
* @return
* @author lpf
* @date: 2019年5月15日 下午3:27:13
*/
String
createSampleBookApplyCode
();
/**
* 生成订单号
* Z + 2随机字母 + yyyyMMddHHmmssSSSS
* @return
* @author lpf
* @date: 2019年8月7日 上午9:47:38
*/
String
createOrderCode
();
}
core/src/main/java/com/zrqx/core/enums/env/impl/AbstractEnvironment.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
env
.
impl
;
import
java.util.function.Consumer
;
import
com.zrqx.core.enums.env.EnvironmentInterface
;
import
com.zrqx.core.util.datatype.CodeUtils
;
import
com.zrqx.core.util.datatype.StringUtil
;
public
abstract
class
AbstractEnvironment
implements
EnvironmentInterface
{
@Override
public
String
createSampleBookApplyCode
()
{
return
this
.
initRandomOrderCode
(
b
->
b
.
append
(
"YS"
));
}
@Override
public
String
createOrderCode
()
{
return
this
.
initRandomOrderCode
(
b
->
b
.
append
(
StringUtil
.
getRandomEnSign
(
1
,
2
,
0
)));
}
/**
* 基础生成编码规则
* 测试环境: ZRQX + 2随机字母 + yyyyMMddHHmmssSSSS
* 生产环境: 2随机字母 + yyyyMMddHHmmssSSSS
* @return
* @author ydm
* @date: 2018年8月13日 下午2:31:44
*/
protected
String
initRandomOrderCode
(
Consumer
<
StringBuffer
>
before
)
{
Consumer
<
StringBuffer
>
first
=
this
::
beforeCreateCode
;
Consumer
<
StringBuffer
>
joinConsumer
=
first
.
andThen
(
before
);
return
CodeUtils
.
beforeInitRandomOrderCode
(
joinConsumer
);
}
/**
* 创建编码之前执行程序, 返回值用于拼接到编码上(返回值+创建编码)
* @return
* @author lpf
* @date: 2019年5月15日 下午3:31:18
*/
protected
abstract
void
beforeCreateCode
(
StringBuffer
code
);
}
core/src/main/java/com/zrqx/core/enums/env/impl/ProductEnvironmentImpl.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
env
.
impl
;
import
java.sql.SQLException
;
import
java.util.Arrays
;
import
java.util.List
;
import
javax.servlet.http.HttpServletRequest
;
import
org.springframework.stereotype.Component
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
com.zrqx.core.enums.EnvironmentEnum
;
import
com.zrqx.core.enums.ResponseCodeEnum
;
import
com.zrqx.core.enums.env.EnvironmentInterface
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.model.sysuser.user.User
;
/**
* 生产环境绑定操作
* @author lpf
* @date 2019年3月22日上午11:40:41
*/
public
class
ProductEnvironmentImpl
extends
AbstractEnvironment
{
@Override
public
List
<
EnvironmentEnum
>
getEnums
()
{
return
Arrays
.
asList
(
EnvironmentEnum
.
PRODUCT
);
}
@Override
public
Docket
createRestApi
(
ApiInfo
info
)
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
info
)
.
select
()
//为当前包路径 不存在的包路径
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.zrqx.prod"
))
.
paths
(
PathSelectors
.
any
())
.
build
();
}
@Override
protected
void
beforeCreateCode
(
StringBuffer
code
)
{
}
@Override
public
String
handlerException
(
HttpServletRequest
request
,
SQLException
e
)
{
return
null
;
}
}
core/src/main/java/com/zrqx/core/enums/env/impl/TestEnvironmentImpl.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
env
.
impl
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
javax.servlet.http.HttpServletRequest
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.zrqx.core.enums.EnvironmentEnum
;
import
com.zrqx.core.util.exception.ExceptionUtils
;
import
springfox.documentation.builders.ParameterBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.schema.ModelRef
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.service.Parameter
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
/**
* 测试环境操作
* @author lpf
* @date 2019年3月22日上午11:35:54
*/
public
class
TestEnvironmentImpl
extends
AbstractEnvironment
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
TestEnvironmentImpl
.
class
);
@Override
public
List
<
EnvironmentEnum
>
getEnums
()
{
return
Arrays
.
asList
(
EnvironmentEnum
.
TEST
);
}
@Override
public
Docket
createRestApi
(
ApiInfo
info
)
{
//添加head参数start
ParameterBuilder
tokenPar
=
new
ParameterBuilder
();
List
<
Parameter
>
pars
=
new
ArrayList
<
Parameter
>();
tokenPar
.
name
(
"y-token"
).
description
(
"令牌"
).
modelRef
(
new
ModelRef
(
"string"
)).
parameterType
(
"header"
).
required
(
false
).
build
();
ParameterBuilder
tokenPar1
=
new
ParameterBuilder
();
tokenPar1
.
name
(
"x-token"
).
description
(
"后台令牌"
).
modelRef
(
new
ModelRef
(
"string"
)).
parameterType
(
"header"
).
required
(
false
).
build
();
pars
.
add
(
tokenPar
.
build
());
pars
.
add
(
tokenPar1
.
build
());
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
info
)
.
select
()
//为当前包路径
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.zrqx"
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
globalOperationParameters
(
pars
);
}
@Override
protected
void
beforeCreateCode
(
StringBuffer
code
)
{
code
.
append
(
"Z"
);
}
@Override
public
String
handlerException
(
HttpServletRequest
request
,
SQLException
e
)
{
return
ExceptionUtils
.
getMessage
(
"请求地址:"
+
request
.
getRequestURI
()
+
";"
,
e
);
}
}
core/src/main/java/com/zrqx/core/enums/order/OrderInvoiceStatusEnum.java
浏览文件 @
7b42ba3e
...
...
@@ -4,7 +4,7 @@ import java.util.Arrays;
import
java.util.HashMap
;
import
java.util.List
;
import
com.zrqx.core.exception.B
usinessValidat
eException
;
import
com.zrqx.core.exception.B
as
eException
;
/**
* 订单发票状态<br>
...
...
@@ -95,7 +95,7 @@ public enum OrderInvoiceStatusEnum {
public
static
boolean
isCanMake
(
String
status
){
if
(
status
==
null
)
{
// 抛异常,需核实是否进行了初始化开票状态
throw
new
B
usinessValidat
eException
(
"OrderInvoiceStatusEnum#isCanMake开票状态为空"
);
throw
new
B
as
eException
(
"OrderInvoiceStatusEnum#isCanMake开票状态为空"
);
}
List
<
OrderInvoiceStatusEnum
>
canMakeList
=
canMake
();
for
(
OrderInvoiceStatusEnum
can
:
canMakeList
)
{
...
...
core/src/main/java/com/zrqx/core/enums/resource/EbookOptionEnum.java
浏览文件 @
7b42ba3e
...
...
@@ -3,7 +3,7 @@ package com.zrqx.core.enums.resource;
import
java.util.HashMap
;
import
com.zrqx.core.constant.resource.ValidateMessage
;
import
com.zrqx.core.exception.
ParameterValidat
eException
;
import
com.zrqx.core.exception.
Bas
eException
;
/**
* 医著高级查询----筛选
...
...
@@ -104,7 +104,7 @@ public enum EbookOptionEnum {
return
bookTypeEnum
.
getCode
();
}
}
throw
new
ParameterValidat
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
throw
new
Bas
eException
(
ValidateMessage
.
STATUS_EXCEPTION
);
}
public
String
getCode
()
{
...
...
core/src/main/java/com/zrqx/core/enums/sql/SqlConditionEnum.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
;
import
java.util.HashMap
;
import
java.util.stream.Stream
;
import
com.zrqx.core.enums.interfaces.EnumsInterface
;
import
com.zrqx.core.enums.sql.impl.LikeSqlCondition
;
import
com.zrqx.core.enums.sql.impl.ListSqlCondition
;
import
com.zrqx.core.enums.sql.impl.RegexpSqlCondition
;
import
com.zrqx.core.enums.sql.impl.SimpleSqlCondition
;
import
com.zrqx.core.exception.BaseException
;
/**
* sql 条件枚举
* @author lpf
* @date 2019年7月31日下午4:43:10
*/
public
enum
SqlConditionEnum
implements
EnumsInterface
<
String
>{
/** equal to 等于 */
EQ
(
"="
,
"eq"
,
SimpleSqlCondition
.
getInstance
()),
/** less than 小于 */
LT
(
"<"
,
"lt"
,
SimpleSqlCondition
.
getInstance
()),
/** greater than 大于 */
GT
(
">"
,
"gt"
,
SimpleSqlCondition
.
getInstance
()),
/** less than or equal to 小于等于 */
LE
(
"<="
,
"le"
,
SimpleSqlCondition
.
getInstance
()),
/** greater than or equal to 大于等于 */
GE
(
">="
,
"ge"
,
SimpleSqlCondition
.
getInstance
()),
/** not equal to 不等于 <> */
NE
(
"!="
,
"ne"
,
SimpleSqlCondition
.
getInstance
()),
/** in */
IN
(
"in"
,
"in"
,
ListSqlCondition
.
getInstance
()),
/** not in */
NIN
(
"not in"
,
"nin"
,
ListSqlCondition
.
getInstance
()),
/** all like */
LIKE
(
"like"
,
"like"
,
LikeSqlCondition
.
getInstance
()),
/** right like */
RIGHT_LIKE
(
"like"
,
"rlike"
,
LikeSqlCondition
.
getInstance
()),
/** left like */
LEFT_LIKE
(
"like"
,
"llike"
,
LikeSqlCondition
.
getInstance
()),
/** REGEXP */
REGEXP
(
"REGEXP"
,
"regexp"
,
RegexpSqlCondition
.
getInstance
());
/**
* regular: SqlConditionEnum
*/
private
static
final
HashMap
<
String
,
SqlConditionEnum
>
MAP
=
new
HashMap
<
String
,
SqlConditionEnum
>();
/** 数据库关键字 */
private
final
String
key
;
/** 正则匹配内容 */
private
final
String
regular
;
private
final
SqlConditionInterface
fun
;
private
SqlConditionEnum
(
String
key
,
String
regular
,
SqlConditionInterface
fun
)
{
this
.
key
=
key
;
this
.
regular
=
regular
;
this
.
fun
=
fun
;
}
static
{
stream
().
forEach
(
e
->
{
MAP
.
put
(
e
.
regular
,
e
);
});
}
/**
* @return
* @author lpf
* @date: 2019年3月18日 下午5:05:16
*/
public
static
Stream
<
SqlConditionEnum
>
stream
(){
return
Stream
.
of
(
values
());
}
/**
* 根据正则匹配查找枚举
* @param regular
* @return
* @author lpf
* @date: 2019年7月31日 下午5:13:00
*/
public
static
SqlConditionEnum
get
(
String
regular
)
{
SqlConditionEnum
result
=
MAP
.
get
(
regular
);
if
(
result
==
null
)
{
throw
new
BaseException
(
"根据regular获取SqlConditionEnum为空:"
+
regular
);
}
return
result
;
}
public
String
getKey
()
{
return
key
;
}
public
String
getRegular
()
{
return
regular
;
}
@Override
public
String
getCode
()
{
return
regular
;
}
@Override
public
String
getName
()
{
return
key
;
}
public
SqlConditionInterface
getFun
()
{
return
fun
;
}
}
core/src/main/java/com/zrqx/core/enums/sql/SqlConditionInterface.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
;
import
com.zrqx.core.enums.interfaces.EnumsBindBean
;
/**
* sql操作 行为接口
* @author lpf
* @date 2019年8月1日下午2:27:39
*/
public
interface
SqlConditionInterface
extends
EnumsBindBean
<
SqlConditionEnum
>
{
/**
* sql条件缩写转换为 xml判断条件
* eq(m.type, query.type) ->
* <if test = 'NOTBLANK (query.type)'>
* and m.type = #{query.type}
* </if>
* @param en xml中运算符号 SqlConditionEnum.key
* @param column 列名
* @param attr 属性名
* @return
* @author lpf
* @date: 2019年8月1日 下午2:22:19
*/
String
apply
(
SqlConditionEnum
en
,
String
column
,
String
attr
);
}
core/src/main/java/com/zrqx/core/enums/sql/impl/LikeSqlCondition.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
.
impl
;
import
java.util.Arrays
;
import
java.util.List
;
import
com.zrqx.core.enums.sql.SqlConditionEnum
;
import
com.zrqx.core.enums.sql.SqlConditionInterface
;
import
com.zrqx.core.mapper.BaseMapper
;
public
class
LikeSqlCondition
implements
SqlConditionInterface
{
@Override
public
List
<
SqlConditionEnum
>
getEnums
()
{
return
Arrays
.
asList
(
SqlConditionEnum
.
LIKE
,
SqlConditionEnum
.
RIGHT_LIKE
,
SqlConditionEnum
.
LEFT_LIKE
);
}
/**
* like(m.name,query.name)
* "<if test = '" + NOTBLANK + "(query.name)'> "
" and m.name like concat('%',#{query.name},'%') "
" </if> "
* @see com.zrqx.core.enums.sql.SqlConditionInterface#apply(java.lang.String, java.lang.String, java.lang.String)
* @param en
* @param column
* @param attr
* @return
* @author lpf
* @date: 2019年8月1日 下午3:01:30
*/
@Override
public
String
apply
(
SqlConditionEnum
en
,
String
column
,
String
attr
)
{
StringBuffer
sb
=
new
StringBuffer
(
" <if test = '"
);
sb
.
append
(
BaseMapper
.
NOTBLANK
);
sb
.
append
(
"("
);
sb
.
append
(
attr
);
sb
.
append
(
")'>"
);
sb
.
append
(
" and "
);
sb
.
append
(
column
);
sb
.
append
(
" "
);
sb
.
append
(
en
.
getKey
());
sb
.
append
(
" concat("
);
if
(
SqlConditionEnum
.
LIKE
.
equals
(
en
)
||
SqlConditionEnum
.
LEFT_LIKE
.
equals
(
en
))
{
sb
.
append
(
"'%',"
);
}
sb
.
append
(
" #{"
);
sb
.
append
(
attr
);
sb
.
append
(
"}"
);
if
(
SqlConditionEnum
.
LIKE
.
equals
(
en
)
||
SqlConditionEnum
.
RIGHT_LIKE
.
equals
(
en
))
{
sb
.
append
(
",'%'"
);
}
sb
.
append
(
")"
);
sb
.
append
(
" </if>"
);
return
sb
.
toString
();
}
private
LikeSqlCondition
(){}
public
static
LikeSqlCondition
getInstance
(){
return
DefultStatusImplHolder
.
LAZY
;
}
private
static
class
DefultStatusImplHolder
{
private
static
final
LikeSqlCondition
LAZY
=
new
LikeSqlCondition
();
}
}
core/src/main/java/com/zrqx/core/enums/sql/impl/ListSqlCondition.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
.
impl
;
import
java.util.Arrays
;
import
java.util.List
;
import
com.zrqx.core.enums.sql.SqlConditionEnum
;
import
com.zrqx.core.enums.sql.SqlConditionInterface
;
import
com.zrqx.core.mapper.BaseMapper
;
/**
* 解析list操作
* @author lpf
* @date 2019年8月1日下午2:35:45
*/
public
class
ListSqlCondition
implements
SqlConditionInterface
{
/**
* in notin
* @see com.zrqx.core.enums.interfaces.EnumsBindBean#getEnums()
* @return
* @author lpf
* @date: 2019年8月1日 下午2:37:16
*/
@Override
public
List
<
SqlConditionEnum
>
getEnums
()
{
return
Arrays
.
asList
(
SqlConditionEnum
.
IN
,
SqlConditionEnum
.
NIN
);
}
/**
* in(m.type, query.type)
* <if test=' LIST_NOT_EMPTY ( query.type )'>
AND query.type in
<foreach item='item' index='index' collection= 'query.type' open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
* @see com.zrqx.core.enums.sql.SqlConditionInterface#apply(com.zrqx.core.enums.sql.SqlConditionEnum, java.lang.String, java.lang.String)
* @param en
* @param column
* @param attr
* @return
* @author lpf
* @date: 2019年8月1日 下午3:18:58
*/
@Override
public
String
apply
(
SqlConditionEnum
en
,
String
column
,
String
attr
)
{
StringBuffer
sb
=
new
StringBuffer
(
" <if test = '"
);
sb
.
append
(
BaseMapper
.
LIST_NOT_EMPTY
);
sb
.
append
(
"("
);
sb
.
append
(
attr
);
sb
.
append
(
")'>"
);
sb
.
append
(
" and "
);
sb
.
append
(
column
);
sb
.
append
(
" "
);
sb
.
append
(
en
.
getKey
());
sb
.
append
(
" <foreach item='item' index='index' collection= '"
);
sb
.
append
(
attr
);
sb
.
append
(
"' open='(' separator=',' close=')'> "
);
sb
.
append
(
"#{item}"
);
sb
.
append
(
" </foreach>"
);
sb
.
append
(
" </if>"
);
return
sb
.
toString
();
}
private
ListSqlCondition
(){}
public
static
ListSqlCondition
getInstance
(){
return
DefultStatusImplHolder
.
LAZY
;
}
private
static
class
DefultStatusImplHolder
{
private
static
final
ListSqlCondition
LAZY
=
new
ListSqlCondition
();
}
}
core/src/main/java/com/zrqx/core/enums/sql/impl/RegexpSqlCondition.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
.
impl
;
import
java.util.Arrays
;
import
java.util.List
;
import
com.zrqx.core.enums.sql.SqlConditionEnum
;
import
com.zrqx.core.enums.sql.SqlConditionInterface
;
import
com.zrqx.core.mapper.BaseMapper
;
public
class
RegexpSqlCondition
implements
SqlConditionInterface
{
@Override
public
List
<
SqlConditionEnum
>
getEnums
()
{
return
Arrays
.
asList
(
SqlConditionEnum
.
REGEXP
);
}
/**
*
* @see com.zrqx.core.enums.sql.SqlConditionInterface#apply(com.zrqx.core.enums.sql.SqlConditionEnum, java.lang.String, java.lang.String)
* @param en
* @param column
* @param attr
* @return
* @author lpf
* @date: 2019年8月1日 下午3:30:48
*/
@Override
public
String
apply
(
SqlConditionEnum
en
,
String
column
,
String
attr
)
{
StringBuffer
sb
=
new
StringBuffer
(
" <if test = '"
);
sb
.
append
(
BaseMapper
.
LIST_NOT_EMPTY
);
sb
.
append
(
"("
);
sb
.
append
(
attr
);
sb
.
append
(
")'>"
);
sb
.
append
(
" and "
);
sb
.
append
(
column
);
sb
.
append
(
" "
);
sb
.
append
(
en
.
getKey
());
sb
.
append
(
" REPLACE(<foreach item='item' index='index' collection= '"
);
sb
.
append
(
attr
);
sb
.
append
(
"' open='(' separator=',' close=')'> "
);
sb
.
append
(
"^#{item}"
);
sb
.
append
(
" </foreach>,' ','') "
);
sb
.
append
(
" </if>"
);
return
sb
.
toString
();
}
private
RegexpSqlCondition
(){}
public
static
RegexpSqlCondition
getInstance
(){
return
DefultStatusImplHolder
.
LAZY
;
}
private
static
class
DefultStatusImplHolder
{
private
static
final
RegexpSqlCondition
LAZY
=
new
RegexpSqlCondition
();
}
}
core/src/main/java/com/zrqx/core/enums/sql/impl/SimpleSqlCondition.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
enums
.
sql
.
impl
;
import
java.util.Arrays
;
import
java.util.List
;
import
com.zrqx.core.enums.sql.SqlConditionEnum
;
import
com.zrqx.core.enums.sql.SqlConditionInterface
;
import
com.zrqx.core.mapper.BaseMapper
;
/**
* 简单操作
* @author lpf
* @date 2019年8月1日下午2:35:27
*/
public
class
SimpleSqlCondition
implements
SqlConditionInterface
{
/**
* = < > <= >= !=
* @see com.zrqx.core.enums.interfaces.EnumsBindBean#getEnums()
* @return
* @author lpf
* @date: 2019年8月1日 下午2:33:27
*/
@Override
public
List
<
SqlConditionEnum
>
getEnums
()
{
return
Arrays
.
asList
(
SqlConditionEnum
.
EQ
,
SqlConditionEnum
.
LT
,
SqlConditionEnum
.
GT
,
SqlConditionEnum
.
LE
,
SqlConditionEnum
.
GE
,
SqlConditionEnum
.
NE
);
}
/**
* sql条件缩写转换为 xml判断条件
* eq(m.type, query.type) ->
* <if test = 'NOTBLANK (query.type)'>
* and m.type = #{query.type}
* </if>
* @param en xml中运算符号 SqlConditionEnum.key
* @param column 列名
* @param attr 属性名
* @return
* @author lpf
* @date: 2019年8月1日 下午2:22:19
*/
@Override
public
String
apply
(
SqlConditionEnum
en
,
String
column
,
String
attr
)
{
StringBuffer
sb
=
new
StringBuffer
(
" <if test = '"
);
sb
.
append
(
BaseMapper
.
NOTBLANK
);
sb
.
append
(
"("
);
sb
.
append
(
attr
);
sb
.
append
(
")'>"
);
sb
.
append
(
" and "
);
sb
.
append
(
column
);
sb
.
append
(
" "
);
sb
.
append
(
en
.
getKey
());
sb
.
append
(
" #{"
);
sb
.
append
(
attr
);
sb
.
append
(
"} </if>"
);
return
sb
.
toString
();
}
private
SimpleSqlCondition
(){}
public
static
SimpleSqlCondition
getInstance
(){
return
DefultStatusImplHolder
.
LAZY
;
}
private
static
class
DefultStatusImplHolder
{
private
static
final
SimpleSqlCondition
LAZY
=
new
SimpleSqlCondition
();
}
}
core/src/main/java/com/zrqx/core/exception/BusinessValidateException.java
deleted
100644 → 0
浏览文件 @
849aa409
package
com
.
zrqx
.
core
.
exception
;
import
com.zrqx.core.enums.ResponseCodeEnum
;
/**
* 业务验证异常
* @author lpf
* @date 2018年8月10日下午4:28:59
*/
public
class
BusinessValidateException
extends
BaseException
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
//无参构造方法
public
BusinessValidateException
()
{
super
(
ResponseCodeEnum
.
VALIDATE
.
getCode
(),
ResponseCodeEnum
.
VALIDATE
.
getMsg
());
}
//有参的构造方法
public
BusinessValidateException
(
String
message
)
{
super
(
ResponseCodeEnum
.
VALIDATE
.
getCode
(),
message
);
}
//有参的构造方法
public
BusinessValidateException
(
int
code
,
String
message
){
super
(
code
,
message
);
}
//有参的构造方法
public
BusinessValidateException
(
ResponseCodeEnum
res
){
super
(
res
);
}
}
core/src/main/java/com/zrqx/core/exception/LoginValidateException.java
deleted
100644 → 0
浏览文件 @
849aa409
package
com
.
zrqx
.
core
.
exception
;
import
com.zrqx.core.enums.ResponseCodeEnum
;
/**
* 登陆验证异常
* @author ycw
* @date 2018年12月26日下午2:28:59
*/
public
class
LoginValidateException
extends
BaseException
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
//无参构造方法
public
LoginValidateException
()
{
super
(
ResponseCodeEnum
.
NO_LOGIN
.
getCode
(),
ResponseCodeEnum
.
NO_LOGIN
.
getMsg
());
}
//有参的构造方法
public
LoginValidateException
(
String
message
)
{
super
(
ResponseCodeEnum
.
NO_LOGIN
.
getCode
(),
message
);
}
//有参的构造方法
public
LoginValidateException
(
int
code
,
String
message
){
super
(
code
,
message
);
}
//有参的构造方法
public
LoginValidateException
(
ResponseCodeEnum
res
){
super
(
res
);
}
}
core/src/main/java/com/zrqx/core/exception/ParameterValidateException.java
deleted
100644 → 0
浏览文件 @
849aa409
package
com
.
zrqx
.
core
.
exception
;
import
com.zrqx.core.enums.ResponseCodeEnum
;
/**
* 参数校验异常
* @author lpf
* @date 2018年5月30日上午10:00:58
*/
public
class
ParameterValidateException
extends
BaseException
{
private
static
final
long
serialVersionUID
=
1L
;
//无参构造方法
public
ParameterValidateException
(){
super
(
ResponseCodeEnum
.
VALIDATE
.
getCode
(),
ResponseCodeEnum
.
VALIDATE
.
getMsg
());
}
//有参的构造方法
public
ParameterValidateException
(
String
message
){
super
(
ResponseCodeEnum
.
VALIDATE
.
getCode
(),
message
);
}
//有参的构造方法
public
ParameterValidateException
(
int
code
,
String
message
){
super
(
code
,
message
);
}
//有参的构造方法
public
ParameterValidateException
(
ResponseCodeEnum
res
){
super
(
res
);
}
}
core/src/main/java/com/zrqx/core/mapper/SqlXMLLanguageDriver.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
mapper
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
org.apache.ibatis.mapping.SqlSource
;
import
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
;
import
org.apache.ibatis.session.Configuration
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.zrqx.core.enums.sql.SqlConditionEnum
;
public
class
SqlXMLLanguageDriver
extends
XMLLanguageDriver
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SqlXMLLanguageDriver
.
class
);
private
static
String
REGULAR
;
static
{
logger
.
info
(
"生成则表达式"
);
// String regular = "(eq|like|nin|regexp)\\((\\w*\\.?\\w+),\\s*(\\w*\\.?\\w+)\\)";
StringBuffer
sb
=
new
StringBuffer
(
"("
);
SqlConditionEnum
.
stream
().
forEach
(
s
->
{
sb
.
append
(
s
.
getRegular
());
sb
.
append
(
"|"
);
});
sb
.
deleteCharAt
(
sb
.
length
()
-
1
);
sb
.
append
(
")"
);
sb
.
append
(
"\\((\\w*\\.?\\w+),\\s*(\\w*\\.?\\w+)\\)"
);
REGULAR
=
sb
.
toString
();
logger
.
info
(
"匹配sql正则"
+
REGULAR
);
}
@Override
public
SqlSource
createSqlSource
(
Configuration
configuration
,
String
script
,
Class
<?>
parameterType
)
{
logger
.
info
(
"configuration:"
+
configuration
+
";script:"
+
script
+
";parameterType:"
+
parameterType
);
logger
.
info
(
"sql script:"
+
script
);
String
afterScript
=
this
.
apply
(
script
);
logger
.
info
(
"fmt script: "
+
afterScript
);
return
super
.
createSqlSource
(
configuration
,
afterScript
,
parameterType
);
}
public
String
apply
(
String
script
){
Pattern
pattern
=
Pattern
.
compile
(
REGULAR
,
Pattern
.
CASE_INSENSITIVE
);
Matcher
m
=
pattern
.
matcher
(
script
);
StringBuffer
sb
=
new
StringBuffer
();
while
(
m
.
find
())
{
// 操作
String
con
=
m
.
group
(
1
);
SqlConditionEnum
en
=
SqlConditionEnum
.
get
(
con
.
toLowerCase
());
String
column
=
m
.
group
(
2
);
String
attr
=
m
.
group
(
3
);
String
str
=
en
.
getFun
().
apply
(
en
,
column
,
attr
);
m
.
appendReplacement
(
sb
,
str
);
}
m
.
appendTail
(
sb
);
return
sb
.
toString
();
}
}
core/src/main/java/com/zrqx/core/util/datatype/CodeUtils.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
util
.
datatype
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.function.Consumer
;
import
com.zrqx.core.util.datatype.StringUtil
;
/**
* 单号生成工具类
* @author lpf
* @date 2019年1月11日下午2:30:19
*/
public
class
CodeUtils
{
/**
* 生成编码之前插入
* @param before
* @return
* @author lpf
* @date: 2019年5月15日 下午3:38:01
*/
public
static
String
beforeInitRandomOrderCode
(
Consumer
<
StringBuffer
>
before
)
{
return
initRandomOrderCode
(
before
,
b
->
{});
}
/**
* 生成编码之后插入
* @param after
* @return
* @author lpf
* @date: 2019年5月15日 下午3:38:12
*/
public
static
String
afterInitRandomOrderCode
(
Consumer
<
StringBuffer
>
after
)
{
return
initRandomOrderCode
(
b
->
{},
after
);
}
/**
* 基础生成编码规则
* 测试环境: ZRQX + 2随机字母 + yyyyMMddHHmmssSSSS
* 生产环境: 2随机字母 + yyyyMMddHHmmssSSSS
* @return
* @author ydm
* @date: 2018年8月13日 下午2:31:44
*/
public
static
String
initRandomOrderCode
(
Consumer
<
StringBuffer
>
before
,
Consumer
<
StringBuffer
>
after
)
{
StringBuffer
result
=
new
StringBuffer
();
before
.
accept
(
result
);
// result.append(StringUtil.getRandomEnSign(1,2,0));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyyMMddHHmmssSSSS"
);
result
.
append
(
sdf
.
format
(
new
Date
()));
after
.
accept
(
result
);
return
result
.
toString
();
}
}
core/src/main/java/com/zrqx/core/util/datatype/StringUtils.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
util
.
datatype
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
/**
* 字符串的一些公共方法
* @ClassName: StringUtils
* @author
* @date 2014-7-14 上午11:14:00
*
*/
public
class
StringUtils
extends
org
.
apache
.
commons
.
lang3
.
StringUtils
{
private
final
static
String
[]
agent
=
{
"Android"
,
"iPhone"
,
"iPod"
,
"iPad"
,
"Windows Phone"
,
"MQQBrowser"
};
private
final
static
String
[]
enletters
=
{
"a"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"n"
,
"o"
,
"p"
,
"q"
,
"r"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
};
public
static
boolean
isNotBlank
(
Integer
value
){
return
value
!=
null
;
}
/**
* 判断User-Agent 是不是来自于手机
* @param ua
* @return
*/
public
static
boolean
checkAgentIsMobile
(
String
ua
)
{
boolean
flag
=
false
;
if
(!
ua
.
contains
(
"Windows NT"
)
||
(
ua
.
contains
(
"Windows NT"
)
&&
ua
.
contains
(
"compatible; MSIE 9.0;"
)))
{
// 排除 苹果桌面系统
if
(!
ua
.
contains
(
"Windows NT"
)
&&
!
ua
.
contains
(
"Macintosh"
))
{
for
(
String
item
:
agent
)
{
if
(
ua
.
contains
(
item
))
{
flag
=
true
;
break
;
}
}
}
}
return
flag
;
}
/**
* 给定指定字符串res,去除字符串首尾的指定字符c
* @Title: trim
* @param res 原字符串
* @param c 要删除的字符,只删除首尾,且不能截取Unicode 大于 'A'的字符
* @return
* @return String 返回类型
* @author
* @date 2014-7-14 上午11:21:21
*/
public
static
String
trim
(
String
res
,
char
c
)
{
int
count
=
res
.
toCharArray
().
length
;
int
len
=
res
.
toCharArray
().
length
;
int
st
=
0
;
int
off
=
0
;
/* avoid getfield opcode */
char
[]
val
=
res
.
toCharArray
();
/* avoid getfield opcode */
while
((
st
<
len
)
&&
(
val
[
off
+
st
]
<=
c
))
{
st
++;
}
while
((
st
<
len
)
&&
(
val
[
off
+
len
-
1
]
<=
c
))
{
len
--;
}
return
((
st
>
0
)
||
(
len
<
count
))
?
res
.
substring
(
st
,
len
)
:
res
;
}
/**
* 获取setter方法名称
* @Title: getSetterMethodName
* @param key
* @return
* @return String 返回类型
* @author
* @date 2014年7月24日 下午3:43:22
*/
public
static
String
getMethodName
(
String
begin
,
String
key
)
{
StringBuilder
result
=
new
StringBuilder
(
begin
);
result
.
append
(
key
.
substring
(
0
,
1
).
toUpperCase
()).
append
(
key
.
substring
(
1
));
return
result
.
toString
();
}
/**
* 获取随机英文字符串
* @param caseType 1大写,其他小写
* @param length 返回字符串长度
* @param hasRepeat 是否包含重复字符 1包含0不包含
* @return
* @author ydm
* @date: 2018年7月11日 上午11:33:25
*/
public
static
String
getRandomEnSign
(
int
caseType
,
int
length
,
int
hasRepeat
){
StringBuffer
resultBuffer
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
length
;
i
++
){
int
x
=
1
+(
int
)(
Math
.
random
()*
enletters
.
length
-
1
);
if
(
hasRepeat
*
1
==
0
){
if
(
resultBuffer
.
toString
().
toLowerCase
().
indexOf
(
enletters
[
x
].
toLowerCase
())>
0
){
continue
;
}
}
resultBuffer
.
append
(
caseType
*
1
==
1
?
enletters
[
x
].
toUpperCase
()
:
enletters
[
x
].
toLowerCase
());
}
return
resultBuffer
.
toString
();
}
public
static
Object
checkNull
(
Object
obj
)
{
Class
<?
extends
Object
>
clazz
=
obj
.
getClass
();
// 获取实体类的所有属性,返回Field数组
Field
[]
fields
=
clazz
.
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
// 可访问私有变量
field
.
setAccessible
(
true
);
// 获取属性类型
String
type
=
field
.
getGenericType
().
toString
();
// 如果type是类类型,则前面包含"class ",后面跟类名
if
(
"class java.lang.String"
.
equals
(
type
))
{
// 将属性的首字母大写
String
methodName
=
field
.
getName
().
replaceFirst
(
field
.
getName
().
substring
(
0
,
1
),
field
.
getName
().
substring
(
0
,
1
).
toUpperCase
());
System
.
out
.
println
(
methodName
);
try
{
Method
methodGet
=
clazz
.
getMethod
(
"get"
+
methodName
);
// 调用getter方法获取属性值
String
str
=
(
String
)
methodGet
.
invoke
(
obj
);
if
(
str
==
null
)
{
// Method methodSet = clazz.getMethod("set" +
// methodName, new Class[] { String.class });
// methodSet.invoke(o, new Object[] { "" });
System
.
out
.
println
(
field
.
getType
());
// class java.lang.String
// 如果为null的String类型的属性则重新复制为空字符串
field
.
set
(
obj
,
field
.
getType
().
getConstructor
(
field
.
getType
()).
newInstance
(
""
));
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
return
obj
;
}
}
core/src/main/java/com/zrqx/core/util/exception/ExceptionUtils.java
0 → 100644
浏览文件 @
7b42ba3e
package
com
.
zrqx
.
core
.
util
.
exception
;
import
java.util.Date
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
/**
* 异常工具类
* @author lpf
* @date 2019年8月22日下午4:19:03
*/
public
class
ExceptionUtils
{
/**
* 获取异常的异常栈全部信息
* @param e
* @return
* @author lpf
* @date: 2019年8月22日 下午4:30:18
*/
public
static
String
getMessage
(
Exception
e
){
StringBuffer
result
=
Stream
.
of
(
e
.
getStackTrace
())
.
map
(
StackTraceElement
::
toString
)
.
map
(
s
->
{
StringBuffer
sb
=
new
StringBuffer
(
s
);
sb
.
append
(
"<br>"
);
return
sb
;
}).
collect
(
Collectors
.
reducing
(
StringBuffer
::
append
))
.
orElseGet
(()
->
new
StringBuffer
(
"ExceptionUtils#getMessage组装异常信息失败;"
));
return
"异常时间:"
+
new
Date
().
toLocaleString
()
+
"<br>"
+
result
.
toString
();
}
public
static
String
getMessage
(
String
before
,
Exception
e
)
{
return
before
+
ExceptionUtils
.
getMessage
(
e
);
}
}
core/src/main/java/com/zrqx/core/util/response/CallBack.java
浏览文件 @
7b42ba3e
...
...
@@ -34,38 +34,33 @@ public class CallBack<T> implements Serializable {
}
public
CallBack
(
ResponseCodeEnum
en
)
{
this
(
en
.
getCode
());
if
(!
ResponseCodeEnum
.
OK
.
equals
(
en
))
{
this
.
status
=
false
;
}
}
public
CallBack
(){
}
public
static
<
T
>
CallBack
<
T
>
create
(
ResponseCodeEnum
en
,
T
data
){
public
static
<
T
>
CallBack
<
T
>
create
(
ResponseCodeEnum
en
,
T
data
,
String
message
){
CallBack
<
T
>
back
=
new
CallBack
<
T
>(
en
);
if
(
back
.
code
==
0
)
{
back
.
data
=
data
;
}
else
{
back
.
status
=
false
;
if
(
data
!=
null
){
back
.
msg
=
data
.
toString
();
}
}
return
back
;
}
public
static
<
T
>
CallBack
<
T
>
create
(
int
code
,
T
data
,
String
message
)
{
CallBack
<
T
>
back
=
new
CallBack
<
T
>();
back
.
code
=
code
;
if
(
ResponseCodeEnum
.
OK
.
getCode
()!=
code
){
back
.
status
=
false
;
}
back
.
data
=
data
;
back
.
msg
=
message
;
return
back
;
}
public
static
<
T
>
CallBack
<
T
>
create
(
ResponseCodeEnum
en
,
T
data
){
return
create
(
en
,
data
,
null
);
}
public
static
<
T
>
CallBack
<
T
>
create
(
ResponseCodeEnum
en
){
return
create
(
en
,
null
);
}
public
static
<
T
>
CallBack
<
T
>
createMsg
(
ResponseCodeEnum
en
,
String
message
)
{
return
create
(
en
,
null
,
message
);
}
public
static
<
T
>
CallBack
<
T
>
success
()
{
return
create
(
ResponseCodeEnum
.
OK
,
null
);
}
...
...
@@ -75,33 +70,31 @@ public class CallBack<T> implements Serializable {
}
public
static
<
T
>
CallBack
<
T
>
success
(
T
data
,
String
message
)
{
return
create
(
ResponseCodeEnum
.
OK
.
getCode
(),
data
,
message
);
return
create
(
ResponseCodeEnum
.
OK
,
data
,
message
);
}
public
static
<
T
>
CallBack
<
T
>
fail
(
T
data
)
{
return
fail
(
ResponseCodeEnum
.
FAIL
,
data
);
public
static
<
T
>
CallBack
<
T
>
fail
(
String
message
)
{
return
createMsg
(
ResponseCodeEnum
.
FAIL
,
message
);
}
public
static
<
T
>
CallBack
<
T
>
fail
()
{
return
fail
(
null
);
}
public
static
<
T
>
CallBack
<
T
>
fail
(
ResponseCodeEnum
en
,
T
data
)
{
return
create
(
en
,
data
);
}
public
static
<
T
>
CallBack
<
T
>
fail
(
int
code
,
T
data
)
{
return
create
(
code
,
data
,
null
);
}
public
static
<
T
>
CallBack
<
T
>
fail
(
int
code
,
T
data
,
String
message
)
{
return
create
(
code
,
data
,
message
);
}
public
static
<
T
>
CallBack
<
T
>
exception
(
String
message
)
{
return
createMsg
(
ResponseCodeEnum
.
EXCEPTION
,
message
);
}
public
static
<
T
>
CallBack
<
T
>
exception
()
{
return
exception
(
null
);
}
public
static
<
T
>
CallBack
<
T
>
baseException
(
String
message
){
return
createMsg
(
ResponseCodeEnum
.
BASE_EXCEPTION
,
message
);
}
public
boolean
isStatus
()
{
return
this
.
status
;
}
public
T
getData
(){
return
this
.
data
;
}
...
...
@@ -110,10 +103,10 @@ public class CallBack<T> implements Serializable {
return
this
.
timestamp
;
}
public
void
setStatus
(
boolean
status
)
{
this
.
status
=
status
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论