From 3ee306e4a8db75680960f5eb4eec9fb7d05b5f29 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期五, 24 七月 2026 16:21:54 +0800
Subject: [PATCH] Merge branch 'master' into electron_dev
---
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordManageController.java | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 169 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 d9dacb0..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
@@ -5,18 +5,33 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.dto.SysVisitorRecordDetailRequest;
import com.ruoyi.system.dto.SysVisitorRecordPageRequest;
+import com.ruoyi.system.service.ISysVersionUpdateService;
import com.ruoyi.system.service.ISysVisitorRecordService;
+import com.ruoyi.system.vo.SysVersionUpdateVO;
import com.ruoyi.system.vo.SysVisitorRecordDetailVO;
import com.ruoyi.system.vo.SysVisitorRecordVO;
import io.swagger.annotations.Api;
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;
/**
* 管理侧访客记录接口
@@ -30,6 +45,9 @@
{
@Autowired
private ISysVisitorRecordService visitorRecordService;
+
+ @Autowired
+ private ISysVersionUpdateService versionUpdateService;
/**
* 分页查询访客记录
@@ -55,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(
@@ -75,4 +222,26 @@
{
return success(visitorRecordService.detail(request));
}
+
+ /**
+ * 获取最新版本信息
+ */
+ @ApiOperation(
+ value = "获取最新版本信息",
+ notes = "返回最新一条未删除的版本更新记录",
+ response = SysVersionUpdateVO.class
+ )
+ @ApiResponses({
+ @ApiResponse(
+ code = 200,
+ message = "成功",
+ response = AjaxResult.class,
+ responseContainer = "Data"
+ )
+ })
+ @PostMapping("/latestVersion")
+ public AjaxResult<SysVersionUpdateVO> latestVersion()
+ {
+ return success(versionUpdateService.latest());
+ }
}
--
Gitblit v1.7.1