From ba8cd44a0ed2c613a5f2cee06bfc9bd0f61f21c7 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 7 Nov 2025 08:39:04 +0000 Subject: (최겸) 입찰/견적 수정사항 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../selectors/gl-account/gl-account-service.ts | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 components/common/selectors/gl-account/gl-account-service.ts (limited to 'components/common/selectors/gl-account/gl-account-service.ts') diff --git a/components/common/selectors/gl-account/gl-account-service.ts b/components/common/selectors/gl-account/gl-account-service.ts new file mode 100644 index 00000000..75c82c95 --- /dev/null +++ b/components/common/selectors/gl-account/gl-account-service.ts @@ -0,0 +1,79 @@ +"use server" + +import { oracleKnex } from '@/lib/oracle-db/db' + +// GL 계정 타입 정의 +export interface GlAccount { + SAKNR: string // 계정 (G/L) + FIPEX: string // 세부계정 + TEXT1: string // 계정명 +} + +// 테스트 환경용 폴백 데이터 +const FALLBACK_TEST_DATA: GlAccount[] = [ + { SAKNR: '53351977', FIPEX: 'FIP001', TEXT1: '원재료 구매(테스트데이터 - 오라클 페칭 실패시)' }, + { SAKNR: '53351978', FIPEX: 'FIP002', TEXT1: '소모품 구매(테스트데이터 - 오라클 페칭 실패시)' }, + { SAKNR: '53351979', FIPEX: 'FIP003', TEXT1: '부품 구매(테스트데이터 - 오라클 페칭 실패시)' }, + { SAKNR: '53351980', FIPEX: 'FIP004', TEXT1: '자재 구매(테스트데이터 - 오라클 페칭 실패시)' }, + { SAKNR: '53351981', FIPEX: 'FIP005', TEXT1: '외주 가공비(테스트데이터 - 오라클 페칭 실패시)' }, +] + +/** + * GL 계정 목록 조회 (Oracle에서 전체 조회, 실패 시 폴백 데이터 사용) + * CMCTB_BGT_MNG_ITM 테이블에서 조회 + */ +export async function getGlAccounts(): Promise<{ + success: boolean + data: GlAccount[] + error?: string + isUsingFallback?: boolean +}> { + try { + console.log('📋 [getGlAccounts] Oracle 쿼리 시작...') + + const result = await oracleKnex.raw(` + SELECT + SAKNR, + FIPEX, + TEXT1" + FROM CMCTB_BGT_MNG_ITM + WHERE ROWNUM < 100 + AND BUKRS = 'H100' + ORDER BY SAKNR + `) + + // Oracle raw query의 결과는 rows 배열에 들어있음 + const rows = (result.rows || result) as Array> + + console.log(`✅ [getGlAccounts] Oracle 쿼리 성공 - ${rows.length}건 조회`) + + // null 값 필터링 + const cleanedResult = rows + .filter((item) => + item['계정(G/L)'] && + item['세부계정'] + ) + .map((item) => ({ + SAKNR: String(item['계정(G/L)']), + FIPEX: String(item['세부계정']), + TEXT1: String(item['계정명'] || '') + })) + + console.log(`✅ [getGlAccounts] 필터링 후 ${cleanedResult.length}건`) + + return { + success: true, + data: cleanedResult, + isUsingFallback: false + } + } catch (error) { + console.error('❌ [getGlAccounts] Oracle 오류:', error) + console.log('🔄 [getGlAccounts] 폴백 테스트 데이터 사용 (' + FALLBACK_TEST_DATA.length + '건)') + return { + success: true, + data: FALLBACK_TEST_DATA, + isUsingFallback: true + } + } +} + -- cgit v1.2.3