File tree Expand file tree Collapse file tree 3 files changed +39
-12
lines changed
src/main/kotlin/site/billilge/api/backend Expand file tree Collapse file tree 3 files changed +39
-12
lines changed Original file line number Diff line number Diff line change 11package site.billilge.api.backend.domain.payer.controller
22
33import io.swagger.v3.oas.annotations.Operation
4+ import io.swagger.v3.oas.annotations.media.Content
5+ import io.swagger.v3.oas.annotations.media.Schema
46import io.swagger.v3.oas.annotations.responses.ApiResponse
57import io.swagger.v3.oas.annotations.responses.ApiResponses
68import io.swagger.v3.oas.annotations.tags.Tag
9+ import org.springframework.core.io.InputStreamResource
710import org.springframework.http.ResponseEntity
811import org.springframework.web.bind.annotation.RequestBody
912import org.springframework.web.bind.annotation.RequestParam
@@ -62,4 +65,22 @@ interface AdminPayerApi {
6265 ]
6366 )
6467 fun deletePayers (@RequestBody request : PayerDeleteRequest ): ResponseEntity <Void >
68+
69+ @Operation(
70+ summary = " 학생회비 납부자 Excel 파일 다운로드" ,
71+ description = " 학생회비 납부자 데이터를 엑셀 파일로 다운받을 수 있는 관리자용 API"
72+ )
73+ @ApiResponses(
74+ value = [
75+ ApiResponse (
76+ responseCode = " 200" ,
77+ description = " 파일 다운로드 성공" ,
78+ content = [Content (
79+ mediaType = " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
80+ schema = Schema (type = " string" , format = " binary" )
81+ )]
82+ )
83+ ]
84+ )
85+ fun createPayerExcel (): ResponseEntity <InputStreamResource >
6586}
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package site.billilge.api.backend.domain.payer.controller
33import org.springframework.core.io.InputStreamResource
44import org.springframework.http.ContentDisposition
55import org.springframework.http.HttpHeaders
6+ import org.springframework.http.MediaType
67import org.springframework.http.ResponseEntity
78import org.springframework.web.bind.annotation.*
89import site.billilge.api.backend.domain.payer.dto.request.PayerDeleteRequest
@@ -42,7 +43,7 @@ class AdminPayerController(
4243 }
4344
4445 @GetMapping(" /excel" )
45- fun createPayerExcel (): ResponseEntity <InputStreamResource > {
46+ override fun createPayerExcel (): ResponseEntity <InputStreamResource > {
4647 val excel = payerService.createPayerExcel()
4748 val currentDate = LocalDate .now()
4849 val dateFormatter = DateTimeFormatter .ofPattern(" yyyyMMdd" )
@@ -51,9 +52,11 @@ class AdminPayerController(
5152 .filename(" kmusw_payers_${dateFormatter.format(currentDate)} .xlsx" )
5253 .build()
5354 }
55+ val excelMediaType = MediaType .valueOf(" application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )
5456
5557 return ResponseEntity .ok()
5658 .headers(headers)
59+ .contentType(excelMediaType)
5760 .body(InputStreamResource ((excel)))
5861 }
5962}
Original file line number Diff line number Diff line change @@ -17,18 +17,21 @@ class ExcelGenerator {
1717 ): ByteArrayInputStream {
1818 val workbook = SXSSFWorkbook ()
1919
20- sheetData.forEach { (sheetName, sheetContent) ->
21- val (headerTitles, rows) = sheetContent
22- val sheet = workbook.createSheet(sheetName)
23- styleHeaders(workbook, sheet, headerTitles)
24- fillData(sheet, rows, headerTitles.size)
25- }
26-
27- val out = ByteArrayOutputStream ()
28- workbook.write(out )
29- workbook.close()
20+ try {
21+ sheetData.forEach { (sheetName, sheetContent) ->
22+ val (headerTitles, rows) = sheetContent
23+ val sheet = workbook.createSheet(sheetName)
24+ styleHeaders(workbook, sheet, headerTitles)
25+ fillData(sheet, rows, headerTitles.size)
26+ }
3027
31- return ByteArrayInputStream (out .toByteArray())
28+ val out = ByteArrayOutputStream ()
29+ workbook.write(out )
30+ return ByteArrayInputStream (out .toByteArray())
31+ } finally {
32+ workbook.dispose()
33+ workbook.close()
34+ }
3235 }
3336
3437 private fun styleHeaders (workbook : SXSSFWorkbook , sheet : SXSSFSheet , headerTitles : Array <String >) {
You can’t perform that action at this time.
0 commit comments