diff --git a/.gitignore b/.gitignore
index 753d69ea..9845fd9c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-### IntelliJ IDEA ###
+### IDEA ###
.idea/*
*.iml
*/target/*
diff --git a/eladmin-common/pom.xml b/eladmin-common/pom.xml
index 72927a26..7557bbc6 100644
--- a/eladmin-common/pom.xml
+++ b/eladmin-common/pom.xml
@@ -5,7 +5,7 @@
eladmin
me.zhengjie
- 1.9
+ 2.0
4.0.0
diff --git a/eladmin-common/src/main/java/me/zhengjie/swagger2/SwaggerConfig.java b/eladmin-common/src/main/java/me/zhengjie/swagger2/SwaggerConfig.java
index a9bf30de..d71c498c 100644
--- a/eladmin-common/src/main/java/me/zhengjie/swagger2/SwaggerConfig.java
+++ b/eladmin-common/src/main/java/me/zhengjie/swagger2/SwaggerConfig.java
@@ -54,8 +54,8 @@ public class SwaggerConfig {
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
- .title("elune 接口文档")
- .version("1.7")
+ .title("eladmin 接口文档")
+ .version("2.0")
.build();
}
diff --git a/eladmin-generator/pom.xml b/eladmin-generator/pom.xml
index 17dde4e3..0aa4089c 100644
--- a/eladmin-generator/pom.xml
+++ b/eladmin-generator/pom.xml
@@ -5,7 +5,7 @@
eladmin
me.zhengjie
- 1.9
+ 2.0
4.0.0
@@ -19,7 +19,7 @@
me.zhengjie
eladmin-common
- 1.9
+ 2.0
diff --git a/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java b/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java
index 13a64e9d..77f04f0c 100644
--- a/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java
+++ b/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java
@@ -34,6 +34,9 @@ public class GenConfig {
/** 作者 **/
private String author;
+ /** 表前缀 **/
+ private String prefix;
+
/** 是否覆盖 **/
private Boolean cover;
}
diff --git a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java
index 3f636d12..07e101cc 100644
--- a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java
+++ b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java
@@ -1,5 +1,6 @@
package me.zhengjie.utils;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.*;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.domain.GenConfig;
@@ -75,9 +76,16 @@ public class GenUtil {
map.put("date", LocalDate.now().toString());
map.put("tableName",tableName);
String className = StringUtils.toCapitalizeCamelCase(tableName);
+ String changeClassName = StringUtils.toCamelCase(tableName);
+
+ // 判断是否去除表前缀
+ if (StringUtils.isNotEmpty(genConfig.getPrefix())) {
+ className = StringUtils.toCapitalizeCamelCase(StrUtil.removePrefix(tableName,genConfig.getPrefix()));
+ changeClassName = StringUtils.toCamelCase(StrUtil.removePrefix(tableName,genConfig.getPrefix()));
+ }
map.put("className", className);
map.put("upperCaseClassName", className.toUpperCase());
- map.put("changeClassName", StringUtils.toCamelCase(tableName));
+ map.put("changeClassName", changeClassName);
map.put("hasTimestamp",false);
map.put("hasBigDecimal",false);
map.put("hasQuery",false);
diff --git a/eladmin-logging/pom.xml b/eladmin-logging/pom.xml
index 76335681..180e0781 100644
--- a/eladmin-logging/pom.xml
+++ b/eladmin-logging/pom.xml
@@ -5,7 +5,7 @@
eladmin
me.zhengjie
- 1.9
+ 2.0
4.0.0
@@ -15,7 +15,7 @@
me.zhengjie
eladmin-common
- 1.9
+ 2.0
\ No newline at end of file
diff --git a/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java b/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java
index c25c1466..e9ef6dea 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java
@@ -4,6 +4,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
+import java.io.Serializable;
import java.sql.Timestamp;
/**
@@ -14,7 +15,7 @@ import java.sql.Timestamp;
@Data
@Table(name = "log")
@NoArgsConstructor
-public class Log {
+public class Log implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/eladmin-logging/src/main/java/me/zhengjie/repository/LogRepository.java b/eladmin-logging/src/main/java/me/zhengjie/repository/LogRepository.java
index a1cfd902..7d340107 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/repository/LogRepository.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/repository/LogRepository.java
@@ -21,4 +21,7 @@ public interface LogRepository extends JpaRepository, JpaSpecification
*/
@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);
+
+ @Query(value = "select exception_detail FROM log where id = ?1",nativeQuery = true)
+ String findExceptionById(Long id);
}
diff --git a/eladmin-logging/src/main/java/me/zhengjie/rest/LogController.java b/eladmin-logging/src/main/java/me/zhengjie/rest/LogController.java
index bb7059a7..63948098 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/rest/LogController.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/rest/LogController.java
@@ -1,6 +1,7 @@
package me.zhengjie.rest;
import me.zhengjie.domain.Log;
+import me.zhengjie.service.LogService;
import me.zhengjie.service.query.LogQueryService;
import me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +10,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -23,6 +25,9 @@ public class LogController {
@Autowired
private LogQueryService logQueryService;
+ @Autowired
+ private LogService logService;
+
@GetMapping(value = "/logs")
@PreAuthorize("hasAnyRole('ADMIN')")
public ResponseEntity getLogs(Log log, Pageable pageable){
@@ -43,4 +48,10 @@ public class LogController {
log.setLogType("ERROR");
return new ResponseEntity(logQueryService.queryAll(log,pageable), HttpStatus.OK);
}
+
+ @GetMapping(value = "/logs/error/{id}")
+ @PreAuthorize("hasAnyRole('ADMIN')")
+ public ResponseEntity getErrorLogs(@PathVariable Long id){
+ return new ResponseEntity(logService.findByErrDetail(id), HttpStatus.OK);
+ }
}
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java b/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java
index 4a64bd50..575c8064 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java
@@ -17,4 +17,11 @@ public interface LogService {
*/
@Async
void save(ProceedingJoinPoint joinPoint, Log log);
+
+ /**
+ * 查询异常详情
+ * @param id
+ * @return
+ */
+ Object findByErrDetail(Long id);
}
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java
new file mode 100644
index 00000000..8cf95e6a
--- /dev/null
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java
@@ -0,0 +1,46 @@
+package me.zhengjie.service.dto;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+* @author jie
+* @date 2019-5-22
+*/
+@Data
+public class LogErrorDTO implements Serializable {
+
+ private Long id;
+
+ /**
+ * 操作用户
+ */
+ private String username;
+
+ /**
+ * 描述
+ */
+ private String description;
+
+ /**
+ * 方法名
+ */
+ private String method;
+
+ /**
+ * 参数
+ */
+ private String params;
+
+ /**
+ * 请求ip
+ */
+ private String requestIp;
+
+
+ /**
+ * 创建日期
+ */
+ private Timestamp createTime;
+}
\ No newline at end of file
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java
new file mode 100644
index 00000000..b67b715f
--- /dev/null
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java
@@ -0,0 +1,34 @@
+package me.zhengjie.service.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * @author jie
+ * @date 2019-5-22
+ */
+@Data
+public class LogSmallDTO implements Serializable {
+
+ /**
+ * 描述
+ */
+ private String description;
+
+ /**
+ * 请求ip
+ */
+ private String requestIp;
+
+ /**
+ * 请求耗时
+ */
+ private Long time;
+
+ /**
+ * 创建日期
+ */
+ private Timestamp createTime;
+}
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java b/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
index 2e6ef26a..5cfc6fc1 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
@@ -1,5 +1,6 @@
package me.zhengjie.service.impl;
+import cn.hutool.core.lang.Dict;
import cn.hutool.json.JSONObject;
import me.zhengjie.domain.Log;
import me.zhengjie.repository.LogRepository;
@@ -79,4 +80,9 @@ public class LogServiceImpl implements LogService {
log.setParams(params + " }");
logRepository.save(log);
}
+
+ @Override
+ public Object findByErrDetail(Long id) {
+ return Dict.create().set("exception",logRepository.findExceptionById(id));
+ }
}
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogErrorMapper.java b/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogErrorMapper.java
new file mode 100644
index 00000000..202a073e
--- /dev/null
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogErrorMapper.java
@@ -0,0 +1,16 @@
+package me.zhengjie.service.mapper;
+
+import me.zhengjie.domain.Log;
+import me.zhengjie.mapper.EntityMapper;
+import me.zhengjie.service.dto.LogErrorDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * @author jie
+ * @date 2019-5-22
+ */
+@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface LogErrorMapper extends EntityMapper {
+
+}
\ No newline at end of file
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogSmallMapper.java b/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogSmallMapper.java
new file mode 100644
index 00000000..a92e8646
--- /dev/null
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/mapper/LogSmallMapper.java
@@ -0,0 +1,16 @@
+package me.zhengjie.service.mapper;
+
+import me.zhengjie.domain.Log;
+import me.zhengjie.mapper.EntityMapper;
+import me.zhengjie.service.dto.LogSmallDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * @author jie
+ * @date 2019-5-22
+ */
+@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface LogSmallMapper extends EntityMapper {
+
+}
\ No newline at end of file
diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/query/LogQueryService.java b/eladmin-logging/src/main/java/me/zhengjie/service/query/LogQueryService.java
index 553ef67c..d1a1bf23 100644
--- a/eladmin-logging/src/main/java/me/zhengjie/service/query/LogQueryService.java
+++ b/eladmin-logging/src/main/java/me/zhengjie/service/query/LogQueryService.java
@@ -2,6 +2,9 @@ package me.zhengjie.service.query;
import me.zhengjie.domain.Log;
import me.zhengjie.repository.LogRepository;
+import me.zhengjie.service.mapper.LogErrorMapper;
+import me.zhengjie.service.mapper.LogSmallMapper;
+import me.zhengjie.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -16,6 +19,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* @author jie
@@ -28,7 +32,20 @@ public class LogQueryService {
@Autowired
private LogRepository logRepository;
- public Page queryAll(Log log, Pageable pageable){
+ @Autowired
+ private LogErrorMapper logErrorMapper;
+
+ @Autowired
+ private LogSmallMapper logSmallMapper;
+
+ public Object queryAll(Log log, Pageable pageable){
+ Page page = logRepository.findAll(new Spec(log),pageable);
+ if (!ObjectUtils.isEmpty(log.getUsername())) {
+ return PageUtil.toPage(page.map(logSmallMapper::toDto));
+ }
+ if (log.getLogType().equals("ERROR")) {
+ return PageUtil.toPage(page.map(logErrorMapper::toDto));
+ }
return logRepository.findAll(new Spec(log),pageable);
}
diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml
index 359eed50..dacc9756 100644
--- a/eladmin-system/pom.xml
+++ b/eladmin-system/pom.xml
@@ -5,7 +5,7 @@
eladmin
me.zhengjie
- 1.9
+ 2.0
4.0.0
@@ -20,7 +20,7 @@
me.zhengjie
eladmin-generator
- 1.9
+ 2.0
me.zhengjie
@@ -32,7 +32,7 @@
me.zhengjie
eladmin-tools
- 1.9
+ 2.0
@@ -53,6 +53,7 @@
org.quartz-scheduler
quartz
+
diff --git a/eladmin-system/src/main/java/me/zhengjie/config/DataScope.java b/eladmin-system/src/main/java/me/zhengjie/config/DataScope.java
index 72fc3fa9..bca4a629 100644
--- a/eladmin-system/src/main/java/me/zhengjie/config/DataScope.java
+++ b/eladmin-system/src/main/java/me/zhengjie/config/DataScope.java
@@ -1,11 +1,12 @@
package me.zhengjie.config;
import me.zhengjie.modules.system.domain.Dept;
-import me.zhengjie.modules.system.domain.Role;
-import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.service.DeptService;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.UserService;
+import me.zhengjie.modules.system.service.dto.DeptDTO;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
+import me.zhengjie.modules.system.service.dto.UserDTO;
import me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -35,15 +36,15 @@ public class DataScope {
public Set getDeptIds() {
- User user = userService.findByName(SecurityUtils.getUsername());
+ UserDTO user = userService.findByName(SecurityUtils.getUsername());
// 用于存储部门id
Set deptIds = new HashSet<>();
// 查询用户角色
- List roleSet = roleService.findByUsers_Id(user.getId());
+ List roleSet = roleService.findByUsers_Id(user.getId());
- for (Role role : roleSet) {
+ for (RoleSmallDTO role : roleSet) {
if (scopeType[0].equals(role.getDataScope())) {
return new HashSet<>() ;
@@ -56,8 +57,8 @@ public class DataScope {
// 存储自定义的数据权限
if (scopeType[2].equals(role.getDataScope())) {
- Set deptList = role.getDepts();
- for (Dept dept : deptList) {
+ Set depts = deptService.findByRoleIds(role.getId());
+ for (Dept dept : depts) {
deptIds.add(dept.getId());
List deptChildren = deptService.findByPid(dept.getId());
if (deptChildren != null && deptChildren.size() != 0) {
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java
index 7fac6bf1..1693bcc1 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java
@@ -52,14 +52,13 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
// It is not compelling necessary to load the use details from the database. You could also store the information
// in the token and read it from it. It's up to you ;)
- UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
+ JwtUser userDetails = (JwtUser)this.userDetailsService.loadUserByUsername(username);
// For simple validation it is completely sufficient to just check the token integrity. You don't have to call
// the database compellingly. Again it's up to you ;)
if (jwtTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
- log.info("authorizated user '{}', setting security context", username);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java
index 5b29ccfd..c653d205 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java
@@ -1,8 +1,8 @@
package me.zhengjie.modules.security.service;
import me.zhengjie.modules.system.domain.Role;
-import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.repository.RoleRepository;
+import me.zhengjie.modules.system.service.dto.UserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
@@ -26,7 +26,7 @@ public class JwtPermissionService {
* @return
*/
@Cacheable(key = "'loadPermissionByUser:' + #p0.username")
- public Collection mapToGrantedAuthorities(User user) {
+ public Collection mapToGrantedAuthorities(UserDTO user) {
System.out.println("--------------------loadPermissionByUser:" + user.getUsername() + "---------------------");
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtUserDetailsService.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtUserDetailsService.java
index f5cc8720..30d8c699 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtUserDetailsService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtUserDetailsService.java
@@ -2,25 +2,18 @@ package me.zhengjie.modules.security.service;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.*;
-import me.zhengjie.exception.EntityNotFoundException;
-import me.zhengjie.modules.system.repository.PermissionRepository;
-import me.zhengjie.modules.system.repository.RoleRepository;
import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.modules.system.service.UserService;
+import me.zhengjie.modules.system.service.dto.DeptDTO;
+import me.zhengjie.modules.system.service.dto.JobDTO;
+import me.zhengjie.modules.system.service.dto.UserDTO;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
-import java.util.HashSet;
-import java.util.List;
import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
/**
* @author jie
@@ -39,7 +32,7 @@ public class JwtUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username){
- User user = userService.findByName(username);
+ UserDTO user = userService.findByName(username);
if (user == null) {
throw new BadRequestException("账号不存在");
} else {
@@ -47,7 +40,7 @@ public class JwtUserDetailsService implements UserDetailsService {
}
}
- public UserDetails createJwtUser(User user) {
+ public UserDetails createJwtUser(UserDTO user) {
return new JwtUser(
user.getId(),
user.getUsername(),
@@ -55,8 +48,8 @@ public class JwtUserDetailsService implements UserDetailsService {
user.getAvatar(),
user.getEmail(),
user.getPhone(),
- Optional.ofNullable(user.getDept()).map(Dept::getName).orElse(null),
- Optional.ofNullable(user.getJob()).map(Job::getName).orElse(null),
+ Optional.ofNullable(user.getDept()).map(DeptDTO::getName).orElse(null),
+ Optional.ofNullable(user.getJob()).map(JobDTO::getName).orElse(null),
permissionService.mapToGrantedAuthorities(user),
user.getEnabled(),
user.getCreateTime(),
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java
index 2db7efa4..60d38d45 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java
@@ -45,6 +45,10 @@ public class Dept implements Serializable {
@NotNull
private Long pid;
+ @JsonIgnore
+ @ManyToMany(mappedBy = "depts")
+ private Set roles;
+
@Column(name = "create_time")
@CreationTimestamp
private Timestamp createTime;
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java
index e9a00148..bd686c6e 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java
@@ -1,5 +1,6 @@
package me.zhengjie.modules.system.domain;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java
index 4c2626cc..084dd0bb 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.repository;
import me.zhengjie.modules.system.domain.Dept;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Set;
@@ -19,4 +20,9 @@ public interface DeptRepository extends JpaRepository, JpaSpecificat
* @return
*/
List findByPid(Long id);
+
+ @Query(value = "select name from dept where id = ?1",nativeQuery = true)
+ String findNameById(Long id);
+
+ Set findByRoles_Id(Long id);
}
\ No newline at end of file
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java
index 1dcdc276..bc5699a8 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java
@@ -8,6 +8,7 @@ import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.MenuDTO;
+import me.zhengjie.modules.system.service.dto.UserDTO;
import me.zhengjie.modules.system.service.mapper.MenuMapper;
import me.zhengjie.modules.system.service.query.MenuQueryService;
import me.zhengjie.utils.SecurityUtils;
@@ -50,7 +51,7 @@ public class MenuController {
*/
@GetMapping(value = "/menus/build")
public ResponseEntity buildMenus(){
- User user = userService.findByName(SecurityUtils.getUsername());
+ UserDTO user = userService.findByName(SecurityUtils.getUsername());
List menuDTOList = menuService.findByRoles(roleService.findByUsers_Id(user.getId()));
List menuDTOTree = (List)menuService.buildTree(menuDTOList).get("content");
return new ResponseEntity(menuService.buildMenus(menuDTOTree),HttpStatus.OK);
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java
index fa673d82..9d7cdb06 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java
@@ -7,6 +7,7 @@ import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.RoleDTO;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.modules.system.service.query.RoleQueryService;
import me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -71,7 +72,7 @@ public class RoleController {
@GetMapping(value = "/roles/level")
public ResponseEntity getLevel(){
- List levels = roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(Role::getLevel).collect(Collectors.toList());
+ List levels = roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList());
return new ResponseEntity(Dict.create().set("level", Collections.min(levels)),HttpStatus.OK);
}
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java
index bbf4a280..1cd1ce3a 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java
@@ -9,6 +9,7 @@ import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.DeptService;
import me.zhengjie.modules.system.service.RoleService;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.service.PictureService;
import me.zhengjie.service.VerificationCodeService;
import me.zhengjie.utils.*;
@@ -119,8 +120,8 @@ public class UserController {
@DeleteMapping(value = "/users/{id}")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
- Integer currentLevel = Collections.min(roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(Role::getLevel).collect(Collectors.toList()));
- Integer optLevel = Collections.min(roleService.findByUsers_Id(id).stream().map(Role::getLevel).collect(Collectors.toList()));
+ Integer currentLevel = Collections.min(roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList()));
+ Integer optLevel = Collections.min(roleService.findByUsers_Id(id).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList()));
if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足");
@@ -196,7 +197,7 @@ public class UserController {
* @param resources
*/
private void checkLevel(User resources) {
- Integer currentLevel = Collections.min(roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(Role::getLevel).collect(Collectors.toList()));
+ Integer currentLevel = Collections.min(roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList()));
Integer optLevel = roleService.findByRoles(resources.getRoles());
if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足");
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java
index 840aff4e..3e971486 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java
@@ -7,6 +7,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import java.util.List;
+import java.util.Set;
/**
* @author jie
@@ -60,4 +61,6 @@ public interface DeptService {
*/
@Cacheable(keyGenerator = "keyGenerator")
List findByPid(long pid);
+
+ Set findByRoleIds(Long id);
}
\ No newline at end of file
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java
index d5994418..965d5b6d 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.MenuDTO;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@@ -74,7 +75,7 @@ public interface MenuService {
* @param roles
* @return
*/
- List findByRoles(List roles);
+ List findByRoles(List roles);
/**
* buildMenus
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java
index eb25d0aa..c8f2cc86 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java
@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.RoleDTO;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@@ -54,7 +55,7 @@ public interface RoleService {
* @return
*/
@Cacheable(key = "'findByUsers_Id:' + #p0")
- List findByUsers_Id(Long id);
+ List findByUsers_Id(Long id);
@Cacheable(keyGenerator = "keyGenerator")
Integer findByRoles(Set roles);
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java
index 08b8129a..db8a601d 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java
@@ -50,7 +50,7 @@ public interface UserService {
* @return
*/
@Cacheable(key = "'loadUserByUsername:'+#p0")
- User findByName(String userName);
+ UserDTO findByName(String userName);
/**
* 修改密码
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobDTO.java
index 7983d9a2..f3c83ab3 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobDTO.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobDTO.java
@@ -35,6 +35,11 @@ public class JobDTO implements Serializable {
private DeptDTO dept;
+ /**
+ * 如果分公司存在相同部门,则显示上级部门名称
+ */
+ private String deptSuperiorName;
+
/**
* 创建日期
*/
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleSmallDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleSmallDTO.java
new file mode 100644
index 00000000..c522da98
--- /dev/null
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleSmallDTO.java
@@ -0,0 +1,23 @@
+package me.zhengjie.modules.system.service.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.Set;
+
+/**
+ * @author jie
+ * @date 2018-11-23
+ */
+@Data
+public class RoleSmallDTO implements Serializable {
+
+ private Long id;
+
+ private String name;
+
+ private Integer level;
+
+ private String dataScope;
+}
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserDTO.java
index 389f8657..4178bd62 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserDTO.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserDTO.java
@@ -36,7 +36,7 @@ public class UserDTO implements Serializable {
private Date lastPasswordResetTime;
@ApiModelProperty(hidden = true)
- private Set roles;
+ private Set roles;
@ApiModelProperty(hidden = true)
private JobDTO job;
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java
index 9044a3ae..69a6735c 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java
@@ -42,10 +42,16 @@ public class DeptServiceImpl implements DeptService {
return deptRepository.findByPid(pid);
}
+ @Override
+ public Set findByRoleIds(Long id) {
+ return deptRepository.findByRoles_Id(id);
+ }
+
@Override
public Object buildTree(List deptDTOS) {
Set trees = new LinkedHashSet<>();
Set depts= new LinkedHashSet<>();
+ List deptNames = deptDTOS.stream().map(DeptDTO::getName).collect(Collectors.toList());
Boolean isChild;
for (DeptDTO deptDTO : deptDTOS) {
isChild = false;
@@ -61,9 +67,10 @@ public class DeptServiceImpl implements DeptService {
deptDTO.getChildren().add(it);
}
}
- if(isChild) {
+ if(isChild)
+ depts.add(deptDTO);
+ else if(!deptNames.contains(deptRepository.findNameById(deptDTO.getPid())))
depts.add(deptDTO);
- }
}
if (CollectionUtils.isEmpty(trees)) {
diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java
index e6e16669..6773b8e6 100644
--- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java
+++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java
@@ -2,7 +2,6 @@ package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.util.StrUtil;
import me.zhengjie.modules.system.domain.Menu;
-import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.domain.vo.MenuMetaVo;
import me.zhengjie.modules.system.domain.vo.MenuVo;
import me.zhengjie.exception.BadRequestException;
@@ -10,6 +9,7 @@ import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.repository.MenuRepository;
import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.dto.MenuDTO;
+import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.modules.system.service.mapper.MenuMapper;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -37,9 +37,9 @@ public class MenuServiceImpl implements MenuService {
}
@Override
- public List findByRoles(List roles) {
+ public List findByRoles(List roles) {
Set