2.0 抢先版,主要更新了#71 | #IWYE2

pull/92/head
zhengjie 2019-05-24 10:36:19 +08:00
parent 90c2bf906b
commit 784d670c54
49 changed files with 337 additions and 73 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
### IntelliJ IDEA ### ### IDEA ###
.idea/* .idea/*
*.iml *.iml
*/target/* */target/*

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>1.9</version> <version>2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -54,8 +54,8 @@ public class SwaggerConfig {
private ApiInfo apiInfo() { private ApiInfo apiInfo() {
return new ApiInfoBuilder() return new ApiInfoBuilder()
.title("elune 接口文档") .title("eladmin 接口文档")
.version("1.7") .version("2.0")
.build(); .build();
} }

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>1.9</version> <version>2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-common</artifactId> <artifactId>eladmin-common</artifactId>
<version>1.9</version> <version>2.0</version>
</dependency> </dependency>
<!--模板引擎--> <!--模板引擎-->

View File

@ -34,6 +34,9 @@ public class GenConfig {
/** 作者 **/ /** 作者 **/
private String author; private String author;
/** 表前缀 **/
private String prefix;
/** 是否覆盖 **/ /** 是否覆盖 **/
private Boolean cover; private Boolean cover;
} }

View File

@ -1,5 +1,6 @@
package me.zhengjie.utils; package me.zhengjie.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.*; import cn.hutool.extra.template.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.domain.GenConfig; import me.zhengjie.domain.GenConfig;
@ -75,9 +76,16 @@ public class GenUtil {
map.put("date", LocalDate.now().toString()); map.put("date", LocalDate.now().toString());
map.put("tableName",tableName); map.put("tableName",tableName);
String className = StringUtils.toCapitalizeCamelCase(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("className", className);
map.put("upperCaseClassName", className.toUpperCase()); map.put("upperCaseClassName", className.toUpperCase());
map.put("changeClassName", StringUtils.toCamelCase(tableName)); map.put("changeClassName", changeClassName);
map.put("hasTimestamp",false); map.put("hasTimestamp",false);
map.put("hasBigDecimal",false); map.put("hasBigDecimal",false);
map.put("hasQuery",false); map.put("hasQuery",false);

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>1.9</version> <version>2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -15,7 +15,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-common</artifactId> <artifactId>eladmin-common</artifactId>
<version>1.9</version> <version>2.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -4,6 +4,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
/** /**
@ -14,7 +15,7 @@ import java.sql.Timestamp;
@Data @Data
@Table(name = "log") @Table(name = "log")
@NoArgsConstructor @NoArgsConstructor
public class Log { public class Log implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)

View File

@ -21,4 +21,7 @@ public interface LogRepository extends JpaRepository<Log,Long>, 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) @Query(value = "select count(*) FROM (select request_ip FROM log where create_time between ?1 and ?2 GROUP BY request_ip) as s",nativeQuery = true)
Long findIp(String date1, String date2); Long findIp(String date1, String date2);
@Query(value = "select exception_detail FROM log where id = ?1",nativeQuery = true)
String findExceptionById(Long id);
} }

View File

@ -1,6 +1,7 @@
package me.zhengjie.rest; package me.zhengjie.rest;
import me.zhengjie.domain.Log; import me.zhengjie.domain.Log;
import me.zhengjie.service.LogService;
import me.zhengjie.service.query.LogQueryService; import me.zhengjie.service.query.LogQueryService;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -9,6 +10,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -23,6 +25,9 @@ public class LogController {
@Autowired @Autowired
private LogQueryService logQueryService; private LogQueryService logQueryService;
@Autowired
private LogService logService;
@GetMapping(value = "/logs") @GetMapping(value = "/logs")
@PreAuthorize("hasAnyRole('ADMIN')") @PreAuthorize("hasAnyRole('ADMIN')")
public ResponseEntity getLogs(Log log, Pageable pageable){ public ResponseEntity getLogs(Log log, Pageable pageable){
@ -43,4 +48,10 @@ public class LogController {
log.setLogType("ERROR"); log.setLogType("ERROR");
return new ResponseEntity(logQueryService.queryAll(log,pageable), HttpStatus.OK); 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);
}
} }

View File

@ -17,4 +17,11 @@ public interface LogService {
*/ */
@Async @Async
void save(ProceedingJoinPoint joinPoint, Log log); void save(ProceedingJoinPoint joinPoint, Log log);
/**
*
* @param id
* @return
*/
Object findByErrDetail(Long id);
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,5 +1,6 @@
package me.zhengjie.service.impl; package me.zhengjie.service.impl;
import cn.hutool.core.lang.Dict;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import me.zhengjie.domain.Log; import me.zhengjie.domain.Log;
import me.zhengjie.repository.LogRepository; import me.zhengjie.repository.LogRepository;
@ -79,4 +80,9 @@ public class LogServiceImpl implements LogService {
log.setParams(params + " }"); log.setParams(params + " }");
logRepository.save(log); logRepository.save(log);
} }
@Override
public Object findByErrDetail(Long id) {
return Dict.create().set("exception",logRepository.findExceptionById(id));
}
} }

View File

@ -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<LogErrorDTO, Log> {
}

View File

@ -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<LogSmallDTO, Log> {
}

View File

@ -2,6 +2,9 @@ package me.zhengjie.service.query;
import me.zhengjie.domain.Log; import me.zhengjie.domain.Log;
import me.zhengjie.repository.LogRepository; 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.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -16,6 +19,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author jie * @author jie
@ -28,7 +32,20 @@ public class LogQueryService {
@Autowired @Autowired
private LogRepository logRepository; 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<Log> 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); return logRepository.findAll(new Spec(log),pageable);
} }

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>1.9</version> <version>2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-generator</artifactId> <artifactId>eladmin-generator</artifactId>
<version>1.9</version> <version>2.0</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
@ -32,7 +32,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-tools</artifactId> <artifactId>eladmin-tools</artifactId>
<version>1.9</version> <version>2.0</version>
</dependency> </dependency>
<!--jwt--> <!--jwt-->
@ -53,6 +53,7 @@
<groupId>org.quartz-scheduler</groupId> <groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId> <artifactId>quartz</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,11 +1,12 @@
package me.zhengjie.config; package me.zhengjie.config;
import me.zhengjie.modules.system.domain.Dept; 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.DeptService;
import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.UserService; 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 me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -35,15 +36,15 @@ public class DataScope {
public Set<Long> getDeptIds() { public Set<Long> getDeptIds() {
User user = userService.findByName(SecurityUtils.getUsername()); UserDTO user = userService.findByName(SecurityUtils.getUsername());
// 用于存储部门id // 用于存储部门id
Set<Long> deptIds = new HashSet<>(); Set<Long> deptIds = new HashSet<>();
// 查询用户角色 // 查询用户角色
List<Role> roleSet = roleService.findByUsers_Id(user.getId()); List<RoleSmallDTO> roleSet = roleService.findByUsers_Id(user.getId());
for (Role role : roleSet) { for (RoleSmallDTO role : roleSet) {
if (scopeType[0].equals(role.getDataScope())) { if (scopeType[0].equals(role.getDataScope())) {
return new HashSet<>() ; return new HashSet<>() ;
@ -56,8 +57,8 @@ public class DataScope {
// 存储自定义的数据权限 // 存储自定义的数据权限
if (scopeType[2].equals(role.getDataScope())) { if (scopeType[2].equals(role.getDataScope())) {
Set<Dept> deptList = role.getDepts(); Set<Dept> depts = deptService.findByRoleIds(role.getId());
for (Dept dept : deptList) { for (Dept dept : depts) {
deptIds.add(dept.getId()); deptIds.add(dept.getId());
List<Dept> deptChildren = deptService.findByPid(dept.getId()); List<Dept> deptChildren = deptService.findByPid(dept.getId());
if (deptChildren != null && deptChildren.size() != 0) { if (deptChildren != null && deptChildren.size() != 0) {

View File

@ -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 // 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 ;) // 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 // 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 ;) // the database compellingly. Again it's up to you ;)
if (jwtTokenUtil.validateToken(authToken, userDetails)) { if (jwtTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
log.info("authorizated user '{}', setting security context", username);
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
} }
} }

View File

@ -1,8 +1,8 @@
package me.zhengjie.modules.security.service; package me.zhengjie.modules.security.service;
import me.zhengjie.modules.system.domain.Role; 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.repository.RoleRepository;
import me.zhengjie.modules.system.service.dto.UserDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -26,7 +26,7 @@ public class JwtPermissionService {
* @return * @return
*/ */
@Cacheable(key = "'loadPermissionByUser:' + #p0.username") @Cacheable(key = "'loadPermissionByUser:' + #p0.username")
public Collection<GrantedAuthority> mapToGrantedAuthorities(User user) { public Collection<GrantedAuthority> mapToGrantedAuthorities(UserDTO user) {
System.out.println("--------------------loadPermissionByUser:" + user.getUsername() + "---------------------"); System.out.println("--------------------loadPermissionByUser:" + user.getUsername() + "---------------------");

View File

@ -2,25 +2,18 @@ package me.zhengjie.modules.security.service;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.*; 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.security.security.JwtUser;
import me.zhengjie.modules.system.service.UserService; 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.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.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
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.HashSet;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* @author jie * @author jie
@ -39,7 +32,7 @@ public class JwtUserDetailsService implements UserDetailsService {
@Override @Override
public UserDetails loadUserByUsername(String username){ public UserDetails loadUserByUsername(String username){
User user = userService.findByName(username); UserDTO user = userService.findByName(username);
if (user == null) { if (user == null) {
throw new BadRequestException("账号不存在"); throw new BadRequestException("账号不存在");
} else { } else {
@ -47,7 +40,7 @@ public class JwtUserDetailsService implements UserDetailsService {
} }
} }
public UserDetails createJwtUser(User user) { public UserDetails createJwtUser(UserDTO user) {
return new JwtUser( return new JwtUser(
user.getId(), user.getId(),
user.getUsername(), user.getUsername(),
@ -55,8 +48,8 @@ public class JwtUserDetailsService implements UserDetailsService {
user.getAvatar(), user.getAvatar(),
user.getEmail(), user.getEmail(),
user.getPhone(), user.getPhone(),
Optional.ofNullable(user.getDept()).map(Dept::getName).orElse(null), Optional.ofNullable(user.getDept()).map(DeptDTO::getName).orElse(null),
Optional.ofNullable(user.getJob()).map(Job::getName).orElse(null), Optional.ofNullable(user.getJob()).map(JobDTO::getName).orElse(null),
permissionService.mapToGrantedAuthorities(user), permissionService.mapToGrantedAuthorities(user),
user.getEnabled(), user.getEnabled(),
user.getCreateTime(), user.getCreateTime(),

View File

@ -45,6 +45,10 @@ public class Dept implements Serializable {
@NotNull @NotNull
private Long pid; private Long pid;
@JsonIgnore
@ManyToMany(mappedBy = "depts")
private Set<Role> roles;
@Column(name = "create_time") @Column(name = "create_time")
@CreationTimestamp @CreationTimestamp
private Timestamp createTime; private Timestamp createTime;

View File

@ -1,5 +1,6 @@
package me.zhengjie.modules.system.domain; package me.zhengjie.modules.system.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;

View File

@ -3,6 +3,7 @@ package me.zhengjie.modules.system.repository;
import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.domain.Dept;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -19,4 +20,9 @@ public interface DeptRepository extends JpaRepository<Dept, Long>, JpaSpecificat
* @return * @return
*/ */
List<Dept> findByPid(Long id); List<Dept> findByPid(Long id);
@Query(value = "select name from dept where id = ?1",nativeQuery = true)
String findNameById(Long id);
Set<Dept> findByRoles_Id(Long id);
} }

View File

@ -8,6 +8,7 @@ import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.MenuDTO; 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.mapper.MenuMapper;
import me.zhengjie.modules.system.service.query.MenuQueryService; import me.zhengjie.modules.system.service.query.MenuQueryService;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
@ -50,7 +51,7 @@ public class MenuController {
*/ */
@GetMapping(value = "/menus/build") @GetMapping(value = "/menus/build")
public ResponseEntity buildMenus(){ public ResponseEntity buildMenus(){
User user = userService.findByName(SecurityUtils.getUsername()); UserDTO user = userService.findByName(SecurityUtils.getUsername());
List<MenuDTO> menuDTOList = menuService.findByRoles(roleService.findByUsers_Id(user.getId())); List<MenuDTO> menuDTOList = menuService.findByRoles(roleService.findByUsers_Id(user.getId()));
List<MenuDTO> menuDTOTree = (List<MenuDTO>)menuService.buildTree(menuDTOList).get("content"); List<MenuDTO> menuDTOTree = (List<MenuDTO>)menuService.buildTree(menuDTOList).get("content");
return new ResponseEntity(menuService.buildMenus(menuDTOTree),HttpStatus.OK); return new ResponseEntity(menuService.buildMenus(menuDTOTree),HttpStatus.OK);

View File

@ -7,6 +7,7 @@ import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.RoleDTO; 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.modules.system.service.query.RoleQueryService;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -71,7 +72,7 @@ public class RoleController {
@GetMapping(value = "/roles/level") @GetMapping(value = "/roles/level")
public ResponseEntity getLevel(){ public ResponseEntity getLevel(){
List<Integer> levels = roleService.findByUsers_Id(SecurityUtils.getUserId()).stream().map(Role::getLevel).collect(Collectors.toList()); List<Integer> 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); return new ResponseEntity(Dict.create().set("level", Collections.min(levels)),HttpStatus.OK);
} }

View File

@ -9,6 +9,7 @@ import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.DeptService;
import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.service.PictureService; import me.zhengjie.service.PictureService;
import me.zhengjie.service.VerificationCodeService; import me.zhengjie.service.VerificationCodeService;
import me.zhengjie.utils.*; import me.zhengjie.utils.*;
@ -119,8 +120,8 @@ public class UserController {
@DeleteMapping(value = "/users/{id}") @DeleteMapping(value = "/users/{id}")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_DELETE')") @PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_DELETE')")
public ResponseEntity delete(@PathVariable Long id){ public ResponseEntity delete(@PathVariable Long id){
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 = Collections.min(roleService.findByUsers_Id(id).stream().map(Role::getLevel).collect(Collectors.toList())); Integer optLevel = Collections.min(roleService.findByUsers_Id(id).stream().map(RoleSmallDTO::getLevel).collect(Collectors.toList()));
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足"); throw new BadRequestException("角色权限不足");
@ -196,7 +197,7 @@ public class UserController {
* @param resources * @param resources
*/ */
private void checkLevel(User 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()); Integer optLevel = roleService.findByRoles(resources.getRoles());
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足"); throw new BadRequestException("角色权限不足");

View File

@ -7,6 +7,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author jie * @author jie
@ -60,4 +61,6 @@ public interface DeptService {
*/ */
@Cacheable(keyGenerator = "keyGenerator") @Cacheable(keyGenerator = "keyGenerator")
List<Dept> findByPid(long pid); List<Dept> findByPid(long pid);
Set<Dept> findByRoleIds(Long id);
} }

View File

@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service;
import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role; import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.MenuDTO; 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.CacheConfig;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -74,7 +75,7 @@ public interface MenuService {
* @param roles * @param roles
* @return * @return
*/ */
List<MenuDTO> findByRoles(List<Role> roles); List<MenuDTO> findByRoles(List<RoleSmallDTO> roles);
/** /**
* buildMenus * buildMenus

View File

@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service;
import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role; import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.RoleDTO; 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.CacheConfig;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -54,7 +55,7 @@ public interface RoleService {
* @return * @return
*/ */
@Cacheable(key = "'findByUsers_Id:' + #p0") @Cacheable(key = "'findByUsers_Id:' + #p0")
List<Role> findByUsers_Id(Long id); List<RoleSmallDTO> findByUsers_Id(Long id);
@Cacheable(keyGenerator = "keyGenerator") @Cacheable(keyGenerator = "keyGenerator")
Integer findByRoles(Set<Role> roles); Integer findByRoles(Set<Role> roles);

View File

@ -50,7 +50,7 @@ public interface UserService {
* @return * @return
*/ */
@Cacheable(key = "'loadUserByUsername:'+#p0") @Cacheable(key = "'loadUserByUsername:'+#p0")
User findByName(String userName); UserDTO findByName(String userName);
/** /**
* *

View File

@ -35,6 +35,11 @@ public class JobDTO implements Serializable {
private DeptDTO dept; private DeptDTO dept;
/**
*
*/
private String deptSuperiorName;
/** /**
* *
*/ */

View File

@ -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;
}

View File

@ -36,7 +36,7 @@ public class UserDTO implements Serializable {
private Date lastPasswordResetTime; private Date lastPasswordResetTime;
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private Set<RoleDTO> roles; private Set<RoleSmallDTO> roles;
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private JobDTO job; private JobDTO job;

View File

@ -42,10 +42,16 @@ public class DeptServiceImpl implements DeptService {
return deptRepository.findByPid(pid); return deptRepository.findByPid(pid);
} }
@Override
public Set<Dept> findByRoleIds(Long id) {
return deptRepository.findByRoles_Id(id);
}
@Override @Override
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());
Boolean isChild; Boolean isChild;
for (DeptDTO deptDTO : deptDTOS) { for (DeptDTO deptDTO : deptDTOS) {
isChild = false; isChild = false;
@ -61,9 +67,10 @@ public class DeptServiceImpl implements DeptService {
deptDTO.getChildren().add(it); deptDTO.getChildren().add(it);
} }
} }
if(isChild) { if(isChild)
depts.add(deptDTO);
else if(!deptNames.contains(deptRepository.findNameById(deptDTO.getPid())))
depts.add(deptDTO); depts.add(deptDTO);
}
} }
if (CollectionUtils.isEmpty(trees)) { if (CollectionUtils.isEmpty(trees)) {

View File

@ -2,7 +2,6 @@ package me.zhengjie.modules.system.service.impl;
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.Role;
import me.zhengjie.modules.system.domain.vo.MenuMetaVo; import me.zhengjie.modules.system.domain.vo.MenuMetaVo;
import me.zhengjie.modules.system.domain.vo.MenuVo; import me.zhengjie.modules.system.domain.vo.MenuVo;
import me.zhengjie.exception.BadRequestException; 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.repository.MenuRepository;
import me.zhengjie.modules.system.service.MenuService; import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.dto.MenuDTO; 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.modules.system.service.mapper.MenuMapper;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -37,9 +37,9 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
public List<MenuDTO> findByRoles(List<Role> roles) { public List<MenuDTO> findByRoles(List<RoleSmallDTO> roles) {
Set<Menu> menus = new LinkedHashSet<>(); Set<Menu> menus = new LinkedHashSet<>();
for (Role role : roles) { for (RoleSmallDTO role : roles) {
List<Menu> menus1 = menuRepository.findByRoles_IdOrderBySortAsc(role.getId()).stream().collect(Collectors.toList()); List<Menu> menus1 = menuRepository.findByRoles_IdOrderBySortAsc(role.getId()).stream().collect(Collectors.toList());
menus.addAll(menus1); menus.addAll(menus1);
} }

View File

@ -7,7 +7,9 @@ import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.repository.RoleRepository; import me.zhengjie.modules.system.repository.RoleRepository;
import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.RoleDTO; import me.zhengjie.modules.system.service.dto.RoleDTO;
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.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -30,6 +32,9 @@ public class RoleServiceImpl implements RoleService {
@Autowired @Autowired
private RoleMapper roleMapper; private RoleMapper roleMapper;
@Autowired
private RoleSmallMapper roleSmallMapper;
@Override @Override
public RoleDTO findById(long id) { public RoleDTO findById(long id) {
Optional<Role> role = roleRepository.findById(id); Optional<Role> role = roleRepository.findById(id);
@ -100,8 +105,8 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
public List<Role> findByUsers_Id(Long id) { public List<RoleSmallDTO> findByUsers_Id(Long id) {
return roleRepository.findByUsers_Id(id).stream().collect(Collectors.toList()); return roleSmallMapper.toDto(roleRepository.findByUsers_Id(id).stream().collect(Collectors.toList()));
} }
@Override @Override

View File

@ -102,18 +102,17 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public User findByName(String userName) { public UserDTO findByName(String userName) {
User user = null; User user = null;
if(ValidationUtil.isEmail(userName)){ if(ValidationUtil.isEmail(userName)){
user = userRepository.findByEmail(userName); user = userRepository.findByEmail(userName);
} else { } else {
user = userRepository.findByUsername(userName); user = userRepository.findByUsername(userName);
} }
if (user == null) { if (user == null) {
throw new EntityNotFoundException(User.class, "name", userName); throw new EntityNotFoundException(User.class, "name", userName);
} else { } else {
return user; return userMapper.toDto(user);
} }
} }

View File

@ -4,6 +4,7 @@ import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.service.dto.JobDTO; import me.zhengjie.modules.system.service.dto.JobDTO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
/** /**
@ -13,4 +14,6 @@ import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",uses = {DeptMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) @Mapper(componentModel = "spring",uses = {DeptMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface JobMapper extends EntityMapper<JobDTO, Job> { public interface JobMapper extends EntityMapper<JobDTO, Job> {
@Mapping(source = "deptSuperiorName", target = "deptSuperiorName")
JobDTO toDto(Job job, String deptSuperiorName);
} }

View File

@ -0,0 +1,17 @@
package me.zhengjie.modules.system.service.mapper;
import me.zhengjie.mapper.EntityMapper;
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.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author jie
* @date 2019-5-23
*/
@Mapper(componentModel = "spring", uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RoleSmallMapper extends EntityMapper<RoleSmallDTO, Role> {
}

View File

@ -1,6 +1,7 @@
package me.zhengjie.modules.system.service.query; package me.zhengjie.modules.system.service.query;
import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.repository.DeptRepository;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.service.dto.JobDTO; import me.zhengjie.modules.system.service.dto.JobDTO;
@ -34,13 +35,21 @@ public class JobQueryService {
@Autowired @Autowired
private JobRepository jobRepository; private JobRepository jobRepository;
@Autowired
private DeptRepository deptRepository;
@Autowired @Autowired
private JobMapper jobMapper; private JobMapper jobMapper;
@Cacheable(keyGenerator = "keyGenerator") @Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(String name , Boolean enabled, Set<Long> deptIds, Long deptId, Pageable pageable){ public Object queryAll(String name , Boolean enabled, Set<Long> deptIds, Long deptId, Pageable pageable){
Page<Job> page = jobRepository.findAll(new Spec(new JobDTO(name,enabled), deptIds, deptId),pageable); Page<Job> page = jobRepository.findAll(new Spec(new JobDTO(name,enabled), deptIds, deptId),pageable);
return PageUtil.toPage(page.map(jobMapper::toDto));
List<JobDTO> jobs = new ArrayList<>();
for (Job job : page.getContent()) {
jobs.add(jobMapper.toDto(job,deptRepository.findNameById(job.getDept().getPid())));
}
return PageUtil.toPage(jobs,page.getTotalElements());
} }
class Spec implements Specification<Job> { class Spec implements Specification<Job> {

View File

@ -17,7 +17,6 @@ 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 org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import javax.persistence.criteria.*; import javax.persistence.criteria.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -32,8 +32,6 @@ spring:
stat-view-servlet: stat-view-servlet:
url-pattern: /druid/* url-pattern: /druid/*
reset-enable: false reset-enable: false
login-username: admin
login-password: 123456
web-stat-filter: web-stat-filter:
url-pattern: /* url-pattern: /*

View File

@ -1,6 +1,16 @@
server: server:
port: 8000 port: 8000
# actuator 配置
management:
endpoints:
web:
exposure:
# env 环境属性
# heapdump 应用的 JVM 堆信息
# metrics 应用程序度量信息
include: env,health,heapdump,metrics
spring: spring:
profiles: profiles:
active: dev active: dev
@ -37,7 +47,6 @@ spring:
#连接超时时间 #连接超时时间
timeout: 5000 timeout: 5000
#七牛云 #七牛云
qiniu: qiniu:
# 文件大小 /M # 文件大小 /M

View File

@ -74,13 +74,13 @@ public class ${className}QueryService {
/** /**
* 模糊 * 模糊
*/ */
list.add(cb.like(root.get("${column.columnName}").as(${column.columnType}.class),"%"+${changeClassName}.get${column.capitalColumnName}()+"%")); list.add(cb.like(root.get("${column.changeColumnName}").as(${column.columnType}.class),"%"+${changeClassName}.get${column.capitalColumnName}()+"%"));
</#if> </#if>
<#if column.columnQuery = '2'> <#if column.columnQuery = '2'>
/** /**
* 精确 * 精确
*/ */
list.add(cb.equal(root.get("${column.columnName}").as(${column.columnType}.class),${changeClassName}.get${column.capitalColumnName}())); list.add(cb.equal(root.get("${column.changeColumnName}").as(${column.columnType}.class),${changeClassName}.get${column.capitalColumnName}()));
</#if> </#if>
} }
</#list> </#list>

View File

@ -4,7 +4,7 @@
<#if columns??> <#if columns??>
<#list columns as column> <#list columns as column>
<#if column.changeColumnName != '${pkChangeColName}'> <#if column.changeColumnName != '${pkChangeColName}'>
<el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>"> <el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>" <#if column.columnKey = 'UNI'>prop="${column.changeColumnName}"</#if>>
<el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/> <el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/>
</el-form-item> </el-form-item>
</#if> </#if>
@ -40,6 +40,15 @@ export default {
${column.changeColumnName}: ''<#if column_has_next>,</#if> ${column.changeColumnName}: ''<#if column_has_next>,</#if>
</#list> </#list>
</#if> </#if>
},
rules: {
<#list columns as column>
<#if column.columnKey = 'UNI'>
${column.changeColumnName}: [
{ required: true, message: 'please enter', trigger: 'blur' }
]<#if (column_has_next)>,</#if>
</#if>
</#list>
} }
} }
}, },

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>1.9</version> <version>2.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -22,7 +22,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-logging</artifactId> <artifactId>eladmin-logging</artifactId>
<version>1.9</version> <version>2.0</version>
</dependency> </dependency>
<!--邮件依赖--> <!--邮件依赖-->

10
pom.xml
View File

@ -7,7 +7,7 @@
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>1.9</version> <version>2.0</version>
<modules> <modules>
<module>eladmin-common</module> <module>eladmin-common</module>
@ -48,10 +48,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<!--<dependency>--> <dependency>
<!--<groupId>org.springframework.boot</groupId>--> <groupId>org.springframework.boot</groupId>
<!--<artifactId>spring-boot-starter-actuator</artifactId>--> <artifactId>spring-boot-starter-actuator</artifactId>
<!--</dependency>--> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>