table('ORDER_HEADER_LIST'); $headerData = $headerBuilder->get()->getResultArray(); // 헤더 데이터에 업로드 일자, 고유번호 필수 추가 (HEADER_21, 22 위치에) foreach ($headerData as &$header) { // 항상 HEADER_21, 22에 고정값 추가 $header['HEADER_21'] = '업로드 일자'; $header['HEADER_22'] = '고유번호'; } // ORDER_LIST에서 전체 데이터 가져오기 $orderBuilder = $db->table('ORDER_LIST') ->orderBy('CONTENT_REGDATE', 'DESC'); $orderData = $orderBuilder->get()->getResultArray(); // 주문 데이터는 그대로 반환 (CONTENT_REGDATE, COLUMN_CODE 포함) // 응답 데이터 구성 $response = [ 'headerList' => $headerData, // ORDER_HEADER_LIST 전체 데이터 'orderList' => $orderData // ORDER_LIST 전체 데이터 ]; return $this->respond($response, 200); } public function orderRegister() { $db = \Config\Database::connect(); $request = $this->request->getJSON(true); $itemSeq = $request['itemSeq'] ?? null; $headers = $request['headers'] ?? []; $orderData = $request['orderData'] ?? []; // 디버깅 로그 log_message('info', 'orderRegister 호출됨'); log_message('info', 'itemSeq: ' . $itemSeq); log_message('info', 'headers: ' . json_encode($headers)); log_message('info', 'orderData 개수: ' . count($orderData)); if (!$itemSeq) { return $this->respond(['error' => 'ITEM_SEQ가 필요합니다.'], 400); } $db->transBegin(); try { // 헤더와 주문 데이터가 모두 비어있으면 전체 삭제 if (empty($headers) && empty($orderData)) { log_message('info', '전체 데이터 삭제 요청'); // ORDER_HEADER_LIST에서 해당 ITEM_SEQ 데이터 삭제 $db->table('ORDER_HEADER_LIST')->where('ITEM_SEQ', $itemSeq)->delete(); // ORDER_LIST에서 해당 ITEM_SEQ 데이터 삭제 $db->table('ORDER_LIST')->where('ITEM_SEQ', $itemSeq)->delete(); $db->transCommit(); return $this->respond([ 'success' => true, 'message' => '모든 주문 데이터가 삭제되었습니다.', 'headerCount' => 0, 'orderCount' => 0 ], 200); } // 1. ORDER_HEADER_LIST에 헤더 정보 저장/업데이트 if (!empty($headers)) { log_message('info', '헤더 데이터 저장 시작'); // 기존 헤더 데이터 삭제 $deleteCount = $db->table('ORDER_HEADER_LIST')->where('ITEM_SEQ', $itemSeq)->countAllResults(); log_message('info', '삭제할 기존 헤더 개수: ' . $deleteCount); $db->table('ORDER_HEADER_LIST')->where('ITEM_SEQ', $itemSeq)->delete(); // headers 배열에는 주문일, 고유번호 추가하지 않음 (프론트엔드에서 처리) // 새로운 헤더 데이터 삽입 $headerInsertData = ['ITEM_SEQ' => $itemSeq]; // 순수 엑셀 헤더만 저장 (업로드 일자, 고유번호 제외) $pureHeaders = []; foreach ($headers as $header) { if ($header !== '업로드 일자' && $header !== '고유번호') { $pureHeaders[] = $header; } } foreach ($pureHeaders as $index => $header) { if ($index < 20 && !empty($header)) { $headerKey = 'HEADER_' . ($index + 1); $headerInsertData[$headerKey] = $header; log_message('info', "헤더 매핑: {$headerKey} = {$header}"); } } // HEADER_21과 HEADER_22에 고정값 설정 $headerInsertData['HEADER_21'] = '업로드 일자'; $headerInsertData['HEADER_22'] = '고유번호'; log_message('info', '헤더 삽입 데이터: ' . json_encode($headerInsertData)); $result = $db->table('ORDER_HEADER_LIST')->insert($headerInsertData); log_message('info', '헤더 삽입 결과: ' . ($result ? 'success' : 'failed')); } else { log_message('info', '헤더 데이터가 비어있음'); } // 2. ORDER_LIST에 주문 데이터 저장 (기존 데이터 모두 삭제 후 새로 저장) if (!empty($orderData)) { log_message('info', '주문 데이터 저장 시작'); // 기존 주문 데이터 모두 삭제 $deleteCount = $db->table('ORDER_LIST')->where('ITEM_SEQ', $itemSeq)->countAllResults(); log_message('info', '삭제할 기존 주문 개수: ' . $deleteCount); $db->table('ORDER_LIST')->where('ITEM_SEQ', $itemSeq)->delete(); // 새로운 주문 데이터 모두 삽입 foreach ($orderData as $row) { $orderInsertData = ['ITEM_SEQ' => $itemSeq]; // CONTENT_1 ~ CONTENT_20만 매핑 (21, 22는 제외) for ($i = 1; $i <= 20; $i++) { $contentKey = 'CONTENT_' . $i; if (isset($row[$contentKey])) { $orderInsertData[$contentKey] = $row[$contentKey]; } } // CONTENT_REGDATE와 COLUMN_CODE 설정 (프론트엔드에서 전달받은 값 사용) if (isset($row['CONTENT_REGDATE']) && !empty($row['CONTENT_REGDATE'])) { $orderInsertData['CONTENT_REGDATE'] = $row['CONTENT_REGDATE']; // 업로드 일자 } if (isset($row['COLUMN_CODE']) && !empty($row['COLUMN_CODE'])) { $orderInsertData['COLUMN_CODE'] = $row['COLUMN_CODE']; // 고유번호 } else { // 고유번호가 없으면 새로 생성 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $hash = ''; for ($j = 0; $j < 50; $j++) { $hash .= $chars[rand(0, strlen($chars) - 1)]; } $orderInsertData['COLUMN_CODE'] = $hash; log_message('info', '고유번호 자동생성: ' . $hash); } $db->table('ORDER_LIST')->insert($orderInsertData); log_message('info', '새 데이터 인서트: ' . $orderInsertData['COLUMN_CODE']); } } $db->transCommit(); $response = [ 'success' => true, 'message' => '주문 데이터가 성공적으로 저장되었습니다.', 'headerCount' => count($headers), 'orderCount' => count($orderData) ]; return $this->respond($response, 200); } catch (Exception $e) { $db->transRollback(); return $this->respond([ 'error' => '데이터 저장 중 오류가 발생했습니다.', 'details' => $e->getMessage() ], 500); } } }