"eladmin-system/vscode:/vscode.git/clone" did not exist on "a49bd6d127aed39c2f116eea9e4af10f6b8d6913"
Commit 0f0392d7 authored by dqjdda's avatar dqjdda
Browse files

Merge branch '2.2DEV'

parents d0ffe1a8 f9bb8cf2
...@@ -27,6 +27,12 @@ public class MenuDTO { ...@@ -27,6 +27,12 @@ public class MenuDTO {
private Boolean iFrame; private Boolean iFrame;
private Boolean cache;
private Boolean hidden;
private String componentName;
private String icon; private String icon;
private List<MenuDTO> children; private List<MenuDTO> children;
......
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.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;
...@@ -8,11 +10,13 @@ import me.zhengjie.exception.BadRequestException; ...@@ -8,11 +10,13 @@ import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException; 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.RoleService;
import me.zhengjie.modules.system.service.dto.MenuDTO; 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.QueryHelp; import me.zhengjie.utils.QueryHelp;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,6 +35,9 @@ public class MenuServiceImpl implements MenuService { ...@@ -31,6 +35,9 @@ public class MenuServiceImpl implements MenuService {
@Autowired @Autowired
private MenuMapper menuMapper; private MenuMapper menuMapper;
@Autowired
private RoleService roleService;
@Override @Override
public List queryAll(MenuQueryCriteria criteria){ public List queryAll(MenuQueryCriteria criteria){
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)));
...@@ -58,6 +65,11 @@ public class MenuServiceImpl implements MenuService { ...@@ -58,6 +65,11 @@ public class MenuServiceImpl implements MenuService {
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());
} }
if(StringUtils.isNotBlank(resources.getComponentName())){
if(menuRepository.findByComponentName(resources.getComponentName()) != null){
throw new EntityExistException(Menu.class,"componentName",resources.getComponentName());
}
}
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://开头");
...@@ -85,6 +97,13 @@ public class MenuServiceImpl implements MenuService { ...@@ -85,6 +97,13 @@ public class MenuServiceImpl implements MenuService {
if(menu1 != null && !menu1.getId().equals(menu.getId())){ if(menu1 != null && !menu1.getId().equals(menu.getId())){
throw new EntityExistException(Menu.class,"name",resources.getName()); throw new EntityExistException(Menu.class,"name",resources.getName());
} }
if(StringUtils.isNotBlank(resources.getComponentName())){
menu1 = menuRepository.findByComponentName(resources.getComponentName());
if(menu1 != null && !menu1.getId().equals(menu.getId())){
throw new EntityExistException(Menu.class,"componentName",resources.getComponentName());
}
}
menu.setName(resources.getName()); menu.setName(resources.getName());
menu.setComponent(resources.getComponent()); menu.setComponent(resources.getComponent());
menu.setPath(resources.getPath()); menu.setPath(resources.getPath());
...@@ -92,12 +111,32 @@ public class MenuServiceImpl implements MenuService { ...@@ -92,12 +111,32 @@ public class MenuServiceImpl implements MenuService {
menu.setIFrame(resources.getIFrame()); menu.setIFrame(resources.getIFrame());
menu.setPid(resources.getPid()); menu.setPid(resources.getPid());
menu.setSort(resources.getSort()); menu.setSort(resources.getSort());
menu.setCache(resources.getCache());
menu.setHidden(resources.getHidden());
menu.setComponentName(resources.getComponentName());
menuRepository.save(menu); menuRepository.save(menu);
} }
@Override @Override
public void delete(Long id) { public Set<Menu> getDeleteMenus(List<Menu> menuList, Set<Menu> menuSet) {
menuRepository.deleteById(id); // 递归找出待删除的菜单
for (Menu menu1 : menuList) {
menuSet.add(menu1);
List<Menu> menus = menuRepository.findByPid(menu1.getId());
if(menus!=null && menus.size()!=0){
getDeleteMenus(menus, menuSet);
}
}
return menuSet;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Menu> menuSet) {
for (Menu menu : menuSet) {
roleService.untiedMenu(menu.getId());
menuRepository.deleteById(menu.getId());
}
} }
@Override @Override
...@@ -127,24 +166,26 @@ public class MenuServiceImpl implements MenuService { ...@@ -127,24 +166,26 @@ public class MenuServiceImpl implements MenuService {
@Override @Override
public Map buildTree(List<MenuDTO> menuDTOS) { public Map buildTree(List<MenuDTO> menuDTOS) {
List<MenuDTO> trees = new ArrayList<MenuDTO>(); List<MenuDTO> trees = new ArrayList<MenuDTO>();
Set<Long> ids = new HashSet<>();
for (MenuDTO menuDTO : menuDTOS) { for (MenuDTO menuDTO : menuDTOS) {
if (menuDTO.getPid() == 0) {
if ("0".equals(menuDTO.getPid().toString())) {
trees.add(menuDTO); trees.add(menuDTO);
} }
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>());
} }
menuDTO.getChildren().add(it); menuDTO.getChildren().add(it);
ids.add(it.getId());
} }
} }
} }
Map map = new HashMap(); Map map = new HashMap();
map.put("content",trees.size() == 0?menuDTOS:trees); if(trees.size() == 0){
trees = menuDTOS.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList());
}
map.put("content",trees);
map.put("totalElements",menuDTOS!=null?menuDTOS.size():0); map.put("totalElements",menuDTOS!=null?menuDTOS.size():0);
return map; return map;
} }
...@@ -156,26 +197,25 @@ public class MenuServiceImpl implements MenuService { ...@@ -156,26 +197,25 @@ public class MenuServiceImpl implements MenuService {
if (menuDTO!=null){ if (menuDTO!=null){
List<MenuDTO> menuDTOList = menuDTO.getChildren(); List<MenuDTO> menuDTOList = menuDTO.getChildren();
MenuVo menuVo = new MenuVo(); MenuVo menuVo = new MenuVo();
menuVo.setName(menuDTO.getName()); menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getName());
menuVo.setPath(menuDTO.getPath()); // 一级目录需要加斜杠,不然会报警告
menuVo.setPath(menuDTO.getPid() == 0 ? "/" + menuDTO.getPath() :menuDTO.getPath());
menuVo.setHidden(menuDTO.getHidden());
// 如果不是外链 // 如果不是外链
if(!menuDTO.getIFrame()){ if(!menuDTO.getIFrame()){
if(menuDTO.getPid().equals(0L)){ if(menuDTO.getPid() == 0){
//一级目录需要加斜杠,不然访问 会跳转404页面
menuVo.setPath("/" + menuDTO.getPath());
menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent()); menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent());
}else if(!StrUtil.isEmpty(menuDTO.getComponent())){ }else if(!StrUtil.isEmpty(menuDTO.getComponent())){
menuVo.setComponent(menuDTO.getComponent()); menuVo.setComponent(menuDTO.getComponent());
} }
} }
menuVo.setMeta(new MenuMetaVo(menuDTO.getName(),menuDTO.getIcon())); menuVo.setMeta(new MenuMetaVo(menuDTO.getName(),menuDTO.getIcon(),!menuDTO.getCache()));
if(menuDTOList!=null && menuDTOList.size()!=0){ if(menuDTOList!=null && menuDTOList.size()!=0){
menuVo.setAlwaysShow(true); menuVo.setAlwaysShow(true);
menuVo.setRedirect("noredirect"); menuVo.setRedirect("noredirect");
menuVo.setChildren(buildMenus(menuDTOList)); menuVo.setChildren(buildMenus(menuDTOList));
// 处理是一级菜单并且没有子菜单的情况 // 处理是一级菜单并且没有子菜单的情况
} else if(menuDTO.getPid().equals(0L)){ } else if(menuDTO.getPid() == 0){
MenuVo menuVo1 = new MenuVo(); MenuVo menuVo1 = new MenuVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
// 非外链 // 非外链
......
...@@ -5,6 +5,7 @@ import me.zhengjie.exception.BadRequestException; ...@@ -5,6 +5,7 @@ import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.repository.PermissionRepository; import me.zhengjie.modules.system.repository.PermissionRepository;
import me.zhengjie.modules.system.service.PermissionService; 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.PermissionDTO;
import me.zhengjie.modules.system.service.dto.PermissionQueryCriteria; import me.zhengjie.modules.system.service.dto.PermissionQueryCriteria;
import me.zhengjie.modules.system.service.mapper.PermissionMapper; import me.zhengjie.modules.system.service.mapper.PermissionMapper;
...@@ -30,6 +31,9 @@ public class PermissionServiceImpl implements PermissionService { ...@@ -30,6 +31,9 @@ public class PermissionServiceImpl implements PermissionService {
@Autowired @Autowired
private PermissionMapper permissionMapper; private PermissionMapper permissionMapper;
@Autowired
private RoleService roleService;
@Override @Override
public List<PermissionDTO> queryAll(PermissionQueryCriteria criteria) { public List<PermissionDTO> queryAll(PermissionQueryCriteria criteria) {
return permissionMapper.toDto(permissionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); return permissionMapper.toDto(permissionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
...@@ -74,14 +78,26 @@ public class PermissionServiceImpl implements PermissionService { ...@@ -74,14 +78,26 @@ public class PermissionServiceImpl implements PermissionService {
permissionRepository.save(permission); 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 @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Set<Permission> permissions) {
List<Permission> permissionList = permissionRepository.findByPid(id); for (Permission permission : permissions) {
for (Permission permission : permissionList) { roleService.untiedPermission(permission.getId());
permissionRepository.delete(permission); permissionRepository.delete(permission);
} }
permissionRepository.deleteById(id);
} }
@Override @Override
......
package me.zhengjie.modules.system.service.impl; package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role; import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.repository.RoleRepository; import me.zhengjie.modules.system.repository.RoleRepository;
...@@ -44,6 +43,11 @@ public class RoleServiceImpl implements RoleService { ...@@ -44,6 +43,11 @@ public class RoleServiceImpl implements RoleService {
return roleMapper.toDto(roleRepository.findAll(pageable).getContent()); return roleMapper.toDto(roleRepository.findAll(pageable).getContent());
} }
@Override
public List<RoleDTO> queryAll(RoleQueryCriteria criteria) {
return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override @Override
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);
...@@ -104,13 +108,15 @@ public class RoleServiceImpl implements RoleService { ...@@ -104,13 +108,15 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
public void untiedMenu(Menu menu) { @Transactional(rollbackFor = Exception.class)
Set<Role> roles = roleRepository.findByMenus_Id(menu.getId()); public void untiedMenu(Long id) {
for (Role role : roles) { roleRepository.untiedMenu(id);
menu.getRoles().remove(role); }
role.getMenus().remove(menu);
roleRepository.save(role); @Override
} @Transactional(rollbackFor = Exception.class)
public void untiedPermission(Long id) {
roleRepository.untiedPermission(id);
} }
@Override @Override
......
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;
import me.zhengjie.exception.EntityNotFoundException; import me.zhengjie.exception.EntityNotFoundException;
import me.zhengjie.modules.system.domain.UserAvatar;
import me.zhengjie.modules.system.repository.UserAvatarRepository;
import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.modules.system.repository.UserRepository;
import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.modules.system.service.dto.UserDTO; 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.PageUtil; import me.zhengjie.utils.*;
import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.Date; import org.springframework.web.multipart.MultipartFile;
import java.util.Optional;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author Zheng Jie * @author Zheng Jie
...@@ -38,12 +49,24 @@ public class UserServiceImpl implements UserService { ...@@ -38,12 +49,24 @@ public class UserServiceImpl implements UserService {
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
@Autowired
private UserAvatarRepository userAvatarRepository;
@Value("${file.avatar}")
private String avatar;
@Override @Override
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
public List<UserDTO> queryAll(UserQueryCriteria criteria) {
List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
return userMapper.toDto(users);
}
@Override @Override
public UserDTO findById(long id) { public UserDTO findById(long id) {
Optional<User> user = userRepository.findById(id); Optional<User> user = userRepository.findById(id);
...@@ -65,7 +88,6 @@ public class UserServiceImpl implements UserService { ...@@ -65,7 +88,6 @@ public class UserServiceImpl implements UserService {
// 默认密码 123456,此密码是加密后的字符 // 默认密码 123456,此密码是加密后的字符
resources.setPassword("e10adc3949ba59abbe56e057f20f883e"); resources.setPassword("e10adc3949ba59abbe56e057f20f883e");
resources.setAvatar("https://i.loli.net/2019/04/04/5ca5b971e1548.jpeg");
return userMapper.toDto(userRepository.save(resources)); return userMapper.toDto(userRepository.save(resources));
} }
...@@ -135,8 +157,20 @@ public class UserServiceImpl implements UserService { ...@@ -135,8 +157,20 @@ public class UserServiceImpl implements UserService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateAvatar(String username, String url) { public void updateAvatar(MultipartFile multipartFile) {
userRepository.updateAvatar(username,url); User user = userRepository.findByUsername(SecurityUtils.getUsername());
UserAvatar userAvatar = user.getUserAvatar();
String oldPath = "";
if(userAvatar != null){
oldPath = userAvatar.getPath();
}
File file = FileUtil.upload(multipartFile, avatar);
userAvatar = userAvatarRepository.save(new UserAvatar(userAvatar,file.getName(), file.getPath(), FileUtil.getSize(multipartFile.getSize())));
user.setUserAvatar(userAvatar);
userRepository.save(user);
if(StringUtils.isNotBlank(oldPath)){
FileUtil.del(oldPath);
}
} }
@Override @Override
...@@ -144,4 +178,25 @@ public class UserServiceImpl implements UserService { ...@@ -144,4 +178,25 @@ public class UserServiceImpl implements UserService {
public void updateEmail(String username, String email) { public void updateEmail(String username, String email) {
userRepository.updateEmail(username,email); userRepository.updateEmail(username,email);
} }
@Override
public void download(List<UserDTO> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (UserDTO userDTO : queryAll) {
List roles = userDTO.getRoles().stream().map(RoleSmallDTO::getName).collect(Collectors.toList());
Map map = new LinkedHashMap();
map.put("用户名", userDTO.getUsername());
map.put("头像", userDTO.getAvatar());
map.put("邮箱", userDTO.getEmail());
map.put("状态", userDTO.getEnabled() ? "启用" : "禁用");
map.put("手机号码", userDTO.getPhone());
map.put("角色", roles);
map.put("部门", userDTO.getDept().getName());
map.put("岗位", userDTO.getJob().getName());
map.put("最后修改密码的时间", userDTO.getLastPasswordResetTime());
map.put("创建日期", userDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
} }
...@@ -4,8 +4,11 @@ import me.zhengjie.modules.system.domain.User; ...@@ -4,8 +4,11 @@ import me.zhengjie.modules.system.domain.User;
import me.zhengjie.mapper.EntityMapper; import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.service.dto.UserDTO; import me.zhengjie.modules.system.service.dto.UserDTO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import java.util.List;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2018-11-23 * @date 2018-11-23
...@@ -13,4 +16,6 @@ import org.mapstruct.ReportingPolicy; ...@@ -13,4 +16,6 @@ import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",uses = {RoleMapper.class, DeptMapper.class, JobMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) @Mapper(componentModel = "spring",uses = {RoleMapper.class, DeptMapper.class, JobMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserMapper extends EntityMapper<UserDTO, User> { public interface UserMapper extends EntityMapper<UserDTO, User> {
@Mapping(source = "user.userAvatar.realName",target = "avatar")
UserDTO toDto(User user);
} }
...@@ -45,8 +45,8 @@ spring: ...@@ -45,8 +45,8 @@ spring:
jwt: jwt:
header: Authorization header: Authorization
secret: mySecret secret: mySecret
# token 过期时间 2个小时 # token 过期时间 6个小时
expiration: 7200000 expiration: 21000000
auth: auth:
# 授权路径 # 授权路径
path: /login path: /login
...@@ -59,4 +59,12 @@ generator: ...@@ -59,4 +59,12 @@ generator:
#是否开启 swagger-ui #是否开启 swagger-ui
swagger: swagger:
enabled: true enabled: true
\ No newline at end of file
# 文件存储路径
file:
path: C:\eladmin\file\
avatar: C:\eladmin\avatar\
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
\ No newline at end of file
...@@ -68,4 +68,12 @@ generator: ...@@ -68,4 +68,12 @@ generator:
#是否开启 swagger-ui #是否开启 swagger-ui
swagger: swagger:
enabled: false enabled: false
\ No newline at end of file
# 文件存储路径
file:
path: /home/eladmin/file/
avatar: /home/eladmin/avatar/
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
\ No newline at end of file
#Êý¾Ý¿âÀàÐÍת»»³ÉjavaÀàÐÍ #数据库类型转Java类型
tinyint=Integer tinyint=Integer
smallint=Integer smallint=Integer
mediumint=Integer mediumint=Integer
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
<appender-ref ref="console" /> <appender-ref ref="console" />
</logger> </logger>
<logger name="jdbc.resultsettable" level="INFO" additivity="false"> <!-- 如想看到表格数据,将OFF改为INFO -->
<logger name="jdbc.resultsettable" level="OFF" additivity="false">
<appender-ref ref="console" /> <appender-ref ref="console" />
</logger> </logger>
......
...@@ -3,10 +3,12 @@ package ${package}.service; ...@@ -3,10 +3,12 @@ package ${package}.service;
import ${package}.domain.${className}; import ${package}.domain.${className};
import ${package}.service.dto.${className}DTO; import ${package}.service.dto.${className}DTO;
import ${package}.service.dto.${className}QueryCriteria; import ${package}.service.dto.${className}QueryCriteria;
//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;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
/** /**
* @author ${author} * @author ${author}
...@@ -16,24 +18,24 @@ import org.springframework.data.domain.Pageable; ...@@ -16,24 +18,24 @@ import org.springframework.data.domain.Pageable;
public interface ${className}Service { public interface ${className}Service {
/** /**
* queryAll 分页 * 查询数据分页
* @param criteria * @param criteria
* @param pageable * @param pageable
* @return * @return
*/ */
//@Cacheable(keyGenerator = "keyGenerator") //@Cacheable
Object queryAll(${className}QueryCriteria criteria, Pageable pageable); Map<String,Object> queryAll(${className}QueryCriteria criteria, Pageable pageable);
/** /**
* queryAll 不分页 * 查询所有数据不分页
* @param criteria * @param criteria
* @return * @return
*/ */
//@Cacheable(keyGenerator = "keyGenerator") //@Cacheable
public Object queryAll(${className}QueryCriteria criteria); List<${className}DTO> queryAll(${className}QueryCriteria criteria);
/** /**
* findById * 根据ID查询
* @param ${pkChangeColName} * @param ${pkChangeColName}
* @return * @return
*/ */
...@@ -41,7 +43,7 @@ public interface ${className}Service { ...@@ -41,7 +43,7 @@ public interface ${className}Service {
${className}DTO findById(${pkColumnType} ${pkChangeColName}); ${className}DTO findById(${pkColumnType} ${pkChangeColName});
/** /**
* create * 创建
* @param resources * @param resources
* @return * @return
*/ */
...@@ -49,14 +51,14 @@ public interface ${className}Service { ...@@ -49,14 +51,14 @@ public interface ${className}Service {
${className}DTO create(${className} resources); ${className}DTO create(${className} resources);
/** /**
* update * 编辑
* @param resources * @param resources
*/ */
//@CacheEvict(allEntries = true) //@CacheEvict(allEntries = true)
void update(${className} resources); void update(${className} resources);
/** /**
* delete * 删除
* @param ${pkChangeColName} * @param ${pkChangeColName}
*/ */
//@CacheEvict(allEntries = true) //@CacheEvict(allEntries = true)
......
...@@ -32,6 +32,8 @@ import org.springframework.data.domain.Page; ...@@ -32,6 +32,8 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import java.util.List;
import java.util.Map;
/** /**
* @author ${author} * @author ${author}
...@@ -48,13 +50,13 @@ public class ${className}ServiceImpl implements ${className}Service { ...@@ -48,13 +50,13 @@ public class ${className}ServiceImpl implements ${className}Service {
private ${className}Mapper ${changeClassName}Mapper; private ${className}Mapper ${changeClassName}Mapper;
@Override @Override
public Object queryAll(${className}QueryCriteria criteria, Pageable pageable){ public Map<String,Object> queryAll(${className}QueryCriteria criteria, Pageable pageable){
Page<${className}> page = ${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<${className}> page = ${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(${changeClassName}Mapper::toDto)); return PageUtil.toPage(page.map(${changeClassName}Mapper::toDto));
} }
@Override @Override
public Object queryAll(${className}QueryCriteria criteria){ public List<${className}DTO> queryAll(${className}QueryCriteria criteria){
return ${changeClassName}Mapper.toDto(${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); return ${changeClassName}Mapper.toDto(${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
} }
......
<template> <template>
<el-dialog :append-to-body="true" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px"> <el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<#if columns??> <#if columns??>
<#list columns as column> <#list columns as column>
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>eladmin-tools</artifactId> <artifactId>eladmin-tools</artifactId>
<name>工具模块</name>
<properties> <properties>
<mail.version>1.4.7</mail.version> <mail.version>1.4.7</mail.version>
......
package me.zhengjie.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
@Entity
@Data
@Table(name="local_storage")
@AllArgsConstructor
@NoArgsConstructor
public class LocalStorage implements Serializable {
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 真实文件名
@Column(name = "real_name")
private String realName;
// 文件名
@Column(name = "name")
private String name;
// 后缀
@Column(name = "suffix")
private String suffix;
// 路径
@Column(name = "path")
private String path;
// 类型
@Column(name = "type")
private String type;
// 大小
@Column(name = "size")
private String size;
// 操作人
@Column(name = "operate")
private String operate;
// 创建日期
@Column(name = "create_time")
@CreationTimestamp
private Timestamp createTime;
// 修改日期
@Column(name = "update_time")
@UpdateTimestamp
private Timestamp updateTime;
public LocalStorage(String realName,String name, String suffix, String path, String type, String size, String operate) {
this.realName = realName;
this.name = name;
this.suffix = suffix;
this.path = path;
this.type = type;
this.size = size;
this.operate = operate;
}
public void copy(LocalStorage source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
\ No newline at end of file
...@@ -42,6 +42,8 @@ public class QiniuContent implements Serializable { ...@@ -42,6 +42,8 @@ public class QiniuContent implements Serializable {
*/ */
private String url; private String url;
private String suffix;
/** /**
* 空间类型:公开/私有 * 空间类型:公开/私有
*/ */
......
package me.zhengjie.repository;
import me.zhengjie.domain.LocalStorage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
public interface LocalStorageRepository extends JpaRepository<LocalStorage, Long>, JpaSpecificationExecutor {
}
\ No newline at end of file
...@@ -2,10 +2,16 @@ package me.zhengjie.repository; ...@@ -2,10 +2,16 @@ package me.zhengjie.repository;
import me.zhengjie.domain.QiniuConfig; import me.zhengjie.domain.QiniuConfig;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2018-12-31 * @date 2018-12-31
*/ */
public interface QiNiuConfigRepository extends JpaRepository<QiniuConfig,Long> { public interface QiNiuConfigRepository extends JpaRepository<QiniuConfig,Long> {
@Modifying
@Query(value = "update qiniu_content set type = ?1", nativeQuery = true)
void update(String type);
} }
package me.zhengjie.rest;
import me.zhengjie.aop.log.Log;
import me.zhengjie.domain.LocalStorage;
import me.zhengjie.service.LocalStorageService;
import me.zhengjie.service.dto.LocalStorageQueryCriteria;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
@Api(tags = "本地存储管理")
@RestController
@RequestMapping("api")
public class LocalStorageController {
@Autowired
private LocalStorageService localStorageService;
@ApiOperation(value = "查询文件")
@GetMapping(value = "/localStorage")
@PreAuthorize("hasAnyRole('ADMIN','LOCALSTORAGE_ALL','LOCALSTORAGE_SELECT')")
public ResponseEntity getLocalStorages(LocalStorageQueryCriteria criteria, Pageable pageable){
return new ResponseEntity(localStorageService.queryAll(criteria,pageable),HttpStatus.OK);
}
@ApiOperation(value = "上传文件")
@PostMapping(value = "/localStorage")
@PreAuthorize("hasAnyRole('ADMIN','LOCALSTORAGE_ALL','LOCALSTORAGE_CREATE')")
public ResponseEntity create(@RequestParam String name, @RequestParam("file") MultipartFile file){
return new ResponseEntity(localStorageService.create(name, file),HttpStatus.CREATED);
}
@ApiOperation(value = "修改文件")
@PutMapping(value = "/localStorage")
@PreAuthorize("hasAnyRole('ADMIN','LOCALSTORAGE_ALL','LOCALSTORAGE_EDIT')")
public ResponseEntity update(@Validated @RequestBody LocalStorage resources){
localStorageService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@ApiOperation(value = "删除文件")
@DeleteMapping(value = "/localStorage/{id}")
@PreAuthorize("hasAnyRole('ADMIN','LOCALSTORAGE_ALL','LOCALSTORAGE_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
localStorageService.delete(id);
return new ResponseEntity(HttpStatus.OK);
}
/**
* 删除多张图片
* @param ids
* @return
*/
@Log("删除图片")
@DeleteMapping(value = "/localStorage")
public ResponseEntity deleteAll(@RequestBody Long[] ids) {
localStorageService.deleteAll(ids);
return new ResponseEntity(HttpStatus.OK);
}
}
\ No newline at end of file
...@@ -45,7 +45,7 @@ public class PictureController { ...@@ -45,7 +45,7 @@ public class PictureController {
public ResponseEntity upload(@RequestParam MultipartFile file){ public ResponseEntity upload(@RequestParam MultipartFile file){
String userName = SecurityUtils.getUsername(); String userName = SecurityUtils.getUsername();
Picture picture = pictureService.upload(file,userName); Picture picture = pictureService.upload(file,userName);
Map map = new HashMap(3); Map<String,Object> map = new HashMap<>(3);
map.put("errno",0); map.put("errno",0);
map.put("id",picture.getId()); map.put("id",picture.getId());
map.put("data",new String[]{picture.getUrl()}); map.put("data",new String[]{picture.getUrl()});
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment