From e6146cb1c88b1c5eeb1601006a72ec4bc99ea7a0 Mon Sep 17 00:00:00 2001 From: dqjdda <201507802@qq.com> Date: Mon, 26 Aug 2019 17:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=90=8E=E7=AB=AF=E5=B8=A6?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD=EF=BC=88?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E8=A7=81=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/me/zhengjie/utils/FileUtil.java | 35 +++++++++++++++++ .../modules/system/rest/RoleController.java | 1 - .../modules/system/rest/UserController.java | 8 ++++ .../modules/system/service/RoleService.java | 11 ++++++ .../modules/system/service/UserService.java | 8 ++++ .../system/service/impl/RoleServiceImpl.java | 8 ++++ .../system/service/impl/UserServiceImpl.java | 39 ++++++++++++++++++- eladmin-system/src/main/resources/logback.xml | 3 +- pom.xml | 5 +++ 9 files changed, 114 insertions(+), 4 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java index 5549b814..011b92bf 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java @@ -1,10 +1,17 @@ package me.zhengjie.utils; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.DecimalFormat; +import java.util.List; +import java.util.Map; /** * File工具类,扩展 hutool 工具包 @@ -139,4 +146,32 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { ins.close(); return file; } + + /** + * 导出excel + * @param list + * @return + * @throws Exception + */ + public static void downloadExcel(List> list, HttpServletResponse response){ + // 通过工具类创建writer + ExcelWriter writer = ExcelUtil.getWriter(); + // 一次性写出内容,使用默认样式,强制输出标题 + writer.write(list, true); + //response为HttpServletResponse对象 + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 + response.setHeader("Content-Disposition","attachment;filename=file.xls"); + ServletOutputStream out= null; + try { + out = response.getOutputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + writer.flush(out, true); + // 关闭writer,释放内存 + writer.close(); + //此处记得关闭输出Servlet流 + IoUtil.close(out); + } } 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 ce28bca3..66ef07db 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 @@ -5,7 +5,6 @@ import me.zhengjie.aop.log.Log; import me.zhengjie.modules.system.domain.Role; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.service.RoleService; -import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.utils.SecurityUtils; 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 d5634e48..9e4b8d44 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 @@ -26,6 +26,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.*; import java.util.stream.Collectors; @@ -55,6 +56,13 @@ public class UserController { @Autowired private VerificationCodeService verificationCodeService; + @Log("导出用户数据") + @GetMapping(value = "/users/download") + @PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')") + public void update(HttpServletResponse response, UserQueryCriteria criteria){ + userService.download(userService.queryAll(criteria), response); + } + @Log("查询用户") @GetMapping(value = "/users") @PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')") 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 eccb2459..d49870ef 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 @@ -10,6 +10,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Set; @@ -86,6 +87,7 @@ public interface RoleService { * @param pageable * @return */ + @Cacheable(keyGenerator = "keyGenerator") Object queryAll(Pageable pageable); /** @@ -94,5 +96,14 @@ public interface RoleService { * @param criteria * @return */ + @Cacheable(keyGenerator = "keyGenerator") Object queryAll(RoleQueryCriteria criteria, Pageable pageable); + + /** + * queryAll + * @param criteria + * @return + */ + @Cacheable(keyGenerator = "keyGenerator") + List queryAll(RoleQueryCriteria criteria); } 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 5fe40b5f..fd16c599 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 @@ -9,6 +9,9 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + /** * @author Zheng Jie * @date 2018-11-23 @@ -80,4 +83,9 @@ public interface UserService { @Cacheable(keyGenerator = "keyGenerator") Object queryAll(UserQueryCriteria criteria, Pageable pageable); + + @Cacheable(keyGenerator = "keyGenerator") + List queryAll(UserQueryCriteria criteria); + + void download(List queryAll, HttpServletResponse response); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index cc68febb..fdae7833 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -10,6 +10,7 @@ import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.mapper.RoleMapper; import me.zhengjie.modules.system.service.mapper.RoleSmallMapper; +import me.zhengjie.utils.FileUtil; import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.ValidationUtil; @@ -19,6 +20,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletResponse; import java.util.*; import java.util.stream.Collectors; @@ -44,6 +47,11 @@ public class RoleServiceImpl implements RoleService { return roleMapper.toDto(roleRepository.findAll(pageable).getContent()); } + @Override + public List queryAll(RoleQueryCriteria criteria) { + return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + @Override public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) { Page page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 8a951b38..eeb40847 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -1,14 +1,19 @@ 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.system.domain.User; import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityNotFoundException; import me.zhengjie.modules.system.repository.UserRepository; 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.UserQueryCriteria; import me.zhengjie.modules.system.service.mapper.UserMapper; +import me.zhengjie.utils.FileUtil; import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.ValidationUtil; @@ -18,8 +23,11 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.Optional; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; /** * @author Zheng Jie @@ -44,6 +52,12 @@ public class UserServiceImpl implements UserService { return PageUtil.toPage(page.map(userMapper::toDto)); } + @Override + public List queryAll(UserQueryCriteria criteria) { + List users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); + return userMapper.toDto(users); + } + @Override public UserDTO findById(long id) { Optional user = userRepository.findById(id); @@ -144,4 +158,25 @@ public class UserServiceImpl implements UserService { public void updateEmail(String username, String email) { userRepository.updateEmail(username,email); } + + @Override + public void download(List queryAll, HttpServletResponse response) { + List> 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); + } } diff --git a/eladmin-system/src/main/resources/logback.xml b/eladmin-system/src/main/resources/logback.xml index 5d7e59d8..ec1ccfa3 100644 --- a/eladmin-system/src/main/resources/logback.xml +++ b/eladmin-system/src/main/resources/logback.xml @@ -24,7 +24,8 @@ - + + diff --git a/pom.xml b/pom.xml index 0127ac16..c80bbf20 100644 --- a/pom.xml +++ b/pom.xml @@ -155,6 +155,11 @@ ip2region 1.7.2 + + org.apache.poi + poi + 3.17 +