diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index 45ca95b9..cfcba3b1 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -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 ?? '', diff --git a/app/Models/Barobill/BankTransaction.php b/app/Models/Barobill/BankTransaction.php index 242491d3..bb054196 100644 --- a/app/Models/Barobill/BankTransaction.php +++ b/app/Models/Barobill/BankTransaction.php @@ -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, ]); }