Skip to content

Commit e6146cb

Browse files
committed
新增后端带条件导出功能(示例见用户管理控制器)
1 parent e775de1 commit e6146cb

File tree

9 files changed

+114
-4
lines changed

9 files changed

+114
-4
lines changed

eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package me.zhengjie.utils;
22

3+
import cn.hutool.core.io.IoUtil;
34
import cn.hutool.core.util.IdUtil;
5+
import cn.hutool.poi.excel.ExcelUtil;
6+
import cn.hutool.poi.excel.ExcelWriter;
47
import org.springframework.web.multipart.MultipartFile;
58

9+
import javax.servlet.ServletOutputStream;
10+
import javax.servlet.http.HttpServletResponse;
611
import java.io.*;
712
import java.text.DecimalFormat;
13+
import java.util.List;
14+
import java.util.Map;
815

916
/**
1017
* File工具类,扩展 hutool 工具包
@@ -139,4 +146,32 @@ public static File inputStreamToFile(InputStream ins, String name) throws Except
139146
ins.close();
140147
return file;
141148
}
149+
150+
/**
151+
* 导出excel
152+
* @param list
153+
* @return
154+
* @throws Exception
155+
*/
156+
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response){
157+
// 通过工具类创建writer
158+
ExcelWriter writer = ExcelUtil.getWriter();
159+
// 一次性写出内容,使用默认样式,强制输出标题
160+
writer.write(list, true);
161+
//response为HttpServletResponse对象
162+
response.setContentType("application/vnd.ms-excel;charset=utf-8");
163+
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
164+
response.setHeader("Content-Disposition","attachment;filename=file.xls");
165+
ServletOutputStream out= null;
166+
try {
167+
out = response.getOutputStream();
168+
} catch (IOException e) {
169+
e.printStackTrace();
170+
}
171+
writer.flush(out, true);
172+
// 关闭writer,释放内存
173+
writer.close();
174+
//此处记得关闭输出Servlet流
175+
IoUtil.close(out);
176+
}
142177
}

eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import me.zhengjie.modules.system.domain.Role;
66
import me.zhengjie.exception.BadRequestException;
77
import me.zhengjie.modules.system.service.RoleService;
8-
import me.zhengjie.modules.system.service.dto.MenuQueryCriteria;
98
import me.zhengjie.modules.system.service.dto.RoleQueryCriteria;
109
import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
1110
import me.zhengjie.utils.SecurityUtils;

eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.validation.annotation.Validated;
2727
import org.springframework.web.bind.annotation.*;
2828
import org.springframework.web.multipart.MultipartFile;
29+
import javax.servlet.http.HttpServletResponse;
2930
import java.util.*;
3031
import java.util.stream.Collectors;
3132

