정산
정산
요구사항
요구사항 더 캐묻기
- 언제를 기준으로 정산을 해야 하는지?
- 돈은 언제 보내주는가?
- 정산 한 뒤, 취소 건이 발생하면 어떻게 처리할 것인지?
- 다음 정산 때, 해당 금액을 제외하고 보내는 방법이 있음
API
정산 대상 적재 배치
- 오전 1시 실행
1
POST /internal-batch/load-targets
- 시작 시간, 종료 시간을 기준으로 결제 엔티티(완료)를 조회 (페이징 처리)
주문id에 해당하는결제id매핑하여Map으로 만들기주문id에 해당하는주문 항목조회주문 항목에 있는상품id로상품 판매처 매핑 엔티티조회- 위 데이터 기반으로
정산 대상저장 - 위와 동일한 방식으로
결제 취소건에 대한 처리 (금액은 음수로 저장)
정산 계산 배치
- 오전 4시에 실행
1
POST /internal-batch/calculate
- 정산 일자 기준으로
정산 대상 테이블에서판매처및정산 일자그룹핑으로금액 합계조회 - 수수료 등 계산
정산 준비상태로정산 엔티티생성하여 저장
정산 입금 배치
- 오전 9시에 실행
1
POST /internal-batch/transfer
정산 테이블에서정산 준비 상태인정산 데이터조회판매처기준으로 매핑하여Map으로 만들기판매처별 정산 금액 합산 (음수면 정산 X)- 정산 외부 API 호출
정산 완료 상태로 변경
시간에 텀을 줌으로서 오류 발생 시 처리할 시간을 벌 수 있습니다.
개념도
정산 대상은결제와취소를 기반으로 생성되므로 의존정산 대상은주문 항목을 통해상품id를 가져오므로주문 항목에 의존정산은정산 대상에만 의존
중간에
정산 대상도메인을 만듦으로써정산로직의 변경은 최소화 할 수 있습니다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

