Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
matrix
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
mall
arch
matrix
Commits
001708c2
Commit
001708c2
authored
May 07, 2019
by
qiuweili123
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify
parent
b765c5c8
Hide whitespace changes
Inline
Side-by-side
Showing
55 changed files
with
2133 additions
and
21 deletions
+2133
-21
.gitignore
.gitignore
+17
-2
pom.xml
common-core/pom.xml
+52
-1
CharConstant.java
common-core/src/main/java/com/secoo/mall/common/constant/CharConstant.java
+60
-0
CommonConstant.java
common-core/src/main/java/com/secoo/mall/common/constant/CommonConstant.java
+10
-0
PageConstant.java
common-core/src/main/java/com/secoo/mall/common/constant/PageConstant.java
+13
-0
TrationalService.java
common-core/src/main/java/com/secoo/mall/common/core/annotation/TrationalService.java
+10
-0
AopTransaction.java
common-core/src/main/java/com/secoo/mall/common/core/aop/AopTransaction.java
+79
-0
AbsBaseBean.java
common-core/src/main/java/com/secoo/mall/common/core/bean/AbsBaseBean.java
+13
-0
DefaultThreadFactory.java
common-core/src/main/java/com/secoo/mall/common/core/bean/DefaultThreadFactory.java
+32
-0
Pageable.java
common-core/src/main/java/com/secoo/mall/common/core/bean/Pageable.java
+18
-0
ReqPage.java
common-core/src/main/java/com/secoo/mall/common/core/bean/ReqPage.java
+33
-0
Response.java
common-core/src/main/java/com/secoo/mall/common/core/bean/Response.java
+42
-0
Sort.java
common-core/src/main/java/com/secoo/mall/common/core/bean/Sort.java
+24
-0
CommonErrorCode.java
common-core/src/main/java/com/secoo/mall/common/core/errorcode/CommonErrorCode.java
+12
-0
ErrorCode.java
common-core/src/main/java/com/secoo/mall/common/core/errorcode/ErrorCode.java
+24
-0
BusinessException.java
common-core/src/main/java/com/secoo/mall/common/core/exception/BusinessException.java
+80
-0
ParameterException.java
common-core/src/main/java/com/secoo/mall/common/core/exception/ParameterException.java
+18
-0
SystemInternalException.java
common-core/src/main/java/com/secoo/mall/common/core/exception/SystemInternalException.java
+13
-0
pom.xml
common-util/pom.xml
+13
-1
ThreadPoolConstant.java
common-util/src/main/java/com/secoo/mall/common/constant/ThreadPoolConstant.java
+10
-0
ArrayUtil.java
common-util/src/main/java/com/secoo/mall/common/util/array/ArrayUtil.java
+7
-0
BeanUtil.java
common-util/src/main/java/com/secoo/mall/common/util/bean/BeanUtil.java
+52
-0
BeanChecker.java
common-util/src/main/java/com/secoo/mall/common/util/checker/BeanChecker.java
+147
-0
CollectionUtil.java
common-util/src/main/java/com/secoo/mall/common/util/colletion/CollectionUtil.java
+6
-0
ListUtil.java
common-util/src/main/java/com/secoo/mall/common/util/colletion/ListUtil.java
+6
-0
MapUtil.java
common-util/src/main/java/com/secoo/mall/common/util/colletion/MapUtil.java
+8
-0
SetUtil.java
common-util/src/main/java/com/secoo/mall/common/util/colletion/SetUtil.java
+6
-0
DecimalUtil.java
common-util/src/main/java/com/secoo/mall/common/util/decimal/DecimalUtil.java
+169
-0
FastJsonUtil.java
common-util/src/main/java/com/secoo/mall/common/util/json/FastJsonUtil.java
+227
-0
LoggerUtil.java
common-util/src/main/java/com/secoo/mall/common/util/log/LoggerUtil.java
+82
-0
ResponseUtil.java
common-util/src/main/java/com/secoo/mall/common/util/response/ResponseUtil.java
+23
-0
StringUtil.java
common-util/src/main/java/com/secoo/mall/common/util/string/StringUtil.java
+72
-0
ThreadPoolUtil.java
common-util/src/main/java/com/secoo/mall/common/util/thread/ThreadPoolUtil.java
+26
-0
logback-spring.xml
common-util/src/main/resources/logback-spring.xml
+97
-0
pom.xml
dubbo-starter/pom.xml
+21
-2
DubboService.java
dubbo-starter/src/main/java/com/secoo/mall/dubbo/annotation/DubboService.java
+17
-0
pom.xml
elasticsearch-starter/pom.xml
+13
-2
pom.xml
mongodb-starter/pom.xml
+13
-2
pom.xml
mybatis-starter/pom.xml
+22
-2
DataPage.java
mybatis-starter/src/main/java/com/secoo/mall/mybatis/bean/DataPage.java
+35
-0
MybatisConfig.java
mybatis-starter/src/main/java/com/secoo/mall/mybatis/config/MybatisConfig.java
+81
-0
FillDefaultValueHandler.java
mybatis-starter/src/main/java/com/secoo/mall/mybatis/handler/FillDefaultValueHandler.java
+24
-0
PageUtil.java
mybatis-starter/src/main/java/com/secoo/mall/mybatis/util/PageUtil.java
+77
-0
pom.xml
pom.xml
+4
-5
pom.xml
redis-starter/pom.xml
+13
-2
pom.xml
web-starter/pom.xml
+13
-2
ControllerResponseAdvice.java
web-starter/src/main/java/com/secoo/mall/web/advice/ControllerResponseAdvice.java
+59
-0
ApiController.java
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiController.java
+24
-0
ApiIgnoreJson.java
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiIgnoreJson.java
+4
-0
ApiService.java
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiService.java
+20
-0
ApiVersion.java
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiVersion.java
+16
-0
SwaggerConfig.java
web-starter/src/main/java/com/secoo/mall/web/config/SwaggerConfig.java
+47
-0
WebConfig.java
web-starter/src/main/java/com/secoo/mall/web/config/WebConfig.java
+67
-0
ApiVersionFilter.java
web-starter/src/main/java/com/secoo/mall/web/filter/ApiVersionFilter.java
+16
-0
WebUtil.java
web-starter/src/main/java/com/secoo/mall/web/util/WebUtil.java
+46
-0
No files found.
.gitignore
View file @
001708c2
...
@@ -12,9 +12,13 @@
...
@@ -12,9 +12,13 @@
### IntelliJ IDEA ###
### IntelliJ IDEA ###
.idea
.idea
*.iws
*.iml
*.iml
*.ipr
.idea/.*
.idea/workspace.xml
.idea/*.*
.idea/
.idea/libraries/
### NetBeans ###
### NetBeans ###
/nbproject/private/
/nbproject/private/
...
@@ -23,3 +27,14 @@
...
@@ -23,3 +27,14 @@
/dist/
/dist/
/nbdist/
/nbdist/
/.nb-gradle/
/.nb-gradle/
##MAVEN################################################################
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
common-core/pom.xml
View file @
001708c2
...
@@ -5,11 +5,61 @@
...
@@ -5,11 +5,61 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
common-core
</artifactId>
<artifactId>
common-core
</artifactId>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
<scope>
compile
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-aop
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-tx
</artifactId>
</dependency>
<!--防止编译出现错误提示-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-configuration-processor
</artifactId>
</dependency>
<dependency>
<groupId>
joda-time
</groupId>
<artifactId>
joda-time
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
</dependency>
<dependency>
<groupId>
io.swagger
</groupId>
<artifactId>
swagger-models
</artifactId>
</dependency>
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
swagger-bootstrap-ui
</artifactId>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
common-core/src/main/java/com/secoo/mall/common/constant/CharConstant.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
constant
;
public
interface
CharConstant
{
String
CHARSET_NAME
=
"UTF-8"
;
/**
* Carriage Return.
*/
char
CR
=
'\r'
;
/**
* Double Quote.
*/
char
DQUOTE
=
'\"'
;
/**
* Equals '='.
*/
char
EQ
=
'='
;
/**
* Line Feed.
*/
char
LF
=
'\n'
;
/**
* Single Quote ['].
*/
char
QUOTE
=
'\''
;
/**
* Space.
*/
char
SPACE
=
' '
;
/**
* Tab.
*/
char
TAB
=
'\t'
;
/**
* DOT.
*/
char
DOT
=
','
;
/**
* colon
*/
char
COLON
=
':'
;
/**
* minus
*/
char
MINUS
=
'-'
;
/**
* Underline
*/
char
UNDERLINE
=
'_'
;
}
common-core/src/main/java/com/secoo/mall/common/constant/CommonConstant.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
constant
;
public
interface
CommonConstant
{
interface
Success
{
Integer
CODE
=
0
;
String
MSG
=
"success"
;
}
}
common-core/src/main/java/com/secoo/mall/common/constant/PageConstant.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
constant
;
public
interface
PageConstant
{
Long
DEFAULT_CUR_PAGE
=
1L
;
Long
DEFAULT_PAGE_SIZE
=
20L
;
String
RESULT_LIST
=
"resultList"
;
String
TOTAL_COUNT
=
"totalCount"
;
}
common-core/src/main/java/com/secoo/mall/common/core/annotation/TrationalService.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
annotation
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
public
@interface
TrationalService
{
}
common-core/src/main/java/com/secoo/mall/common/core/aop/AopTransaction.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
aop
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.support.DefaultTransactionDefinition
;
import
javax.annotation.Resource
;
@Aspect
@Component
public
class
AopTransaction
{
@Resource
private
PlatformTransactionManager
transactionManager
;
/**
* 增加切入点
*/
@Pointcut
(
"execution(* com.secoo.mall..service..add*(..)) "
+
"|| execution(* com.secoo.mall..service..save*(..)) "
+
"|| execution(* com.secoo.mall..service..create*(..))"
)
public
void
createPointCut
()
{
}
/**
* 更新切入点
*/
@Pointcut
(
"execution(* com.secoo.mall..service..modify*(..)) "
+
"|| execution(* com.secoo.mall..service..update*(..))"
)
public
void
updatePointCut
()
{
}
/**
* 删除切入点
*/
@Pointcut
(
"execution(* com.secoo.mall..service..remove*(..)) "
+
"|| execution(* com.secoo.mall..service..delete*(..))"
)
public
void
deletePointCut
()
{
}
/**
* 带有事务注解的方法
*/
@Pointcut
(
"@annotation(org.springframework.transaction.annotation.Transactional)"
)
public
void
transactionalAnnotation
()
{
}
/**
* 带有事务注解的方法不进行拦截
*
* @param joinPoint
* @return
*/
@Around
(
"( AopTransaction.createPointCut() "
+
"|| AopTransaction.deletePointCut() "
+
"|| AopTransaction.updatePointCut()) "
+
"&& !AopTransaction.transactionalAnnotation()"
)
public
Object
around
(
ProceedingJoinPoint
joinPoint
)
throws
Throwable
{
DefaultTransactionDefinition
def
=
new
DefaultTransactionDefinition
();
def
.
setPropagationBehavior
(
TransactionDefinition
.
PROPAGATION_REQUIRED
);
TransactionStatus
status
=
transactionManager
.
getTransaction
(
def
);
Object
object
=
null
;
try
{
object
=
joinPoint
.
proceed
();
transactionManager
.
commit
(
status
);
}
catch
(
Throwable
e
)
{
transactionManager
.
rollback
(
status
);
throw
e
;
}
return
object
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/bean/AbsBaseBean.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
java.io.Serializable
;
public
abstract
class
AbsBaseBean
<
T
>
implements
Serializable
{
@Override
public
String
toString
()
{
return
ToStringBuilder
.
reflectionToString
(
this
);
}
}
common-core/src/main/java/com/secoo/mall/common/core/bean/DefaultThreadFactory.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
import
java.util.concurrent.ThreadFactory
;
import
java.util.concurrent.atomic.AtomicInteger
;
public
class
DefaultThreadFactory
implements
ThreadFactory
{
private
static
final
AtomicInteger
poolNumber
=
new
AtomicInteger
(
1
);
private
final
ThreadGroup
group
;
private
final
AtomicInteger
threadNumber
=
new
AtomicInteger
(
1
);
private
final
String
namePrefix
;
public
DefaultThreadFactory
(
String
name
)
{
SecurityManager
s
=
System
.
getSecurityManager
();
group
=
(
s
!=
null
)
?
s
.
getThreadGroup
()
:
Thread
.
currentThread
().
getThreadGroup
();
if
(
null
==
name
||
name
.
isEmpty
())
{
name
=
"pool"
;
}
namePrefix
=
name
+
"-"
+
poolNumber
.
getAndIncrement
()
+
"-thread-"
;
}
@Override
public
Thread
newThread
(
Runnable
r
)
{
Thread
t
=
new
Thread
(
group
,
r
,
namePrefix
+
threadNumber
.
getAndIncrement
(),
0
);
if
(
t
.
isDaemon
())
t
.
setDaemon
(
false
);
if
(
t
.
getPriority
()
!=
Thread
.
NORM_PRIORITY
)
t
.
setPriority
(
Thread
.
NORM_PRIORITY
);
return
t
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/bean/Pageable.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
import
java.util.List
;
public
interface
Pageable
<
T
>
{
List
<
T
>
getResultList
();
/*总记录数*/
Long
getTotalCount
();
/*当前页*/
Long
getCurPage
();
/*当前每页显示数 */
Long
getPageSize
();
}
common-core/src/main/java/com/secoo/mall/common/core/bean/ReqPage.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
import
com.secoo.mall.common.constant.PageConstant
;
public
class
ReqPage
<
T
>
{
/*当前页*/
private
Long
curPage
;
/*当前每页显示数量*/
private
Long
pageSize
;
public
ReqPage
(
Long
curPage
,
Long
pageSize
)
{
this
.
curPage
=
curPage
;
this
.
pageSize
=
pageSize
;
}
public
Long
getCurPage
()
{
return
curPage
==
null
?
PageConstant
.
DEFAULT_CUR_PAGE
:
curPage
;
}
public
void
setCurPage
(
Long
curPage
)
{
this
.
curPage
=
curPage
;
}
public
Long
getPageSize
()
{
return
pageSize
;
}
public
void
setPageSize
(
Long
pageSize
)
{
this
.
pageSize
=
pageSize
==
null
?
PageConstant
.
DEFAULT_PAGE_SIZE
:
pageSize
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/bean/Response.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
import
java.io.Serializable
;
public
class
Response
<
T
>
implements
Serializable
{
private
Integer
code
;
private
String
msg
;
private
T
data
;
public
Response
()
{
}
public
Response
(
Integer
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
public
T
getData
()
{
return
data
;
}
public
void
setData
(
T
data
)
{
this
.
data
=
data
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/bean/Sort.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
bean
;
public
class
Sort
{
private
String
sort
;
/*排序字段是否转化为下划线形式*/
private
Boolean
isToSnake
;
public
String
getSort
()
{
return
sort
;
}
public
void
setSort
(
String
sort
)
{
this
.
sort
=
sort
;
}
public
Boolean
getToSnake
()
{
return
isToSnake
==
null
?
true
:
isToSnake
;
}
public
void
setToSnake
(
Boolean
toSnake
)
{
isToSnake
=
toSnake
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/errorcode/CommonErrorCode.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
errorcode
;
public
interface
CommonErrorCode
{
ErrorCode
DATABASE_OPERATION_EXCEPTION
=
new
ErrorCode
(
1
,
"Db Operation Error"
);
ErrorCode
PARAMETER_EXCEPTION
=
new
ErrorCode
(
2
,
""
);
ErrorCode
SYSTEM_INTERNAL_EXCEPTION
=
new
ErrorCode
(
3
,
"Intenal Server Error "
);
ErrorCode
INVALID_TOKEN
=
new
ErrorCode
(
4
,
"Invalid Token"
);
ErrorCode
OPERATIOIN_FAIL
=
new
ErrorCode
(
5
,
"Operation Fail"
);
}
common-core/src/main/java/com/secoo/mall/common/core/errorcode/ErrorCode.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
errorcode
;
public
class
ErrorCode
{
private
Integer
code
;
private
String
msg
;
public
ErrorCode
(
Integer
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
Integer
getCode
()
{
return
code
;
}
public
String
getMsg
()
{
return
this
.
msg
;
}
@Override
public
String
toString
()
{
return
this
.
msg
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/exception/BusinessException.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
exception
;
import
com.secoo.mall.common.core.errorcode.ErrorCode
;
import
org.apache.commons.lang3.StringUtils
;
public
class
BusinessException
extends
RuntimeException
{
private
ErrorCode
errorCode
;
private
Integer
code
;
private
String
msg
;
private
Object
[]
args
;
public
BusinessException
()
{
super
();
}
public
BusinessException
(
ErrorCode
errorCode
)
{
this
(
errorCode
,
new
Object
[
0
]);
}
public
BusinessException
(
Integer
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
BusinessException
(
Integer
code
,
String
msg
,
Object
...
args
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
this
.
args
=
args
;
}
public
BusinessException
(
ErrorCode
errorCode
,
Object
arg
)
{
this
(
errorCode
,
new
Object
[]{
arg
});
}
public
BusinessException
(
ErrorCode
errorCode
,
Object
...
args
)
{
super
();
this
.
errorCode
=
errorCode
;
if
(
errorCode
!=
null
)
{
this
.
code
=
errorCode
.
getCode
();
this
.
msg
=
errorCode
.
getMsg
();
}
if
(
args
==
null
)
{
this
.
args
=
new
Object
[
0
];
}
else
{
this
.
args
=
args
;
}
}
public
Integer
getCode
()
{
return
this
.
code
;
}
public
ErrorCode
getErrorCode
()
{
return
this
.
errorCode
;
}
public
Object
[]
getArgs
()
{
return
this
.
args
;
}
public
String
getMessage
()
{
StringBuilder
exMessage
=
new
StringBuilder
();
exMessage
.
append
(
"code: "
);
exMessage
.
append
(
this
.
code
);
exMessage
.
append
(
"; message: "
);
exMessage
.
append
(
getMsg
());
return
exMessage
.
toString
();
}
public
String
getMsg
()
{
if
(
StringUtils
.
isNotEmpty
(
this
.
msg
))
{
return
String
.
format
(
this
.
msg
,
this
.
args
);
}
return
msg
;
}
}
common-core/src/main/java/com/secoo/mall/common/core/exception/ParameterException.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
exception
;
import
com.secoo.mall.common.core.errorcode.CommonErrorCode
;
public
class
ParameterException
extends
BusinessException
{
public
ParameterException
()
{
super
(
CommonErrorCode
.
PARAMETER_EXCEPTION
);
}
public
ParameterException
(
String
msg
)
{
super
(
CommonErrorCode
.
PARAMETER_EXCEPTION
.
getCode
(),
msg
);
}
public
ParameterException
(
String
msg
,
Object
...
args
)
{
super
(
CommonErrorCode
.
PARAMETER_EXCEPTION
.
getCode
(),
msg
,
args
);
}
}
common-core/src/main/java/com/secoo/mall/common/core/exception/SystemInternalException.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
core
.
exception
;
import
com.secoo.mall.common.core.errorcode.CommonErrorCode
;
/**
* 用于识别日志中的未知的系统异常,使用log.error输出
*/
public
class
SystemInternalException
extends
BusinessException
{
public
SystemInternalException
()
{
super
(
CommonErrorCode
.
SYSTEM_INTERNAL_EXCEPTION
);
}
}
common-util/pom.xml
View file @
001708c2
...
@@ -5,11 +5,22 @@
...
@@ -5,11 +5,22 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
common-util
</artifactId>
<artifactId>
common-util
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
commons-beanutils
</groupId>
<artifactId>
commons-beanutils
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
common-util/src/main/java/com/secoo/mall/common/constant/ThreadPoolConstant.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
constant
;
public
interface
ThreadPoolConstant
{
//核心线程数
int
CORE_POOL_SIZE
=
Runtime
.
getRuntime
().
availableProcessors
();
//最大线程数
int
MAX_POOL_SIZE
=
CORE_POOL_SIZE
*
2
;
}
common-util/src/main/java/com/secoo/mall/common/util/array/ArrayUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
array
;
import
org.apache.commons.lang3.ArrayUtils
;
public
class
ArrayUtil
extends
ArrayUtils
{
}
common-util/src/main/java/com/secoo/mall/common/util/bean/BeanUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
bean
;
import
com.secoo.mall.common.core.errorcode.CommonErrorCode
;
import
com.secoo.mall.common.core.exception.BusinessException
;
import
com.secoo.mall.common.util.json.FastJsonUtil
;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
java.lang.reflect.Field
;
import
java.util.Map
;
public
class
BeanUtil
extends
BeanUtils
{
public
static
boolean
containsInteger
(
Integer
[]
arr
,
Integer
obj
)
{
return
ArrayUtils
.
contains
(
arr
,
obj
);
}
public
static
boolean
containsLong
(
Long
[]
arr
,
Long
obj
)
{
return
ArrayUtils
.
contains
(
arr
,
obj
);
}
public
static
<
T
>
Object
getFieldValueByName
(
T
obj
,
String
fieldName
)
throws
Exception
{
Class
clazz
=
obj
.
getClass
();
Field
field
=
clazz
.
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
field
.
get
(
obj
);
}
public
static
<
T
>
T
transMap2Bean
(
Object
object
,
Class
<
T
>
classOfT
)
{
if
(
object
==
null
||
!(
object
instanceof
Map
))
{
return
null
;
}
String
tmp
=
FastJsonUtil
.
toString
(
object
);
return
FastJsonUtil
.
toBean
(
tmp
,
classOfT
);
}
public
static
void
copyProperties
(
Object
dest
,
Object
orig
)
{
try
{
copyProperties
(
dest
,
orig
);
}
catch
(
Exception
e
)
{
throw
new
BusinessException
(
CommonErrorCode
.
SYSTEM_INTERNAL_EXCEPTION
);
}
}
public
static
void
copyProperties
(
Object
bean
,
String
name
,
Object
value
)
{
try
{
copyProperty
(
bean
,
name
,
value
);
}
catch
(
Exception
e
)
{
throw
new
BusinessException
(
CommonErrorCode
.
SYSTEM_INTERNAL_EXCEPTION
);
}
}
}
common-util/src/main/java/com/secoo/mall/common/util/checker/BeanChecker.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
checker
;
import
com.secoo.mall.common.core.errorcode.ErrorCode
;
import
com.secoo.mall.common.core.exception.ParameterException
;
import
com.secoo.mall.common.util.decimal.DecimalUtil
;
import
com.secoo.mall.common.util.colletion.MapUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.util.CollectionUtils
;
import
java.math.BigDecimal
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Pattern
;
public
abstract
class
BeanChecker
{
public
static
void
assertNotNull
(
Object
obj
,
String
errMsg
)
{
if
(
obj
==
null
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotEmpty
(
String
str
,
String
errMsg
)
{
if
(
StringUtils
.
isEmpty
(
str
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotEmpty
(
Collection
collection
,
String
errMsg
)
{
if
(
CollectionUtils
.
isEmpty
(
collection
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotEmpty
(
Map
map
,
String
errMsg
)
{
if
(
MapUtil
.
isEmpty
(
map
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertPositive
(
Long
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
<=
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertPositive
(
Integer
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
<=
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertPositive
(
Float
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
<=
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertPositive
(
BigDecimal
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
.
compareTo
(
new
BigDecimal
(
"0"
))
<=
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertLongPositive
(
List
<
Long
>
objs
,
String
errMsg
)
{
for
(
Long
o
:
objs
)
{
assertPositive
(
o
,
errMsg
);
}
}
public
static
void
assertIntegerPositive
(
List
<
Integer
>
objs
,
String
errMsg
)
{
for
(
Integer
o
:
objs
)
{
assertPositive
(
o
,
errMsg
);
}
}
public
static
void
assertNotNegative
(
Long
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
<
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotNegative
(
Integer
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
<
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotNegative
(
BigDecimal
o
,
String
errMsg
)
{
if
(
o
==
null
||
o
.
compareTo
(
new
BigDecimal
(
"0"
))
<
0
)
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertNotNegativeLong
(
List
<
Long
>
objs
,
String
errMsg
)
{
for
(
Long
o
:
objs
)
{
assertNotNegative
(
o
,
errMsg
);
}
}
public
static
void
assertNotNegativeInteger
(
List
<
Integer
>
objs
,
String
errMsg
)
{
for
(
Integer
o
:
objs
)
{
assertNotNegative
(
o
,
errMsg
);
}
}
public
static
void
assertPattern
(
String
str
,
String
pattern
,
String
errMsg
)
{
if
(
StringUtils
.
isEmpty
(
str
)
||
StringUtils
.
isEmpty
(
pattern
)
||
!
Pattern
.
matches
(
pattern
,
str
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertPattern
(
String
str
,
String
pattern
,
ErrorCode
errCode
)
{
if
(
StringUtils
.
isEmpty
(
str
)
||
StringUtils
.
isEmpty
(
pattern
)
||
!
Pattern
.
matches
(
pattern
,
str
))
{
throw
new
ParameterException
(
errCode
.
getMsg
());
}
}
public
static
void
assertBefore
(
Date
date1
,
Date
date2
,
String
errMsg
)
{
if
(
date1
==
null
||
date2
==
null
||
!
date1
.
before
(
date2
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertBetween
(
BigDecimal
data
,
BigDecimal
min
,
BigDecimal
max
,
String
errMsg
)
{
if
(!
DecimalUtil
.
isBetween
(
data
,
min
,
max
))
{
throw
new
ParameterException
(
errMsg
);
}
}
public
static
void
assertMaxLength
(
String
str
,
int
maxLength
,
String
errMsg
)
{
if
(
StringUtils
.
isNotEmpty
(
str
)
&&
str
.
length
()
>
maxLength
)
{
throw
new
ParameterException
(
errMsg
);
}
}
}
common-util/src/main/java/com/secoo/mall/common/util/colletion/CollectionUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
colletion
;
import
org.apache.commons.collections.CollectionUtils
;
public
class
CollectionUtil
extends
CollectionUtils
{
}
common-util/src/main/java/com/secoo/mall/common/util/colletion/ListUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
colletion
;
import
org.apache.commons.collections.ListUtils
;
public
class
ListUtil
extends
ListUtils
{
}
common-util/src/main/java/com/secoo/mall/common/util/colletion/MapUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
colletion
;
import
org.apache.commons.collections.MapUtils
;
public
class
MapUtil
extends
MapUtils
{
}
common-util/src/main/java/com/secoo/mall/common/util/colletion/SetUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
colletion
;
import
org.apache.commons.collections.SetUtils
;
public
class
SetUtil
extends
SetUtils
{
}
common-util/src/main/java/com/secoo/mall/common/util/decimal/DecimalUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
decimal
;
import
com.secoo.mall.common.core.exception.ParameterException
;
import
java.math.BigDecimal
;
import
java.util.Objects
;
/**
* Created by liqiuwei on 2017/11/21.
*/
public
class
DecimalUtil
{
// 默认小数运算精度
private
static
final
int
DEF_DIV_SCALE
=
2
;
private
static
final
BigDecimal
DEF_V
=
new
BigDecimal
(
"0"
);
// 默认四舍五入
private
static
final
int
ROUND_MODE
=
BigDecimal
.
ROUND_HALF_UP
;
public
static
BigDecimal
add
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
calculate
(
v1
,
v2
,
Operator
.
ADD
);
}
public
static
BigDecimal
sub
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
calculate
(
v1
,
v2
,
Operator
.
SUB
);
}
public
static
BigDecimal
mul
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
calculate
(
v1
,
v2
,
Operator
.
MUL
);
}
public
static
BigDecimal
div
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
calculate
(
v1
,
v2
,
Operator
.
DIV
);
}
public
static
BigDecimal
div
(
BigDecimal
v1
,
BigDecimal
v2
,
int
scale
)
{
if
(
scale
<
0
||
v2
.
intValue
()
==
0
)
{
throw
new
ParameterException
();
}
return
v1
.
divide
(
v2
,
scale
,
ROUND_MODE
);
}
/**
* 等于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
eq
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
EQ
);
}
/**
* 不等于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
neq
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
NEQ
);
}
/**
* 大于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
gt
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
GT
);
}
/**
* 大于等于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
egt
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
EGT
);
}
/**
* 小于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
lt
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
LT
);
}
/**
* 小于等于
*
* @param v1
* @param v2
* @return
*/
public
static
boolean
elt
(
BigDecimal
v1
,
BigDecimal
v2
)
{
return
compare
(
v1
,
v2
,
Operator
.
ELT
);
}
public
static
boolean
isBetween
(
BigDecimal
data
,
BigDecimal
min
,
BigDecimal
max
)
{
data
=
getScaleValue
(
data
);
min
=
getScaleValue
(
min
);
max
=
getScaleValue
(
max
);
if
(
data
.
compareTo
(
min
)
>=
0
&&
data
.
compareTo
(
max
)
<=
0
)
{
return
true
;
}
else
{
return
false
;
}
}
public
static
BigDecimal
getScaleValue
(
BigDecimal
o
)
{
BigDecimal
n
=
Objects
.
isNull
(
o
)
?
DEF_V
:
o
;
return
n
.
setScale
(
DEF_DIV_SCALE
,
ROUND_MODE
);
}
private
static
BigDecimal
calculate
(
BigDecimal
v1
,
BigDecimal
v2
,
Operator
operator
)
{
BigDecimal
b1
=
getScaleValue
(
v1
);
BigDecimal
b2
=
getScaleValue
(
v2
);
switch
(
operator
)
{
case
ADD:
return
b1
.
add
(
b2
);
case
SUB:
return
b1
.
subtract
(
b2
);
case
MUL:
return
b1
.
multiply
(
b2
);
case
DIV:
return
div
(
b1
,
b2
,
DEF_DIV_SCALE
);
}
return
null
;
}
private
static
boolean
compare
(
BigDecimal
v1
,
BigDecimal
v2
,
Operator
operator
)
{
BigDecimal
b1
=
getScaleValue
(
v1
);
BigDecimal
b2
=
getScaleValue
(
v2
);
int
result
=
b1
.
compareTo
(
b2
);
switch
(
operator
)
{
case
EQ:
return
result
==
0
;
case
NEQ:
return
result
!=
0
;
case
GT:
return
result
==
1
;
case
EGT:
return
result
>=
0
;
case
LT:
return
result
==
-
1
;
case
ELT:
return
result
<=
0
;
}
return
false
;
}
enum
Operator
{
ADD
,
SUB
,
MUL
,
DIV
,
EQ
,
NEQ
,
GT
,
EGT
,
LT
,
ELT
;
}
}
common-util/src/main/java/com/secoo/mall/common/util/json/FastJsonUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
json
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.PropertyNamingStrategy
;
import
com.alibaba.fastjson.serializer.SerializeConfig
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Set
;
public
interface
FastJsonUtil
{
SerializerFeature
[]
FEATURES
=
{
SerializerFeature
.
WriteMapNullValue
,
SerializerFeature
.
WriteNullListAsEmpty
,
SerializerFeature
.
WriteNullNumberAsZero
,
SerializerFeature
.
WriteNullBooleanAsFalse
,
SerializerFeature
.
WriteNullStringAsEmpty
,
SerializerFeature
.
WriteDateUseDateFormat
};
/**
* 直接获取第一个key相同的string
*
* @param payload
* @param key
* @return
*/
static
String
getString
(
String
payload
,
String
key
)
{
JSONObject
payloadJson
=
JSON
.
parseObject
(
payload
);
return
getString
(
payloadJson
,
key
);
}
static
String
getString
(
JSONObject
payloadJson
,
String
key
)
{
Set
entrySet
=
payloadJson
.
entrySet
();
String
result
;
for
(
Object
entry
:
entrySet
)
{
HashMap
.
Entry
entryNode
=
(
HashMap
.
Entry
)
entry
;
String
innerKey
=
String
.
valueOf
(
entryNode
.
getKey
());
if
(
innerKey
.
equals
(
key
)
&&
!(
entryNode
.
getValue
()
instanceof
JSONObject
))
{
return
String
.
valueOf
(
entryNode
.
getValue
());
}
else
{
if
(
entryNode
.
getValue
()
instanceof
JSONObject
)
{
result
=
getString
(
String
.
valueOf
(
payloadJson
.
getString
(
innerKey
)),
key
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
return
result
;
}
}
else
if
(
entryNode
.
getValue
()
instanceof
JSONArray
)
{
JSONArray
jarray
=
(
JSONArray
)
entryNode
.
getValue
();
for
(
Object
jo
:
jarray
)
{
result
=
getString
(
JSON
.
toJSONString
(
jo
),
key
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
return
result
;
}
}
}
else
{
continue
;
}
}
}
return
null
;
}
/**
* 通过父、子节点键值对获取值
*
* @param payload
* @param fatherKey
* @param key
* @return
*/
static
String
getStringWithFatherKey
(
String
payload
,
String
fatherKey
,
String
key
)
{
JSONObject
payloadJson
=
JSON
.
parseObject
(
payload
);
return
getStringWithFatherKey
(
payloadJson
,
fatherKey
,
key
,
fatherKey
);
}
static
String
getStringWithFatherKey
(
JSONObject
payloadJson
,
String
fatherKey
,
String
key
,
String
originFatherKey
)
{
Set
entrySet
=
payloadJson
.
entrySet
();
String
result
;
for
(
Object
entry
:
entrySet
)
{
HashMap
.
Entry
entryNode
=
(
HashMap
.
Entry
)
entry
;
String
innerKey
=
String
.
valueOf
(
entryNode
.
getKey
());
if
(
innerKey
.
equals
(
key
)
&&
fatherKey
.
equals
(
originFatherKey
)
&&
!(
entryNode
.
getValue
()
instanceof
JSONObject
))
{
return
String
.
valueOf
(
entryNode
.
getValue
());
}
else
{
if
(
entryNode
.
getValue
()
instanceof
JSONObject
)
{
result
=
getStringWithFatherKey
((
JSONObject
)
entryNode
.
getValue
(),
innerKey
,
key
,
originFatherKey
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
return
result
;
}
}
else
if
(
entryNode
.
getValue
()
instanceof
JSONArray
)
{
JSONArray
jarray
=
(
JSONArray
)
entryNode
.
getValue
();
for
(
Object
jo
:
jarray
)
{
result
=
getStringWithFatherKey
((
JSONObject
)
jo
,
innerKey
,
key
,
originFatherKey
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
return
result
;
}
}
}
else
{
continue
;
}
}
}
return
null
;
}
/**
* 直接获取第一个key相同, 类相同的值
*
* @param payload
* @param key
* @return
*/
static
<
T
>
T
getValue
(
String
payload
,
String
key
,
Class
<
T
>
clazz
)
{
JSONObject
payloadJson
=
JSON
.
parseObject
(
payload
);
return
getValue
(
payloadJson
,
key
,
clazz
);
}
static
<
T
>
T
getValue
(
JSONObject
payloadJson
,
String
key
,
Class
<
T
>
clazz
)
{
Set
entrySet
=
payloadJson
.
entrySet
();
T
result
;
for
(
Object
entry
:
entrySet
)
{
HashMap
.
Entry
entryNode
=
(
HashMap
.
Entry
)
entry
;
String
innerKey
=
String
.
valueOf
(
entryNode
.
getKey
());
if
(
innerKey
.
equals
(
key
)
&&
clazz
.
isInstance
(
entryNode
.
getValue
()))
{
return
(
T
)
entryNode
.
getValue
();
}
else
{
if
(
entryNode
.
getValue
()
instanceof
JSONObject
)
{
result
=
getValue
(
payloadJson
.
getJSONObject
(
innerKey
),
key
,
clazz
);
if
(
result
!=
null
)
{
return
result
;
}
}
else
if
(
entryNode
.
getValue
()
instanceof
JSONArray
)
{
JSONArray
jarray
=
(
JSONArray
)
entryNode
.
getValue
();
for
(
Object
jo
:
jarray
)
{
result
=
getValue
((
JSONObject
)
jo
,
key
,
clazz
);
if
(
result
!=
null
)
{
return
result
;
}
}
}
else
{
continue
;
}
}
}
return
null
;
}
/**
* <pre>
* 将对象转为json,下划线输出
* fastjson缺省使用CamelCase,在1.2.15版本之后,fastjson支持配置PropertyNamingStrategy
* </pre>
*
* @param obj
* @return
*/
static
<
T
>
String
toSnakeCaseString
(
T
obj
)
{
SerializeConfig
config
=
new
SerializeConfig
();
config
.
propertyNamingStrategy
=
PropertyNamingStrategy
.
SnakeCase
;
return
JSON
.
toJSONString
(
obj
,
config
,
FEATURES
);
}
static
<
T
>
String
toString
(
T
obj
)
{
String
string
=
JSON
.
toJSONString
(
obj
);
return
string
;
}
static
Object
toBean
(
String
text
)
{
if
(
StringUtils
.
isBlank
(
text
))
{
return
null
;
}
return
JSON
.
parse
(
text
);
}
static
<
T
>
T
toBean
(
String
text
,
Class
<
T
>
clazz
)
{
if
(
StringUtils
.
isBlank
(
text
))
{
return
null
;
}
return
JSON
.
parseObject
(
text
,
clazz
);
}
static
<
T
>
Object
[]
toArray
(
String
text
)
{
if
(
StringUtils
.
isBlank
(
text
))
{
return
null
;
}
return
toList
(
text
).
toArray
();
}
static
<
T
>
Object
[]
toArray
(
String
text
,
Class
<
T
>
clazz
)
{
return
toList
(
text
,
clazz
).
toArray
();
}
static
<
T
>
List
toList
(
String
text
)
{
if
(
StringUtils
.
isBlank
(
text
))
{
return
null
;
}
return
toList
(
text
,
null
);
}
static
<
T
>
List
<
T
>
toList
(
String
text
,
Class
<
T
>
clazz
)
{
if
(
StringUtils
.
isBlank
(
text
))
{
return
null
;
}
return
JSON
.
parseArray
(
text
,
clazz
);
}
}
common-util/src/main/java/com/secoo/mall/common/util/log/LoggerUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
log
;
import
com.secoo.mall.common.core.errorcode.ErrorCode
;
import
com.secoo.mall.common.core.exception.BusinessException
;
import
com.secoo.mall.common.util.json.FastJsonUtil
;
import
com.secoo.mall.common.util.string.StringUtil
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.Arrays
;
/**
* Created by liqiuwei on 2018/7/12.
*/
public
class
LoggerUtil
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
"app"
);
private
static
Logger
errorLogger
=
LoggerFactory
.
getLogger
(
"error"
);
private
static
String
errorMsgTemplate
=
"exception msg:{} "
;
private
static
String
warnMsgTemplate
=
"warn msg:{} "
;
public
static
Logger
getLogger
(
Class
clazz
)
{
return
LoggerFactory
.
getLogger
(
clazz
);
}
public
static
void
info
(
String
msg
)
{
logger
.
info
(
msg
);
}
public
static
void
info
(
String
msg
,
Object
...
objs
)
{
Object
[]
objects
=
Arrays
.
stream
(
objs
).
map
(
obj
->
FastJsonUtil
.
toString
(
obj
)).
toArray
();
logger
.
info
(
msg
,
objects
);
}
public
static
void
warn
(
Throwable
e
)
{
logger
.
warn
(
warnMsgTemplate
,
ExceptionUtils
.
getMessage
(
e
),
e
);
}
public
static
void
warn
(
String
msg
,
Throwable
e
)
{
logger
.
warn
(
msg
,
e
);
}
public
static
void
warn
(
String
msg
,
Throwable
e
,
Object
...
objs
)
{
Object
[]
objects
=
null
;
if
(
ArrayUtils
.
isNotEmpty
(
objs
))
{
Arrays
.
stream
(
objs
).
map
(
obj
->
FastJsonUtil
.
toString
(
obj
)).
toArray
();
logger
.
warn
(
msg
,
objects
);
}
warn
(
e
);
}
public
static
void
error
(
Throwable
e
)
{
error
(
null
,
e
);
}
public
static
void
error
(
String
msg
,
Throwable
e
)
{
error
(
msg
,
e
,
null
);
}
public
static
void
error
(
String
msg
,
Throwable
e
,
Object
...
objs
)
{
String
msgInfo
=
ExceptionUtils
.
getMessage
(
e
);
msg
=
StringUtil
.
isNotEmpty
(
msg
)
?
msg
:
errorMsgTemplate
;
if
(
ArrayUtils
.
isNotEmpty
(
objs
))
{
Object
[]
objects
=
Arrays
.
stream
(
objs
).
map
(
obj
->
FastJsonUtil
.
toString
(
obj
)).
toArray
();
logger
.
error
(
msg
,
objects
);
logger
.
error
(
msg
,
e
);
}
else
{
logger
.
error
(
msg
,
e
);
}
errorLogger
.
error
(
errorMsgTemplate
,
msgInfo
);
}
public
static
void
rethrowException
(
Throwable
e
,
ErrorCode
errorCode
)
{
error
(
e
);
throw
new
BusinessException
(
errorCode
);
}
}
common-util/src/main/java/com/secoo/mall/common/util/response/ResponseUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
response
;
import
com.secoo.mall.common.constant.CommonConstant
;
import
com.secoo.mall.common.core.bean.Response
;
import
com.secoo.mall.common.core.exception.BusinessException
;
public
interface
ResponseUtil
{
static
Response
getFailResponse
(
Integer
code
,
String
msg
)
{
Response
response
=
new
Response
(
code
,
msg
);
return
response
;
}
static
Response
getFailResponse
(
BusinessException
e
)
{
Response
response
=
new
Response
(
e
.
getCode
(),
e
.
getMsg
());
return
response
;
}
static
<
T
>
Response
getSuccessResponse
(
T
data
)
{
Response
response
=
new
Response
(
CommonConstant
.
Success
.
CODE
,
CommonConstant
.
Success
.
MSG
);
response
.
setData
(
data
);
return
response
;
}
}
common-util/src/main/java/com/secoo/mall/common/util/string/StringUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
string
;
import
com.google.common.base.CaseFormat
;
import
com.secoo.mall.common.constant.CharConstant
;
import
org.apache.commons.lang3.StringUtils
;
public
class
StringUtil
extends
StringUtils
{
public
static
String
toCamelCase
(
String
str
)
{
if
(
isEmpty
(
str
))
{
return
null
;
}
return
toCamelCase
(
str
,
CharConstant
.
UNDERLINE
);
}
/**
* kebab、snake转换为camel
* kebab:短线间隔
*
* @param str
* @return
*/
public
static
String
toCamelCase
(
String
str
,
char
ch
)
{
if
(
isEmpty
(
str
))
{
return
null
;
}
switch
(
ch
)
{
case
CharConstant
.
MINUS
:
return
CaseFormat
.
LOWER_HYPHEN
.
to
(
CaseFormat
.
LOWER_CAMEL
,
str
);
default
:
return
CaseFormat
.
LOWER_UNDERSCORE
.
to
(
CaseFormat
.
LOWER_CAMEL
,
str
);
}
}
public
static
String
toSnakeCase
(
String
str
)
{
if
(
isEmpty
(
str
))
{
return
null
;
}
return
toSnakeCase
(
str
,
CharConstant
.
UNDERLINE
);
}
/**
* camel转换为snake
*
* @param str
* @return
*/
public
static
String
toSnakeCase
(
String
str
,
char
ch
)
{
if
(
isEmpty
(
str
))
{
return
null
;
}
switch
(
ch
)
{
case
CharConstant
.
MINUS
:
return
CaseFormat
.
LOWER_HYPHEN
.
to
(
CaseFormat
.
LOWER_UNDERSCORE
,
str
);
default
:
return
CaseFormat
.
LOWER_CAMEL
.
to
(
CaseFormat
.
LOWER_UNDERSCORE
,
str
);
}
}
public
static
void
main
(
String
[]
args
)
{
String
str
=
"test_jata"
;
System
.
out
.
println
(
toCamelCase
(
str
));
System
.
out
.
println
(
toCamelCase
(
"test-jdate"
,
'-'
));
String
str2
=
"testJdate"
;
System
.
out
.
println
(
toSnakeCase
(
str
));
System
.
out
.
println
(
toSnakeCase
(
"test-jdate"
,
'-'
));
}
}
common-util/src/main/java/com/secoo/mall/common/util/thread/ThreadPoolUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
common
.
util
.
thread
;
import
com.secoo.mall.common.constant.ThreadPoolConstant
;
import
com.secoo.mall.common.core.bean.DefaultThreadFactory
;
import
java.util.concurrent.*
;
public
interface
ThreadPoolUtil
{
static
ScheduledExecutorService
newScheduledExecutorService
(
String
threadName
)
{
return
new
ScheduledThreadPoolExecutor
(
ThreadPoolConstant
.
CORE_POOL_SIZE
,
new
DefaultThreadFactory
(
threadName
));
}
static
ExecutorService
newFixedExecutorService
(
String
threadName
)
{
return
new
ThreadPoolExecutor
(
ThreadPoolConstant
.
CORE_POOL_SIZE
,
ThreadPoolConstant
.
MAX_POOL_SIZE
,
0L
,
TimeUnit
.
MILLISECONDS
,
new
LinkedBlockingQueue
<
Runnable
>(),
new
DefaultThreadFactory
(
threadName
));
}
static
ExecutorService
newSingleExecutorService
(
String
threadName
)
{
return
new
ThreadPoolExecutor
(
1
,
1
,
0L
,
TimeUnit
.
MILLISECONDS
,
new
LinkedBlockingQueue
<
Runnable
>(),
new
DefaultThreadFactory
(
threadName
));
}
static
void
shutdown
(
ExecutorService
executorService
)
{
executorService
.
shutdownNow
();
}
}
common-util/src/main/resources/logback-spring.xml
0 → 100644
View file @
001708c2
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd"> -->
<configuration
scan=
"true"
scanPeriod=
"60 seconds"
debug=
"false"
>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<!-- <property name="LOG_HOME" value="./log" /> -->
<!--取得spring boot中的变量值有2种方式,一种是resource,另外一种是使用springProperty,使用springProperty好处能指定默认值-->
<!-- <property resource="application.properties"/>
-->
<springProperty
scope=
"context"
name=
"logLevel"
source=
"log.level"
defaultValue=
"info"
/>
<springProperty
scope=
"context"
name=
"logName"
source=
"spring.application.name"
defaultValue=
"app"
/>
<springProperty
scope=
"context"
name=
"logPath"
source=
"log.path"
defaultValue=
"./logs"
/>
<property
name=
"PATTERN"
value=
"%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{traceId}|%thread|%-5level|%logger{36}-%msg%n"
/>
<!-- <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{requestId} %-5level %logger{36} - %msg%n"/>-->
<property
name=
"CHARSET"
value=
"UTF-8"
/>
<jmxConfigurator/>
<!-- 控制台输出 -->
<appender
name=
"STDOUT"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder
class=
"ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}|%msgno|%thread|%-5level|%logger{20}-%msg%n</pattern> -->
<pattern>
${PATTERN}
</pattern>
</encoder>
<filter
class=
"ch.qos.logback.classic.filter.ThresholdFilter"
>
<level>
DEBUG
</level>
</filter>
</appender>
<appender
name=
"ERROR"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<filter
class=
"ch.qos.logback.classic.filter.LevelFilter"
>
<level>
ERROR
</level>
<!-- 只记录error级别的日志 -->
<onMatch>
ACCEPT
</onMatch>
<onMismatch>
DENY
</onMismatch>
</filter>
<!-- 定义文件的名称 -->
<file>
${logPath}/${logName}/error.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!-- rollover daily -->
<!-- 设置达到指定大小限制后输出的日志名称 -->
<fileNamePattern>
${logPath}/${logName}/error-%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>
30
</maxHistory>
</rollingPolicy>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>
${PATTERN}
</pattern>
<charset>
UTF-8
</charset>
</encoder>
</appender>
<appender
name=
"APP"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!-- 定义文件的名称 -->
<file>
${logPath}/${logName}/app.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!-- rollover daily -->
<!-- 设置达到指定大小限制后输出的日志名称 -->
<fileNamePattern>
${logPath}/${logName}/app-%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>
30
</maxHistory>
</rollingPolicy>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>
${PATTERN}
</pattern>
<charset>
UTF-8
</charset>
</encoder>
</appender>
<appender
name=
"ASYN_APP"
class=
"ch.qos.logback.classic.AsyncAppender"
>
<appender-ref
ref=
"APP"
/>
<queueSize>
1024
</queueSize>
<neverBlock>
true
</neverBlock>
</appender>
<appender
name=
"ASYN_ERROR"
class=
"ch.qos.logback.classic.AsyncAppender"
>
<appender-ref
ref=
"ERROR"
/>
<queueSize>
1024
</queueSize>
<neverBlock>
true
</neverBlock>
</appender>
<logger
name=
"app"
level=
"${logLevel}"
>
<appender-ref
ref=
"ASYN_APP"
/>
</logger>
<logger
name=
"error"
level=
"${logLevel}"
>
<appender-ref
ref=
"ASYN_ERROR"
/>
</logger>
<!-- 业务日志输出-->
<logger
name=
"com.secoo.mall"
level=
"${logLevel}"
>
<appender-ref
ref=
"ASYN_APP"
/>
</logger>
<!--统一日志输出级别,其他appender中如果有高于此处等级设置的也会被输出 -->
<root
level=
"${logLevel}"
>
<appender-ref
ref=
"STDOUT"
/>
</root>
</configuration>
\ No newline at end of file
dubbo-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,29 @@
...
@@ -5,11 +5,29 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
dubbo-starter
</artifactId>
<artifactId>
dubbo-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo-spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
com.deepoove
</groupId>
<artifactId>
swagger-dubbo
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
dubbo-starter/src/main/java/com/secoo/mall/dubbo/annotation/DubboService.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
dubbo
.
annotation
;
import
org.apache.dubbo.config.annotation.Service
;
import
org.springframework.core.annotation.AliasFor
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Service
public
@interface
DubboService
{
@AliasFor
(
annotation
=
Service
.
class
)
String
value
()
default
""
;
}
elasticsearch-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,21 @@
...
@@ -5,11 +5,21 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
elasticsearch-starter
</artifactId>
<artifactId>
elasticsearch-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-elasticsearch
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
mongodb-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,21 @@
...
@@ -5,11 +5,21 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
mongodb-starter
</artifactId>
<artifactId>
mongodb-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
mybatis-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,30 @@
...
@@ -5,11 +5,30 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
mybatis-starter
</artifactId>
<artifactId>
mybatis-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-util
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.baomidou
</groupId>
<artifactId>
mybatis-plus-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
mybatis-starter/src/main/java/com/secoo/mall/mybatis/bean/DataPage.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
mybatis
.
bean
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.secoo.mall.common.core.bean.Pageable
;
import
java.util.List
;
public
class
DataPage
<
T
>
implements
Pageable
<
T
>
{
private
Page
<
T
>
page
;
public
DataPage
(
Page
<
T
>
page
)
{
this
.
page
=
page
;
}
@Override
public
List
<
T
>
getResultList
()
{
return
page
.
getRecords
();
}
@Override
public
Long
getTotalCount
()
{
return
page
.
getTotal
();
}
@Override
public
Long
getCurPage
()
{
return
page
.
getCurrent
();
}
@Override
public
Long
getPageSize
()
{
return
page
.
getSize
();
}
}
mybatis-starter/src/main/java/com/secoo/mall/mybatis/config/MybatisConfig.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
mybatis
.
config
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.core.MybatisConfiguration
;
import
com.baomidou.mybatisplus.core.config.GlobalConfig
;
import
com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor
;
import
com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean
;
import
com.baomidou.mybatisplus.extension.toolkit.PackageHelper
;
import
com.secoo.mall.mybatis.handler.FillDefaultValueHandler
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.ibatis.session.SqlSessionFactory
;
import
org.apache.ibatis.type.JdbcType
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.io.support.PathMatchingResourcePatternResolver
;
import
javax.sql.DataSource
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
@Configuration
public
class
MybatisConfig
{
@Value
(
"${spring.profiles.active}"
)
private
String
profile
;
@Bean
(
"mybatisSqlSession"
)
public
SqlSessionFactory
sqlSessionFactory
(
DataSource
dataSource
,
GlobalConfig
globalConfig
)
throws
Exception
{
MybatisSqlSessionFactoryBean
sqlSessionFactory
=
new
MybatisSqlSessionFactoryBean
();
String
[]
aliasesPackages
=
PackageHelper
.
convertTypeAliasesPackage
(
"com.secoo.mall.**.bean.domain"
);
List
<
String
>
list
=
Stream
.
of
(
aliasesPackages
).
collect
(
Collectors
.
toList
());
/*文件包别名加载*/
sqlSessionFactory
.
setTypeAliasesPackage
(
StringUtils
.
join
(
list
,
","
));
/*配置文件*/
sqlSessionFactory
.
setMapperLocations
(
new
PathMatchingResourcePatternResolver
().
getResources
(
"classpath:mybatis/*.xml"
));
/* 数据源 */
sqlSessionFactory
.
setDataSource
(
dataSource
);
/* entity扫描,mybatis的Alias功能 */
MybatisConfiguration
configuration
=
new
MybatisConfiguration
();
configuration
.
setJdbcTypeForNull
(
JdbcType
.
NULL
);
/* 驼峰转下划线 */
configuration
.
setMapUnderscoreToCamelCase
(
true
);
/* 分页插件 */
configuration
.
addInterceptor
(
new
PaginationInterceptor
());
/* 乐观锁插件 */
// configuration.addInterceptor(new OptimisticLockerInterceptor());
//非生产环境加载的插件
if
(!
profile
.
equals
(
"prod"
))
{
configuration
.
addInterceptor
(
new
PerformanceInterceptor
());
}
sqlSessionFactory
.
setConfiguration
(
configuration
);
/* 自动填充插件 */
globalConfig
.
setMetaObjectHandler
(
new
FillDefaultValueHandler
());
sqlSessionFactory
.
setGlobalConfig
(
globalConfig
);
return
sqlSessionFactory
.
getObject
();
}
@Bean
(
"globalConfig"
)
public
GlobalConfig
globalConfig
()
{
GlobalConfig
conf
=
new
GlobalConfig
();
GlobalConfig
.
DbConfig
dbConfig
=
new
GlobalConfig
.
DbConfig
();
dbConfig
.
setIdType
(
IdType
.
AUTO
);
conf
.
setDbConfig
(
dbConfig
);
return
conf
;
}
@Bean
public
PerformanceInterceptor
performanceInterceptor
()
{
return
new
PerformanceInterceptor
();
}
}
mybatis-starter/src/main/java/com/secoo/mall/mybatis/handler/FillDefaultValueHandler.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
mybatis
.
handler
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
org.apache.ibatis.reflection.MetaObject
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
@Component
public
class
FillDefaultValueHandler
implements
MetaObjectHandler
{
@Override
public
void
insertFill
(
MetaObject
metaObject
)
{
Object
createTime
=
this
.
getFieldValByName
(
"createTime"
,
metaObject
);
if
(
createTime
==
null
)
{
this
.
setInsertFieldValByName
(
"createTime"
,
new
Date
(),
metaObject
);
}
}
@Override
public
void
updateFill
(
MetaObject
metaObject
)
{
}
}
mybatis-starter/src/main/java/com/secoo/mall/mybatis/util/PageUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
mybatis
.
util
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.secoo.mall.common.constant.PageConstant
;
import
com.secoo.mall.common.core.bean.ReqPage
;
import
com.secoo.mall.common.core.bean.Sort
;
import
com.secoo.mall.common.core.exception.ParameterException
;
import
com.secoo.mall.common.util.string.StringUtil
;
import
com.secoo.mall.mybatis.bean.DataPage
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
public
interface
PageUtil
{
static
<
T
>
Page
<
T
>
createPage
(
ReqPage
reqPage
)
{
if
(
Objects
.
isNull
(
reqPage
))
{
return
new
Page
<
T
>(
PageConstant
.
DEFAULT_CUR_PAGE
,
PageConstant
.
DEFAULT_PAGE_SIZE
);
}
if
(
reqPage
.
getPageSize
()
<=
0
)
{
throw
new
ParameterException
(
"页面大小为负"
);
}
if
(
reqPage
.
getCurPage
()
<
0
)
{
throw
new
ParameterException
(
"页码为负"
);
}
return
new
Page
<>(
reqPage
.
getCurPage
(),
reqPage
.
getPageSize
());
}
static
<
T
>
Page
<
T
>
createPage
(
ReqPage
reqPage
,
Sort
sort
)
{
Page
<
T
>
page
=
createPage
(
reqPage
);
createSorts
(
page
,
sort
);
return
page
;
}
static
<
T
>
DataPage
<
T
>
createDataPage
(
IPage
<
T
>
page
)
{
if
(
Objects
.
isNull
(
page
))
{
throw
new
ParameterException
(
"page对象不能为空"
);
}
return
new
DataPage
<
T
>((
Page
<
T
>)
page
);
}
static
void
createSorts
(
Page
page
,
Sort
sort
)
{
if
(
Objects
.
isNull
(
page
))
{
throw
new
ParameterException
(
"page对象不能为空"
);
}
if
(
Objects
.
isNull
(
sort
))
{
throw
new
ParameterException
(
"sort对象不能为空"
);
}
if
(
StringUtils
.
isNotEmpty
(
sort
.
getSort
()))
{
List
<
String
>
ascList
=
new
ArrayList
<>();
List
<
String
>
descList
=
new
ArrayList
<>();
String
[]
sortPros
=
StringUtils
.
split
(
sort
.
getSort
(),
","
);
for
(
String
sortPro
:
sortPros
)
{
String
[]
pro
=
StringUtils
.
split
(
sortPro
,
"_"
);
String
orderType
=
pro
[
1
];
String
proValue
=
sort
.
getToSnake
()
?
StringUtil
.
toSnakeCase
(
pro
[
0
])
:
pro
[
0
];
if
(
"asc"
.
equals
(
orderType
))
{
ascList
.
add
(
proValue
);
}
else
{
descList
.
add
(
proValue
);
}
}
if
(!
CollectionUtils
.
isEmpty
(
ascList
))
{
page
.
setAscs
(
ascList
);
}
if
(!
CollectionUtils
.
isEmpty
(
descList
))
{
page
.
setDescs
(
descList
);
}
}
}
}
pom.xml
View file @
001708c2
...
@@ -5,13 +5,12 @@
...
@@ -5,13 +5,12 @@
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<parent>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
mall-parent
</artifactId>
<artifactId>
mall-parent
</artifactId>
<version>
1.0.1
</version>
<version>
1.0.2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<version>
1.0.1
</version>
<packaging>
pom
</packaging>
<packaging>
pom
</packaging>
<modules>
<modules>
...
...
redis-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,21 @@
...
@@ -5,11 +5,21 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
redis-starter
</artifactId>
<artifactId>
redis-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
web-starter/pom.xml
View file @
001708c2
...
@@ -5,11 +5,21 @@
...
@@ -5,11 +5,21 @@
<parent>
<parent>
<artifactId>
mall-common
</artifactId>
<artifactId>
mall-common
</artifactId>
<groupId>
com.secoo.mall
</groupId>
<groupId>
com.secoo.mall
</groupId>
<version>
1.0.
1
</version>
<version>
1.0.
2.1006-DEV-SNAPSHOT
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
web-starter
</artifactId>
<artifactId>
web-starter
</artifactId>
<dependencies>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<artifactId>
common-util
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
</dependencies>
</project>
</project>
\ No newline at end of file
web-starter/src/main/java/com/secoo/mall/web/advice/ControllerResponseAdvice.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
advice
;
import
com.secoo.mall.common.core.errorcode.CommonErrorCode
;
import
com.secoo.mall.common.core.exception.BusinessException
;
import
com.secoo.mall.common.core.exception.ParameterException
;
import
com.secoo.mall.common.util.log.LoggerUtil
;
import
com.secoo.mall.common.util.response.ResponseUtil
;
import
com.secoo.mall.web.annotation.ApiController
;
import
com.secoo.mall.web.annotation.ApiIgnoreJson
;
import
org.springframework.context.MessageSource
;
import
org.springframework.context.i18n.LocaleContextHolder
;
import
org.springframework.core.MethodParameter
;
import
org.springframework.core.annotation.AnnotationUtils
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.converter.HttpMessageConverter
;
import
org.springframework.http.server.ServerHttpRequest
;
import
org.springframework.http.server.ServerHttpResponse
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice
;
import
javax.annotation.Resource
;
@RestControllerAdvice
(
annotations
=
ApiController
.
class
)
public
class
ControllerResponseAdvice
implements
ResponseBodyAdvice
<
Object
>
{
@Resource
private
MessageSource
messageSource
;
@ExceptionHandler
(
BusinessException
.
class
)
public
Object
businessExcepstionHandler
(
BusinessException
e
)
{
LoggerUtil
.
warn
(
"businessException info:"
,
e
);
return
ResponseUtil
.
getFailResponse
(
e
.
getCode
(),
getMsg
(
e
));
}
@ExceptionHandler
(
ParameterException
.
class
)
public
Object
parameterExceptionHandler
(
ParameterException
e
)
{
return
ResponseUtil
.
getFailResponse
(
e
.
getCode
(),
getMsg
(
e
));
}
@ExceptionHandler
(
Exception
.
class
)
public
Object
exceptionHandler
(
Exception
e
)
{
LoggerUtil
.
error
(
e
);
return
ResponseUtil
.
getFailResponse
(
CommonErrorCode
.
SYSTEM_INTERNAL_EXCEPTION
.
getCode
(),
CommonErrorCode
.
SYSTEM_INTERNAL_EXCEPTION
.
getMsg
());
}
@Override
public
boolean
supports
(
MethodParameter
methodParameter
,
Class
<?
extends
HttpMessageConverter
<?>>
aClass
)
{
return
AnnotationUtils
.
findAnnotation
(
methodParameter
.
getMethod
(),
ApiIgnoreJson
.
class
)
==
null
;
}
@Override
public
Object
beforeBodyWrite
(
Object
o
,
MethodParameter
methodParameter
,
MediaType
mediaType
,
Class
<?
extends
HttpMessageConverter
<?>>
aClass
,
ServerHttpRequest
serverHttpRequest
,
ServerHttpResponse
serverHttpResponse
)
{
return
ResponseUtil
.
getSuccessResponse
(
o
);
}
private
String
getMsg
(
BusinessException
e
)
{
return
messageSource
.
getMessage
(
e
.
getMsg
(),
e
.
getArgs
(),
LocaleContextHolder
.
getLocale
());
}
}
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiController.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
annotation
;
import
org.springframework.core.annotation.AliasFor
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@RestController
@RequestMapping
public
@interface
ApiController
{
@AliasFor
(
annotation
=
RequestMapping
.
class
)
String
name
()
default
""
;
@AliasFor
(
annotation
=
RequestMapping
.
class
,
attribute
=
"value"
)
String
[]
value
()
default
{};
@AliasFor
(
annotation
=
RequestMapping
.
class
)
String
[]
path
()
default
{};
}
\ No newline at end of file
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiIgnoreJson.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
annotation
;
public
@interface
ApiIgnoreJson
{
}
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiService.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
annotation
;
import
com.secoo.mall.common.core.annotation.TrationalService
;
import
org.springframework.core.annotation.AliasFor
;
import
org.springframework.stereotype.Service
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Service
@TrationalService
public
@interface
ApiService
{
@AliasFor
(
annotation
=
Service
.
class
)
String
value
()
default
""
;
}
web-starter/src/main/java/com/secoo/mall/web/annotation/ApiVersion.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
annotation
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
PARAMETER
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
public
@interface
ApiVersion
{
String
value
()
default
"version"
;
boolean
required
()
default
false
;
String
defaultValue
()
default
"1.0"
;
}
web-starter/src/main/java/com/secoo/mall/web/config/SwaggerConfig.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
config
;
import
com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI
;
import
com.secoo.mall.web.annotation.ApiController
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Profile
;
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
;
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
@Profile
({
"dev"
,
"local"
,
"test"
})
public
class
SwaggerConfig
{
@Value
(
"${spring.application.name}"
)
private
String
appName
;
@Value
(
"${spring.application.version:1.0.1}"
)
private
String
appVersion
;
@Bean
public
Docket
createRestApi
()
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
())
.
groupName
(
"SecooMall"
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
withClassAnnotation
(
ApiController
.
class
))
.
paths
(
PathSelectors
.
any
())
.
build
();
}
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
appName
+
" RESTful APIs"
)
.
version
(
appVersion
)
.
description
(
"更多内容请关注:http://apims.siku.cn"
)
.
build
();
}
}
\ No newline at end of file
web-starter/src/main/java/com/secoo/mall/web/config/WebConfig.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.support.ResourceBundleMessageSource
;
import
org.springframework.web.servlet.LocaleResolver
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
import
org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
;
import
org.springframework.web.servlet.i18n.CookieLocaleResolver
;
import
org.springframework.web.servlet.i18n.LocaleChangeInterceptor
;
import
java.util.Locale
;
@Configuration
public
class
WebConfig
implements
WebMvcConfigurer
{
/**
* 自定义国际化文件存放路径
*
* @return
*/
/*@Bean
public org.springframework.validation.Validator getValidator() {
Validator validator = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ResourceBundleMessageInterpolator(new PlatformResourceBundleLocator("i18n/message")))
.buildValidatorFactory().getValidator();
return (org.springframework.validation.Validator) validator;
}*/
@Bean
public
ResourceBundleMessageSource
messageSource
()
{
ResourceBundleMessageSource
messageSource
=
new
ResourceBundleMessageSource
();
messageSource
.
setBasename
(
"i18n/message"
);
return
messageSource
;
}
@Bean
public
LocaleResolver
localeHeaderResolver
()
{
AcceptHeaderLocaleResolver
localeResolver
=
new
AcceptHeaderLocaleResolver
();
localeResolver
.
setDefaultLocale
(
Locale
.
SIMPLIFIED_CHINESE
);
return
localeResolver
;
}
@Bean
public
LocaleResolver
localeCookieResolver
()
{
CookieLocaleResolver
localeResolver
=
new
CookieLocaleResolver
();
localeResolver
.
setCookieName
(
"language"
);
//设置默认区域
localeResolver
.
setDefaultLocale
(
Locale
.
CANADA
);
localeResolver
.
setCookieMaxAge
(
3600
);
//设置cookie有效期.
return
localeResolver
;
}
@Bean
public
LocaleChangeInterceptor
localeChangeInterceptor
()
{
LocaleChangeInterceptor
lci
=
new
LocaleChangeInterceptor
();
// 参数名
lci
.
setParamName
(
"lang"
);
return
lci
;
}
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
registry
.
addInterceptor
(
localeChangeInterceptor
());
}
}
web-starter/src/main/java/com/secoo/mall/web/filter/ApiVersionFilter.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
filter
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
public
class
ApiVersionFilter
extends
OncePerRequestFilter
{
@Override
protected
void
doFilterInternal
(
HttpServletRequest
httpServletRequest
,
HttpServletResponse
httpServletResponse
,
FilterChain
filterChain
)
throws
ServletException
,
IOException
{
System
.
out
.
println
(
httpServletRequest
);
}
}
web-starter/src/main/java/com/secoo/mall/web/util/WebUtil.java
0 → 100644
View file @
001708c2
package
com
.
secoo
.
mall
.
web
.
util
;
import
org.springframework.web.context.request.RequestAttributes
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
public
class
WebUtil
{
public
static
String
getParameter
(
String
name
)
{
return
getRequest
().
getParameter
(
name
);
}
public
static
<
T
>
T
getAttribute
(
String
name
)
{
return
(
T
)
getRequest
().
getAttribute
(
name
);
}
public
static
String
getHeader
(
String
name
)
{
return
getRequest
().
getHeader
(
name
);
}
public
static
HttpServletRequest
getRequest
()
{
return
getRequestAttributes
().
getRequest
();
}
public
static
HttpServletResponse
getResponse
()
{
return
getRequestAttributes
().
getResponse
();
}
public
static
HttpSession
getSession
()
{
return
getRequest
().
getSession
();
}
public
static
ServletRequestAttributes
getRequestAttributes
()
{
RequestAttributes
attributes
=
RequestContextHolder
.
getRequestAttributes
();
return
(
ServletRequestAttributes
)
attributes
;
}
public
static
<
T
>
void
setAttribute
(
String
name
,
T
obj
)
{
getRequest
().
setAttribute
(
name
,
obj
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment