포스트

정산

정산

요구사항

요구사항 더 캐묻기

  • 언제를 기준으로 정산을 해야 하는지?
  • 돈은 언제 보내주는가?
  • 정산 한 뒤, 취소 건이 발생하면 어떻게 처리할 것인지?
    • 다음 정산 때, 해당 금액을 제외하고 보내는 방법이 있음

API

정산 대상 적재 배치

  • 오전 1시 실행
1
POST /internal-batch/load-targets
  1. 시작 시간, 종료 시간을 기준으로 결제 엔티티(완료)를 조회 (페이징 처리)
  2. 주문id에 해당하는 결제id 매핑하여 Map으로 만들기
  3. 주문id에 해당하는 주문 항목 조회
  4. 주문 항목에 있는 상품id상품 판매처 매핑 엔티티 조회
  5. 위 데이터 기반으로 정산 대상 저장
  6. 위와 동일한 방식으로 결제 취소 건에 대한 처리 (금액은 음수로 저장)

정산 계산 배치

  • 오전 4시에 실행
1
POST /internal-batch/calculate
  1. 정산 일자 기준으로 정산 대상 테이블에서 판매처정산 일자 그룹핑으로 금액 합계 조회
  2. 수수료 등 계산
  3. 정산 준비 상태로 정산 엔티티 생성하여 저장

정산 입금 배치

  • 오전 9시에 실행
1
POST /internal-batch/transfer
  1. 정산 테이블에서 정산 준비 상태정산 데이터 조회
  2. 판매처 기준으로 매핑하여 Map으로 만들기
  3. 판매처 별 정산 금액 합산 (음수면 정산 X)
  4. 정산 외부 API 호출
  5. 정산 완료 상태로 변경

시간에 텀을 줌으로서 오류 발생 시 처리할 시간을 벌 수 있습니다.

개념도

  • 정산 대상결제취소를 기반으로 생성되므로 의존
  • 정산 대상주문 항목을 통해 상품id를 가져오므로 주문 항목에 의존
  • 정산정산 대상에만 의존

중간에 정산 대상 도메인을 만듦으로써 정산 로직의 변경은 최소화 할 수 있습니다.

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.