fix(api): RegulatoryLimitChecker TODO 해소 — 실제 누적 합산 적용 (P1 보강 후속)
P1-1-c에서 TODO로 두었던 누적 수수료 합산을 ga-core의 신규 메서드로 교체. 기존 (BigDecimal.ZERO 반환 — 모든 결과 한도 미만): - sumPaidByContract() - sumFirstYearPaidByContract() 교체: - sumPaidByContract = recruit.sumByContract + maintain.sumByContract - sumFirstYearPaidByContract = recruit.sumFirstYearByContract (maintain은 1차년 개념 없음) - null-safe 헬퍼 추가 checkContractTotal / checkFirstYear가 이제 실제 누적값 기반 검증 동작.
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package com.ga.api.service.regulatory;
|
package com.ga.api.service.regulatory;
|
||||||
|
|
||||||
|
import com.ga.core.mapper.ledger.MaintainLedgerMapper;
|
||||||
|
import com.ga.core.mapper.ledger.RecruitLedgerMapper;
|
||||||
import com.ga.core.mapper.regulatory.RegulatoryLimitMapper;
|
import com.ga.core.mapper.regulatory.RegulatoryLimitMapper;
|
||||||
import com.ga.core.vo.regulatory.RegulatoryLimitVO;
|
import com.ga.core.vo.regulatory.RegulatoryLimitVO;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -18,13 +20,10 @@ public class RegulatoryLimitChecker {
|
|||||||
private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
private final RegulatoryLimitMapper limitMapper;
|
private final RegulatoryLimitMapper limitMapper;
|
||||||
|
private final RecruitLedgerMapper recruitLedgerMapper;
|
||||||
|
private final MaintainLedgerMapper maintainLedgerMapper;
|
||||||
|
|
||||||
/**
|
/** 누적 수수료율 한도 체크 (1200%). 신계약 + 유지 원장 합산. */
|
||||||
* 누적 수수료율 한도 체크 (1200%).
|
|
||||||
* NOTE [gap]: RecruitLedgerMapper에 sumByContract(contractId) 미존재.
|
|
||||||
* core-architect가 추가하면 sumPaidByContract 메서드 구현 완료 예정.
|
|
||||||
* 현재는 additionalAmount만으로 단순 비교 (currentTotal = 0 임시 처리).
|
|
||||||
*/
|
|
||||||
public ViolationResult checkContractTotal(Long contractId, BigDecimal additionalAmount, LocalDate baseDate) {
|
public ViolationResult checkContractTotal(Long contractId, BigDecimal additionalAmount, LocalDate baseDate) {
|
||||||
String baseDateStr = baseDate.format(DATE_FMT);
|
String baseDateStr = baseDate.format(DATE_FMT);
|
||||||
RegulatoryLimitVO limit = limitMapper.selectActiveByType(TOTAL_RATIO, null, baseDateStr);
|
RegulatoryLimitVO limit = limitMapper.selectActiveByType(TOTAL_RATIO, null, baseDateStr);
|
||||||
@@ -47,10 +46,7 @@ public class RegulatoryLimitChecker {
|
|||||||
return ViolationResult.ok(currentTotal, limit.getLimitValue(), TOTAL_RATIO);
|
return ViolationResult.ok(currentTotal, limit.getLimitValue(), TOTAL_RATIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** 1차년 수수료율 한도 체크. 신계약 원장 1차년도만 (유지는 1차년 개념 없음). */
|
||||||
* 1차년 수수료율 한도 체크.
|
|
||||||
* NOTE [gap]: 동일하게 sumByContract 부재로 currentTotal = 0 임시 처리.
|
|
||||||
*/
|
|
||||||
public ViolationResult checkFirstYear(Long contractId, BigDecimal additionalAmount, LocalDate baseDate) {
|
public ViolationResult checkFirstYear(Long contractId, BigDecimal additionalAmount, LocalDate baseDate) {
|
||||||
String baseDateStr = baseDate.format(DATE_FMT);
|
String baseDateStr = baseDate.format(DATE_FMT);
|
||||||
RegulatoryLimitVO limit = limitMapper.selectActiveByType(FIRST_YEAR_RATIO, null, baseDateStr);
|
RegulatoryLimitVO limit = limitMapper.selectActiveByType(FIRST_YEAR_RATIO, null, baseDateStr);
|
||||||
@@ -73,21 +69,17 @@ public class RegulatoryLimitChecker {
|
|||||||
return ViolationResult.ok(currentTotal, limit.getLimitValue(), FIRST_YEAR_RATIO);
|
return ViolationResult.ok(currentTotal, limit.getLimitValue(), FIRST_YEAR_RATIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* [gap] core-architect에게 RecruitLedgerMapper.sumByContract(Long contractId) 추가 요청 필요.
|
|
||||||
* 추가되면 아래 0 대신 실제 합산값으로 교체.
|
|
||||||
*/
|
|
||||||
private BigDecimal sumPaidByContract(Long contractId) {
|
private BigDecimal sumPaidByContract(Long contractId) {
|
||||||
// TODO: limitMapper 대신 recruitLedgerMapper.sumByContract(contractId) 사용 예정
|
BigDecimal recruit = recruitLedgerMapper.sumByContract(contractId);
|
||||||
return BigDecimal.ZERO;
|
BigDecimal maintain = maintainLedgerMapper.sumByContract(contractId);
|
||||||
|
return nullSafe(recruit).add(nullSafe(maintain));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* [gap] core-architect에게 RecruitLedgerMapper.sumFirstYearByContract(Long contractId) 추가 요청 필요.
|
|
||||||
* commissionYear = 1 조건 포함.
|
|
||||||
*/
|
|
||||||
private BigDecimal sumFirstYearPaidByContract(Long contractId) {
|
private BigDecimal sumFirstYearPaidByContract(Long contractId) {
|
||||||
// TODO: recruitLedgerMapper.sumFirstYearByContract(contractId) 사용 예정
|
return nullSafe(recruitLedgerMapper.sumFirstYearByContract(contractId));
|
||||||
return BigDecimal.ZERO;
|
}
|
||||||
|
|
||||||
|
private BigDecimal nullSafe(BigDecimal value) {
|
||||||
|
return value != null ? value : BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user