fix: [eaccount] 계좌 입출금내역 적요 중복 표시 수정

- BankTransaction::cleanSummary() 메서드 추가: 상대계좌예금주명(cast) 중복 제거
- parseTransactionLogs: 적요 표시 시 remark2 중복 제거 적용
- cacheApiTransactions: DB 저장 시에도 중복 제거 적용
- 기존 DB 데이터 45건 정리 완료
This commit is contained in:
김보곤
2026-03-03 21:11:35 +09:00
parent 9b36052a8f
commit 614cbaef15
2 changed files with 34 additions and 5 deletions

View File

@@ -562,8 +562,10 @@ private function parseTransactionLogs($resultData, string $defaultBankName = '',
$withdraw = (int) floatval($log->Withdraw ?? 0);
$balance = (int) floatval($log->Balance ?? 0);
$summary = $log->TransRemark1 ?? $log->Summary ?? '';
$remark2 = $log->TransRemark2 ?? '';
$cleanSummary = BankTransaction::cleanSummary($summary, $remark2);
$uniqueKey = implode('|', [$bankAccountNum, $transDT, $deposit, $withdraw, $balance, $summary]);
$uniqueKey = implode('|', [$bankAccountNum, $transDT, $deposit, $withdraw, $balance, $cleanSummary]);
$uniqueKeys[] = $uniqueKey;
}
@@ -596,15 +598,18 @@ private function parseTransactionLogs($resultData, string $defaultBankName = '',
$remark2 = $log->TransRemark2 ?? '';
$transType = $log->TransType ?? '';
// ★ 적요에서 상대계좌예금주명(remark2) 중복 제거
$cleanSummary = BankTransaction::cleanSummary($summary, $remark2);
$bankAccountNum = $log->BankAccountNum ?? '';
// 고유 키 생성하여 저장된 데이터와 매칭 (숫자는 정수로 변환하여 형식 통일)
$uniqueKey = implode('|', [$bankAccountNum, $transDT, (int) $deposit, (int) $withdraw, (int) $balance, $summary]);
$uniqueKey = implode('|', [$bankAccountNum, $transDT, (int) $deposit, (int) $withdraw, (int) $balance, $cleanSummary]);
$savedItem = $savedData?->get($uniqueKey);
$override = $overrides->get($uniqueKey);
// 원본 적요/내용 (remark2를 합산하지 않음 - 상대계좌예금주명 컬럼에서 별도 표시)
$originalSummary = $summary;
$originalSummary = $cleanSummary;
$originalCast = $savedItem?->cast ?? $remark2;
// 오버라이드 적용 (수정된 값이 있으면 사용)
@@ -850,6 +855,9 @@ private function cacheApiTransactions(int $tenantId, string $accNum, string $ban
$summary = $log->TransRemark1 ?? $log->Summary ?? '';
$remark2 = $log->TransRemark2 ?? '';
// ★ 적요에서 상대계좌예금주명(remark2) 중복 제거
$cleanSummary = BankTransaction::cleanSummary($summary, $remark2);
$rows[] = [
'tenant_id' => $tenantId,
'bank_account_num' => $log->BankAccountNum ?? $accNum,
@@ -861,7 +869,7 @@ private function cacheApiTransactions(int $tenantId, string $accNum, string $ban
'deposit' => $deposit,
'withdraw' => $withdraw,
'balance' => $balance,
'summary' => $summary,
'summary' => $cleanSummary,
'cast' => $remark2,
'memo' => $log->Memo ?? '',
'trans_office' => $log->TransOffice ?? '',

View File

@@ -49,19 +49,40 @@ public function tenant(): BelongsTo
return $this->belongsTo(Tenant::class);
}
/**
* 적요(summary)에서 상대계좌예금주명(cast/remark2) 중복 제거
* 바로빌 API 응답에서 TransRemark1에 TransRemark2가 포함되는 경우 정리
*/
public static function cleanSummary(string $summary, string $remark): string
{
if (empty($remark) || empty($summary) || ! str_contains($summary, $remark)) {
return $summary;
}
$result = rtrim($summary);
while (str_ends_with($result, $remark) && strlen($result) > strlen($remark)) {
$result = rtrim(substr($result, 0, -strlen($remark)));
}
return $result;
}
/**
* 거래 고유 키 생성 (매칭용)
* 숫자는 정수로 변환하여 형식 통일
*/
public function getUniqueKeyAttribute(): string
{
$cleanSummary = self::cleanSummary($this->summary ?? '', $this->cast ?? '');
return implode('|', [
$this->bank_account_num,
$this->trans_dt,
(int) $this->deposit,
(int) $this->withdraw,
(int) $this->balance,
$this->summary ?? '',
$cleanSummary,
]);
}