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/AppointmentApplicationService.java | 99 +++++++++++++++++++++++++++++--------------------
1 files changed, 58 insertions(+), 41 deletions(-)
diff --git a/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java b/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java
index 9f318ca..f2d6deb 100644
--- a/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java
+++ b/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java
@@ -38,7 +38,10 @@
import com.sinata.appointment.util.MobileMaskUtil;
import com.sinata.appointment.util.SensitiveDataUtil;
import com.sinata.appointment.util.UuidAssert;
-import java.io.ByteArrayOutputStream;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -110,7 +113,8 @@
return buildAdminPage(pagedOrders);
}
- public byte[] exportExcel(
+ public void exportExcel(
+ HttpServletResponse response,
String visitedUserName,
Long visitedDeptId,
Long accessAreaId,
@@ -121,49 +125,60 @@
String displayStatus,
String approvalStatus,
String visitorKeyword,
- String visitReasonCode) {
+ String visitReasonCode)
+ throws IOException {
+ prepareExcelResponse(response, "appointments.xlsx");
List<Long> accessAreaIds = resolveAccessAreaFilterIds(accessAreaId);
long pageNo = 1L;
long pageSize = 200L;
- List<AppointmentAdminExportRow> rows = new ArrayList<>();
- while (true) {
- Page<AppointmentOrder> orderPage = new Page<>(pageNo, pageSize);
- IPage<AppointmentOrder> pagedOrders =
- appointmentOrderMapper.pageAdminOrders(
- orderPage,
- trimToNull(visitedUserName),
- visitedDeptId,
- accessAreaIds,
- trimToNull(accessArea),
- trimToNull(localUnit),
- visitDateStart,
- visitDateEnd,
- trimToNull(displayStatus),
- trimToNull(approvalStatus),
- trimToNull(visitorKeyword),
- trimToNull(visitReasonCode));
- List<AppointmentOrder> orders = pagedOrders.getRecords();
- if (orders == null || orders.isEmpty()) {
- break;
+ boolean wroteAnyPage = false;
+ try (ExcelWriter writer =
+ EasyExcel.write(response.getOutputStream(), AppointmentAdminExportRow.class).build()) {
+ WriteSheet sheet = EasyExcel.writerSheet("预约记录").build();
+ while (true) {
+ Page<AppointmentOrder> orderPage = new Page<>(pageNo, pageSize);
+ IPage<AppointmentOrder> pagedOrders =
+ appointmentOrderMapper.pageAdminOrders(
+ orderPage,
+ trimToNull(visitedUserName),
+ visitedDeptId,
+ accessAreaIds,
+ trimToNull(accessArea),
+ trimToNull(localUnit),
+ visitDateStart,
+ visitDateEnd,
+ trimToNull(displayStatus),
+ trimToNull(approvalStatus),
+ trimToNull(visitorKeyword),
+ trimToNull(visitReasonCode));
+ List<AppointmentOrder> orders = pagedOrders.getRecords();
+ if (orders == null || orders.isEmpty()) {
+ break;
+ }
+ AdminPageData pageData = loadAdminPageData(orders);
+ writer.write(
+ buildExportRows(
+ orders,
+ pageData.visitorRowsMap(),
+ pageData.approvalInstanceMap(),
+ pageData.reasonNameMap()),
+ sheet);
+ wroteAnyPage = true;
+ if (pageNo * pageSize >= pagedOrders.getTotal()) {
+ break;
+ }
+ pageNo++;
}
- AdminPageData pageData = loadAdminPageData(orders);
- rows.addAll(
- buildExportRows(
- orders,
- pageData.visitorRowsMap(),
- pageData.approvalInstanceMap(),
- pageData.reasonNameMap()));
- if (pageNo * pageSize >= pagedOrders.getTotal()) {
- break;
+ if (!wroteAnyPage) {
+ writer.write(List.of(), sheet);
}
- pageNo++;
}
- try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
- EasyExcel.write(bos, AppointmentAdminExportRow.class).sheet("预约记录").doWrite(rows);
- return bos.toByteArray();
- } catch (Exception e) {
- return new byte[0];
- }
+ }
+
+ 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 AppointmentOrder getById(Long id, String uuid) {
@@ -196,6 +211,7 @@
vo.setLocalUnitText(defaultText(buildJsonNameText(order.getPassLocalUnitNames())));
vo.setPlateNoText(defaultText(loadOrderPlateText(id)));
vo.setVisitReasonText(defaultText(buildVisitReasonText(order, reasonNameMap)));
+ vo.setVisitReasonOther(defaultText(trimToNull(order.getVisitReasonOther())));
vo.setVisitTimeMode(trimToNull(order.getVisitTimeMode()));
vo.setVisitTimeSlot(trimToNull(order.getVisitTimeSlot()));
vo.setVisitStartText(defaultText(resolveVisitStartText(order)));
@@ -471,6 +487,7 @@
vo.setLocalUnitText(defaultText(buildJsonNameText(order.getPassLocalUnitNames())));
vo.setPlateNoText(defaultText(firstNonBlank(orderPlateText, joinUniqueTexts(visitorRows, AppointmentVisitor::getPlateNo), null)));
vo.setVisitReasonText(defaultText(buildVisitReasonText(order, reasonNameMap)));
+ vo.setVisitReasonOther(defaultText(trimToNull(order.getVisitReasonOther())));
vo.setVisitTimeText(defaultText(buildVisitTimeText(order)));
vo.setVisitorNamesText(defaultText(joinUniqueTexts(visitorRows, AppointmentVisitor::getName)));
vo.setStatus(order.getStatus());
@@ -545,6 +562,7 @@
row.setLocalUnitText(summary.getLocalUnitText());
row.setPlateNoText(defaultText(summary.getPlateNoText()));
row.setVisitReasonText(summary.getVisitReasonText());
+ row.setVisitReasonOther(summary.getVisitReasonOther());
row.setVisitTimeText(summary.getVisitTimeText());
row.setDisplayStatusText(summary.getDisplayStatusText());
MpVisitor visitor = visitorRow == null ? null : visitorMap.get(visitorRow.getMpVisitorId());
@@ -787,8 +805,7 @@
return null;
}
if ("OTHER".equalsIgnoreCase(code)) {
- String other = trimToNull(row.getVisitReasonOther());
- return StringUtils.hasText(other) ? other : "其他";
+ return "其他";
}
String reasonName = reasonNameMap.get(code);
return StringUtils.hasText(reasonName) ? reasonName : code;
--
Gitblit v1.7.1