summaryrefslogtreecommitdiff
path: root/lib/oracle-db/nonsap/services/creditService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/oracle-db/nonsap/services/creditService.ts')
-rw-r--r--lib/oracle-db/nonsap/services/creditService.ts215
1 files changed, 215 insertions, 0 deletions
diff --git a/lib/oracle-db/nonsap/services/creditService.ts b/lib/oracle-db/nonsap/services/creditService.ts
new file mode 100644
index 00000000..60e4f287
--- /dev/null
+++ b/lib/oracle-db/nonsap/services/creditService.ts
@@ -0,0 +1,215 @@
+'use server';
+
+import { oracleKnex, getOracleConnection } from "@/lib/oracle-db/db";
+import { readFileSync } from "fs";
+import { join } from "path";
+import creditServiceMapping from "./creditServiceMapping.json";
+
+// SQL 파일 읽기
+const getCreditQuerySQL = () => {
+ const sqlPath = join(process.cwd(), "lib/oracle-db/nonsap/services/creditServiceQuery.sql");
+ return readFileSync(sqlPath, "utf8");
+};
+
+// 신용평가사 코드 변환 함수
+const convertCreditGbToCode = (creditGb: string): string => {
+ // 이미 1글자 코드인 경우 그대로 반환
+ if (creditGb.length === 1 && creditServiceMapping.hasOwnProperty(creditGb)) {
+ return creditGb;
+ }
+
+ // 한글 이름인 경우 코드로 변환
+ const code = creditServiceMapping[creditGb as keyof typeof creditServiceMapping];
+ if (code && typeof code === "string" && code.length === 1) {
+ return code;
+ }
+
+ throw new Error(`유효하지 않은 신용평가사 코드: ${creditGb}`);
+};
+
+
+
+// 방법 1: knex.raw() 사용 (네임드 바인드 변수)
+// reno: 사업자번호, credit_gb: 신용평가사 코드
+export const getCreditInfo = async (reno: string, credit_gb: string) => {
+ const query = getCreditQuerySQL();
+ const creditGbCode = convertCreditGbToCode(credit_gb);
+
+ const result = await oracleKnex.raw(query, {
+ reno: reno,
+ credit_gb: creditGbCode
+ });
+
+ // Oracle knex raw 결과에서 실제 rows 추출
+ const rows = Array.isArray(result) ? result : result.rows || [];
+
+ return rows;
+
+ // UI 테스트용 목업 데이터 (필요시 주석 해제)
+ // const mockData = getMockCreditData(reno, credit_gb);
+ // return [mockData];
+};
+
+// 방법 2: oracledb 직접 사용 (네임드 바인드 변수)
+// reno: 사업자번호, credit_gb: 신용평가사 코드
+export const getCreditInfoWithOracleDb = async (reno: string, credit_gb: string) => {
+
+ const connection = await getOracleConnection();
+
+ try {
+ const query = getCreditQuerySQL();
+ const creditGbCode = convertCreditGbToCode(credit_gb);
+
+ const result = await connection.execute(query, {
+ reno: reno,
+ credit_gb: creditGbCode
+ });
+
+ return result.rows || [];
+ } finally {
+ await connection.close();
+ }
+
+ // UI 테스트용 목업 데이터 (필요시 주석 해제)
+ // const mockData = getMockCreditData(reno, credit_gb);
+ // return [mockData];
+};
+
+// 편의 함수: 신용평가사 코드 목록 조회
+export const getCreditServiceCodes = async () => {
+ const codes = Object.keys(creditServiceMapping).filter(key => key.length === 1);
+ return codes.map(code => ({
+ code: code,
+ name: creditServiceMapping[code as keyof typeof creditServiceMapping]
+ }));
+};
+
+// 편의 함수: 신용평가사 이름 목록 조회
+export const getCreditServiceNames = async () => {
+ const names = Object.keys(creditServiceMapping).filter(key => key.length > 1);
+ return names.map(name => ({
+ name: name,
+ code: creditServiceMapping[name as keyof typeof creditServiceMapping]
+ }));
+};
+
+// 임시 테스트 데이터
+const getMockCreditData = (reno: string, credit_gb: string) => {
+ return {
+ RESNO: reno,
+ EENTNM: "SAMPLE COMPANY LTD",
+ OPEDT: "2005.03.15",
+ REPR_NM: "홍길동",
+ TYSCALE: "중소기업",
+ RELCMP: "독립회사",
+ ADR: "서울특별시 강남구 테헤란로 123",
+ LISTYN: "비상장",
+ GOODSNM: "전자부품제조",
+ TELNO: "02-1234-5678",
+ FAXNO: "02-1234-5679",
+ FSTRDRT: "15.2",
+
+ // 매출순위
+ MO_1: "현대중공업",
+ MO_4: "27",
+ MO_2: "대우조선해양",
+ MO_5: "25",
+ MO_3: "삼성물산",
+ MO_6: "21",
+
+ // 매입순위
+ MI_1: "안전세관",
+ MI_4: "152",
+ MI_2: "부산세관",
+ MI_5: "84",
+ MI_3: "포디어션푸드(주)",
+ MI_6: "4",
+
+ // 지분관계
+ GIBUN_RL_1: "Kongsberg Maritime",
+ LSH_STK_RATE1: "100",
+ GIBUN_RL_2: "",
+ LSH_STK_RATE2: "0",
+ GIBUN_RL_3: "",
+ LSH_STK_RATE3: "0",
+
+ // 기타 정보
+ HAPGYE: "228",
+ NOTICE: "",
+ NOTICE_DT: "",
+ HPGBNCR_TY: "정상",
+ FCLOSDT: "",
+ LASTGRD: "BBB+",
+ DECISION: "A",
+ FRISKRV: "R-2",
+ EXPIRE_GB: "",
+ FWATCHD: "정상",
+ SUVDT: "2021.04.26",
+ ESETDTT: "2020.12.31",
+
+ // 재무년월
+ bs_dt0: "20.12.31",
+ bs_dt1: "19.12.31",
+ bs_dt2: "18.12.31",
+
+ // 재무현황 - 총자산
+ bs59_0: "63,307",
+ bs59_1: "63,307",
+ bs59_2: "62,216",
+
+ // 재무현황 - 부채총계
+ bs91_0: "27,660",
+ bs91_1: "36,196",
+ bs91_2: "23,205",
+
+ // 재무현황 - 자본총계
+ bs113_0: "125,474",
+ bs113_1: "142,804",
+ bs113_2: "89,251",
+
+ // 재무현황 - 매출액
+ pl01_0: "36,247",
+ pl01_1: "34,866",
+ pl01_2: "39,011",
+
+ // 재무현황 - 영업이익
+ pl27_0: "6,425",
+ pl27_1: "7,140",
+ pl27_2: "5,389",
+
+ // 재무현황 - 당기순이익
+ pl71_0: "5,286",
+ pl71_1: "5,761",
+ pl71_2: "4,325",
+
+ // 재무비율 - 부채비율
+ TR0053: "55.3",
+ TR0052: "0",
+ TR0051: "59.5",
+
+ // 재무비율 - 차입금의존도
+ TR0513: "0",
+ TR0512: "0",
+ TR0511: "0",
+
+ // 재무비율 - 영업이익율
+ TR0523: "5.1",
+ TR0522: "5",
+ TR0521: "6",
+
+ // 재무비율 - 순이익율
+ TR0103: "4.2",
+ TR0102: "4",
+ TR0101: "4.8",
+
+ // 재무비율 - 매출액증가율
+ TR0223: "-19.1",
+ TR0222: "59.3",
+ TR0221: "-13.9",
+
+ // 재무비율 - 유동비율
+ TR0013: "194.4",
+ TR0012: "172.7",
+ TR0011: "230.8"
+ };
+}; \ No newline at end of file