워커 서비스 생성 및 수정
This commit is contained in:
96
app/Services/NaverService.php
Normal file
96
app/Services/NaverService.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Libraries\NaverApiClient;
|
||||
use App\Models\V2ArticleModel;
|
||||
use App\Models\VrfcReqModel;
|
||||
|
||||
class NaverService
|
||||
{
|
||||
protected $naverClient;
|
||||
protected $VrfcReqModel;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->naverClient = new NaverApiClient();
|
||||
$this->VrfcReqModel = model(VrfcReqModel::class);
|
||||
helper('log'); // 헬퍼 로드
|
||||
}
|
||||
|
||||
/**
|
||||
* 매물 정보를 처리하고 DB에 저장하는 메인 함수
|
||||
*/
|
||||
public function processArticle(array $payload)
|
||||
{
|
||||
$articleNumber = $payload['articleNumber'];
|
||||
$requestDatetime = date('Y-m-d H:i:s', strtotime($payload['requestDatetime'] ?? 'now'));
|
||||
|
||||
// 1. 네이버 API 호출
|
||||
$response = $this->naverClient->getArticleInfo($articleNumber);
|
||||
|
||||
if (!$response || !isset($response['data']) || $response['code'] !== 'success') {
|
||||
$msg = $response['message'] ?? 'No message';
|
||||
throw new \Exception("네이버 API 응답 에러: $articleNumber | 메시지: $msg");
|
||||
}
|
||||
|
||||
$articleInfo = $response['data'];
|
||||
|
||||
// 로그 기록
|
||||
write_custom_log("ARTICLE_INFO | ArticleNumber: $articleNumber", 'INFO', 'service');
|
||||
|
||||
// 2. 파라미터 매핑 (기존의 $vrfc_params 생성 로직)
|
||||
$vrfcParams = $this->mapVrfcParams($articleInfo, $requestDatetime);
|
||||
|
||||
// 3. DB 저장
|
||||
if (!$this->v2ArticleModel->insert($vrfcParams)) {
|
||||
$errorMessages = implode(', ', $this->v2ArticleModel->errors());
|
||||
throw new \Exception("V2 매물 삽입 오류: " . $errorMessages);
|
||||
}
|
||||
|
||||
return $this->v2ArticleModel->getInsertID();
|
||||
}
|
||||
|
||||
/**
|
||||
* API 데이터를 DB 컬럼에 맞게 변환
|
||||
*/
|
||||
private function mapVrfcParams(array $articleInfo, string $requestDatetime): array
|
||||
{
|
||||
$files = $articleInfo['files'] ?? [];
|
||||
$certRegister = [];
|
||||
$confirm_doc_img_url = [];
|
||||
$referenceFileUrl = [];
|
||||
|
||||
foreach ($files as $file) {
|
||||
$fileTypeCode = $file['fileTypeCode'];
|
||||
if ($fileTypeCode == 'RCDOC') {
|
||||
$certRegister[] = $file['fileUrl'];
|
||||
} elseif ($fileTypeCode == 'ADDOC') {
|
||||
$confirm_doc_img_url[] = $file['fileUrl'];
|
||||
} elseif ($fileTypeCode == 'REFER') {
|
||||
$referenceFileUrl[] = $file['fileUrl'];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'atcl_no' => $articleInfo['articleNumber'],
|
||||
'cpid' => $articleInfo['cpId'],
|
||||
'cp_atcl_id' => $articleInfo['cpArticleNumber'],
|
||||
'trade_type' => $articleInfo['tradeTypeCode'],
|
||||
'realtor_nm' => $articleInfo['realtor']['realtorName'] ?? '',
|
||||
'realtor_tel_no' => $articleInfo['realtor']['representativeCellphoneNumber'] ?? '',
|
||||
'seller_tel_no' => $articleInfo['seller']['sellerTelephoneNumber'] ?? '',
|
||||
'vrfc_type' => $articleInfo['verificationTypeCode'],
|
||||
'rgbk_confirm' => ($articleInfo['isUnregisteredVerificationRequested'] ?? false) ? 'Y' : 'N',
|
||||
'rdate' => $requestDatetime,
|
||||
'stat_cd' => '10',
|
||||
'insert_user' => 'admin',
|
||||
'insert_tm' => date('Y-m-d H:i:s'),
|
||||
'rgbk_confirm_owner_nm' => $articleInfo['seller']['ownerName'] ?? null,
|
||||
'confirm_doc_img_url' => json_encode($confirm_doc_img_url, JSON_UNESCAPED_UNICODE),
|
||||
'certRegister' => json_encode($certRegister, JSON_UNESCAPED_UNICODE),
|
||||
'referenceFileUrl' => json_encode($referenceFileUrl, JSON_UNESCAPED_UNICODE),
|
||||
// 필요한 나머지 컬럼들 추가...
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user