From 858f515995fd1dca7cf825069ce38c32703298d0 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 07 十一月 2025 14:14:50 +0800
Subject: [PATCH] 报名人员导出

---
 backend/src/main/java/com/rongyichuang/player/api/PlayerExportController.java |   63 +++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/backend/src/main/java/com/rongyichuang/player/api/PlayerExportController.java b/backend/src/main/java/com/rongyichuang/player/api/PlayerExportController.java
new file mode 100644
index 0000000..146273c
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/player/api/PlayerExportController.java
@@ -0,0 +1,63 @@
+package com.rongyichuang.player.api;
+
+import com.rongyichuang.player.service.PlayerApplicationService;
+import jakarta.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+@RestController
+@RequestMapping("/player/export")
+public class PlayerExportController {
+
+    private static final Logger log = LoggerFactory.getLogger(PlayerExportController.class);
+
+    private final PlayerApplicationService playerApplicationService;
+
+    public PlayerExportController(PlayerApplicationService playerApplicationService) {
+        this.playerApplicationService = playerApplicationService;
+    }
+
+    /**
+     * 瀵煎嚭姣旇禌鎶ュ悕浜哄憳Excel
+     */
+    @GetMapping("/applications")
+    public void exportApplications(
+            @RequestParam(required = false) String name,
+            @RequestParam(required = false) Long activityId,
+            @RequestParam(required = false) Integer state,
+            HttpServletResponse response) {
+        try {
+            log.info("瀵煎嚭姣旇禌鎶ュ悕浜哄憳Excel, name: {}, activityId: {}, state: {}", name, activityId, state);
+            
+            // 鑾峰彇Excel鏁版嵁
+            byte[] excelData = playerApplicationService.exportApplicationsToExcel(name, activityId, state);
+            
+            // 璁剧疆鍝嶅簲澶�
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            String fileName = "鎶ュ悕浜哄憳_" + System.currentTimeMillis() + ".xlsx";
+            String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + encodedFileName);
+            response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION);
+            response.setContentLength(excelData.length);
+            
+            // 鍐欏叆鍝嶅簲
+            response.getOutputStream().write(excelData);
+            response.getOutputStream().flush();
+        } catch (Exception e) {
+            log.error("瀵煎嚭姣旇禌鎶ュ悕浜哄憳Excel澶辫触", e);
+            try {
+                response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                response.getWriter().write("瀵煎嚭澶辫触: " + e.getMessage());
+            } catch (IOException ioException) {
+                log.error("鍐欏叆閿欒鍝嶅簲澶辫触", ioException);
+            }
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.8.0