fix(original-series-calculate): 소지 유저별 정산 엑셀 시트 생성을 정리한다
This commit is contained in:
@@ -22,14 +22,14 @@ class AdminOriginalSeriesCalculateService(
|
||||
fun getSettlementDetails(
|
||||
startDateStr: String,
|
||||
endDateStr: String,
|
||||
memberId: Long,
|
||||
creatorId: Long,
|
||||
offset: Long,
|
||||
limit: Long
|
||||
): GetAdminOriginalSeriesSettlementDetailListResponse {
|
||||
val (startDate, endDate) = toDateRange(startDateStr, endDateStr)
|
||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, memberId)
|
||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, creatorId)
|
||||
val items = repository
|
||||
.getSettlementDetails(startDate, endDate, memberId, offset, limit)
|
||||
.getSettlementDetails(startDate, endDate, creatorId, offset, limit)
|
||||
.map { it.toResponse() }
|
||||
|
||||
return GetAdminOriginalSeriesSettlementDetailListResponse(totalCount, items)
|
||||
@@ -43,18 +43,16 @@ class AdminOriginalSeriesCalculateService(
|
||||
return StreamingResponseBody { outputStream ->
|
||||
val workbook = SXSSFWorkbook(100)
|
||||
try {
|
||||
if (owners.isEmpty()) {
|
||||
writeHeaders(workbook.createSheet("오리지널 시리즈 정산"))
|
||||
} else {
|
||||
if (owners.isNotEmpty()) {
|
||||
owners.forEach { owner ->
|
||||
val sheet = workbook.createSheet(toSheetName(owner))
|
||||
writeHeaders(sheet)
|
||||
|
||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.memberId)
|
||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.creatorId)
|
||||
val items = if (totalCount == 0) {
|
||||
emptyList()
|
||||
} else {
|
||||
repository.getSettlementDetails(startDate, endDate, owner.memberId, 0L, totalCount.toLong())
|
||||
repository.getSettlementDetails(startDate, endDate, owner.creatorId, 0L, totalCount.toLong())
|
||||
.map { it.toResponse() }
|
||||
}
|
||||
|
||||
@@ -92,7 +90,7 @@ class AdminOriginalSeriesCalculateService(
|
||||
}
|
||||
|
||||
private fun toSheetName(owner: GetAdminOriginalSeriesOwnerResponse): String {
|
||||
return WorkbookUtil.createSafeSheetName("${owner.memberId}_${owner.nickname}")
|
||||
return WorkbookUtil.createSafeSheetName(owner.nickname)
|
||||
}
|
||||
|
||||
private fun toDateRange(startDateStr: String, endDateStr: String): Pair<LocalDateTime, LocalDateTime> {
|
||||
|
||||
@@ -25,13 +25,13 @@ class AdminOriginalSeriesCalculateServiceTest {
|
||||
@Test
|
||||
@DisplayName("오리지널 시리즈 소지 유저 목록 조회는 리포지토리 결과를 반환한다")
|
||||
fun shouldReturnOriginalSeriesOwners() {
|
||||
val owners = listOf(GetAdminOriginalSeriesOwnerResponse(memberId = 1L, nickname = "owner-a"))
|
||||
val owners = listOf(GetAdminOriginalSeriesOwnerResponse(creatorId = 1L, nickname = "owner-a"))
|
||||
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners)
|
||||
|
||||
val result = service.getOriginalSeriesOwners()
|
||||
|
||||
assertEquals(1, result.size)
|
||||
assertEquals(1L, result[0].memberId)
|
||||
assertEquals(1L, result[0].creatorId)
|
||||
Mockito.verify(repository).getOriginalSeriesOwners()
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class AdminOriginalSeriesCalculateServiceTest {
|
||||
val result = service.getSettlementDetails(
|
||||
startDateStr = "2026-04-01",
|
||||
endDateStr = "2026-04-30",
|
||||
memberId = 9L,
|
||||
creatorId = 9L,
|
||||
offset = 0L,
|
||||
limit = 20L
|
||||
)
|
||||
@@ -96,8 +96,8 @@ class AdminOriginalSeriesCalculateServiceTest {
|
||||
@DisplayName("정산 엑셀 다운로드는 소지 유저별 시트를 생성한다")
|
||||
fun shouldCreateOneSheetPerOwnerForExcel() {
|
||||
val owners = listOf(
|
||||
GetAdminOriginalSeriesOwnerResponse(memberId = 1L, nickname = "owner-a"),
|
||||
GetAdminOriginalSeriesOwnerResponse(memberId = 2L, nickname = "owner-b")
|
||||
GetAdminOriginalSeriesOwnerResponse(creatorId = 1L, nickname = "owner-a"),
|
||||
GetAdminOriginalSeriesOwnerResponse(creatorId = 2L, nickname = "owner-b")
|
||||
)
|
||||
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners)
|
||||
Mockito.`when`(
|
||||
@@ -147,8 +147,8 @@ class AdminOriginalSeriesCalculateServiceTest {
|
||||
|
||||
XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook ->
|
||||
assertEquals(2, workbook.numberOfSheets)
|
||||
assertEquals("1_owner-a", workbook.getSheetAt(0).sheetName)
|
||||
assertEquals("2_owner-b", workbook.getSheetAt(1).sheetName)
|
||||
assertEquals("owner-a", workbook.getSheetAt(0).sheetName)
|
||||
assertEquals("owner-b", workbook.getSheetAt(1).sheetName)
|
||||
assertEquals("시리즈 제목", workbook.getSheetAt(0).getRow(0).getCell(0).stringCellValue)
|
||||
assertEquals("오리지널 시리즈", workbook.getSheetAt(0).getRow(1).getCell(0).stringCellValue)
|
||||
assertEquals("시리즈 제목", workbook.getSheetAt(1).getRow(0).getCell(0).stringCellValue)
|
||||
@@ -164,4 +164,23 @@ class AdminOriginalSeriesCalculateServiceTest {
|
||||
1L
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("소지 유저가 없으면 엑셀에 시트를 생성하지 않는다")
|
||||
fun shouldCreateWorkbookWithoutSheetsWhenNoOwners() {
|
||||
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(emptyList())
|
||||
|
||||
val response = service.downloadSettlementDetailsExcel(
|
||||
startDateStr = "2026-04-01",
|
||||
endDateStr = "2026-04-30"
|
||||
)
|
||||
val outputStream = ByteArrayOutputStream()
|
||||
response.writeTo(outputStream)
|
||||
|
||||
assertTrue(outputStream.toByteArray().isNotEmpty())
|
||||
|
||||
XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook ->
|
||||
assertEquals(0, workbook.numberOfSheets)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user