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
"src/git@ustchcs.com:gujinli1118/MCMS.git" did not exist on "e6252e9c877abdfc8dcfa50b11f4722a9c103909"
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-system/src/main/java/me/zhengjie/modules/system/service/dto/JobDTO.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.dto
;
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.Setter
;
import
java.sql.Timestamp
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-03-29
* @date 2019-03-29
*/
*/
@Data
@Getter
@Setter
@NoArgsConstructor
@NoArgsConstructor
public
class
JobDTO
implements
Serializable
{
public
class
JobDTO
implements
Serializable
{
/**
* ID
*/
private
Long
id
;
private
Long
id
;
private
Long
sort
;
private
Long
sort
;
/**
* 名称
*/
private
String
name
;
private
String
name
;
/**
* 状态
*/
private
Boolean
enabled
;
private
Boolean
enabled
;
private
DeptDTO
dept
;
private
DeptDTO
dept
;
/**
* 如果分公司存在相同部门,则显示上级部门名称
*/
private
String
deptSuperiorName
;
private
String
deptSuperiorName
;
/**
* 创建日期
*/
private
Timestamp
createTime
;
private
Timestamp
createTime
;
public
JobDTO
(
String
name
,
Boolean
enabled
)
{
public
JobDTO
(
String
name
,
Boolean
enabled
)
{
...
...
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobQueryCriteria.java
View file @
fd9fb2a6
...
@@ -27,4 +27,10 @@ public class JobQueryCriteria {
...
@@ -27,4 +27,10 @@ public class JobQueryCriteria {
@Query
(
propName
=
"id"
,
joinName
=
"dept"
,
type
=
Query
.
Type
.
IN
)
@Query
(
propName
=
"id"
,
joinName
=
"dept"
,
type
=
Query
.
Type
.
IN
)
private
Set
<
Long
>
deptIds
;
private
Set
<
Long
>
deptIds
;
@Query
(
type
=
Query
.
Type
.
GREATER_THAN
,
propName
=
"createTime"
)
private
Timestamp
startTime
;
@Query
(
type
=
Query
.
Type
.
LESS_THAN
,
propName
=
"createTime"
)
private
Timestamp
endTime
;
}
}
\ No newline at end of file
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobSmallDTO.java
View file @
fd9fb2a6
...
@@ -12,13 +12,7 @@ import java.io.Serializable;
...
@@ -12,13 +12,7 @@ import java.io.Serializable;
@NoArgsConstructor
@NoArgsConstructor
public
class
JobSmallDTO
implements
Serializable
{
public
class
JobSmallDTO
implements
Serializable
{
/**
* ID
*/
private
Long
id
;
private
Long
id
;
/**
* 名称
*/
private
String
name
;
private
String
name
;
}
}
\ No newline at end of file
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDTO.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.dto
;
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.sql.Timestamp
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2018-12-17
* @date 2018-12-17
*/
*/
@Data
@Getter
public
class
MenuDTO
{
@Setter
public
class
MenuDTO
implements
Serializable
{
private
Long
id
;
private
Long
id
;
private
Integer
type
;
private
String
permission
;
private
String
name
;
private
String
name
;
private
Long
sort
;
private
Long
sort
;
...
...
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuQueryCriteria.java
View file @
fd9fb2a6
...
@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
...
@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
import
lombok.Data
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
import
me.zhengjie.annotation.Query
;
import
java.sql.Timestamp
;
/**
/**
* 公共查询类
* 公共查询类
*/
*/
...
@@ -12,4 +14,10 @@ public class MenuQueryCriteria {
...
@@ -12,4 +14,10 @@ public class MenuQueryCriteria {
// 多字段模糊
// 多字段模糊
@Query
(
blurry
=
"name,path,component"
)
@Query
(
blurry
=
"name,path,component"
)
private
String
blurry
;
private
String
blurry
;
@Query
(
type
=
Query
.
Type
.
GREATER_THAN
,
propName
=
"createTime"
)
private
Timestamp
startTime
;
@Query
(
type
=
Query
.
Type
.
LESS_THAN
,
propName
=
"createTime"
)
private
Timestamp
endTime
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/PermissionDTO.java
deleted
100644 → 0
View file @
7895e547
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.util.List
;
/**
* @author Zheng Jie
* @date 2018-12-03
*/
@Data
public
class
PermissionDTO
implements
Serializable
{
private
Long
id
;
private
String
name
;
private
Long
pid
;
private
String
alias
;
private
Timestamp
createTime
;
private
List
<
PermissionDTO
>
children
;
@Override
public
String
toString
()
{
return
"Permission{"
+
"id="
+
id
+
", name='"
+
name
+
'\''
+
", pid="
+
pid
+
", alias='"
+
alias
+
'\''
+
", createTime="
+
createTime
+
'}'
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/PermissionQueryCriteria.java
deleted
100644 → 0
View file @
7895e547
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
/**
* 公共查询类
*/
@Data
public
class
PermissionQueryCriteria
{
// 多字段模糊
@Query
(
blurry
=
"name,alias"
)
private
String
blurry
;
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleDTO.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.dto
;
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.sql.Timestamp
;
import
java.util.Set
;
import
java.util.Set
;
...
@@ -9,7 +11,8 @@ import java.util.Set;
...
@@ -9,7 +11,8 @@ import java.util.Set;
* @author Zheng Jie
* @author Zheng Jie
* @date 2018-11-23
* @date 2018-11-23
*/
*/
@Data
@Getter
@Setter
public
class
RoleDTO
implements
Serializable
{
public
class
RoleDTO
implements
Serializable
{
private
Long
id
;
private
Long
id
;
...
@@ -22,7 +25,7 @@ public class RoleDTO implements Serializable {
...
@@ -22,7 +25,7 @@ public class RoleDTO implements Serializable {
private
String
remark
;
private
String
remark
;
private
S
et
<
PermissionDTO
>
permission
s
;
private
S
tring
permission
;
private
Set
<
MenuDTO
>
menus
;
private
Set
<
MenuDTO
>
menus
;
...
...
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleQueryCriteria.java
View file @
fd9fb2a6
...
@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
...
@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
import
lombok.Data
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
import
me.zhengjie.annotation.Query
;
import
java.sql.Timestamp
;
/**
/**
* 公共查询类
* 公共查询类
*/
*/
...
@@ -12,4 +14,10 @@ public class RoleQueryCriteria {
...
@@ -12,4 +14,10 @@ public class RoleQueryCriteria {
// 多字段模糊
// 多字段模糊
@Query
(
blurry
=
"name,remark"
)
@Query
(
blurry
=
"name,remark"
)
private
String
blurry
;
private
String
blurry
;
@Query
(
type
=
Query
.
Type
.
GREATER_THAN
,
propName
=
"createTime"
)
private
Timestamp
startTime
;
@Query
(
type
=
Query
.
Type
.
LESS_THAN
,
propName
=
"createTime"
)
private
Timestamp
endTime
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleSmallDTO.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.dto
;
package
me.zhengjie.modules.system.service.dto
;
import
lombok.Data
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.util.Set
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
...
...
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserDTO.java
View file @
fd9fb2a6
...
@@ -2,7 +2,9 @@ package me.zhengjie.modules.system.service.dto;
...
@@ -2,7 +2,9 @@ package me.zhengjie.modules.system.service.dto;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.sql.Timestamp
;
import
java.util.Date
;
import
java.util.Date
;
...
@@ -12,7 +14,8 @@ import java.util.Set;
...
@@ -12,7 +14,8 @@ import java.util.Set;
* @author Zheng Jie
* @author Zheng Jie
* @date 2018-11-23
* @date 2018-11-23
*/
*/
@Data
@Getter
@Setter
public
class
UserDTO
implements
Serializable
{
public
class
UserDTO
implements
Serializable
{
@ApiModelProperty
(
hidden
=
true
)
@ApiModelProperty
(
hidden
=
true
)
...
@@ -31,8 +34,6 @@ public class UserDTO implements Serializable {
...
@@ -31,8 +34,6 @@ public class UserDTO implements Serializable {
@JsonIgnore
@JsonIgnore
private
String
password
;
private
String
password
;
private
Timestamp
createTime
;
private
Date
lastPasswordResetTime
;
private
Date
lastPasswordResetTime
;
@ApiModelProperty
(
hidden
=
true
)
@ApiModelProperty
(
hidden
=
true
)
...
@@ -44,4 +45,6 @@ public class UserDTO implements Serializable {
...
@@ -44,4 +45,6 @@ public class UserDTO implements Serializable {
private
DeptSmallDTO
dept
;
private
DeptSmallDTO
dept
;
private
Long
deptId
;
private
Long
deptId
;
private
Timestamp
createTime
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserQueryCriteria.java
View file @
fd9fb2a6
...
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.dto;
...
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.dto;
import
lombok.Data
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
import
me.zhengjie.annotation.Query
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.util.Set
;
import
java.util.Set
;
/**
/**
...
@@ -26,4 +27,10 @@ public class UserQueryCriteria implements Serializable {
...
@@ -26,4 +27,10 @@ public class UserQueryCriteria implements Serializable {
private
Boolean
enabled
;
private
Boolean
enabled
;
private
Long
deptId
;
private
Long
deptId
;
@Query
(
type
=
Query
.
Type
.
GREATER_THAN
,
propName
=
"createTime"
)
private
Timestamp
startTime
;
@Query
(
type
=
Query
.
Type
.
LESS_THAN
,
propName
=
"createTime"
)
private
Timestamp
endTime
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java
View file @
fd9fb2a6
...
@@ -3,17 +3,23 @@ package me.zhengjie.modules.system.service.impl;
...
@@ -3,17 +3,23 @@ package me.zhengjie.modules.system.service.impl;
import
me.zhengjie.exception.BadRequestException
;
import
me.zhengjie.exception.BadRequestException
;
import
me.zhengjie.modules.system.domain.Dept
;
import
me.zhengjie.modules.system.domain.Dept
;
import
me.zhengjie.modules.system.service.dto.DeptQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.DeptQueryCriteria
;
import
me.zhengjie.utils.FileUtil
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.ValidationUtil
;
import
me.zhengjie.utils.ValidationUtil
;
import
me.zhengjie.modules.system.repository.DeptRepository
;
import
me.zhengjie.modules.system.repository.DeptRepository
;
import
me.zhengjie.modules.system.service.DeptService
;
import
me.zhengjie.modules.system.service.DeptService
;
import
me.zhengjie.modules.system.service.dto.DeptDTO
;
import
me.zhengjie.modules.system.service.dto.DeptDTO
;
import
me.zhengjie.modules.system.service.mapper.DeptMapper
;
import
me.zhengjie.modules.system.service.mapper.DeptMapper
;
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
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -22,28 +28,35 @@ import java.util.stream.Collectors;
...
@@ -22,28 +28,35 @@ import java.util.stream.Collectors;
* @date 2019-03-25
* @date 2019-03-25
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"dept"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
DeptServiceImpl
implements
DeptService
{
public
class
DeptServiceImpl
implements
DeptService
{
@Autowired
private
final
DeptRepository
deptRepository
;
private
DeptRepository
deptRepository
;
private
final
DeptMapper
deptMapper
;
@Autowired
public
DeptServiceImpl
(
DeptRepository
deptRepository
,
DeptMapper
deptMapper
)
{
private
DeptMapper
deptMapper
;
this
.
deptRepository
=
deptRepository
;
this
.
deptMapper
=
deptMapper
;
}
@Override
@Override
@Cacheable
public
List
<
DeptDTO
>
queryAll
(
DeptQueryCriteria
criteria
)
{
public
List
<
DeptDTO
>
queryAll
(
DeptQueryCriteria
criteria
)
{
return
deptMapper
.
toDto
(
deptRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
return
deptMapper
.
toDto
(
deptRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
}
}
@Override
@Override
@Cacheable
(
key
=
"#p0"
)
public
DeptDTO
findById
(
Long
id
)
{
public
DeptDTO
findById
(
Long
id
)
{
Optional
<
Dept
>
dept
=
deptRepository
.
findById
(
id
);
Dept
dept
=
deptRepository
.
findById
(
id
)
.
orElseGet
(
Dept:
:
new
)
;
ValidationUtil
.
isNull
(
dept
,
"Dept"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
dept
.
getId
()
,
"Dept"
,
"id"
,
id
);
return
deptMapper
.
toDto
(
dept
.
get
()
);
return
deptMapper
.
toDto
(
dept
);
}
}
@Override
@Override
@Cacheable
public
List
<
Dept
>
findByPid
(
long
pid
)
{
public
List
<
Dept
>
findByPid
(
long
pid
)
{
return
deptRepository
.
findByPid
(
pid
);
return
deptRepository
.
findByPid
(
pid
);
}
}
...
@@ -54,11 +67,12 @@ public class DeptServiceImpl implements DeptService {
...
@@ -54,11 +67,12 @@ public class DeptServiceImpl implements DeptService {
}
}
@Override
@Override
@Cacheable
public
Object
buildTree
(
List
<
DeptDTO
>
deptDTOS
)
{
public
Object
buildTree
(
List
<
DeptDTO
>
deptDTOS
)
{
Set
<
DeptDTO
>
trees
=
new
LinkedHashSet
<>();
Set
<
DeptDTO
>
trees
=
new
LinkedHashSet
<>();
Set
<
DeptDTO
>
depts
=
new
LinkedHashSet
<>();
Set
<
DeptDTO
>
depts
=
new
LinkedHashSet
<>();
List
<
String
>
deptNames
=
deptDTOS
.
stream
().
map
(
DeptDTO:
:
getName
).
collect
(
Collectors
.
toList
());
List
<
String
>
deptNames
=
deptDTOS
.
stream
().
map
(
DeptDTO:
:
getName
).
collect
(
Collectors
.
toList
());
B
oolean
isChild
;
b
oolean
isChild
;
for
(
DeptDTO
deptDTO
:
deptDTOS
)
{
for
(
DeptDTO
deptDTO
:
deptDTOS
)
{
isChild
=
false
;
isChild
=
false
;
if
(
"0"
.
equals
(
deptDTO
.
getPid
().
toString
()))
{
if
(
"0"
.
equals
(
deptDTO
.
getPid
().
toString
()))
{
...
@@ -68,7 +82,7 @@ public class DeptServiceImpl implements DeptService {
...
@@ -68,7 +82,7 @@ public class DeptServiceImpl implements DeptService {
if
(
it
.
getPid
().
equals
(
deptDTO
.
getId
()))
{
if
(
it
.
getPid
().
equals
(
deptDTO
.
getId
()))
{
isChild
=
true
;
isChild
=
true
;
if
(
deptDTO
.
getChildren
()
==
null
)
{
if
(
deptDTO
.
getChildren
()
==
null
)
{
deptDTO
.
setChildren
(
new
ArrayList
<
DeptDTO
>());
deptDTO
.
setChildren
(
new
ArrayList
<>());
}
}
deptDTO
.
getChildren
().
add
(
it
);
deptDTO
.
getChildren
().
add
(
it
);
}
}
...
@@ -83,36 +97,51 @@ public class DeptServiceImpl implements DeptService {
...
@@ -83,36 +97,51 @@ public class DeptServiceImpl implements DeptService {
trees
=
depts
;
trees
=
depts
;
}
}
Integer
totalElements
=
deptDTOS
!=
null
?
deptDTOS
.
size
()
:
0
;
Integer
totalElements
=
deptDTOS
.
size
();
Map
map
=
new
HashMap
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>
();
map
.
put
(
"totalElements"
,
totalElements
);
map
.
put
(
"totalElements"
,
totalElements
);
map
.
put
(
"content"
,
CollectionUtils
.
isEmpty
(
trees
)?
deptDTOS:
trees
);
map
.
put
(
"content"
,
CollectionUtils
.
isEmpty
(
trees
)?
deptDTOS:
trees
);
return
map
;
return
map
;
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DeptDTO
create
(
Dept
resources
)
{
public
DeptDTO
create
(
Dept
resources
)
{
return
deptMapper
.
toDto
(
deptRepository
.
save
(
resources
));
return
deptMapper
.
toDto
(
deptRepository
.
save
(
resources
));
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Dept
resources
)
{
public
void
update
(
Dept
resources
)
{
if
(
resources
.
getId
().
equals
(
resources
.
getPid
()))
{
if
(
resources
.
getId
().
equals
(
resources
.
getPid
()))
{
throw
new
BadRequestException
(
"上级不能为自己"
);
throw
new
BadRequestException
(
"上级不能为自己"
);
}
}
Optional
<
Dept
>
optionalDept
=
deptRepository
.
findById
(
resources
.
getId
());
Dept
dept
=
deptRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
Dept:
:
new
);
ValidationUtil
.
isNull
(
optionalDept
,
"Dept"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
dept
.
getId
(),
"Dept"
,
"id"
,
resources
.
getId
());
Dept
dept
=
optionalDept
.
get
();
resources
.
setId
(
dept
.
getId
());
resources
.
setId
(
dept
.
getId
());
deptRepository
.
save
(
resources
);
deptRepository
.
save
(
resources
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
deptRepository
.
deleteById
(
id
);
deptRepository
.
deleteById
(
id
);
}
}
@Override
public
void
download
(
List
<
DeptDTO
>
deptDTOs
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
DeptDTO
deptDTO
:
deptDTOs
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"部门名称"
,
deptDTO
.
getName
());
map
.
put
(
"部门状态"
,
deptDTO
.
getEnabled
()
?
"启用"
:
"停用"
);
map
.
put
(
"创建日期"
,
deptDTO
.
getCreateTime
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
\ No newline at end of file
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java
View file @
fd9fb2a6
...
@@ -9,60 +9,68 @@ import me.zhengjie.modules.system.repository.DictDetailRepository;
...
@@ -9,60 +9,68 @@ import me.zhengjie.modules.system.repository.DictDetailRepository;
import
me.zhengjie.modules.system.service.DictDetailService
;
import
me.zhengjie.modules.system.service.DictDetailService
;
import
me.zhengjie.modules.system.service.dto.DictDetailDTO
;
import
me.zhengjie.modules.system.service.dto.DictDetailDTO
;
import
me.zhengjie.modules.system.service.mapper.DictDetailMapper
;
import
me.zhengjie.modules.system.service.mapper.DictDetailMapper
;
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.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
java.util.Map
;
import
java.util.Map
;
import
java.util.Optional
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-04-10
* @date 2019-04-10
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"dictDetail"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
DictDetailServiceImpl
implements
DictDetailService
{
public
class
DictDetailServiceImpl
implements
DictDetailService
{
@Autowired
private
final
DictDetailRepository
dictDetailRepository
;
private
DictDetailRepository
dictDetailRepository
;
private
final
DictDetailMapper
dictDetailMapper
;
@Autowired
public
DictDetailServiceImpl
(
DictDetailRepository
dictDetailRepository
,
DictDetailMapper
dictDetailMapper
)
{
private
DictDetailMapper
dictDetailMapper
;
this
.
dictDetailRepository
=
dictDetailRepository
;
this
.
dictDetailMapper
=
dictDetailMapper
;
}
@Override
@Override
@Cacheable
public
Map
queryAll
(
DictDetailQueryCriteria
criteria
,
Pageable
pageable
)
{
public
Map
queryAll
(
DictDetailQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
DictDetail
>
page
=
dictDetailRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
Page
<
DictDetail
>
page
=
dictDetailRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
return
PageUtil
.
toPage
(
page
.
map
(
dictDetailMapper:
:
toDto
));
return
PageUtil
.
toPage
(
page
.
map
(
dictDetailMapper:
:
toDto
));
}
}
@Override
@Override
@Cacheable
(
key
=
"#p0"
)
public
DictDetailDTO
findById
(
Long
id
)
{
public
DictDetailDTO
findById
(
Long
id
)
{
Optional
<
DictDetail
>
dictDetail
=
dictDetailRepository
.
findById
(
id
);
DictDetail
dictDetail
=
dictDetailRepository
.
findById
(
id
)
.
orElseGet
(
DictDetail:
:
new
)
;
ValidationUtil
.
isNull
(
dictDetail
,
"DictDetail"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
dictDetail
.
getId
()
,
"DictDetail"
,
"id"
,
id
);
return
dictDetailMapper
.
toDto
(
dictDetail
.
get
()
);
return
dictDetailMapper
.
toDto
(
dictDetail
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DictDetailDTO
create
(
DictDetail
resources
)
{
public
DictDetailDTO
create
(
DictDetail
resources
)
{
return
dictDetailMapper
.
toDto
(
dictDetailRepository
.
save
(
resources
));
return
dictDetailMapper
.
toDto
(
dictDetailRepository
.
save
(
resources
));
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
DictDetail
resources
)
{
public
void
update
(
DictDetail
resources
)
{
Optional
<
DictDetail
>
optionalDictDetail
=
dictDetailRepository
.
findById
(
resources
.
getId
());
DictDetail
dictDetail
=
dictDetailRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
DictDetail:
:
new
);
ValidationUtil
.
isNull
(
optionalDictDetail
,
"DictDetail"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
dictDetail
.
getId
(),
"DictDetail"
,
"id"
,
resources
.
getId
());
DictDetail
dictDetail
=
optionalDictDetail
.
get
();
resources
.
setId
(
dictDetail
.
getId
());
resources
.
setId
(
dictDetail
.
getId
());
dictDetailRepository
.
save
(
resources
);
dictDetailRepository
.
save
(
resources
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
dictDetailRepository
.
deleteById
(
id
);
dictDetailRepository
.
deleteById
(
id
);
...
...
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.impl
;
package
me.zhengjie.modules.system.service.impl
;
import
cn.hutool.core.collection.CollectionUtil
;
import
me.zhengjie.modules.system.domain.Dict
;
import
me.zhengjie.modules.system.domain.Dict
;
import
me.zhengjie.modules.system.service.dto.DictDetailDTO
;
import
me.zhengjie.modules.system.service.dto.DictQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.DictQueryCriteria
;
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.ValidationUtil
;
import
me.zhengjie.utils.ValidationUtil
;
...
@@ -9,60 +12,109 @@ import me.zhengjie.modules.system.repository.DictRepository;
...
@@ -9,60 +12,109 @@ import me.zhengjie.modules.system.repository.DictRepository;
import
me.zhengjie.modules.system.service.DictService
;
import
me.zhengjie.modules.system.service.DictService
;
import
me.zhengjie.modules.system.service.dto.DictDTO
;
import
me.zhengjie.modules.system.service.dto.DictDTO
;
import
me.zhengjie.modules.system.service.mapper.DictMapper
;
import
me.zhengjie.modules.system.service.mapper.DictMapper
;
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.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
java.util.Optional
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-04-10
* @date 2019-04-10
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"dict"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
DictServiceImpl
implements
DictService
{
public
class
DictServiceImpl
implements
DictService
{
@Autowired
private
final
DictRepository
dictRepository
;
private
DictRepository
dictRepository
;
private
final
DictMapper
dictMapper
;
@Autowired
public
DictServiceImpl
(
DictRepository
dictRepository
,
DictMapper
dictMapper
)
{
private
DictMapper
dictMapper
;
this
.
dictRepository
=
dictRepository
;
this
.
dictMapper
=
dictMapper
;
}
@Override
@Override
public
Object
queryAll
(
DictQueryCriteria
dict
,
Pageable
pageable
){
@Cacheable
public
Map
<
String
,
Object
>
queryAll
(
DictQueryCriteria
dict
,
Pageable
pageable
){
Page
<
Dict
>
page
=
dictRepository
.
findAll
((
root
,
query
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
dict
,
cb
),
pageable
);
Page
<
Dict
>
page
=
dictRepository
.
findAll
((
root
,
query
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
dict
,
cb
),
pageable
);
return
PageUtil
.
toPage
(
page
.
map
(
dictMapper:
:
toDto
));
return
PageUtil
.
toPage
(
page
.
map
(
dictMapper:
:
toDto
));
}
}
@Override
@Override
public
List
<
DictDTO
>
queryAll
(
DictQueryCriteria
dict
)
{
List
<
Dict
>
list
=
dictRepository
.
findAll
((
root
,
query
,
cb
)
->
QueryHelp
.
getPredicate
(
root
,
dict
,
cb
));
return
dictMapper
.
toDto
(
list
);
}
@Override
@Cacheable
(
key
=
"#p0"
)
public
DictDTO
findById
(
Long
id
)
{
public
DictDTO
findById
(
Long
id
)
{
Optional
<
Dict
>
dict
=
dictRepository
.
findById
(
id
);
Dict
dict
=
dictRepository
.
findById
(
id
)
.
orElseGet
(
Dict:
:
new
)
;
ValidationUtil
.
isNull
(
dict
,
"Dict"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
dict
.
getId
()
,
"Dict"
,
"id"
,
id
);
return
dictMapper
.
toDto
(
dict
.
get
()
);
return
dictMapper
.
toDto
(
dict
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DictDTO
create
(
Dict
resources
)
{
public
DictDTO
create
(
Dict
resources
)
{
return
dictMapper
.
toDto
(
dictRepository
.
save
(
resources
));
return
dictMapper
.
toDto
(
dictRepository
.
save
(
resources
));
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Dict
resources
)
{
public
void
update
(
Dict
resources
)
{
Optional
<
Dict
>
optionalDict
=
dictRepository
.
findById
(
resources
.
getId
());
Dict
dict
=
dictRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
Dict:
:
new
);
ValidationUtil
.
isNull
(
optionalDict
,
"Dict"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
dict
.
getId
(),
"Dict"
,
"id"
,
resources
.
getId
());
Dict
dict
=
optionalDict
.
get
();
resources
.
setId
(
dict
.
getId
());
resources
.
setId
(
dict
.
getId
());
dictRepository
.
save
(
resources
);
dictRepository
.
save
(
resources
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
dictRepository
.
deleteById
(
id
);
dictRepository
.
deleteById
(
id
);
}
}
@Override
public
void
download
(
List
<
DictDTO
>
dictDTOS
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
DictDTO
dictDTO
:
dictDTOS
)
{
if
(
CollectionUtil
.
isNotEmpty
(
dictDTO
.
getDictDetails
())){
for
(
DictDetailDTO
dictDetail
:
dictDTO
.
getDictDetails
())
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"字典名称"
,
dictDTO
.
getName
());
map
.
put
(
"字典描述"
,
dictDTO
.
getRemark
());
map
.
put
(
"字典标签"
,
dictDetail
.
getLabel
());
map
.
put
(
"字典值"
,
dictDetail
.
getValue
());
map
.
put
(
"创建日期"
,
dictDetail
.
getCreateTime
());
list
.
add
(
map
);
}
}
else
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"字典名称"
,
dictDTO
.
getName
());
map
.
put
(
"字典描述"
,
dictDTO
.
getRemark
());
map
.
put
(
"字典标签"
,
null
);
map
.
put
(
"字典值"
,
null
);
map
.
put
(
"创建日期"
,
dictDTO
.
getCreateTime
());
list
.
add
(
map
);
}
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
\ No newline at end of file
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java
View file @
fd9fb2a6
...
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.impl;
...
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.impl;
import
me.zhengjie.modules.system.domain.Job
;
import
me.zhengjie.modules.system.domain.Job
;
import
me.zhengjie.modules.system.repository.DeptRepository
;
import
me.zhengjie.modules.system.repository.DeptRepository
;
import
me.zhengjie.modules.system.service.dto.JobQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.JobQueryCriteria
;
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.ValidationUtil
;
import
me.zhengjie.utils.ValidationUtil
;
...
@@ -10,35 +11,46 @@ import me.zhengjie.modules.system.repository.JobRepository;
...
@@ -10,35 +11,46 @@ import me.zhengjie.modules.system.repository.JobRepository;
import
me.zhengjie.modules.system.service.JobService
;
import
me.zhengjie.modules.system.service.JobService
;
import
me.zhengjie.modules.system.service.dto.JobDTO
;
import
me.zhengjie.modules.system.service.dto.JobDTO
;
import
me.zhengjie.modules.system.service.mapper.JobMapper
;
import
me.zhengjie.modules.system.service.mapper.JobMapper
;
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.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.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.
Optional
;
import
java.util.
Map
;
/**
/**
* @author Zheng Jie
* @author Zheng Jie
* @date 2019-03-29
* @date 2019-03-29
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"job"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
JobServiceImpl
implements
JobService
{
public
class
JobServiceImpl
implements
JobService
{
@Autowired
private
final
JobRepository
jobRepository
;
private
JobRepository
jobRepository
;
private
final
JobMapper
jobMapper
;
@Autowired
private
final
DeptRepository
deptRepository
;
private
JobMapper
jobMapper
;
@Autowired
public
JobServiceImpl
(
JobRepository
jobRepository
,
JobMapper
jobMapper
,
DeptRepository
deptRepository
)
{
private
DeptRepository
deptRepository
;
this
.
jobRepository
=
jobRepository
;
this
.
jobMapper
=
jobMapper
;
this
.
deptRepository
=
deptRepository
;
}
@Override
@Override
public
Object
queryAll
(
JobQueryCriteria
criteria
,
Pageable
pageable
)
{
@Cacheable
public
Map
<
String
,
Object
>
queryAll
(
JobQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
Job
>
page
=
jobRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
Page
<
Job
>
page
=
jobRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
List
<
JobDTO
>
jobs
=
new
ArrayList
<>();
List
<
JobDTO
>
jobs
=
new
ArrayList
<>();
for
(
Job
job
:
page
.
getContent
())
{
for
(
Job
job
:
page
.
getContent
())
{
...
@@ -48,32 +60,55 @@ public class JobServiceImpl implements JobService {
...
@@ -48,32 +60,55 @@ public class JobServiceImpl implements JobService {
}
}
@Override
@Override
@Cacheable
public
List
<
JobDTO
>
queryAll
(
JobQueryCriteria
criteria
)
{
List
<
Job
>
list
=
jobRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
));
return
jobMapper
.
toDto
(
list
);
}
@Override
@Cacheable
(
key
=
"#p0"
)
public
JobDTO
findById
(
Long
id
)
{
public
JobDTO
findById
(
Long
id
)
{
Optional
<
Job
>
job
=
jobRepository
.
findById
(
id
);
Job
job
=
jobRepository
.
findById
(
id
)
.
orElseGet
(
Job:
:
new
)
;
ValidationUtil
.
isNull
(
job
,
"Job"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
job
.
getId
()
,
"Job"
,
"id"
,
id
);
return
jobMapper
.
toDto
(
job
.
get
()
);
return
jobMapper
.
toDto
(
job
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
JobDTO
create
(
Job
resources
)
{
public
JobDTO
create
(
Job
resources
)
{
return
jobMapper
.
toDto
(
jobRepository
.
save
(
resources
));
return
jobMapper
.
toDto
(
jobRepository
.
save
(
resources
));
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Job
resources
)
{
public
void
update
(
Job
resources
)
{
Optional
<
Job
>
optionalJob
=
jobRepository
.
findById
(
resources
.
getId
());
Job
job
=
jobRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
Job:
:
new
);
ValidationUtil
.
isNull
(
optionalJob
,
"Job"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
job
.
getId
(),
"Job"
,
"id"
,
resources
.
getId
());
Job
job
=
optionalJob
.
get
();
resources
.
setId
(
job
.
getId
());
resources
.
setId
(
job
.
getId
());
jobRepository
.
save
(
resources
);
jobRepository
.
save
(
resources
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
jobRepository
.
deleteById
(
id
);
jobRepository
.
deleteById
(
id
);
}
}
@Override
public
void
download
(
List
<
JobDTO
>
jobDTOs
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
JobDTO
jobDTO
:
jobDTOs
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"岗位名称"
,
jobDTO
.
getName
());
map
.
put
(
"所属部门"
,
jobDTO
.
getDept
().
getName
());
map
.
put
(
"岗位状态"
,
jobDTO
.
getEnabled
()
?
"启用"
:
"停用"
);
map
.
put
(
"创建日期"
,
jobDTO
.
getCreateTime
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
\ No newline at end of file
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.impl
;
package
me.zhengjie.modules.system.service.impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
me.zhengjie.modules.system.domain.Menu
;
import
me.zhengjie.modules.system.domain.Menu
;
import
me.zhengjie.modules.system.domain.vo.MenuMetaVo
;
import
me.zhengjie.modules.system.domain.vo.MenuMetaVo
;
...
@@ -15,52 +14,66 @@ import me.zhengjie.modules.system.service.dto.MenuDTO;
...
@@ -15,52 +14,66 @@ import me.zhengjie.modules.system.service.dto.MenuDTO;
import
me.zhengjie.modules.system.service.dto.MenuQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.MenuQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.RoleSmallDTO
;
import
me.zhengjie.modules.system.service.dto.RoleSmallDTO
;
import
me.zhengjie.modules.system.service.mapper.MenuMapper
;
import
me.zhengjie.modules.system.service.mapper.MenuMapper
;
import
me.zhengjie.utils.FileUtil
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.StringUtils
;
import
me.zhengjie.utils.StringUtils
;
import
me.zhengjie.utils.ValidationUtil
;
import
me.zhengjie.utils.ValidationUtil
;
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.data.domain.Sort
;
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.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
@Service
@Service
@CacheConfig
(
cacheNames
=
"menu"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
MenuServiceImpl
implements
MenuService
{
public
class
MenuServiceImpl
implements
MenuService
{
@Autowired
private
final
MenuRepository
menuRepository
;
private
MenuRepository
menuRepository
;
@Autowired
private
final
MenuMapper
menuMapper
;
private
MenuMapper
menuMapper
;
@Autowired
private
final
RoleService
roleService
;
private
RoleService
roleService
;
public
MenuServiceImpl
(
MenuRepository
menuRepository
,
MenuMapper
menuMapper
,
RoleService
roleService
)
{
this
.
menuRepository
=
menuRepository
;
this
.
menuMapper
=
menuMapper
;
this
.
roleService
=
roleService
;
}
@Override
@Override
public
List
queryAll
(
MenuQueryCriteria
criteria
){
@Cacheable
public
List
<
MenuDTO
>
queryAll
(
MenuQueryCriteria
criteria
){
// Sort sort = new Sort(Sort.Direction.DESC,"id");
return
menuMapper
.
toDto
(
menuRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
return
menuMapper
.
toDto
(
menuRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
}
}
@Override
@Override
@Cacheable
(
key
=
"#p0"
)
public
MenuDTO
findById
(
long
id
)
{
public
MenuDTO
findById
(
long
id
)
{
Optional
<
Menu
>
menu
=
menuRepository
.
findById
(
id
);
Menu
menu
=
menuRepository
.
findById
(
id
)
.
orElseGet
(
Menu:
:
new
)
;
ValidationUtil
.
isNull
(
menu
,
"Menu"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
menu
.
getId
()
,
"Menu"
,
"id"
,
id
);
return
menuMapper
.
toDto
(
menu
.
get
()
);
return
menuMapper
.
toDto
(
menu
);
}
}
@Override
@Override
public
List
<
MenuDTO
>
findByRoles
(
List
<
RoleSmallDTO
>
roles
)
{
public
List
<
MenuDTO
>
findByRoles
(
List
<
RoleSmallDTO
>
roles
)
{
Set
<
Menu
>
menus
=
new
LinkedHashSet
<>();
Set
<
Menu
>
menus
=
new
LinkedHashSet
<>();
for
(
RoleSmallDTO
role
:
roles
)
{
for
(
RoleSmallDTO
role
:
roles
)
{
List
<
Menu
>
menus1
=
menuRepository
.
findByRoles_IdOrderBySortAsc
(
role
.
getId
()
).
stream
().
collect
(
Collectors
.
toList
(
));
List
<
Menu
>
menus1
=
new
ArrayList
<>(
menuRepository
.
findByRoles_Id
AndTypeIsNotIn
OrderBySortAsc
(
role
.
getId
()
,
2
));
menus
.
addAll
(
menus1
);
menus
.
addAll
(
menus1
);
}
}
return
menus
.
stream
().
map
(
menuMapper:
:
toDto
).
collect
(
Collectors
.
toList
());
return
menus
.
stream
().
map
(
menuMapper:
:
toDto
).
collect
(
Collectors
.
toList
());
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
public
MenuDTO
create
(
Menu
resources
)
{
public
MenuDTO
create
(
Menu
resources
)
{
if
(
menuRepository
.
findByName
(
resources
.
getName
())
!=
null
){
if
(
menuRepository
.
findByName
(
resources
.
getName
())
!=
null
){
throw
new
EntityExistException
(
Menu
.
class
,
"name"
,
resources
.
getName
());
throw
new
EntityExistException
(
Menu
.
class
,
"name"
,
resources
.
getName
());
...
@@ -79,19 +92,19 @@ public class MenuServiceImpl implements MenuService {
...
@@ -79,19 +92,19 @@ public class MenuServiceImpl implements MenuService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
public
void
update
(
Menu
resources
)
{
public
void
update
(
Menu
resources
)
{
if
(
resources
.
getId
().
equals
(
resources
.
getPid
()))
{
if
(
resources
.
getId
().
equals
(
resources
.
getPid
()))
{
throw
new
BadRequestException
(
"上级不能为自己"
);
throw
new
BadRequestException
(
"上级不能为自己"
);
}
}
Optional
<
Menu
>
optionalPermission
=
menuRepository
.
findById
(
resources
.
getId
());
Menu
menu
=
menuRepository
.
findById
(
resources
.
getId
())
.
orElseGet
(
Menu:
:
new
)
;
ValidationUtil
.
isNull
(
optionalPermission
,
"Permission"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
menu
.
getId
()
,
"Permission"
,
"id"
,
resources
.
getId
());
if
(
resources
.
getIFrame
()){
if
(
resources
.
getIFrame
()){
if
(!(
resources
.
getPath
().
toLowerCase
().
startsWith
(
"http://"
)||
resources
.
getPath
().
toLowerCase
().
startsWith
(
"https://"
)))
{
if
(!(
resources
.
getPath
().
toLowerCase
().
startsWith
(
"http://"
)||
resources
.
getPath
().
toLowerCase
().
startsWith
(
"https://"
)))
{
throw
new
BadRequestException
(
"外链必须以http://或者https://开头"
);
throw
new
BadRequestException
(
"外链必须以http://或者https://开头"
);
}
}
}
}
Menu
menu
=
optionalPermission
.
get
();
Menu
menu1
=
menuRepository
.
findByName
(
resources
.
getName
());
Menu
menu1
=
menuRepository
.
findByName
(
resources
.
getName
());
if
(
menu1
!=
null
&&
!
menu1
.
getId
().
equals
(
menu
.
getId
())){
if
(
menu1
!=
null
&&
!
menu1
.
getId
().
equals
(
menu
.
getId
())){
...
@@ -114,6 +127,8 @@ public class MenuServiceImpl implements MenuService {
...
@@ -114,6 +127,8 @@ public class MenuServiceImpl implements MenuService {
menu
.
setCache
(
resources
.
getCache
());
menu
.
setCache
(
resources
.
getCache
());
menu
.
setHidden
(
resources
.
getHidden
());
menu
.
setHidden
(
resources
.
getHidden
());
menu
.
setComponentName
(
resources
.
getComponentName
());
menu
.
setComponentName
(
resources
.
getComponentName
());
menu
.
setPermission
(
resources
.
getPermission
());
menu
.
setType
(
resources
.
getType
());
menuRepository
.
save
(
menu
);
menuRepository
.
save
(
menu
);
}
}
...
@@ -131,6 +146,7 @@ public class MenuServiceImpl implements MenuService {
...
@@ -131,6 +146,7 @@ public class MenuServiceImpl implements MenuService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Set
<
Menu
>
menuSet
)
{
public
void
delete
(
Set
<
Menu
>
menuSet
)
{
for
(
Menu
menu
:
menuSet
)
{
for
(
Menu
menu
:
menuSet
)
{
...
@@ -140,6 +156,7 @@ public class MenuServiceImpl implements MenuService {
...
@@ -140,6 +156,7 @@ public class MenuServiceImpl implements MenuService {
}
}
@Override
@Override
@Cacheable
(
key
=
"'tree'"
)
public
Object
getMenuTree
(
List
<
Menu
>
menus
)
{
public
Object
getMenuTree
(
List
<
Menu
>
menus
)
{
List
<
Map
<
String
,
Object
>>
list
=
new
LinkedList
<>();
List
<
Map
<
String
,
Object
>>
list
=
new
LinkedList
<>();
menus
.
forEach
(
menu
->
{
menus
.
forEach
(
menu
->
{
...
@@ -159,13 +176,14 @@ public class MenuServiceImpl implements MenuService {
...
@@ -159,13 +176,14 @@ public class MenuServiceImpl implements MenuService {
}
}
@Override
@Override
@Cacheable
(
key
=
"'pid:'+#p0"
)
public
List
<
Menu
>
findByPid
(
long
pid
)
{
public
List
<
Menu
>
findByPid
(
long
pid
)
{
return
menuRepository
.
findByPid
(
pid
);
return
menuRepository
.
findByPid
(
pid
);
}
}
@Override
@Override
public
Map
buildTree
(
List
<
MenuDTO
>
menuDTOS
)
{
public
Map
<
String
,
Object
>
buildTree
(
List
<
MenuDTO
>
menuDTOS
)
{
List
<
MenuDTO
>
trees
=
new
ArrayList
<
MenuDTO
>();
List
<
MenuDTO
>
trees
=
new
ArrayList
<>();
Set
<
Long
>
ids
=
new
HashSet
<>();
Set
<
Long
>
ids
=
new
HashSet
<>();
for
(
MenuDTO
menuDTO
:
menuDTOS
)
{
for
(
MenuDTO
menuDTO
:
menuDTOS
)
{
if
(
menuDTO
.
getPid
()
==
0
)
{
if
(
menuDTO
.
getPid
()
==
0
)
{
...
@@ -174,19 +192,19 @@ public class MenuServiceImpl implements MenuService {
...
@@ -174,19 +192,19 @@ public class MenuServiceImpl implements MenuService {
for
(
MenuDTO
it
:
menuDTOS
)
{
for
(
MenuDTO
it
:
menuDTOS
)
{
if
(
it
.
getPid
().
equals
(
menuDTO
.
getId
()))
{
if
(
it
.
getPid
().
equals
(
menuDTO
.
getId
()))
{
if
(
menuDTO
.
getChildren
()
==
null
)
{
if
(
menuDTO
.
getChildren
()
==
null
)
{
menuDTO
.
setChildren
(
new
ArrayList
<
MenuDTO
>());
menuDTO
.
setChildren
(
new
ArrayList
<>());
}
}
menuDTO
.
getChildren
().
add
(
it
);
menuDTO
.
getChildren
().
add
(
it
);
ids
.
add
(
it
.
getId
());
ids
.
add
(
it
.
getId
());
}
}
}
}
}
}
Map
map
=
new
HashMap
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>
();
if
(
trees
.
size
()
==
0
){
if
(
trees
.
size
()
==
0
){
trees
=
menuDTOS
.
stream
().
filter
(
s
->
!
ids
.
contains
(
s
.
getId
())).
collect
(
Collectors
.
toList
());
trees
=
menuDTOS
.
stream
().
filter
(
s
->
!
ids
.
contains
(
s
.
getId
())).
collect
(
Collectors
.
toList
());
}
}
map
.
put
(
"content"
,
trees
);
map
.
put
(
"content"
,
trees
);
map
.
put
(
"totalElements"
,
menuDTOS
!=
null
?
menuDTOS
.
size
()
:
0
);
map
.
put
(
"totalElements"
,
menuDTOS
.
size
());
return
map
;
return
map
;
}
}
...
@@ -229,7 +247,7 @@ public class MenuServiceImpl implements MenuService {
...
@@ -229,7 +247,7 @@ public class MenuServiceImpl implements MenuService {
menuVo
.
setName
(
null
);
menuVo
.
setName
(
null
);
menuVo
.
setMeta
(
null
);
menuVo
.
setMeta
(
null
);
menuVo
.
setComponent
(
"Layout"
);
menuVo
.
setComponent
(
"Layout"
);
List
<
MenuVo
>
list1
=
new
ArrayList
<
MenuVo
>();
List
<
MenuVo
>
list1
=
new
ArrayList
<>();
list1
.
add
(
menuVo1
);
list1
.
add
(
menuVo1
);
menuVo
.
setChildren
(
list1
);
menuVo
.
setChildren
(
list1
);
}
}
...
@@ -242,8 +260,25 @@ public class MenuServiceImpl implements MenuService {
...
@@ -242,8 +260,25 @@ public class MenuServiceImpl implements MenuService {
@Override
@Override
public
Menu
findOne
(
Long
id
)
{
public
Menu
findOne
(
Long
id
)
{
Optional
<
Menu
>
menu
=
menuRepository
.
findById
(
id
);
Menu
menu
=
menuRepository
.
findById
(
id
).
orElseGet
(
Menu:
:
new
);
ValidationUtil
.
isNull
(
menu
,
"Menu"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
menu
.
getId
(),
"Menu"
,
"id"
,
id
);
return
menu
.
get
();
return
menu
;
}
@Override
public
void
download
(
List
<
MenuDTO
>
menuDTOS
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
MenuDTO
menuDTO
:
menuDTOS
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"菜单名称"
,
menuDTO
.
getName
());
map
.
put
(
"菜单类型"
,
menuDTO
.
getType
()
==
0
?
"目录"
:
menuDTO
.
getType
()
==
1
?
"菜单"
:
"按钮"
);
map
.
put
(
"权限标识"
,
menuDTO
.
getPermission
());
map
.
put
(
"外链菜单"
,
menuDTO
.
getIFrame
()
?
"是"
:
"否"
);
map
.
put
(
"菜单可见"
,
menuDTO
.
getHidden
()
?
"否"
:
"是"
);
map
.
put
(
"是否缓存"
,
menuDTO
.
getCache
()
?
"是"
:
"否"
);
map
.
put
(
"创建日期"
,
menuDTO
.
getCreateTime
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/PermissionServiceImpl.java
deleted
100644 → 0
View file @
7895e547
package
me.zhengjie.modules.system.service.impl
;
import
me.zhengjie.modules.system.domain.Permission
;
import
me.zhengjie.exception.BadRequestException
;
import
me.zhengjie.exception.EntityExistException
;
import
me.zhengjie.modules.system.repository.PermissionRepository
;
import
me.zhengjie.modules.system.service.PermissionService
;
import
me.zhengjie.modules.system.service.RoleService
;
import
me.zhengjie.modules.system.service.dto.PermissionDTO
;
import
me.zhengjie.modules.system.service.dto.PermissionQueryCriteria
;
import
me.zhengjie.modules.system.service.mapper.PermissionMapper
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.ValidationUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.*
;
/**
* @author Zheng Jie
* @date 2018-12-03
*/
@Service
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
PermissionServiceImpl
implements
PermissionService
{
@Autowired
private
PermissionRepository
permissionRepository
;
@Autowired
private
PermissionMapper
permissionMapper
;
@Autowired
private
RoleService
roleService
;
@Override
public
List
<
PermissionDTO
>
queryAll
(
PermissionQueryCriteria
criteria
)
{
return
permissionMapper
.
toDto
(
permissionRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
}
@Override
public
PermissionDTO
findById
(
long
id
)
{
Optional
<
Permission
>
permission
=
permissionRepository
.
findById
(
id
);
ValidationUtil
.
isNull
(
permission
,
"Permission"
,
"id"
,
id
);
return
permissionMapper
.
toDto
(
permission
.
get
());
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
PermissionDTO
create
(
Permission
resources
)
{
if
(
permissionRepository
.
findByName
(
resources
.
getName
())
!=
null
){
throw
new
EntityExistException
(
Permission
.
class
,
"name"
,
resources
.
getName
());
}
return
permissionMapper
.
toDto
(
permissionRepository
.
save
(
resources
));
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Permission
resources
)
{
Optional
<
Permission
>
optionalPermission
=
permissionRepository
.
findById
(
resources
.
getId
());
if
(
resources
.
getId
().
equals
(
resources
.
getPid
()))
{
throw
new
BadRequestException
(
"上级不能为自己"
);
}
ValidationUtil
.
isNull
(
optionalPermission
,
"Permission"
,
"id"
,
resources
.
getId
());
Permission
permission
=
optionalPermission
.
get
();
Permission
permission1
=
permissionRepository
.
findByName
(
resources
.
getName
());
if
(
permission1
!=
null
&&
!
permission1
.
getId
().
equals
(
permission
.
getId
())){
throw
new
EntityExistException
(
Permission
.
class
,
"name"
,
resources
.
getName
());
}
permission
.
setName
(
resources
.
getName
());
permission
.
setAlias
(
resources
.
getAlias
());
permission
.
setPid
(
resources
.
getPid
());
permissionRepository
.
save
(
permission
);
}
@Override
public
Set
<
Permission
>
getDeletePermission
(
List
<
Permission
>
permissions
,
Set
<
Permission
>
permissionSet
)
{
// 递归找出待删除的菜单
for
(
Permission
permission
:
permissions
)
{
permissionSet
.
add
(
permission
);
List
<
Permission
>
permissionList
=
permissionRepository
.
findByPid
(
permission
.
getId
());
if
(
permissionList
!=
null
&&
permissionList
.
size
()!=
0
){
getDeletePermission
(
permissionList
,
permissionSet
);
}
}
return
permissionSet
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Set
<
Permission
>
permissions
)
{
for
(
Permission
permission
:
permissions
)
{
roleService
.
untiedPermission
(
permission
.
getId
());
permissionRepository
.
delete
(
permission
);
}
}
@Override
public
Object
getPermissionTree
(
List
<
Permission
>
permissions
)
{
List
<
Map
<
String
,
Object
>>
list
=
new
LinkedList
<>();
permissions
.
forEach
(
permission
->
{
if
(
permission
!=
null
){
List
<
Permission
>
permissionList
=
permissionRepository
.
findByPid
(
permission
.
getId
());
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"id"
,
permission
.
getId
());
map
.
put
(
"label"
,
permission
.
getAlias
());
if
(
permissionList
!=
null
&&
permissionList
.
size
()!=
0
){
map
.
put
(
"children"
,
getPermissionTree
(
permissionList
));
}
list
.
add
(
map
);
}
}
);
return
list
;
}
@Override
public
List
<
Permission
>
findByPid
(
long
pid
)
{
return
permissionRepository
.
findByPid
(
pid
);
}
@Override
public
Object
buildTree
(
List
<
PermissionDTO
>
permissionDTOS
)
{
List
<
PermissionDTO
>
trees
=
new
ArrayList
<
PermissionDTO
>();
for
(
PermissionDTO
permissionDTO
:
permissionDTOS
)
{
if
(
"0"
.
equals
(
permissionDTO
.
getPid
().
toString
()))
{
trees
.
add
(
permissionDTO
);
}
for
(
PermissionDTO
it
:
permissionDTOS
)
{
if
(
it
.
getPid
().
equals
(
permissionDTO
.
getId
()))
{
if
(
permissionDTO
.
getChildren
()
==
null
)
{
permissionDTO
.
setChildren
(
new
ArrayList
<
PermissionDTO
>());
}
permissionDTO
.
getChildren
().
add
(
it
);
}
}
}
Integer
totalElements
=
permissionDTOS
!=
null
?
permissionDTOS
.
size
():
0
;
Map
map
=
new
HashMap
();
map
.
put
(
"content"
,
trees
.
size
()
==
0
?
permissionDTOS:
trees
);
map
.
put
(
"totalElements"
,
totalElements
);
return
map
;
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java
View file @
fd9fb2a6
...
@@ -9,15 +9,21 @@ import me.zhengjie.modules.system.service.dto.RoleQueryCriteria;
...
@@ -9,15 +9,21 @@ import me.zhengjie.modules.system.service.dto.RoleQueryCriteria;
import
me.zhengjie.modules.system.service.dto.RoleSmallDTO
;
import
me.zhengjie.modules.system.service.dto.RoleSmallDTO
;
import
me.zhengjie.modules.system.service.mapper.RoleMapper
;
import
me.zhengjie.modules.system.service.mapper.RoleMapper
;
import
me.zhengjie.modules.system.service.mapper.RoleSmallMapper
;
import
me.zhengjie.modules.system.service.mapper.RoleSmallMapper
;
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.ValidationUtil
;
import
me.zhengjie.utils.ValidationUtil
;
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.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.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -26,42 +32,51 @@ import java.util.stream.Collectors;
...
@@ -26,42 +32,51 @@ import java.util.stream.Collectors;
* @date 2018-12-03
* @date 2018-12-03
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"role"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
RoleServiceImpl
implements
RoleService
{
public
class
RoleServiceImpl
implements
RoleService
{
@Autowired
private
final
RoleRepository
roleRepository
;
private
RoleRepository
roleRepository
;
private
final
RoleMapper
roleMapper
;
@Autowired
private
final
RoleSmallMapper
roleSmallMapper
;
private
RoleMapper
roleMapper
;
@Autowired
public
RoleServiceImpl
(
RoleRepository
roleRepository
,
RoleMapper
roleMapper
,
RoleSmallMapper
roleSmallMapper
)
{
private
RoleSmallMapper
roleSmallMapper
;
this
.
roleRepository
=
roleRepository
;
this
.
roleMapper
=
roleMapper
;
this
.
roleSmallMapper
=
roleSmallMapper
;
}
@Override
@Override
@Cacheable
public
Object
queryAll
(
Pageable
pageable
)
{
public
Object
queryAll
(
Pageable
pageable
)
{
return
roleMapper
.
toDto
(
roleRepository
.
findAll
(
pageable
).
getContent
());
return
roleMapper
.
toDto
(
roleRepository
.
findAll
(
pageable
).
getContent
());
}
}
@Override
@Override
@Cacheable
public
List
<
RoleDTO
>
queryAll
(
RoleQueryCriteria
criteria
)
{
public
List
<
RoleDTO
>
queryAll
(
RoleQueryCriteria
criteria
)
{
return
roleMapper
.
toDto
(
roleRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
return
roleMapper
.
toDto
(
roleRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
}
}
@Override
@Override
@Cacheable
public
Object
queryAll
(
RoleQueryCriteria
criteria
,
Pageable
pageable
)
{
public
Object
queryAll
(
RoleQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
Role
>
page
=
roleRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
Page
<
Role
>
page
=
roleRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
return
PageUtil
.
toPage
(
page
.
map
(
roleMapper:
:
toDto
));
return
PageUtil
.
toPage
(
page
.
map
(
roleMapper:
:
toDto
));
}
}
@Override
@Override
@Cacheable
(
key
=
"#p0"
)
public
RoleDTO
findById
(
long
id
)
{
public
RoleDTO
findById
(
long
id
)
{
Optional
<
Role
>
role
=
roleRepository
.
findById
(
id
);
Role
role
=
roleRepository
.
findById
(
id
)
.
orElseGet
(
Role:
:
new
)
;
ValidationUtil
.
isNull
(
role
,
"Role"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
role
.
getId
()
,
"Role"
,
"id"
,
id
);
return
roleMapper
.
toDto
(
role
.
get
()
);
return
roleMapper
.
toDto
(
role
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
RoleDTO
create
(
Role
resources
)
{
public
RoleDTO
create
(
Role
resources
)
{
if
(
roleRepository
.
findByName
(
resources
.
getName
())
!=
null
){
if
(
roleRepository
.
findByName
(
resources
.
getName
())
!=
null
){
...
@@ -71,13 +86,11 @@ public class RoleServiceImpl implements RoleService {
...
@@ -71,13 +86,11 @@ public class RoleServiceImpl implements RoleService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Role
resources
)
{
public
void
update
(
Role
resources
)
{
Role
role
=
roleRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
Role:
:
new
);
Optional
<
Role
>
optionalRole
=
roleRepository
.
findById
(
resources
.
getId
());
ValidationUtil
.
isNull
(
role
.
getId
(),
"Role"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
optionalRole
,
"Role"
,
"id"
,
resources
.
getId
());
Role
role
=
optionalRole
.
get
();
Role
role1
=
roleRepository
.
findByName
(
resources
.
getName
());
Role
role1
=
roleRepository
.
findByName
(
resources
.
getName
());
...
@@ -94,13 +107,7 @@ public class RoleServiceImpl implements RoleService {
...
@@ -94,13 +107,7 @@ public class RoleServiceImpl implements RoleService {
}
}
@Override
@Override
public
void
updatePermission
(
Role
resources
,
RoleDTO
roleDTO
)
{
@CacheEvict
(
allEntries
=
true
)
Role
role
=
roleMapper
.
toEntity
(
roleDTO
);
role
.
setPermissions
(
resources
.
getPermissions
());
roleRepository
.
save
(
role
);
}
@Override
public
void
updateMenu
(
Role
resources
,
RoleDTO
roleDTO
)
{
public
void
updateMenu
(
Role
resources
,
RoleDTO
roleDTO
)
{
Role
role
=
roleMapper
.
toEntity
(
roleDTO
);
Role
role
=
roleMapper
.
toEntity
(
roleDTO
);
role
.
setMenus
(
resources
.
getMenus
());
role
.
setMenus
(
resources
.
getMenus
());
...
@@ -108,29 +115,27 @@ public class RoleServiceImpl implements RoleService {
...
@@ -108,29 +115,27 @@ public class RoleServiceImpl implements RoleService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
untiedMenu
(
Long
id
)
{
public
void
untiedMenu
(
Long
id
)
{
roleRepository
.
untiedMenu
(
id
);
roleRepository
.
untiedMenu
(
id
);
}
}
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@CacheEvict
(
allEntries
=
true
)
public
void
untiedPermission
(
Long
id
)
{
roleRepository
.
untiedPermission
(
id
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
roleRepository
.
deleteById
(
id
);
roleRepository
.
deleteById
(
id
);
}
}
@Override
@Override
@Cacheable
(
key
=
"'findByUsers_Id:' + #p0"
)
public
List
<
RoleSmallDTO
>
findByUsers_Id
(
Long
id
)
{
public
List
<
RoleSmallDTO
>
findByUsers_Id
(
Long
id
)
{
return
roleSmallMapper
.
toDto
(
roleRepository
.
findByUsers_Id
(
id
)
.
stream
().
collect
(
Collectors
.
toList
()
));
return
roleSmallMapper
.
toDto
(
new
ArrayList
<>(
roleRepository
.
findByUsers_Id
(
id
)));
}
}
@Override
@Override
@Cacheable
public
Integer
findByRoles
(
Set
<
Role
>
roles
)
{
public
Integer
findByRoles
(
Set
<
Role
>
roles
)
{
Set
<
RoleDTO
>
roleDTOS
=
new
HashSet
<>();
Set
<
RoleDTO
>
roleDTOS
=
new
HashSet
<>();
for
(
Role
role
:
roles
)
{
for
(
Role
role
:
roles
)
{
...
@@ -138,4 +143,19 @@ public class RoleServiceImpl implements RoleService {
...
@@ -138,4 +143,19 @@ public class RoleServiceImpl implements RoleService {
}
}
return
Collections
.
min
(
roleDTOS
.
stream
().
map
(
RoleDTO:
:
getLevel
).
collect
(
Collectors
.
toList
()));
return
Collections
.
min
(
roleDTOS
.
stream
().
map
(
RoleDTO:
:
getLevel
).
collect
(
Collectors
.
toList
()));
}
}
@Override
public
void
download
(
List
<
RoleDTO
>
roles
,
HttpServletResponse
response
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
RoleDTO
role
:
roles
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"角色名称"
,
role
.
getName
());
map
.
put
(
"默认权限"
,
role
.
getPermission
());
map
.
put
(
"角色级别"
,
role
.
getLevel
());
map
.
put
(
"描述"
,
role
.
getRemark
());
map
.
put
(
"创建日期"
,
role
.
getCreateTime
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
}
}
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java
View file @
fd9fb2a6
package
me.zhengjie.modules.system.service.impl
;
package
me.zhengjie.modules.system.service.impl
;
import
cn.hutool.core.io.IoUtil
;
import
cn.hutool.poi.excel.ExcelUtil
;
import
cn.hutool.poi.excel.ExcelWriter
;
import
me.zhengjie.modules.monitor.service.RedisService
;
import
me.zhengjie.modules.monitor.service.RedisService
;
import
me.zhengjie.modules.system.domain.User
;
import
me.zhengjie.modules.system.domain.User
;
import
me.zhengjie.exception.EntityExistException
;
import
me.zhengjie.exception.EntityExistException
;
...
@@ -16,16 +13,16 @@ import me.zhengjie.modules.system.service.dto.UserDTO;
...
@@ -16,16 +13,16 @@ import me.zhengjie.modules.system.service.dto.UserDTO;
import
me.zhengjie.modules.system.service.dto.UserQueryCriteria
;
import
me.zhengjie.modules.system.service.dto.UserQueryCriteria
;
import
me.zhengjie.modules.system.service.mapper.UserMapper
;
import
me.zhengjie.modules.system.service.mapper.UserMapper
;
import
me.zhengjie.utils.*
;
import
me.zhengjie.utils.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
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
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -37,44 +34,52 @@ import java.util.stream.Collectors;
...
@@ -37,44 +34,52 @@ import java.util.stream.Collectors;
* @date 2018-11-23
* @date 2018-11-23
*/
*/
@Service
@Service
@CacheConfig
(
cacheNames
=
"user"
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
UserServiceImpl
implements
UserService
{
public
class
UserServiceImpl
implements
UserService
{
@Autowired
private
final
UserRepository
userRepository
;
private
UserRepository
userRepository
;
@Autowired
private
final
UserMapper
userMapper
;
private
UserMapper
userMapper
;
@Autowired
private
final
RedisService
redisService
;
private
RedisService
redisService
;
@Autowired
private
final
UserAvatarRepository
userAvatarRepository
;
private
UserAvatarRepository
userAvatarRepository
;
@Value
(
"${file.avatar}"
)
@Value
(
"${file.avatar}"
)
private
String
avatar
;
private
String
avatar
;
public
UserServiceImpl
(
UserRepository
userRepository
,
UserMapper
userMapper
,
RedisService
redisService
,
UserAvatarRepository
userAvatarRepository
)
{
this
.
userRepository
=
userRepository
;
this
.
userMapper
=
userMapper
;
this
.
redisService
=
redisService
;
this
.
userAvatarRepository
=
userAvatarRepository
;
}
@Override
@Override
@Cacheable
public
Object
queryAll
(
UserQueryCriteria
criteria
,
Pageable
pageable
)
{
public
Object
queryAll
(
UserQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
User
>
page
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
Page
<
User
>
page
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
return
PageUtil
.
toPage
(
page
.
map
(
userMapper:
:
toDto
));
return
PageUtil
.
toPage
(
page
.
map
(
userMapper:
:
toDto
));
}
}
@Override
@Override
@Cacheable
public
List
<
UserDTO
>
queryAll
(
UserQueryCriteria
criteria
)
{
public
List
<
UserDTO
>
queryAll
(
UserQueryCriteria
criteria
)
{
List
<
User
>
users
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
));
List
<
User
>
users
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
));
return
userMapper
.
toDto
(
users
);
return
userMapper
.
toDto
(
users
);
}
}
@Override
@Override
@Cacheable
(
key
=
"#p0"
)
public
UserDTO
findById
(
long
id
)
{
public
UserDTO
findById
(
long
id
)
{
Optional
<
User
>
user
=
userRepository
.
findById
(
id
);
User
user
=
userRepository
.
findById
(
id
)
.
orElseGet
(
User:
:
new
)
;
ValidationUtil
.
isNull
(
user
,
"User"
,
"id"
,
id
);
ValidationUtil
.
isNull
(
user
.
getId
()
,
"User"
,
"id"
,
id
);
return
userMapper
.
toDto
(
user
.
get
()
);
return
userMapper
.
toDto
(
user
);
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
UserDTO
create
(
User
resources
)
{
public
UserDTO
create
(
User
resources
)
{
...
@@ -92,13 +97,11 @@ public class UserServiceImpl implements UserService {
...
@@ -92,13 +97,11 @@ public class UserServiceImpl implements UserService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
User
resources
)
{
public
void
update
(
User
resources
)
{
Optional
<
User
>
userOptional
=
userRepository
.
findById
(
resources
.
getId
());
User
user
=
userRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
User:
:
new
);
ValidationUtil
.
isNull
(
userOptional
,
"User"
,
"id"
,
resources
.
getId
());
ValidationUtil
.
isNull
(
user
.
getId
(),
"User"
,
"id"
,
resources
.
getId
());
User
user
=
userOptional
.
get
();
User
user1
=
userRepository
.
findByUsername
(
user
.
getUsername
());
User
user1
=
userRepository
.
findByUsername
(
user
.
getUsername
());
User
user2
=
userRepository
.
findByEmail
(
user
.
getEmail
());
User
user2
=
userRepository
.
findByEmail
(
user
.
getEmail
());
...
@@ -129,14 +132,16 @@ public class UserServiceImpl implements UserService {
...
@@ -129,14 +132,16 @@ public class UserServiceImpl implements UserService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Long
id
)
{
public
void
delete
(
Long
id
)
{
userRepository
.
deleteById
(
id
);
userRepository
.
deleteById
(
id
);
}
}
@Override
@Override
@Cacheable
(
key
=
"'loadUserByUsername:'+#p0"
)
public
UserDTO
findByName
(
String
userName
)
{
public
UserDTO
findByName
(
String
userName
)
{
User
user
=
null
;
User
user
;
if
(
ValidationUtil
.
isEmail
(
userName
)){
if
(
ValidationUtil
.
isEmail
(
userName
)){
user
=
userRepository
.
findByEmail
(
userName
);
user
=
userRepository
.
findByEmail
(
userName
);
}
else
{
}
else
{
...
@@ -150,12 +155,14 @@ public class UserServiceImpl implements UserService {
...
@@ -150,12 +155,14 @@ public class UserServiceImpl implements UserService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updatePass
(
String
username
,
String
pass
)
{
public
void
updatePass
(
String
username
,
String
pass
)
{
userRepository
.
updatePass
(
username
,
pass
,
new
Date
());
userRepository
.
updatePass
(
username
,
pass
,
new
Date
());
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateAvatar
(
MultipartFile
multipartFile
)
{
public
void
updateAvatar
(
MultipartFile
multipartFile
)
{
User
user
=
userRepository
.
findByUsername
(
SecurityUtils
.
getUsername
());
User
user
=
userRepository
.
findByUsername
(
SecurityUtils
.
getUsername
());
...
@@ -165,6 +172,7 @@ public class UserServiceImpl implements UserService {
...
@@ -165,6 +172,7 @@ public class UserServiceImpl implements UserService {
oldPath
=
userAvatar
.
getPath
();
oldPath
=
userAvatar
.
getPath
();
}
}
File
file
=
FileUtil
.
upload
(
multipartFile
,
avatar
);
File
file
=
FileUtil
.
upload
(
multipartFile
,
avatar
);
assert
file
!=
null
;
userAvatar
=
userAvatarRepository
.
save
(
new
UserAvatar
(
userAvatar
,
file
.
getName
(),
file
.
getPath
(),
FileUtil
.
getSize
(
multipartFile
.
getSize
())));
userAvatar
=
userAvatarRepository
.
save
(
new
UserAvatar
(
userAvatar
,
file
.
getName
(),
file
.
getPath
(),
FileUtil
.
getSize
(
multipartFile
.
getSize
())));
user
.
setUserAvatar
(
userAvatar
);
user
.
setUserAvatar
(
userAvatar
);
userRepository
.
save
(
user
);
userRepository
.
save
(
user
);
...
@@ -174,6 +182,7 @@ public class UserServiceImpl implements UserService {
...
@@ -174,6 +182,7 @@ public class UserServiceImpl implements UserService {
}
}
@Override
@Override
@CacheEvict
(
allEntries
=
true
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateEmail
(
String
username
,
String
email
)
{
public
void
updateEmail
(
String
username
,
String
email
)
{
userRepository
.
updateEmail
(
username
,
email
);
userRepository
.
updateEmail
(
username
,
email
);
...
@@ -184,7 +193,7 @@ public class UserServiceImpl implements UserService {
...
@@ -184,7 +193,7 @@ public class UserServiceImpl implements UserService {
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
UserDTO
userDTO
:
queryAll
)
{
for
(
UserDTO
userDTO
:
queryAll
)
{
List
roles
=
userDTO
.
getRoles
().
stream
().
map
(
RoleSmallDTO:
:
getName
).
collect
(
Collectors
.
toList
());
List
roles
=
userDTO
.
getRoles
().
stream
().
map
(
RoleSmallDTO:
:
getName
).
collect
(
Collectors
.
toList
());
Map
map
=
new
LinkedHashMap
();
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>
();
map
.
put
(
"用户名"
,
userDTO
.
getUsername
());
map
.
put
(
"用户名"
,
userDTO
.
getUsername
());
map
.
put
(
"头像"
,
userDTO
.
getAvatar
());
map
.
put
(
"头像"
,
userDTO
.
getAvatar
());
map
.
put
(
"邮箱"
,
userDTO
.
getEmail
());
map
.
put
(
"邮箱"
,
userDTO
.
getEmail
());
...
...
Prev
1
…
4
5
6
7
8
9
10
11
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