From 5882ba8863d77fdcc168b176c3ffb30e8a20556a Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 13 七月 2026 17:54:25 +0800
Subject: [PATCH] 缩短二维码原始参数
---
backend/src/main/java/com/sinata/appointment/service/VisitorUserManageApplicationService.java | 66 +++++++++++++++++++++++++--------
1 files changed, 50 insertions(+), 16 deletions(-)
diff --git a/backend/src/main/java/com/sinata/appointment/service/VisitorUserManageApplicationService.java b/backend/src/main/java/com/sinata/appointment/service/VisitorUserManageApplicationService.java
index af0883c..261a561 100644
--- a/backend/src/main/java/com/sinata/appointment/service/VisitorUserManageApplicationService.java
+++ b/backend/src/main/java/com/sinata/appointment/service/VisitorUserManageApplicationService.java
@@ -1,6 +1,8 @@
package com.sinata.appointment.service;
+import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -20,7 +22,8 @@
import com.sinata.appointment.util.MobileMaskUtil;
import com.sinata.appointment.util.PhoneNormalize;
import com.sinata.appointment.util.UuidAssert;
-import java.io.ByteArrayOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -62,29 +65,60 @@
return result.convert(user -> toListVo(user, bookingCountMap));
}
- public byte[] exportExcel(
+ public void exportExcel(
+ HttpServletResponse response,
String userName,
String mobile,
String companyName,
LocalDate registerStartDate,
LocalDate registerEndDate,
- Integer status) {
- List<MpUser> users =
- mpUserMapper.selectList(
- buildVisitorQuery(
- userName, mobile, companyName, registerStartDate, registerEndDate, status));
- List<Long> userIds = users.stream().map(MpUser::getId).filter(Objects::nonNull).toList();
- Map<Long, Long> bookingCountMap = loadBookingCountMap(userIds);
- List<VisitorUserExportRow> rows =
- users.stream().map(user -> toExportRow(user, bookingCountMap)).toList();
- try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
- EasyExcel.write(bos, VisitorUserExportRow.class).sheet("访客信息").doWrite(rows);
- return bos.toByteArray();
- } catch (Exception e) {
- return new byte[0];
+ Integer status)
+ throws IOException {
+ prepareExcelResponse(response, "visitor-users.xlsx");
+ long pageNo = 1L;
+ long pageSize = 500L;
+ boolean wroteAnyPage = false;
+ try (ExcelWriter writer =
+ EasyExcel.write(response.getOutputStream(), VisitorUserExportRow.class).build()) {
+ WriteSheet sheet = EasyExcel.writerSheet("访客信息").build();
+ while (true) {
+ IPage<MpUser> page =
+ mpUserMapper.selectPage(
+ new Page<>(pageNo, pageSize),
+ buildVisitorQuery(
+ userName,
+ mobile,
+ companyName,
+ registerStartDate,
+ registerEndDate,
+ status));
+ List<MpUser> users = page.getRecords();
+ if (users == null || users.isEmpty()) {
+ break;
+ }
+ List<Long> userIds = users.stream().map(MpUser::getId).filter(Objects::nonNull).toList();
+ Map<Long, Long> bookingCountMap = loadBookingCountMap(userIds);
+ List<VisitorUserExportRow> rows =
+ users.stream().map(user -> toExportRow(user, bookingCountMap)).toList();
+ writer.write(rows, sheet);
+ wroteAnyPage = true;
+ if (pageNo * pageSize >= page.getTotal()) {
+ break;
+ }
+ pageNo++;
+ }
+ if (!wroteAnyPage) {
+ writer.write(List.of(), sheet);
+ }
}
}
+ private void prepareExcelResponse(HttpServletResponse response, String filename) {
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
+ }
+
public VisitorUserDetailVo detail(Long id, String uuid) {
MpUser user = loadVisitorUserWithUuid(id, uuid);
VisitorUserDetailVo vo = new VisitorUserDetailVo();
--
Gitblit v1.7.1