@@ -55,6 +56,13 @@ public class UserController {
5556
@Autowired
5657
private VerificationCodeService verificationCodeService;
5758

59+
@Log("导出用户数据")
60+
@GetMapping(value = "/users/download")
61+
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')")
62+
public void update(HttpServletResponse response, UserQueryCriteria criteria){
63+
userService.download(userService.queryAll(criteria), response);
64+
}
65+
5866
@Log("查询用户")
5967
@GetMapping(value = "/users")
6068
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')")

eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.springframework.cache.annotation.Cacheable;
1111
import org.springframework.data.domain.Pageable;
1212

13+
import javax.servlet.http.HttpServletResponse;
1314
import java.util.List;
1415
import java.util.Set;
1516

@@ -86,6 +87,7 @@ public interface RoleService {
8687
* @param pageable
8788
* @return
8889
*/
90+
@Cacheable(keyGenerator = "keyGenerator")
8991
Object queryAll(Pageable pageable);
9092

9193
/**
@@ -94,5 +96,14 @@ public interface RoleService {
9496
* @param criteria
9597
* @return
9698
*/
99+
@Cacheable(keyGenerator = "keyGenerator")
97100
Object queryAll(RoleQueryCriteria criteria, Pageable pageable);
101+
102+
/**
103+
* queryAll
104+
* @param criteria
105+
* @return
106+
*/
107+
@Cacheable(keyGenerator = "keyGenerator")
108+
List<RoleDTO> queryAll(RoleQueryCriteria criteria);
98109
}

eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import org.springframework.cache.annotation.Cacheable;
1010
import org.springframework.data.domain.Pageable;
1111

12+
import javax.servlet.http.HttpServletResponse;
13+
import java.util.List;
14+
1215
/**
1316
* @author Zheng Jie
1417
* @date 2018-11-23
@@ -80,4 +83,9 @@ public interface UserService {
8083

8184
@Cacheable(keyGenerator = "keyGenerator")
8285
Object queryAll(UserQueryCriteria criteria, Pageable pageable);
86+
87+
@Cacheable(keyGenerator = "keyGenerator")
88+
List<UserDTO> queryAll(UserQueryCriteria criteria);
89+
90+
void download(List<UserDTO> queryAll, HttpServletResponse response);
8391
}

eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
1111
import me.zhengjie.modules.system.service.mapper.RoleMapper;
1212
import me.zhengjie.modules.system.service.mapper.RoleSmallMapper;
13+
import me.zhengjie.utils.FileUtil;
1314
import me.zhengjie.utils.PageUtil;
1415
import me.zhengjie.utils.QueryHelp;
1516
import me.zhengjie.utils.ValidationUtil;
@@ -19,6 +20,8 @@
1920
import org.springframework.stereotype.Service;
2021
import org.springframework.transaction.annotation.Propagation;
2122
import org.springframework.transaction.annotation.Transactional;
23+
24+
import javax.servlet.http.HttpServletResponse;
2225
import java.util.*;
2326
import java.util.stream.Collectors;
2427

@@ -44,6 +47,11 @@ public Object queryAll(Pageable pageable) {
4447
return roleMapper.toDto(roleRepository.findAll(pageable).getContent());
4548
}
4649

50+
@Override
51+
public List<RoleDTO> queryAll(RoleQueryCriteria criteria) {
52+
return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
53+
}
54+
4755
@Override
4856
public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) {
4957
Page<Role> page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);

eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
package me.zhengjie.modules.system.service.impl;
22

3+
import cn.hutool.core.io.IoUtil;
4+
import cn.hutool.poi.excel.ExcelUtil;
5+
import cn.hutool.poi.excel.ExcelWriter;
36
import me.zhengjie.modules.monitor.service.RedisService;
47
import me.zhengjie.modules.system.domain.User;
58
import me.zhengjie.exception.EntityExistException;
69
import me.zhengjie.exception.EntityNotFoundException;
710
import me.zhengjie.modules.system.repository.UserRepository;
811
import me.zhengjie.modules.system.service.UserService;
12+
import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
913
import me.zhengjie.modules.system.service.dto.UserDTO;
1014
import me.zhengjie.modules.system.service.dto.UserQueryCriteria;
1115
import me.zhengjie.modules.system.service.mapper.UserMapper;
16+
import me.zhengjie.utils.FileUtil;
1217
import me.zhengjie.utils.PageUtil;
1318
import me.zhengjie.utils.QueryHelp;
1419
import me.zhengjie.utils.ValidationUtil;
@@ -18,8 +23,11 @@
1823
import org.springframework.stereotype.Service;
1924
import org.springframework.transaction.annotation.Propagation;
2025
import org.springframework.transaction.annotation.Transactional;
21-
import java.util.Date;
22-
import java.util.Optional;
26+
import javax.servlet.ServletOutputStream;
27+
import javax.servlet.http.HttpServletResponse;
28+
import java.io.IOException;
29+
import java.util.*;
30+
import java.util.stream.Collectors;
2331

2432
/**
2533
* @author Zheng Jie
@@ -44,6 +52,12 @@ public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
4452
return PageUtil.toPage(page.map(userMapper::toDto));
4553
}
4654

55+
@Override
56+
public List<UserDTO> queryAll(UserQueryCriteria criteria) {
57+
List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
58+
return userMapper.toDto(users);
59+
}
60+
4761
@Override
4862
public UserDTO findById(long id) {
4963
Optional<User> user = userRepository.findById(id);
@@ -144,4 +158,25 @@ public void updateAvatar(String username, String url) {
144158
public void updateEmail(String username, String email) {
145159
userRepository.updateEmail(username,email);
146160
}
161+
162+
@Override
163+
public void download(List<UserDTO> queryAll, HttpServletResponse response) {
164+
List<Map<String, Object>> list = new ArrayList<>();
165+
for (UserDTO userDTO : queryAll) {
166+
List roles = userDTO.getRoles().stream().map(RoleSmallDTO::getName).collect(Collectors.toList());
167+
Map map = new LinkedHashMap();
168+
map.put("用户名", userDTO.getUsername());
169+
map.put("头像", userDTO.getAvatar());
170+
map.put("邮箱", userDTO.getEmail());
171+
map.put("状态", userDTO.getEnabled() ? "启用" : "禁用");
172+
map.put("手机号码", userDTO.getPhone());
173+
map.put("角色", roles);
174+
map.put("部门", userDTO.getDept().getName());
175+
map.put("岗位", userDTO.getJob().getName());
176+
map.put("最后修改密码的时间", userDTO.getLastPasswordResetTime());
177+
map.put("创建日期", userDTO.getCreateTime());
178+
list.add(map);
179+
}
180+
FileUtil.downloadExcel(list, response);
181+
}
147182
}

eladmin-system/src/main/resources/logback.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
<appender-ref ref="console" />
2525
</logger>
2626

27-
<logger name="jdbc.resultsettable" level="INFO" additivity="false">
27+
<!-- 如想看到表格数据,将OFF改为INFO -->
28+
<logger name="jdbc.resultsettable" level="OFF" additivity="false">
2829
<appender-ref ref="console" />
2930
</logger>
3031

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@
155155
<artifactId>ip2region</artifactId>
156156
<version>1.7.2</version>
157157
</dependency>
158+
<dependency>
159+
<groupId>org.apache.poi</groupId>
160+
<artifactId>poi</artifactId>
161+
<version>3.17</version>
162+
</dependency>
158163

159164
<!-- fastjson -->
160165
<dependency>

0 commit comments

Comments
 (0)