11package site.billilge.api.backend.domain.payer.service
22
3- import org.springframework.beans.factory.annotation.Value
4- import org.springframework.context.ApplicationEventPublisher
53import org.springframework.data.domain.PageRequest
64import org.springframework.data.domain.Sort
75import org.springframework.stereotype.Service
@@ -10,25 +8,25 @@ import site.billilge.api.backend.domain.member.entity.Member
108import site.billilge.api.backend.domain.member.repository.MemberRepository
119import site.billilge.api.backend.domain.payer.dto.request.PayerDeleteRequest
1210import site.billilge.api.backend.domain.payer.dto.request.PayerRequest
13- import site.billilge.api.backend.domain.payer.dto.response.PayerExcelFileResponse
1411import site.billilge.api.backend.domain.payer.dto.response.PayerFindAllResponse
1512import site.billilge.api.backend.domain.payer.dto.response.PayerSummary
1613import site.billilge.api.backend.domain.payer.entity.Payer
17- import site.billilge.api.backend.domain.payer.event.PayerAddEvent
18- import site.billilge.api.backend.domain.payer.event.PayerDeleteEvent
1914import site.billilge.api.backend.domain.payer.repository.PayerRepository
2015import site.billilge.api.backend.global.dto.PageableCondition
2116import site.billilge.api.backend.global.dto.SearchCondition
22- import java.time.LocalDate
17+ import site.billilge.api.backend.global.utils.ExcelGenerator
18+ import site.billilge.api.backend.global.utils.ExcelRow
19+ import java.io.ByteArrayInputStream
20+ import java.time.Year
2321
2422@Service
2523@Transactional(readOnly = true )
2624class PayerService (
27- private val publisher : ApplicationEventPublisher ,
2825 private val payerRepository : PayerRepository ,
26+
2927 private val memberRepository : MemberRepository ,
30- @Value( " \$ {cloud.aws.s3.base-url} " )
31- private val s3BaseUrl : String ,
28+
29+ private val excelGenerator : ExcelGenerator
3230) {
3331 fun isPayer (name : String , studentId : String ): Boolean {
3432 val enrollmentYear = studentId.substring(0 , 4 )
@@ -104,28 +102,35 @@ class PayerService(
104102 }
105103
106104 payerRepository.saveAll(newPayers)
107-
108- publisher.publishEvent(PayerAddEvent (newPayers.map { it.id }))
109105 }
110106
111107 @Transactional
112108 fun deletePayers (request : PayerDeleteRequest ) {
113109 val payerStudentIds = payerRepository.findAllByIds(request.payerIds)
114110 .mapNotNull { it.studentId }
115- .toList()
116111
117112 memberRepository.findAllByStudentIds(payerStudentIds)
118113 .forEach { member ->
119114 member.isFeePaid = false
120115 }
121116
122117 payerRepository.deleteAllById(request.payerIds)
123-
124- publisher.publishEvent(PayerDeleteEvent (request.payerIds))
125118 }
126119
127- fun getExcelFileUrl (): PayerExcelFileResponse {
128- val currentYear = LocalDate .now().year
129- return PayerExcelFileResponse (s3BaseUrl + " /payers/payer_${currentYear} .xlsx" )
120+ fun createPayerExcel (): ByteArrayInputStream {
121+ val startYear = 2015
122+ val currentYear = Year .now().value
123+ val headerTitles = arrayOf(" 이름" , " 학번" )
124+ val sheetData = mutableMapOf<String , Pair <Array <String >, List <ExcelRow >>>()
125+
126+ for (year in startYear.. currentYear) {
127+ val yearText = " $year "
128+ val payersByYearExcelRow = payerRepository.findAllByEnrollmentYear(yearText)
129+ .map { payer -> ExcelRow (payer.name, payer.studentId ? : " ${yearText} XXXX" ) }
130+
131+ sheetData.put(yearText, headerTitles to payersByYearExcelRow)
132+ }
133+
134+ return excelGenerator.generateByMultipleSheets(sheetData)
130135 }
131136}
0 commit comments