fix(agent-calculate): 에이전트 기본 정산 비율을 7퍼센트로 조정한다

This commit is contained in:
2026-04-15 14:25:54 +09:00
parent 2c19e4b76c
commit f4347cc862
6 changed files with 86 additions and 20 deletions

View File

@@ -435,7 +435,7 @@ class AgentCalculateQueryRepository(
SELECT
COUNT(DISTINCT uc.id) AS count_value,
SUM(ucc.can) AS total_can,
COALESCE(asr.settlement_ratio, 10) AS agent_settlement_ratio
COALESCE(asr.settlement_ratio, 7) AS agent_settlement_ratio
FROM use_can_calculate ucc
INNER JOIN use_can uc ON ucc.use_can_id = uc.id
INNER JOIN member m ON m.id = ucc.recipient_creator_id
@@ -451,7 +451,7 @@ class AgentCalculateQueryRepository(
AND ucc.status = 'RECEIVED'
AND uc.created_at >= :startDate
AND uc.created_at <= :endDate
GROUP BY acr.id, asr.id, COALESCE(asr.settlement_ratio, 10)
GROUP BY acr.id, asr.id, COALESCE(asr.settlement_ratio, 7)
) grouped
""".trimIndent()
)
@@ -812,7 +812,7 @@ class AgentCalculateQueryRepository(
COUNT(uc.id) AS count_value,
SUM(uc.can + uc.reward_can) AS total_can,
COALESCE(csr.live_settlement_ratio, 70) AS settlement_ratio,
COALESCE(asr.settlement_ratio, 10) AS agent_settlement_ratio
COALESCE(asr.settlement_ratio, 7) AS agent_settlement_ratio
FROM use_can uc
INNER JOIN live_room lr ON uc.room_id = lr.id
INNER JOIN member m ON lr.member_id = m.id
@@ -828,7 +828,7 @@ class AgentCalculateQueryRepository(
WHERE uc.is_refund = FALSE
AND uc.created_at >= :startDate
AND uc.created_at <= :endDate
GROUP BY acr.id, asr.id, COALESCE(csr.live_settlement_ratio, 70), COALESCE(asr.settlement_ratio, 10)
GROUP BY acr.id, asr.id, COALESCE(csr.live_settlement_ratio, 70), COALESCE(asr.settlement_ratio, 7)
""".trimIndent()
private fun buildContentSettlementTotalSubQuery() = """
@@ -836,7 +836,7 @@ class AgentCalculateQueryRepository(
COUNT(o.id) AS count_value,
SUM(o.can) AS total_can,
COALESCE(COALESCE(c.settlement_ratio, csr.content_settlement_ratio), 70) AS settlement_ratio,
COALESCE(asr.settlement_ratio, 10) AS agent_settlement_ratio
COALESCE(asr.settlement_ratio, 7) AS agent_settlement_ratio
FROM orders o
INNER JOIN content c ON o.content_id = c.id
INNER JOIN member m ON c.member_id = m.id
@@ -857,7 +857,7 @@ class AgentCalculateQueryRepository(
asr.id,
COALESCE(c.settlement_ratio, csr.content_settlement_ratio),
COALESCE(COALESCE(c.settlement_ratio, csr.content_settlement_ratio), 70),
COALESCE(asr.settlement_ratio, 10)
COALESCE(asr.settlement_ratio, 7)
""".trimIndent()
private fun buildCommunitySettlementTotalSubQuery() = """
@@ -865,7 +865,7 @@ class AgentCalculateQueryRepository(
COUNT(uc.id) AS count_value,
SUM(uc.can + uc.reward_can) AS total_can,
COALESCE(csr.community_settlement_ratio, 70) AS settlement_ratio,
COALESCE(asr.settlement_ratio, 10) AS agent_settlement_ratio
COALESCE(asr.settlement_ratio, 7) AS agent_settlement_ratio
FROM use_can uc
INNER JOIN creator_community cc ON uc.creator_community_id = cc.id
INNER JOIN member m ON cc.member_id = m.id
@@ -882,7 +882,7 @@ class AgentCalculateQueryRepository(
AND uc.can_usage = 'PAID_COMMUNITY_POST'
AND uc.created_at >= :startDate
AND uc.created_at <= :endDate
GROUP BY acr.id, asr.id, COALESCE(csr.community_settlement_ratio, 70), COALESCE(asr.settlement_ratio, 10)
GROUP BY acr.id, asr.id, COALESCE(csr.community_settlement_ratio, 70), COALESCE(asr.settlement_ratio, 7)
""".trimIndent()
private fun buildContentDonationSettlementTotalSubQuery() = """
@@ -890,7 +890,7 @@ class AgentCalculateQueryRepository(
COUNT(uc.id) AS count_value,
SUM(uc.can + uc.reward_can) AS total_can,
70 AS settlement_ratio,
COALESCE(asr.settlement_ratio, 10) AS agent_settlement_ratio
COALESCE(asr.settlement_ratio, 7) AS agent_settlement_ratio
FROM use_can uc
INNER JOIN content c ON uc.content_id = c.id
INNER JOIN member m ON c.member_id = m.id
@@ -905,7 +905,7 @@ class AgentCalculateQueryRepository(
AND uc.can_usage = 'DONATION'
AND uc.created_at >= :startDate
AND uc.created_at <= :endDate
GROUP BY acr.id, asr.id, COALESCE(asr.settlement_ratio, 10)
GROUP BY acr.id, asr.id, COALESCE(asr.settlement_ratio, 7)
""".trimIndent()
private fun Any?.toIntValue(): Int {

View File

@@ -64,7 +64,7 @@ data class GetAgentChannelDonationSettlementByCreatorQueryData @QueryProjection
}
companion object {
private const val DEFAULT_AGENT_SETTLEMENT_RATIO = 10
private const val DEFAULT_AGENT_SETTLEMENT_RATIO = 7
}
}

