db = \Config\Database::connect(); helper('log'); } /** * 추상 메서드: 매핑 로직 구현 */ abstract public function map(string $articleNumber, array $rawData, array $payload): array; /** * 소유자 타입 코드 변환 */ protected function mapOwnerTypeCode(?string $ownerTypeCodeRaw): ?int { return match($ownerTypeCodeRaw) { "INDIV" => 0, "CORP" => 1, "FRGNR" => 2, "DELEG" => 3, default => null, }; } /** * 거래 유형 변환 */ protected function mapTradeType(?string $tradeType): ?string { return match(trim($tradeType ?? '')) { '매매' => 'A1', '전세' => 'B1', '월세' => 'B2', '단기임대' => 'B3', default => null, }; } /** * 파일 배열 추출 (save_yn 플래그 포함) */ public function extractFilesByType(array $files): array { $certRegister = []; $confirmDocImgUrl = []; $referenceFileUrl = []; foreach ($files as $file) { $fileTypeCode = $file['fileTypeCode'] ?? ''; $fileUrl = $file['originalFileUrl'] ?? ''; switch ($fileTypeCode) { case 'RCDOC': $certRegister[] = $fileUrl; break; case 'ADDOC': $confirmDocImgUrl[] = $fileUrl; break; case 'REFER': $referenceFileUrl[] = $fileUrl; break; } } return [ 'certRegister' => $certRegister, 'confirmDocImgUrl' => $confirmDocImgUrl, 'referenceFileUrl' => $referenceFileUrl, 'cert_register_save_yn' => !empty($certRegister) ? 'Y' : 'N', 'confirm_doc_img_url_save_yn' => !empty($confirmDocImgUrl) ? 'Y' : 'N', 'reference_file_url_save_yn' => !empty($referenceFileUrl) ? 'Y' : 'N', ]; } /** * 파일 URL을 v2_url_img_save 테이블에 저장 * @param array $files 파일 배열 * @param string $atclNo 매물번호 * @param int $vrSq 검증요청순번 */ protected function saveUrlImagesToDb(array $files, string $atclNo, int $vrSq): bool { if (empty($files)) { return true; } $urlImgModel = new \App\Models\Entities\V2urlimgsaveModel(); foreach ($files as $file) { $fileTypeCode = $file['fileTypeCode'] ?? ''; $fileUrl = $file['originalFileUrl'] ?? ''; if (empty($fileUrl)) { continue; } // type 매핑: RCDOC, ADDOC = 2(등기), REFER = 1(홍보) $type = in_array($fileTypeCode, ['RCDOC', 'ADDOC']) ? '2' : '1'; $data = [ 'url' => $fileUrl, 'type' => $type, 'atcl_no' => $atclNo, 'vr_sq' => $vrSq, 'status' => 'save', 'try_cnt' => 0, 'server_nm' => gethostname(), ]; if (!$urlImgModel->insert($data)) { write_custom_log("URL 이미지 저장 실패: " . json_encode($data), 'ERROR', 'service'); return false; } } return true; } /** * 필수 필드 안전하게 로드 */ protected function getSafeData(array $data, string $key, $default = null) { return $data[$key] ?? $default; } }