From 25df88d0ab9d7444ed1d162b9efa1259ac2f6f66 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 27 四月 2026 10:13:53 +0800
Subject: [PATCH] 小程序对接finish

---
 backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java |   97 ++++++++++++++++++++++++++++--------------------
 1 files changed, 57 insertions(+), 40 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 3314f48..8de75bd 100644
--- a/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java
+++ b/backend/src/main/java/com/sinata/appointment/service/AppointmentApplicationService.java
@@ -1,8 +1,6 @@
 package com.sinata.appointment.service;
 
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.ExcelWriter;
-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;
@@ -117,44 +115,42 @@
             String approvalStatus,
             String visitorKeyword,
             String visitReasonCode) {
-        try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
-            ExcelWriter writer = EasyExcel.write(bos, AppointmentAdminExportRow.class).build();
-            WriteSheet sheet = EasyExcel.writerSheet("预约记录").build();
-            long pageNo = 1L;
-            long pageSize = 200L;
-            while (true) {
-                Page<AppointmentOrder> orderPage = new Page<>(pageNo, pageSize);
-                IPage<AppointmentOrder> pagedOrders =
-                        appointmentOrderMapper.pageAdminOrders(
-                                orderPage,
-                                trimToNull(visitedUserName),
-                                visitedDeptId,
-                                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);
-                List<AppointmentAdminExportRow> rows =
-                        buildExportRows(
-                                orders,
-                                pageData.visitorRowsMap(),
-                                pageData.approvalInstanceMap(),
-                                pageData.reasonNameMap());
-                writer.write(rows, sheet);
-                if (pageNo * pageSize >= pagedOrders.getTotal()) {
-                    break;
-                }
-                pageNo++;
+        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,
+                            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;
             }
-            writer.finish();
+            AdminPageData pageData = loadAdminPageData(orders);
+            rows.addAll(
+                    buildExportRows(
+                            orders,
+                            pageData.visitorRowsMap(),
+                            pageData.approvalInstanceMap(),
+                            pageData.reasonNameMap()));
+            if (pageNo * pageSize >= pagedOrders.getTotal()) {
+                break;
+            }
+            pageNo++;
+        }
+        try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
+            EasyExcel.write(bos, AppointmentAdminExportRow.class).sheet("预约记录").doWrite(rows);
             return bos.toByteArray();
         } catch (Exception e) {
             return new byte[0];
@@ -188,7 +184,7 @@
         vo.setVisitedDeptName(defaultText(trimToNull(deptName)));
         vo.setAccessAreaText(defaultText(buildJsonNameText(order.getPassAccessAreaNames())));
         vo.setLocalUnitText(defaultText(buildJsonNameText(order.getPassLocalUnitNames())));
-        vo.setPlateNoText(defaultText(joinUniqueTexts(visitorRows, AppointmentVisitor::getPlateNo)));
+        vo.setPlateNoText(defaultText(loadOrderPlateText(id)));
         vo.setVisitReasonText(defaultText(buildVisitReasonText(order, reasonNameMap)));
         vo.setVisitStartText(defaultText(resolveVisitStartText(order)));
         vo.setVisitEndText(defaultText(resolveVisitEndText(order)));
@@ -294,6 +290,27 @@
         return result;
     }
 
+    private String loadOrderPlateText(Long orderId) {
+        if (orderId == null) {
+            return null;
+        }
+        List<AppointmentVehicle> rows =
+                appointmentVehicleMapper.selectList(
+                        new LambdaQueryWrapper<AppointmentVehicle>()
+                                .eq(AppointmentVehicle::getDelFlag, 0)
+                                .eq(AppointmentVehicle::getOrderId, orderId)
+                                .orderByAsc(AppointmentVehicle::getId));
+        if (rows == null || rows.isEmpty()) {
+            return null;
+        }
+        return rows.stream()
+                .map(AppointmentVehicle::getPlateNo)
+                .filter(StringUtils::hasText)
+                .map(String::trim)
+                .distinct()
+                .collect(Collectors.joining("、"));
+    }
+
     private Map<Long, List<AppointmentVisitor>> loadVisitorRows(List<Long> orderIds) {
         if (orderIds == null || orderIds.isEmpty()) {
             return Map.of();

--
Gitblit v1.7.1