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
"admin-console/vscode:/vscode.git/clone" did not exist on "b34143aeb950f43b327cc47b107eefe8f4e0ddba"
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