model = new ProcessibleModel(); } public function datecount(): string { $sido = $this->model->getAreaList(); // 지역조회 $this->data['sido'] = $sido; return view("pages/article/processible/datecount", $this->data); } public function getList1() { $start = (int) $this->request->getGet('start') ?: 0; $end = (int) $this->request->getGet('length') ?: 10; $data = [ 'sdate' => $this->request->getGet('sdate'), // 시작일 'edate' => $this->request->getGet('edate'), // 종료일 ]; $totalCount = $this->model->getTotal1($data); $datas = $this->model->getList1($start, $end, $data); return $this->response->setJSON(body: [ 'recordsTotal' => $totalCount, 'recordsFiltered' => $totalCount, 'data' => $datas, ]); } public function getList2() { // $start = (int) $this->request->getGet('start') ?: 0; // $end = (int) $this->request->getGet('length') ?: 10; $data = [ 'sdate' => $this->request->getGet('sdate'), // 시작일 'region' => $this->request->getGet('region'), // 종료일 ]; $totalCount = $this->model->getTotal2($data); $datas = $this->model->getList2($data); return $this->response->setJSON(body: [ 'recordsTotal' => $totalCount, 'recordsFiltered' => $totalCount, 'data' => $datas, ]); } public function getList3() { $data = [ 'region' => $this->request->getGet('region'), // 종료일 ]; $totalCount = $this->model->getTotal3($data); $datas = $this->model->getList3($data); return $this->response->setJSON(body: [ 'recordsTotal' => $totalCount, 'recordsFiltered' => $totalCount, 'data' => $datas, ]); } // 엑셀다운로드 public function excel() { try { $data = [ 'sdate' => $this->request->getGet('sdate'), 'edate' => $this->request->getGet('edate'), ]; $datas = $this->model->getExcelList($data); return $this->response->setJSON(body: [ 'data' => $datas, ]); } catch (\Exception $e) { $e->getPrevious()->getTraceAsString(); } } // 지역별 수량 저장 public function saveArea() { log_message('info', '[Processible::saveArea] 진입'); try { $rows = $this->request->getPost('rows'); $rows = json_decode($rows, true); if (empty($rows)) { log_message('info', '[Processible::saveArea] 저장가능한 데이터가 없습니다.'); return $this->response->setJSON([ 'code' => '9', 'msg' => '저장가능한 데이터가 없습니다.' ]); } // API 형식으로 변환 및 DB 저장 $syncSlotData = []; foreach ($rows as $row) { // DB 저장 (API 실패와 무관하게 저장됨) $this->model->saveArea($row); // API 데이터 구성 $syncSlotData[] = [ 'baseDate' => $row['sc_date'], 'legalDivisionNumber' => $row['region_cd'], 'slots' => [ 'am' => [ 'max' => (int) $row['am_cnt'], 'reserved' => 0 ], 'pm' => [ 'max' => (int) $row['pm_cnt'], 'reserved' => 0 ] ] ]; } log_message('info', '[Processible::saveArea] DB 저장 완료 | Count: ' . count($rows)); // 네이버 API 슬롯 동기화 시도 log_message('info', '[Processible::saveArea] 슬롯 동기화 시작 | Count: ' . count($syncSlotData)); $naverClient = new \App\Libraries\NaverApiClient(); $apiResponse = $naverClient->syncSiteSlot($syncSlotData); // API 응답 에러 체크 $hasError = false; $errorMessage = ''; if ($apiResponse === null) { $hasError = true; $errorMessage = 'API 응답 없음 (null)'; } elseif (!empty($apiResponse['error'])) { $hasError = true; $errorType = $apiResponse['error_type'] ?? 'UNKNOWN'; $httpCode = $apiResponse['http_code'] ?? 'N/A'; $errorMessage = "API Error: {$errorType} (HTTP {$httpCode})"; } elseif (isset($apiResponse['http_code']) && $apiResponse['http_code'] >= 400) { $hasError = true; $errorMessage = "HTTP Error: {$apiResponse['http_code']}"; } // API 에러 발생 시 (DB는 이미 저장됨) if ($hasError) { log_message('error', "[Processible::saveArea] {$errorMessage} | Response: " . json_encode($apiResponse, JSON_UNESCAPED_UNICODE)); return $this->response->setJSON([ 'code' => '1', 'msg' => 'DB 저장은 완료되었으나 네이버 슬롯 동기화에 실패했습니다. 관리자에게 문의하세요.', 'error' => $errorMessage, 'dbSaved' => true, 'syncData' => $syncSlotData, 'apiResponse' => $apiResponse ]); } // 성공 log_message('info', '[Processible::saveArea] Naver API 슬롯 동기화 성공 | Response: ' . json_encode($apiResponse, JSON_UNESCAPED_UNICODE)); return $this->response->setJSON([ 'code' => '0', 'msg' => 'success', 'dbSaved' => true, 'syncData' => $syncSlotData, 'apiResponse' => $apiResponse ]); } catch (\Exception $e) { log_message('error', '[Processible::saveArea] 예외 발생: ' . $e->getMessage()); return $this->response->setJSON([ 'code' => '9', 'msg' => '처리 중 오류가 발생했습니다: ' . $e->getMessage(), ]); } } public function saveCount() { try { $rows = $this->request->getPost('rows'); $rows = json_decode($rows, true); if (count($rows) > 0) { $results = []; $hasError = false; foreach ($rows as $row): $result = $this->model->saveCount($row); $results[] = $result; if (!$result['success']) { $hasError = true; } endforeach; return $this->response->setJSON([ 'code' => $hasError ? '9' : '0', 'msg' => $hasError ? '일부 저장 실패' : 'success', 'debug' => $results // 디버깅 정보 포함 ]); } else { return $this->response->setJSON([ 'code' => '9', 'msg' => '저장가능한 데이터가 없습니다.' ]); } } catch (\Exception $e) { return $this->response->setJSON([ 'code' => '9', 'msg' => $e->getMessage(), ]); } } }