feat: P6 어댑터 PoC 보강 — Resp 노출 / phone 매핑 / 재시도 배치 / SDK 분기

1. WithdrawRequestResp / VO / Mapper.xml / 화면에 transfer_tx_id/transfer_status/transfer_at 노출
2. UserMapper.selectFirstActiveContactByRoleCode — step.roleCode → user.phone 1차 매핑
   - ApprovalService.sendStepNotification 이 실제 결재자 user_id/phone 사용 (기존 0L 하드코딩 해소)
   - phone 미확보 시 SMS skip (DB 알림은 유지)
3. 펌뱅킹 재시도 — WithdrawBankRetryService + POST /api/internal/bank-retry
   - WithdrawRequestMapper.selectFailedTransfers 추가
   - @EnableScheduling + cron 옵션(기본 비활성), app.bank-retry.limit
4. 어댑터 프로파일 분기 — @ConditionalOnProperty
   - app.adapter.bank: mock(기본) | kftc → KftcBankTransferAdapter 스켈레톤
   - app.adapter.message: mock(기본) | toast → ToastMessageAdapter 스켈레톤
   - 활성화 시 UnsupportedOperationException 명시
5. V83(menu_code 오기로 0건 적용) + V84(실제 WITHDRAW 메뉴에 EXECUTE 권한 보강)
This commit is contained in:
GA Pro
2026-05-24 02:45:13 +09:00
parent b04fa79840
commit 0e8c563a9a
20 changed files with 368 additions and 13 deletions
@@ -33,6 +33,9 @@ const COLUMNS: ColDef<WithdrawRequestRow>[] = [
},
{ field: 'requestedAt', headerName: '신청일', width: 120 },
{ field: 'completedAt', headerName: '완료일', width: 120 },
{ field: 'transferTxId', headerName: '펌뱅킹 거래ID', width: 200 },
{ field: 'transferStatus', headerName: '펌뱅킹 상태', width: 110 },
{ field: 'transferAt', headerName: '펌뱅킹 시각', width: 150 },
];
export default function WithdrawRequest() {