From 3fcac334c71651a64e744670b865119877aee499 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 24 七月 2026 14:33:58 +0800
Subject: [PATCH] update

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java |  142 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 142 insertions(+), 0 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java
index 2341047..0459fc0 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java
@@ -14,11 +14,24 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.List;
 
 /**
  * 管理侧访客记录接口
@@ -60,6 +73,135 @@
     }
 
     /**
+     * 导出访客记录
+     */
+    @ApiOperation(
+            value = "导出访客记录",
+            notes = "按分页查询接口的筛选条件查询全部访客记录并导出 Excel,不进行分页"
+    )
+    @PostMapping("/export")
+    public void export(HttpServletResponse response,
+                       @RequestBody(required = false) SysVisitorRecordPageRequest request) throws IOException
+    {
+        List<SysVisitorRecordVO> records = visitorRecordService.list(request);
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        String fileName = URLEncoder.encode("访客记录", "UTF-8").replace("+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+
+        SXSSFWorkbook workbook = new SXSSFWorkbook(500);
+        try
+        {
+            writeVisitorRecordSheet(workbook, records);
+            workbook.write(response.getOutputStream());
+            response.flushBuffer();
+        }
+        finally
+        {
+            workbook.dispose();
+            workbook.close();
+        }
+    }
+
+    private void writeVisitorRecordSheet(SXSSFWorkbook workbook, List<SysVisitorRecordVO> records)
+    {
+        String[] headers = {
+                "登记编号", "访客姓名", "证件号码", "登记类型", "被访人", "被访部门", "访问区域",
+                "车牌号", "来访事由", "有效期开始时间", "有效期结束时间", "状态", "登记时间"
+        };
+        int[] columnWidths = {20, 16, 24, 16, 16, 20, 24, 16, 24, 22, 22, 20, 22};
+        Sheet sheet = workbook.createSheet("访客记录");
+        sheet.createFreezePane(0, 1);
+        CellStyle headerStyle = createHeaderStyle(workbook);
+        Row headerRow = sheet.createRow(0);
+        for (int index = 0; index < headers.length; index++)
+        {
+            Cell cell = headerRow.createCell(index);
+            cell.setCellValue(headers[index]);
+            cell.setCellStyle(headerStyle);
+            sheet.setColumnWidth(index, columnWidths[index] * 256);
+        }
+
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        for (int index = 0; index < records.size(); index++)
+        {
+            SysVisitorRecordVO record = records.get(index);
+            Row row = sheet.createRow(index + 1);
+            setCellValue(row, 0, record.getRegisterNo());
+            setCellValue(row, 1, record.getVisitorName());
+            setCellValue(row, 2, record.getIdCard());
+            setCellValue(row, 3, registerTypeName(record.getRegisterType()));
+            setCellValue(row, 4, record.getIntervieweeName());
+            setCellValue(row, 5, record.getIntervieweeDept());
+            setCellValue(row, 6, record.getVisitAreaNames());
+            setCellValue(row, 7, record.getPlateNo());
+            setCellValue(row, 8, record.getVisitReason());
+            setCellValue(row, 9, formatDate(dateFormat, record.getValidStartTime()));
+            setCellValue(row, 10, formatDate(dateFormat, record.getValidEndTime()));
+            setCellValue(row, 11, statusName(record.getStatus()));
+            setCellValue(row, 12, formatDate(dateFormat, record.getRegisterTime()));
+        }
+    }
+
+    private CellStyle createHeaderStyle(SXSSFWorkbook workbook)
+    {
+        Font font = workbook.createFont();
+        font.setBold(true);
+        CellStyle style = workbook.createCellStyle();
+        style.setFont(font);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        return style;
+    }
+
+    private void setCellValue(Row row, int columnIndex, String value)
+    {
+        row.createCell(columnIndex).setCellValue(value == null ? "" : value);
+    }
+
+    private String formatDate(SimpleDateFormat dateFormat, java.util.Date date)
+    {
+        return date == null ? "" : dateFormat.format(date);
+    }
+
+    private String registerTypeName(String registerType)
+    {
+        if ("APPOINTMENT".equalsIgnoreCase(registerType))
+        {
+            return "预约登记";
+        }
+        if ("ONSITE".equalsIgnoreCase(registerType))
+        {
+            return "现场登记";
+        }
+        return registerType;
+    }
+
+    private String statusName(String status)
+    {
+        if ("VISITING".equalsIgnoreCase(status))
+        {
+            return "来访中";
+        }
+        if ("SIGNED_OUT".equalsIgnoreCase(status))
+        {
+            return "已签离";
+        }
+        if ("PENDING_CONFIRM".equalsIgnoreCase(status))
+        {
+            return "逾期滞留";
+        }
+        if ("OVERDUE_AUTO_SIGNED_OUT".equalsIgnoreCase(status))
+        {
+            return "超期自动签离";
+        }
+        if ("CANCELLED".equalsIgnoreCase(status))
+        {
+            return "已取消";
+        }
+        return status;
+    }
+
+    /**
      * 查询访客记录详情
      */
     @ApiOperation(

--
Gitblit v1.7.1