Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Eladmin
Commits
fd9fb2a6
Commit
fd9fb2a6
authored
Nov 01, 2019
by
dqjdda
Browse files
Merge branch '2.3dev'
parents
7895e547
1839ef8d
Changes
227
Hide whitespace changes
Inline
Side-by-side
eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java
View file @
fd9fb2a6
...
@@ -12,24 +12,24 @@ public interface GeneratorService {
...
@@ -12,24 +12,24 @@ public interface GeneratorService {
/**
/**
* 查询数据库元数据
* 查询数据库元数据
* @param name
* @param name
表名
* @param startEnd
* @param startEnd
分页参数
* @return
* @return
/
*/
*/
Object
getTables
(
String
name
,
int
[]
startEnd
);
Object
getTables
(
String
name
,
int
[]
startEnd
);
/**
/**
* 得到数据表的元数据
* 得到数据表的元数据
* @param name
* @param name
表名
* @return
* @return
/
*/
*/
Object
getColumns
(
String
name
);
Object
getColumns
(
String
name
);
/**
/**
* 生成代码
* 生成代码
* @param columnInfos
* @param columnInfos
表字段数据
* @param genConfig
* @param genConfig
代码生成配置
* @param tableName
* @param tableName
表名
*/
*/
void
generator
(
List
<
ColumnInfo
>
columnInfos
,
GenConfig
genConfig
,
String
tableName
);
void
generator
(
List
<
ColumnInfo
>
columnInfos
,
GenConfig
genConfig
,
String
tableName
);
}
}
eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java
View file @
fd9fb2a6
...
@@ -3,9 +3,10 @@ package me.zhengjie.service.impl;
...
@@ -3,9 +3,10 @@ package me.zhengjie.service.impl;
import
me.zhengjie.domain.GenConfig
;
import
me.zhengjie.domain.GenConfig
;
import
me.zhengjie.repository.GenConfigRepository
;
import
me.zhengjie.repository.GenConfigRepository
;
import
me.zhengjie.service.GenConfigService
;
import
me.zhengjie.service.GenConfigService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.io.File
;
import
java.util.Optional
;
import
java.util.Optional
;
...
@@ -14,35 +15,37 @@ import java.util.Optional;
...
@@ -14,35 +15,37 @@ import java.util.Optional;
* @date 2019-01-14
* @date 2019-01-14
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"genConfig"
)
public
class
GenConfigServiceImpl
implements
GenConfigService
{
public
class
GenConfigServiceImpl
implements
GenConfigService
{
@Autowired
private
final
GenConfigRepository
genConfigRepository
;
private
GenConfigRepository
genConfigRepository
;
public
GenConfigServiceImpl
(
GenConfigRepository
genConfigRepository
)
{
this
.
genConfigRepository
=
genConfigRepository
;
}
@Override
@Override
@Cacheable
(
key
=
"'1'"
)
public
GenConfig
find
()
{
public
GenConfig
find
()
{
Optional
<
GenConfig
>
genConfig
=
genConfigRepository
.
findById
(
1L
);
Optional
<
GenConfig
>
genConfig
=
genConfigRepository
.
findById
(
1L
);
if
(
genConfig
.
isPresent
()){
return
genConfig
.
orElseGet
(
GenConfig:
:
new
);
return
genConfig
.
get
();
}
else
{
return
new
GenConfig
();
}
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
public
GenConfig
update
(
GenConfig
genConfig
)
{
public
GenConfig
update
(
GenConfig
genConfig
)
{
genConfig
.
setId
(
1L
);
genConfig
.
setId
(
1L
);
// 自动设置Api路径,注释掉前需要同步取消前端的注释
// 自动设置Api路径,注释掉前需要同步取消前端的注释
String
separator
=
File
.
separator
;
String
separator
=
File
.
separator
;
String
[]
paths
=
null
;
String
[]
paths
;
if
(
separator
.
equals
(
"\\"
))
{
if
(
separator
.
equals
(
"\\"
))
{
paths
=
genConfig
.
getPath
().
split
(
"\\\\"
);
paths
=
genConfig
.
getPath
().
split
(
"\\\\"
);
}
else
paths
=
genConfig
.
getPath
().
split
(
File
.
separator
);
}
else
paths
=
genConfig
.
getPath
().
split
(
File
.
separator
);
StringBu
ff
er
api
=
new
StringBu
ff
er
();
StringBu
ild
er
api
=
new
StringBu
ild
er
();
for
(
int
i
=
0
;
i
<
paths
.
length
;
i
++
)
{
for
(
String
path
:
paths
)
{
api
.
append
(
path
s
[
i
]
);
api
.
append
(
path
);
api
.
append
(
separator
);
api
.
append
(
separator
);
if
(
path
s
[
i
]
.
equals
(
"src"
)){
if
(
path
.
equals
(
"src"
))
{
api
.
append
(
"api"
);
api
.
append
(
"api"
);
break
;
break
;
}
}
...
...
eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java
View file @
fd9fb2a6
...
@@ -28,6 +28,7 @@ public class GeneratorServiceImpl implements GeneratorService {
...
@@ -28,6 +28,7 @@ public class GeneratorServiceImpl implements GeneratorService {
private
EntityManager
em
;
private
EntityManager
em
;
@Override
@Override
@SuppressWarnings
(
"all"
)
public
Object
getTables
(
String
name
,
int
[]
startEnd
)
{
public
Object
getTables
(
String
name
,
int
[]
startEnd
)
{
// 使用预编译防止sql注入
// 使用预编译防止sql注入
String
sql
=
"select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables "
+
String
sql
=
"select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables "
+
...
@@ -37,10 +38,11 @@ public class GeneratorServiceImpl implements GeneratorService {
...
@@ -37,10 +38,11 @@ public class GeneratorServiceImpl implements GeneratorService {
query
.
setFirstResult
(
startEnd
[
0
]);
query
.
setFirstResult
(
startEnd
[
0
]);
query
.
setMaxResults
(
startEnd
[
1
]-
startEnd
[
0
]);
query
.
setMaxResults
(
startEnd
[
1
]-
startEnd
[
0
]);
query
.
setParameter
(
1
,
StringUtils
.
isNotBlank
(
name
)
?
(
"%"
+
name
+
"%"
)
:
"%%"
);
query
.
setParameter
(
1
,
StringUtils
.
isNotBlank
(
name
)
?
(
"%"
+
name
+
"%"
)
:
"%%"
);
List
<
Object
[]>
result
=
query
.
getResultList
();
List
result
=
query
.
getResultList
();
List
<
TableInfo
>
tableInfos
=
new
ArrayList
<>();
List
<
TableInfo
>
tableInfos
=
new
ArrayList
<>();
for
(
Object
[]
obj
:
result
)
{
for
(
Object
obj
:
result
)
{
tableInfos
.
add
(
new
TableInfo
(
obj
[
0
],
obj
[
1
],
obj
[
2
],
obj
[
3
],
ObjectUtil
.
isNotEmpty
(
obj
[
4
])?
obj
[
4
]
:
"-"
));
Object
[]
arr
=
(
Object
[])
obj
;
tableInfos
.
add
(
new
TableInfo
(
arr
[
0
],
arr
[
1
],
arr
[
2
],
arr
[
3
],
ObjectUtil
.
isNotEmpty
(
arr
[
4
])?
arr
[
4
]
:
"-"
));
}
}
Query
query1
=
em
.
createNativeQuery
(
"SELECT COUNT(*) from information_schema.tables where table_schema = (select database())"
);
Query
query1
=
em
.
createNativeQuery
(
"SELECT COUNT(*) from information_schema.tables where table_schema = (select database())"
);
Object
totalElements
=
query1
.
getSingleResult
();
Object
totalElements
=
query1
.
getSingleResult
();
...
@@ -48,16 +50,18 @@ public class GeneratorServiceImpl implements GeneratorService {
...
@@ -48,16 +50,18 @@ public class GeneratorServiceImpl implements GeneratorService {
}
}
@Override
@Override
@SuppressWarnings
(
"all"
)
public
Object
getColumns
(
String
name
)
{
public
Object
getColumns
(
String
name
)
{
// 使用预编译防止sql注入
// 使用预编译防止sql注入
String
sql
=
"select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns "
+
String
sql
=
"select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns "
+
"where table_name = ? and table_schema = (select database()) order by ordinal_position"
;
"where table_name = ? and table_schema = (select database()) order by ordinal_position"
;
Query
query
=
em
.
createNativeQuery
(
sql
);
Query
query
=
em
.
createNativeQuery
(
sql
);
query
.
setParameter
(
1
,
StringUtils
.
isNotBlank
(
name
)
?
name
:
null
);
query
.
setParameter
(
1
,
StringUtils
.
isNotBlank
(
name
)
?
name
:
null
);
List
<
Object
[]>
result
=
query
.
getResultList
();
List
result
=
query
.
getResultList
();
List
<
ColumnInfo
>
columnInfos
=
new
ArrayList
<>();
List
<
ColumnInfo
>
columnInfos
=
new
ArrayList
<>();
for
(
Object
[]
obj
:
result
)
{
for
(
Object
obj
:
result
)
{
columnInfos
.
add
(
new
ColumnInfo
(
obj
[
0
],
obj
[
1
],
obj
[
2
],
obj
[
3
],
obj
[
4
],
obj
[
5
],
null
,
"true"
));
Object
[]
arr
=
(
Object
[])
obj
;
columnInfos
.
add
(
new
ColumnInfo
(
arr
[
0
],
arr
[
1
],
arr
[
2
],
arr
[
3
],
arr
[
4
],
arr
[
5
],
null
,
"true"
));
}
}
return
PageUtil
.
toPage
(
columnInfos
,
columnInfos
.
size
());
return
PageUtil
.
toPage
(
columnInfos
,
columnInfos
.
size
());
}
}
...
...
eladmin-generator/src/main/java/me/zhengjie/utils/ColUtil.java
View file @
fd9fb2a6
...
@@ -12,11 +12,12 @@ public class ColUtil {
...
@@ -12,11 +12,12 @@ public class ColUtil {
/**
/**
* 转换mysql数据类型为java数据类型
* 转换mysql数据类型为java数据类型
* @param type
* @param type
数据库字段类型
* @return
* @return
String
*/
*/
public
static
String
cloToJava
(
String
type
){
static
String
cloToJava
(
String
type
){
Configuration
config
=
getConfig
();
Configuration
config
=
getConfig
();
assert
config
!=
null
;
return
config
.
getString
(
type
,
"unknowType"
);
return
config
.
getString
(
type
,
"unknowType"
);
}
}
...
...
eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java
View file @
fd9fb2a6
...
@@ -34,9 +34,9 @@ public class GenUtil {
...
@@ -34,9 +34,9 @@ public class GenUtil {
/**
/**
* 获取后端代码模板名称
* 获取后端代码模板名称
* @return
* @return
List
*/
*/
p
ublic
static
List
<
String
>
getAdminTemplateNames
()
{
p
rivate
static
List
<
String
>
getAdminTemplateNames
()
{
List
<
String
>
templateNames
=
new
ArrayList
<>();
List
<
String
>
templateNames
=
new
ArrayList
<>();
templateNames
.
add
(
"Entity"
);
templateNames
.
add
(
"Entity"
);
templateNames
.
add
(
"Dto"
);
templateNames
.
add
(
"Dto"
);
...
@@ -51,9 +51,9 @@ public class GenUtil {
...
@@ -51,9 +51,9 @@ public class GenUtil {
/**
/**
* 获取前端代码模板名称
* 获取前端代码模板名称
* @return
* @return
List
*/
*/
p
ublic
static
List
<
String
>
getFrontTemplateNames
()
{
p
rivate
static
List
<
String
>
getFrontTemplateNames
()
{
List
<
String
>
templateNames
=
new
ArrayList
<>();
List
<
String
>
templateNames
=
new
ArrayList
<>();
templateNames
.
add
(
"api"
);
templateNames
.
add
(
"api"
);
templateNames
.
add
(
"index"
);
templateNames
.
add
(
"index"
);
...
@@ -67,7 +67,7 @@ public class GenUtil {
...
@@ -67,7 +67,7 @@ public class GenUtil {
* @param genConfig 生成代码的参数配置,如包路径,作者
* @param genConfig 生成代码的参数配置,如包路径,作者
*/
*/
public
static
void
generatorCode
(
List
<
ColumnInfo
>
columnInfos
,
GenConfig
genConfig
,
String
tableName
)
throws
IOException
{
public
static
void
generatorCode
(
List
<
ColumnInfo
>
columnInfos
,
GenConfig
genConfig
,
String
tableName
)
throws
IOException
{
Map
<
String
,
Object
>
map
=
new
HashMap
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>
();
map
.
put
(
"package"
,
genConfig
.
getPack
());
map
.
put
(
"package"
,
genConfig
.
getPack
());
map
.
put
(
"moduleName"
,
genConfig
.
getModuleName
());
map
.
put
(
"moduleName"
,
genConfig
.
getModuleName
());
map
.
put
(
"author"
,
genConfig
.
getAuthor
());
map
.
put
(
"author"
,
genConfig
.
getAuthor
());
...
@@ -85,6 +85,8 @@ public class GenUtil {
...
@@ -85,6 +85,8 @@ public class GenUtil {
map
.
put
(
"upperCaseClassName"
,
className
.
toUpperCase
());
map
.
put
(
"upperCaseClassName"
,
className
.
toUpperCase
());
map
.
put
(
"changeClassName"
,
changeClassName
);
map
.
put
(
"changeClassName"
,
changeClassName
);
map
.
put
(
"hasTimestamp"
,
false
);
map
.
put
(
"hasTimestamp"
,
false
);
map
.
put
(
"queryHasTimestamp"
,
false
);
map
.
put
(
"queryHasBigDecimal"
,
false
);
map
.
put
(
"hasBigDecimal"
,
false
);
map
.
put
(
"hasBigDecimal"
,
false
);
map
.
put
(
"hasQuery"
,
false
);
map
.
put
(
"hasQuery"
,
false
);
map
.
put
(
"auto"
,
false
);
map
.
put
(
"auto"
,
false
);
...
@@ -92,7 +94,7 @@ public class GenUtil {
...
@@ -92,7 +94,7 @@ public class GenUtil {
List
<
Map
<
String
,
Object
>>
columns
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
columns
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
queryColumns
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
queryColumns
=
new
ArrayList
<>();
for
(
ColumnInfo
column
:
columnInfos
)
{
for
(
ColumnInfo
column
:
columnInfos
)
{
Map
<
String
,
Object
>
listMap
=
new
HashMap
();
Map
<
String
,
Object
>
listMap
=
new
HashMap
<>
();
listMap
.
put
(
"columnComment"
,
column
.
getColumnComment
());
listMap
.
put
(
"columnComment"
,
column
.
getColumnComment
());
listMap
.
put
(
"columnKey"
,
column
.
getColumnKey
());
listMap
.
put
(
"columnKey"
,
column
.
getColumnKey
());
...
@@ -124,6 +126,12 @@ public class GenUtil {
...
@@ -124,6 +126,12 @@ public class GenUtil {
if
(!
StringUtils
.
isBlank
(
column
.
getColumnQuery
())){
if
(!
StringUtils
.
isBlank
(
column
.
getColumnQuery
())){
listMap
.
put
(
"columnQuery"
,
column
.
getColumnQuery
());
listMap
.
put
(
"columnQuery"
,
column
.
getColumnQuery
());
map
.
put
(
"hasQuery"
,
true
);
map
.
put
(
"hasQuery"
,
true
);
if
(
TIMESTAMP
.
equals
(
colType
)){
map
.
put
(
"queryHasTimestamp"
,
true
);
}
if
(
BIGDECIMAL
.
equals
(
colType
)){
map
.
put
(
"queryHasBigDecimal"
,
true
);
}
queryColumns
.
add
(
listMap
);
queryColumns
.
add
(
listMap
);
}
}
columns
.
add
(
listMap
);
columns
.
add
(
listMap
);
...
@@ -138,6 +146,7 @@ public class GenUtil {
...
@@ -138,6 +146,7 @@ public class GenUtil {
Template
template
=
engine
.
getTemplate
(
"generator/admin/"
+
templateName
+
".ftl"
);
Template
template
=
engine
.
getTemplate
(
"generator/admin/"
+
templateName
+
".ftl"
);
String
filePath
=
getAdminFilePath
(
templateName
,
genConfig
,
className
);
String
filePath
=
getAdminFilePath
(
templateName
,
genConfig
,
className
);
assert
filePath
!=
null
;
File
file
=
new
File
(
filePath
);
File
file
=
new
File
(
filePath
);
// 如果非覆盖生成
// 如果非覆盖生成
...
@@ -154,6 +163,7 @@ public class GenUtil {
...
@@ -154,6 +163,7 @@ public class GenUtil {
Template
template
=
engine
.
getTemplate
(
"generator/front/"
+
templateName
+
".ftl"
);
Template
template
=
engine
.
getTemplate
(
"generator/front/"
+
templateName
+
".ftl"
);
String
filePath
=
getFrontFilePath
(
templateName
,
genConfig
,
map
.
get
(
"changeClassName"
).
toString
());
String
filePath
=
getFrontFilePath
(
templateName
,
genConfig
,
map
.
get
(
"changeClassName"
).
toString
());
assert
filePath
!=
null
;
File
file
=
new
File
(
filePath
);
File
file
=
new
File
(
filePath
);
// 如果非覆盖生成
// 如果非覆盖生成
...
@@ -168,7 +178,7 @@ public class GenUtil {
...
@@ -168,7 +178,7 @@ public class GenUtil {
/**
/**
* 定义后端文件路径以及名称
* 定义后端文件路径以及名称
*/
*/
p
ublic
static
String
getAdminFilePath
(
String
templateName
,
GenConfig
genConfig
,
String
className
)
{
p
rivate
static
String
getAdminFilePath
(
String
templateName
,
GenConfig
genConfig
,
String
className
)
{
String
projectPath
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
genConfig
.
getModuleName
();
String
projectPath
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
genConfig
.
getModuleName
();
String
packagePath
=
projectPath
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"java"
+
File
.
separator
;
String
packagePath
=
projectPath
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"java"
+
File
.
separator
;
if
(!
ObjectUtils
.
isEmpty
(
genConfig
.
getPack
()))
{
if
(!
ObjectUtils
.
isEmpty
(
genConfig
.
getPack
()))
{
...
@@ -213,7 +223,7 @@ public class GenUtil {
...
@@ -213,7 +223,7 @@ public class GenUtil {
/**
/**
* 定义前端文件路径以及名称
* 定义前端文件路径以及名称
*/
*/
p
ublic
static
String
getFrontFilePath
(
String
templateName
,
GenConfig
genConfig
,
String
apiName
)
{
p
rivate
static
String
getFrontFilePath
(
String
templateName
,
GenConfig
genConfig
,
String
apiName
)
{
String
path
=
genConfig
.
getPath
();
String
path
=
genConfig
.
getPath
();
if
(
"api"
.
equals
(
templateName
))
{
if
(
"api"
.
equals
(
templateName
))
{
...
@@ -230,18 +240,17 @@ public class GenUtil {
...
@@ -230,18 +240,17 @@ public class GenUtil {
return
null
;
return
null
;
}
}
p
ublic
static
void
genFile
(
File
file
,
Template
template
,
Map
<
String
,
Object
>
map
)
throws
IOException
{
p
rivate
static
void
genFile
(
File
file
,
Template
template
,
Map
<
String
,
Object
>
map
)
throws
IOException
{
// 生成目标文件
// 生成目标文件
Writer
writer
=
null
;
Writer
writer
=
null
;
try
{
try
{
FileUtil
.
touch
(
file
);
FileUtil
.
touch
(
file
);
writer
=
new
FileWriter
(
file
);
writer
=
new
FileWriter
(
file
);
template
.
render
(
map
,
writer
);
template
.
render
(
map
,
writer
);
}
catch
(
TemplateException
e
)
{
}
catch
(
TemplateException
|
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
throw
new
RuntimeException
(
e
);
}
finally
{
}
finally
{
assert
writer
!=
null
;
writer
.
close
();
writer
.
close
();
}
}
}
}
...
...
eladmin-logging/pom.xml
View file @
fd9fb2a6
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<parent>
<parent>
<artifactId>
eladmin
</artifactId>
<artifactId>
eladmin
</artifactId>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
<version>
2.
2
</version>
<version>
2.
3
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
<dependency>
<dependency>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
<artifactId>
eladmin-common
</artifactId>
<artifactId>
eladmin-common
</artifactId>
<version>
2.
2
</version>
<version>
2.
3
</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
eladmin-logging/src/main/java/me/zhengjie/aspect/LogAspect.java
View file @
fd9fb2a6
...
@@ -2,7 +2,6 @@ package me.zhengjie.aspect;
...
@@ -2,7 +2,6 @@ package me.zhengjie.aspect;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.exception.BadRequestException
;
import
me.zhengjie.service.LogService
;
import
me.zhengjie.service.LogService
;
import
me.zhengjie.utils.RequestHolder
;
import
me.zhengjie.utils.RequestHolder
;
import
me.zhengjie.utils.SecurityUtils
;
import
me.zhengjie.utils.SecurityUtils
;
...
@@ -14,7 +13,6 @@ import org.aspectj.lang.annotation.AfterThrowing;
...
@@ -14,7 +13,6 @@ import org.aspectj.lang.annotation.AfterThrowing;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
...
@@ -28,11 +26,14 @@ import javax.servlet.http.HttpServletRequest;
...
@@ -28,11 +26,14 @@ import javax.servlet.http.HttpServletRequest;
@Slf4j
@Slf4j
public
class
LogAspect
{
public
class
LogAspect
{
@Autowired
private
final
LogService
logService
;
private
LogService
logService
;
private
long
currentTime
=
0L
;
private
long
currentTime
=
0L
;
public
LogAspect
(
LogService
logService
)
{
this
.
logService
=
logService
;
}
/**
/**
* 配置切入点
* 配置切入点
*/
*/
...
@@ -48,11 +49,12 @@ public class LogAspect {
...
@@ -48,11 +49,12 @@ public class LogAspect {
*/
*/
@Around
(
"logPointcut()"
)
@Around
(
"logPointcut()"
)
public
Object
logAround
(
ProceedingJoinPoint
joinPoint
)
throws
Throwable
{
public
Object
logAround
(
ProceedingJoinPoint
joinPoint
)
throws
Throwable
{
Object
result
=
null
;
Object
result
;
currentTime
=
System
.
currentTimeMillis
();
currentTime
=
System
.
currentTimeMillis
();
result
=
joinPoint
.
proceed
();
result
=
joinPoint
.
proceed
();
Log
log
=
new
Log
(
"INFO"
,
System
.
currentTimeMillis
()
-
currentTime
);
Log
log
=
new
Log
(
"INFO"
,
System
.
currentTimeMillis
()
-
currentTime
);
logService
.
save
(
getUsername
(),
StringUtils
.
getIP
(
RequestHolder
.
getHttpServletRequest
()),
joinPoint
,
log
);
HttpServletRequest
request
=
RequestHolder
.
getHttpServletRequest
();
logService
.
save
(
getUsername
(),
StringUtils
.
getBrowser
(
request
),
StringUtils
.
getIp
(
request
),
joinPoint
,
log
);
return
result
;
return
result
;
}
}
...
@@ -66,7 +68,8 @@ public class LogAspect {
...
@@ -66,7 +68,8 @@ public class LogAspect {
public
void
logAfterThrowing
(
JoinPoint
joinPoint
,
Throwable
e
)
{
public
void
logAfterThrowing
(
JoinPoint
joinPoint
,
Throwable
e
)
{
Log
log
=
new
Log
(
"ERROR"
,
System
.
currentTimeMillis
()
-
currentTime
);
Log
log
=
new
Log
(
"ERROR"
,
System
.
currentTimeMillis
()
-
currentTime
);
log
.
setExceptionDetail
(
ThrowableUtil
.
getStackTrace
(
e
).
getBytes
());
log
.
setExceptionDetail
(
ThrowableUtil
.
getStackTrace
(
e
).
getBytes
());
logService
.
save
(
getUsername
(),
StringUtils
.
getIP
(
RequestHolder
.
getHttpServletRequest
()),
(
ProceedingJoinPoint
)
joinPoint
,
log
);
HttpServletRequest
request
=
RequestHolder
.
getHttpServletRequest
();
logService
.
save
(
getUsername
(),
StringUtils
.
getBrowser
(
request
),
StringUtils
.
getIp
(
request
),
(
ProceedingJoinPoint
)
joinPoint
,
log
);
}
}
public
String
getUsername
()
{
public
String
getUsername
()
{
...
...
eladmin-logging/src/main/java/me/zhengjie/domain/Log.java
View file @
fd9fb2a6
...
@@ -21,56 +21,40 @@ public class Log implements Serializable {
...
@@ -21,56 +21,40 @@ public class Log implements Serializable {
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
private
Long
id
;
/**
// 操作用户
* 操作用户
*/
private
String
username
;
private
String
username
;
/**
// 描述
* 描述
*/
private
String
description
;
private
String
description
;
/**
// 方法名
* 方法名
*/
private
String
method
;
private
String
method
;
/**
// 参数
* 参数
*/
@Column
(
columnDefinition
=
"text"
)
@Column
(
columnDefinition
=
"text"
)
private
String
params
;
private
String
params
;
/**
// 日志类型
* 日志类型
*/
@Column
(
name
=
"log_type"
)
@Column
(
name
=
"log_type"
)
private
String
logType
;
private
String
logType
;
/**
// 请求ip
* 请求ip
*/
@Column
(
name
=
"request_ip"
)
@Column
(
name
=
"request_ip"
)
private
String
requestIp
;
private
String
requestIp
;
@Column
(
name
=
"address"
)
@Column
(
name
=
"address"
)
private
String
address
;
private
String
address
;
/**
private
String
browser
;
* 请求耗时
*/
// 请求耗时
private
Long
time
;
private
Long
time
;
/**
// 异常详细
* 异常详细
*/
@Column
(
name
=
"exception_detail"
,
columnDefinition
=
"text"
)
@Column
(
name
=
"exception_detail"
,
columnDefinition
=
"text"
)
private
byte
[]
exceptionDetail
;
private
byte
[]
exceptionDetail
;
/**
// 创建日期
* 创建日期
*/
@CreationTimestamp
@CreationTimestamp
@Column
(
name
=
"create_time"
)
@Column
(
name
=
"create_time"
)
private
Timestamp
createTime
;
private
Timestamp
createTime
;
...
...
eladmin-logging/src/main/java/me/zhengjie/repository/LogRepository.java
View file @
fd9fb2a6
...
@@ -11,22 +11,14 @@ import org.springframework.stereotype.Repository;
...
@@ -11,22 +11,14 @@ import org.springframework.stereotype.Repository;
* @date 2018-11-24
* @date 2018-11-24
*/
*/
@Repository
@Repository
public
interface
LogRepository
extends
JpaRepository
<
Log
,
Long
>,
JpaSpecificationExecutor
{
public
interface
LogRepository
extends
JpaRepository
<
Log
,
Long
>,
JpaSpecificationExecutor
<
Log
>
{
/**
/**
* 获取一个时间段的IP记录
* 获取一个时间段的IP记录
* @param date1
* @param date2
* @return
*/
*/
@Query
(
value
=
"select count(*) FROM (select request_ip FROM log where create_time between ?1 and ?2 GROUP BY request_ip) as s"
,
nativeQuery
=
true
)
@Query
(
value
=
"select count(*) FROM (select request_ip FROM log where create_time between ?1 and ?2 GROUP BY request_ip) as s"
,
nativeQuery
=
true
)
Long
findIp
(
String
date1
,
String
date2
);
Long
findIp
(
String
date1
,
String
date2
);
/**
@Query
(
value
=
"select l FROM Log l where l.id = ?1"
)
* findExceptionById
Log
findExceptionById
(
Long
id
);
* @param id
* @return
*/
@Query
(
value
=
"select exception_detail FROM log where id = ?1"
,
nativeQuery
=
true
)
String
findExceptionById
(
Long
id
);
}
}
eladmin-logging/src/main/java/me/zhengjie/rest/LogController.java
View file @
fd9fb2a6
package
me.zhengjie.rest
;
package
me.zhengjie.rest
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
me.zhengjie.aop.log.Log
;
import
me.zhengjie.service.LogService
;
import
me.zhengjie.service.LogService
;
import
me.zhengjie.service.dto.LogQueryCriteria
;
import
me.zhengjie.service.dto.LogQueryCriteria
;
import
me.zhengjie.utils.SecurityUtils
;
import
me.zhengjie.utils.SecurityUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
...
@@ -13,41 +15,60 @@ import org.springframework.web.bind.annotation.PathVariable;
...
@@ -13,41 +15,60 @@ import org.springframework.web.bind.annotation.PathVariable;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2018-11-24
* @date 2018-11-24
*/
*/
@RestController
@RestController
@RequestMapping
(
"api"
)
@RequestMapping
(
"/api/logs"
)
@Api
(
tags
=
"监控:日志管理"
)
public
class
LogController
{
public
class
LogController
{
@Autowired
private
final
LogService
logService
;
private
LogService
logService
;
public
LogController
(
LogService
logService
)
{
this
.
logService
=
logService
;
}
@Log
(
"导出数据"
)
@ApiOperation
(
"导出数据"
)
@GetMapping
(
value
=
"/download"
)
@PreAuthorize
(
"@el.check()"
)
public
void
download
(
HttpServletResponse
response
,
LogQueryCriteria
criteria
)
throws
IOException
{
logService
.
download
(
logService
.
queryAll
(
criteria
),
response
);
}
@GetMapping
(
value
=
"/logs"
)
@GetMapping
@PreAuthorize
(
"hasAnyRole('ADMIN')"
)
@ApiOperation
(
"日志查询"
)
@PreAuthorize
(
"@el.check()"
)
public
ResponseEntity
getLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
public
ResponseEntity
getLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
criteria
.
setLogType
(
"INFO"
);
criteria
.
setLogType
(
"INFO"
);
return
new
ResponseEntity
(
logService
.
queryAll
(
criteria
,
pageable
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>
(
logService
.
queryAll
(
criteria
,
pageable
),
HttpStatus
.
OK
);
}
}
@GetMapping
(
value
=
"/logs/user"
)
@GetMapping
(
value
=
"/user"
)
@ApiOperation
(
"用户日志查询"
)
public
ResponseEntity
getUserLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
public
ResponseEntity
getUserLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
criteria
.
setLogType
(
"INFO"
);
criteria
.
setLogType
(
"INFO"
);
criteria
.
setBlurry
(
SecurityUtils
.
getUsername
());
criteria
.
setBlurry
(
SecurityUtils
.
getUsername
());
return
new
ResponseEntity
(
logService
.
queryAllByUser
(
criteria
,
pageable
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>
(
logService
.
queryAllByUser
(
criteria
,
pageable
),
HttpStatus
.
OK
);
}
}
@GetMapping
(
value
=
"/logs/error"
)
@GetMapping
(
value
=
"/error"
)
@PreAuthorize
(
"hasAnyRole('ADMIN')"
)
@ApiOperation
(
"错误日志查询"
)
@PreAuthorize
(
"@el.check()"
)
public
ResponseEntity
getErrorLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
public
ResponseEntity
getErrorLogs
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
criteria
.
setLogType
(
"ERROR"
);
criteria
.
setLogType
(
"ERROR"
);
return
new
ResponseEntity
(
logService
.
queryAll
(
criteria
,
pageable
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>
(
logService
.
queryAll
(
criteria
,
pageable
),
HttpStatus
.
OK
);
}
}
@GetMapping
(
value
=
"/logs/error/{id}"
)
@GetMapping
(
value
=
"/error/{id}"
)
@PreAuthorize
(
"hasAnyRole('ADMIN')"
)
@ApiOperation
(
"日志异常详情查询"
)
@PreAuthorize
(
"@el.check()"
)
public
ResponseEntity
getErrorLogs
(
@PathVariable
Long
id
){
public
ResponseEntity
getErrorLogs
(
@PathVariable
Long
id
){
return
new
ResponseEntity
(
logService
.
findByErrDetail
(
id
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>
(
logService
.
findByErrDetail
(
id
),
HttpStatus
.
OK
);
}
}
}
}
eladmin-logging/src/main/java/me/zhengjie/service/LogService.java
View file @
fd9fb2a6
...
@@ -6,42 +6,31 @@ import org.aspectj.lang.ProceedingJoinPoint;
...
@@ -6,42 +6,31 @@ import org.aspectj.lang.ProceedingJoinPoint;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.List
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2018-11-24
* @date 2018-11-24
*/
*/
public
interface
LogService
{
public
interface
LogService
{
/**
* queryAll
* @param criteria
* @param pageable
* @return
*/
Object
queryAll
(
LogQueryCriteria
criteria
,
Pageable
pageable
);
Object
queryAll
(
LogQueryCriteria
criteria
,
Pageable
pageable
);
/**
List
<
Log
>
queryAll
(
LogQueryCriteria
criteria
);
* queryAllByUser
* @param criteria
* @param pageable
* @return
*/
Object
queryAllByUser
(
LogQueryCriteria
criteria
,
Pageable
pageable
);
Object
queryAllByUser
(
LogQueryCriteria
criteria
,
Pageable
pageable
);
/**
* 新增日志
* @param username
* @param ip
* @param joinPoint
* @param log
*/
@Async
@Async
void
save
(
String
username
,
String
ip
,
ProceedingJoinPoint
joinPoint
,
Log
log
);
void
save
(
String
username
,
String
browser
,
String
ip
,
ProceedingJoinPoint
joinPoint
,
Log
log
);
/**
/**
* 查询异常详情
* 查询异常详情
* @param id
* @param id
日志ID
* @return
* @return
Object
*/
*/
Object
findByErrDetail
(
Long
id
);
Object
findByErrDetail
(
Long
id
);
void
download
(
List
<
Log
>
queryAll
,
HttpServletResponse
response
)
throws
IOException
;
}
}
eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java
View file @
fd9fb2a6
...
@@ -13,36 +13,26 @@ public class LogErrorDTO implements Serializable {
...
@@ -13,36 +13,26 @@ public class LogErrorDTO implements Serializable {
private
Long
id
;
private
Long
id
;
/**
// 操作用户
* 操作用户
*/
private
String
username
;
private
String
username
;
/**
// 描述
* 描述
*/
private
String
description
;
private
String
description
;
/**
// 方法名
* 方法名
*/
private
String
method
;
private
String
method
;
/**
// 参数
* 参数
*/
private
String
params
;
private
String
params
;
/**
private
String
browser
;
* 请求ip
*/
// 请求ip
private
String
requestIp
;
private
String
requestIp
;
private
String
address
;
private
String
address
;
/**
// 创建日期
* 创建日期
*/
private
Timestamp
createTime
;
private
Timestamp
createTime
;
}
}
\ No newline at end of file
eladmin-logging/src/main/java/me/zhengjie/service/dto/LogQueryCriteria.java
View file @
fd9fb2a6
...
@@ -3,6 +3,8 @@ package me.zhengjie.service.dto;
...
@@ -3,6 +3,8 @@ package me.zhengjie.service.dto;
import
lombok.Data
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
import
me.zhengjie.annotation.Query
;
import
java.sql.Timestamp
;
/**
/**
* 日志查询类
* 日志查询类
* @author Zheng Jie
* @author Zheng Jie
...
@@ -17,4 +19,10 @@ public class LogQueryCriteria {
...
@@ -17,4 +19,10 @@ public class LogQueryCriteria {
@Query
@Query
private
String
logType
;
private
String
logType
;
@Query
(
type
=
Query
.
Type
.
GREATER_THAN
,
propName
=
"createTime"
)
private
Timestamp
startTime
;
@Query
(
type
=
Query
.
Type
.
LESS_THAN
,
propName
=
"createTime"
)
private
Timestamp
endTime
;
}
}
eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java
View file @
fd9fb2a6
package
me.zhengjie.service.dto
;
package
me.zhengjie.service.dto
;
import
lombok.Data
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.sql.Timestamp
;
...
@@ -12,25 +11,19 @@ import java.sql.Timestamp;
...
@@ -12,25 +11,19 @@ import java.sql.Timestamp;
@Data
@Data
public
class
LogSmallDTO
implements
Serializable
{
public
class
LogSmallDTO
implements
Serializable
{
/**
// 描述
* 描述
*/
private
String
description
;
private
String
description
;
/**
// 请求ip
* 请求ip
*/
private
String
requestIp
;
private
String
requestIp
;
/**
// 请求耗时
* 请求耗时
*/
private
Long
time
;
private
Long
time
;
private
String
address
;
private
String
address
;
/**
private
String
browser
;
* 创建日期
*/
// 创建日期
private
Timestamp
createTime
;
private
Timestamp
createTime
;
}
}
eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
View file @
fd9fb2a6
package
me.zhengjie.service.impl
;
package
me.zhengjie.service.impl
;
import
cn.hutool.core.lang.Dict
;
import
cn.hutool.core.lang.Dict
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONObject
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.repository.LogRepository
;
import
me.zhengjie.repository.LogRepository
;
...
@@ -8,18 +9,25 @@ import me.zhengjie.service.LogService;
...
@@ -8,18 +9,25 @@ import me.zhengjie.service.LogService;
import
me.zhengjie.service.dto.LogQueryCriteria
;
import
me.zhengjie.service.dto.LogQueryCriteria
;
import
me.zhengjie.service.mapper.LogErrorMapper
;
import
me.zhengjie.service.mapper.LogErrorMapper
;
import
me.zhengjie.service.mapper.LogSmallMapper
;
import
me.zhengjie.service.mapper.LogSmallMapper
;
import
me.zhengjie.utils.FileUtil
;
import
me.zhengjie.utils.PageUtil
;
import
me.zhengjie.utils.PageUtil
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.StringUtils
;
import
me.zhengjie.utils.StringUtils
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Method
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
...
@@ -29,16 +37,17 @@ import java.lang.reflect.Method;
...
@@ -29,16 +37,17 @@ import java.lang.reflect.Method;
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
LogServiceImpl
implements
LogService
{
public
class
LogServiceImpl
implements
LogService
{
@Autowired
private
final
LogRepository
logRepository
;
private
LogRepository
logRepository
;
@Autowired
private
final
LogErrorMapper
logErrorMapper
;
private
LogErrorMapper
logErrorMapper
;
@Autowired
private
final
LogSmallMapper
logSmallMapper
;
private
LogSmallMapper
logSmallMapper
;
private
final
String
LOGINPATH
=
"login"
;
public
LogServiceImpl
(
LogRepository
logRepository
,
LogErrorMapper
logErrorMapper
,
LogSmallMapper
logSmallMapper
)
{
this
.
logRepository
=
logRepository
;
this
.
logErrorMapper
=
logErrorMapper
;
this
.
logSmallMapper
=
logSmallMapper
;
}
@Override
@Override
public
Object
queryAll
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
public
Object
queryAll
(
LogQueryCriteria
criteria
,
Pageable
pageable
){
...
@@ -49,6 +58,11 @@ public class LogServiceImpl implements LogService {
...
@@ -49,6 +58,11 @@ public class LogServiceImpl implements LogService {
return
page
;
return
page
;
}
}
@Override
public
List
<
Log
>
queryAll
(
LogQueryCriteria
criteria
)
{
return
logRepository
.
findAll
(((
root
,
criteriaQuery
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
cb
)));
}
@Override
@Override
public
Object
queryAllByUser
(
LogQueryCriteria
criteria
,
Pageable
pageable
)
{
public
Object
queryAllByUser
(
LogQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
Log
>
page
=
logRepository
.
findAll
(((
root
,
criteriaQuery
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
cb
)),
pageable
);
Page
<
Log
>
page
=
logRepository
.
findAll
(((
root
,
criteriaQuery
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
cb
)),
pageable
);
...
@@ -57,38 +71,37 @@ public class LogServiceImpl implements LogService {
...
@@ -57,38 +71,37 @@ public class LogServiceImpl implements LogService {
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
save
(
String
username
,
String
ip
,
ProceedingJoinPoint
joinPoint
,
Log
log
){
public
void
save
(
String
username
,
String
browser
,
String
ip
,
ProceedingJoinPoint
joinPoint
,
Log
log
){
MethodSignature
signature
=
(
MethodSignature
)
joinPoint
.
getSignature
();
MethodSignature
signature
=
(
MethodSignature
)
joinPoint
.
getSignature
();
Method
method
=
signature
.
getMethod
();
Method
method
=
signature
.
getMethod
();
me
.
zhengjie
.
aop
.
log
.
Log
aopLog
=
method
.
getAnnotation
(
me
.
zhengjie
.
aop
.
log
.
Log
.
class
);
me
.
zhengjie
.
aop
.
log
.
Log
aopLog
=
method
.
getAnnotation
(
me
.
zhengjie
.
aop
.
log
.
Log
.
class
);
// 描述
if
(
log
!=
null
)
{
log
.
setDescription
(
aopLog
.
value
());
}
// 方法路径
// 方法路径
String
methodName
=
joinPoint
.
getTarget
().
getClass
().
getName
()+
"."
+
signature
.
getName
()+
"()"
;
String
methodName
=
joinPoint
.
getTarget
().
getClass
().
getName
()+
"."
+
signature
.
getName
()+
"()"
;
String
params
=
"{"
;
String
Builder
params
=
new
StringBuilder
(
"{"
)
;
//参数值
//参数值
Object
[]
argValues
=
joinPoint
.
getArgs
();
Object
[]
argValues
=
joinPoint
.
getArgs
();
//参数名称
//参数名称
String
[]
argNames
=
((
MethodSignature
)
joinPoint
.
getSignature
()).
getParameterNames
();
String
[]
argNames
=
((
MethodSignature
)
joinPoint
.
getSignature
()).
getParameterNames
();
if
(
argValues
!=
null
){
if
(
argValues
!=
null
){
for
(
int
i
=
0
;
i
<
argValues
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
argValues
.
length
;
i
++)
{
params
+=
" "
+
argNames
[
i
]
+
": "
+
argValues
[
i
];
params
.
append
(
" "
).
append
(
argNames
[
i
]).
append
(
": "
).
append
(
argValues
[
i
]
)
;
}
}
}
}
// 描述
// 获取IP地址
if
(
log
!=
null
)
{
log
.
setDescription
(
aopLog
.
value
());
}
assert
log
!=
null
;
log
.
setRequestIp
(
ip
);
log
.
setRequestIp
(
ip
);
String
LOGINPATH
=
"login"
;
if
(
LOGINPATH
.
equals
(
signature
.
getName
())){
if
(
LOGINPATH
.
equals
(
signature
.
getName
())){
try
{
try
{
JSONObject
jsonObject
=
new
JSONObject
(
argValues
[
0
])
;
assert
argValues
!=
null
;
username
=
jsonObject
.
get
(
"username"
).
toString
();
username
=
new
JSONObject
(
argValues
[
0
])
.
get
(
"username"
).
toString
();
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
@@ -96,12 +109,32 @@ public class LogServiceImpl implements LogService {
...
@@ -96,12 +109,32 @@ public class LogServiceImpl implements LogService {
log
.
setAddress
(
StringUtils
.
getCityInfo
(
log
.
getRequestIp
()));
log
.
setAddress
(
StringUtils
.
getCityInfo
(
log
.
getRequestIp
()));
log
.
setMethod
(
methodName
);
log
.
setMethod
(
methodName
);
log
.
setUsername
(
username
);
log
.
setUsername
(
username
);
log
.
setParams
(
params
+
" }"
);
log
.
setParams
(
params
.
toString
()
+
" }"
);
log
.
setBrowser
(
browser
);
logRepository
.
save
(
log
);
logRepository
.
save
(
log
);
}
}
@Override
@Override
public
Object
findByErrDetail
(
Long
id
)
{
public
Object
findByErrDetail
(
Long
id
)
{
return
Dict
.
create
().
set
(
"exception"
,
logRepository
.
findExceptionById
(
id
));
byte
[]
details
=
logRepository
.
findExceptionById
(
id
).
getExceptionDetail
();
return
Dict
.
create
().
set
(
"exception"
,
new
String
(
ObjectUtil
.
isNotNull
(
details
)
?
details
:
""
.
getBytes
()));
}
@Override
public
void
download
(
List
<
Log
>
logs
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
Log
log
:
logs
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"用户名"
,
log
.
getUsername
());
map
.
put
(
"IP"
,
log
.
getRequestIp
());
map
.
put
(
"IP来源"
,
log
.
getAddress
());
map
.
put
(
"描述"
,
log
.
getDescription
());
map
.
put
(
"浏览器"
,
log
.
getBrowser
());
map
.
put
(
"请求耗时/毫秒"
,
log
.
getTime
());
map
.
put
(
"异常详情"
,
new
String
(
ObjectUtil
.
isNotNull
(
log
.
getExceptionDetail
())
?
log
.
getExceptionDetail
()
:
""
.
getBytes
()));
map
.
put
(
"创建日期"
,
log
.
getCreateTime
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
}
eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogErrorMapper.java
View file @
fd9fb2a6
package
me.zhengjie.service.mapper
;
package
me.zhengjie.service.mapper
;
import
me.zhengjie.base.BaseMapper
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.mapper.EntityMapper
;
import
me.zhengjie.service.dto.LogErrorDTO
;
import
me.zhengjie.service.dto.LogErrorDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
import
org.mapstruct.ReportingPolicy
;
...
@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
...
@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-5-22
* @date 2019-5-22
*/
*/
@Mapper
(
componentModel
=
"spring"
,
uses
=
{},
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
LogErrorMapper
extends
Entity
Mapper
<
LogErrorDTO
,
Log
>
{
public
interface
LogErrorMapper
extends
Base
Mapper
<
LogErrorDTO
,
Log
>
{
}
}
\ No newline at end of file
eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogSmallMapper.java
View file @
fd9fb2a6
package
me.zhengjie.service.mapper
;
package
me.zhengjie.service.mapper
;
import
me.zhengjie.base.BaseMapper
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.domain.Log
;
import
me.zhengjie.mapper.EntityMapper
;
import
me.zhengjie.service.dto.LogSmallDTO
;
import
me.zhengjie.service.dto.LogSmallDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
import
org.mapstruct.ReportingPolicy
;
...
@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
...
@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-5-22
* @date 2019-5-22
*/
*/
@Mapper
(
componentModel
=
"spring"
,
uses
=
{},
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
LogSmallMapper
extends
Entity
Mapper
<
LogSmallDTO
,
Log
>
{
public
interface
LogSmallMapper
extends
Base
Mapper
<
LogSmallDTO
,
Log
>
{
}
}
\ No newline at end of file
eladmin-system/pom.xml
View file @
fd9fb2a6
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<parent>
<parent>
<artifactId>
eladmin
</artifactId>
<artifactId>
eladmin
</artifactId>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
<version>
2.
2
</version>
<version>
2.
3
</version>
</parent>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
<dependency>
<dependency>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
<artifactId>
eladmin-generator
</artifactId>
<artifactId>
eladmin-generator
</artifactId>
<version>
2.
2
</version>
<version>
2.
3
</version>
<exclusions>
<exclusions>
<exclusion>
<exclusion>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
<dependency>
<dependency>
<groupId>
me.zhengjie
</groupId>
<groupId>
me.zhengjie
</groupId>
<artifactId>
eladmin-tools
</artifactId>
<artifactId>
eladmin-tools
</artifactId>
<version>
2.
2
</version>
<version>
2.
3
</version>
</dependency>
</dependency>
<!--jwt-->
<!--jwt-->
...
...
eladmin-system/src/main/java/me/zhengjie/config/DataScope.java
View file @
fd9fb2a6
...
@@ -25,14 +25,17 @@ public class DataScope {
...
@@ -25,14 +25,17 @@ public class DataScope {
private
final
String
[]
scopeType
=
{
"全部"
,
"本级"
,
"自定义"
};
private
final
String
[]
scopeType
=
{
"全部"
,
"本级"
,
"自定义"
};
@Autowired
private
final
UserService
userService
;
private
UserService
userService
;
@Autowired
private
final
RoleService
roleService
;
private
RoleService
roleService
;
@Autowired
private
final
DeptService
deptService
;
private
DeptService
deptService
;
public
DataScope
(
UserService
userService
,
RoleService
roleService
,
DeptService
deptService
)
{
this
.
userService
=
userService
;
this
.
roleService
=
roleService
;
this
.
deptService
=
deptService
;
}
public
Set
<
Long
>
getDeptIds
()
{
public
Set
<
Long
>
getDeptIds
()
{
...
@@ -76,7 +79,7 @@ public class DataScope {
...
@@ -76,7 +79,7 @@ public class DataScope {
deptList
.
forEach
(
dept
->
{
deptList
.
forEach
(
dept
->
{
if
(
dept
!=
null
&&
dept
.
getEnabled
()){
if
(
dept
!=
null
&&
dept
.
getEnabled
()){
List
<
Dept
>
depts
=
deptService
.
findByPid
(
dept
.
getId
());
List
<
Dept
>
depts
=
deptService
.
findByPid
(
dept
.
getId
());
if
(
deptList
!=
null
&&
deptList
.
size
()!=
0
){
if
(
deptList
.
size
()
!=
0
){
list
.
addAll
(
getDeptChildren
(
depts
));
list
.
addAll
(
getDeptChildren
(
depts
));
}
}
list
.
add
(
dept
.
getId
());
list
.
add
(
dept
.
getId
());
...
...
eladmin-system/src/main/java/me/zhengjie/config/thread/AsyncTaskExecutePool.java
0 → 100644
View file @
fd9fb2a6
package
me.zhengjie.config.thread
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.annotation.AsyncConfigurer
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
java.util.concurrent.Executor
;
import
java.util.concurrent.ThreadPoolExecutor
;
/**
* 异步任务线程池装配类
* @author https://juejin.im/entry/5abb8f6951882555677e9da2
* @date 2019年10月31日15:06:18
*/
@Slf4j
@Configuration
public
class
AsyncTaskExecutePool
implements
AsyncConfigurer
{
//注入配置类
private
final
AsyncTaskProperties
config
;
public
AsyncTaskExecutePool
(
AsyncTaskProperties
config
)
{
this
.
config
=
config
;
}
@Override
public
Executor
getAsyncExecutor
()
{
ThreadPoolTaskExecutor
executor
=
new
ThreadPoolTaskExecutor
();
//核心线程池大小
executor
.
setCorePoolSize
(
config
.
getCorePoolSize
());
//最大线程数
executor
.
setMaxPoolSize
(
config
.
getMaxPoolSize
());
//队列容量
executor
.
setQueueCapacity
(
config
.
getQueueCapacity
());
//活跃时间
executor
.
setKeepAliveSeconds
(
config
.
getKeepAliveSeconds
());
//线程名字前缀
executor
.
setThreadNamePrefix
(
"el-async-"
);
// setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务
// CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
executor
.
setRejectedExecutionHandler
(
new
ThreadPoolExecutor
.
CallerRunsPolicy
());
executor
.
initialize
();
return
executor
;
}
@Override
public
AsyncUncaughtExceptionHandler
getAsyncUncaughtExceptionHandler
()
{
return
(
throwable
,
method
,
objects
)
->
{
log
.
error
(
"===="
+
throwable
.
getMessage
()+
"===="
,
throwable
);
log
.
error
(
"exception method:"
+
method
.
getName
());
};
}
}
Prev
1
2
3
4
5
6
7
…
12
Next
Write
Preview
Supports
Markdown
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