View File

@@ -46,7 +46,7 @@ data class GetAgentCreatorSettlementSummaryQueryData @QueryProjection constructo
private val TAX_RATE = BigDecimal("0.033")
private val PERCENT_DIVISOR = BigDecimal("100")
private const val DEFAULT_SETTLEMENT_RATIO = 70
private const val DEFAULT_AGENT_SETTLEMENT_RATIO = 10
private const val DEFAULT_AGENT_SETTLEMENT_RATIO = 7
private fun calculateAgentSettlementAmount(settlementAmount: Int, agentSettlementRatio: Int): Int {
return BigDecimal(settlementAmount)

View File

@@ -380,6 +380,54 @@ class AgentCalculateQueryRepositoryTest @Autowired constructor(
assertEquals(kotlinTotal, dbTotal)
}
@Test
@DisplayName("에이전트 비율 이력이 없으면 콘텐츠 후원 응답은 7퍼센트 기본값으로 agent 정산금을 계산한다")
fun shouldApplySevenPercentDefaultAgentSettlementRatioToContentDonationWhenAgentRatioHistoryDoesNotExist() {
val agent = saveMember("agent-default-content-donation", MemberRole.AGENT)
val creator = saveMember("creator-default-content-donation", MemberRole.CREATOR)
val buyer = saveMember("buyer-default-content-donation", MemberRole.USER)
saveRelation(agent, creator)
val donationContent = saveAudioContent(creator, "content-default-agent-ratio", price = 0, settlementRatio = null)
saveContentDonationUseCan(buyer, donationContent, 20, LocalDateTime.of(2026, 2, 20, 10, 0, 0))
val response = service.getCalculateContentDonationByCreator("2026-02-20", "2026-02-20", agent.id!!, 0, 10)
assertGenericSettlementResponse(
response,
expectedCount = 1,
expectedTotalCan = 20,
expectedAgentSettlementAmount = calculateGenericAgentSettlementAmount(
totalCan = 20,
settlementRatio = 70,
agentSettlementRatio = 7
)
)
}
@Test
@DisplayName("에이전트 비율 이력이 없으면 채널후원 응답은 7퍼센트 기본값으로 agent 정산금을 계산한다")
fun shouldApplySevenPercentDefaultAgentSettlementRatioToChannelDonationWhenAgentRatioHistoryDoesNotExist() {
val agent = saveMember("agent-default-channel-donation", MemberRole.AGENT)
val creator = saveMember("creator-default-channel-donation", MemberRole.CREATOR)
val sender = saveMember("sender-default-channel-donation", MemberRole.USER)
saveRelation(agent, creator)
val channelDonation = saveChannelDonationUseCan(sender, 50, LocalDateTime.of(2026, 2, 20, 10, 0, 0))
saveUseCanCalculate(channelDonation, creator.id!!, 50, PaymentGateway.PG)
val response = service.getChannelDonationByCreator("2026-02-20", "2026-02-20", agent.id!!, 0, 10)
assertChannelDonationSettlementResponse(
response,
expectedCount = 1,
expectedTotalCan = 50,
expectedAgentSettlementAmount = calculateChannelAgentSettlementAmount(totalCan = 50, agentSettlementRatio = 7)
)
}
@Test
@DisplayName("페이지 대상 creator가 없으면 모든 카테고리 조회는 빈 rows를 반환한다")
fun shouldReturnEmptyRowsWhenPagedCreatorSelectionIsEmptyAcrossAllCategories() {

View File

@@ -358,7 +358,7 @@ class AgentCalculateServiceTest {
}
@Test
@DisplayName("에이전트 비율 이력이 없으면 일반 정산 응답은 10퍼센트 기본값으로 agent 정산금을 계산한다")
@DisplayName("에이전트 비율 이력이 없으면 일반 정산 응답은 7퍼센트 기본값으로 agent 정산금을 계산한다")
fun shouldApplyDefaultAgentSettlementRatioWhenAgentRatioHistoryDoesNotExist() {
val queryData = listOf(
GetAgentCreatorSettlementSummaryQueryData(
@@ -393,7 +393,7 @@ class AgentCalculateServiceTest {
settlementAmount = 1_308,
tax = 43,
depositAmount = 1_265,
agentSettlementAmount = 131
agentSettlementAmount = 92
)
)
Mockito.`when`(
@@ -416,8 +416,8 @@ class AgentCalculateServiceTest {
assertEquals(1, response.totalCount)
assertEquals(1_308, response.total.settlementAmount)
assertEquals(131, response.total.agentSettlementAmount)
assertEquals(131, response.items[0].agentSettlementAmount)
assertEquals(92, response.total.agentSettlementAmount)
assertEquals(92, response.items[0].agentSettlementAmount)
}
@Test
@@ -493,7 +493,7 @@ class AgentCalculateServiceTest {
}
@Test
@DisplayName("에이전트 비율 이력이 없으면 채널후원 응답은 10퍼센트 기본값으로 agent 정산금을 계산한다")
@DisplayName("에이전트 비율 이력이 없으면 채널후원 응답은 7퍼센트 기본값으로 agent 정산금을 계산한다")
fun shouldApplyDefaultAgentSettlementRatioToChannelDonationWhenAgentRatioHistoryDoesNotExist() {
val queryData = listOf(
GetAgentChannelDonationSettlementByCreatorQueryData(
@@ -527,7 +527,7 @@ class AgentCalculateServiceTest {
settlementAmount = 3_970,
withholdingTax = 131,
depositAmount = 3_839,
agentSettlementAmount = 397
agentSettlementAmount = 278
)
)
Mockito.`when`(
@@ -550,8 +550,8 @@ class AgentCalculateServiceTest {
assertEquals(1, response.totalCount)
assertEquals(3_970, response.total.settlementAmount)
assertEquals(397, response.total.agentSettlementAmount)
assertEquals(397, response.items[0].agentSettlementAmount)
assertEquals(278, response.total.agentSettlementAmount)
assertEquals(278, response.items[0].agentSettlementAmount)
}
@Test