From 70fe8a0b5c4858090a75d7e4be7e2adef9e51c92 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 2 Oct 2025 12:12:54 +0000 Subject: (임수민) S-ERP 테이블 2개 추가, INSERT 로직을 UPDATE 로 변경, 복합 pk 로직 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/schema/S_ERP/s_erp.ts | 227 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 153 insertions(+), 74 deletions(-) (limited to 'db/schema') diff --git a/db/schema/S_ERP/s_erp.ts b/db/schema/S_ERP/s_erp.ts index 1b24f0e7..5a9ca36c 100644 --- a/db/schema/S_ERP/s_erp.ts +++ b/db/schema/S_ERP/s_erp.ts @@ -1,11 +1,11 @@ -import { serial, varchar, timestamp, text, boolean, numeric, decimal, integer, real } from "drizzle-orm/pg-core"; +import { serial, varchar, timestamp, text, boolean, numeric, decimal, integer, real, bigint, uniqueIndex } from "drizzle-orm/pg-core"; import { pgSchema } from "drizzle-orm/pg-core"; export const sErpSchema = pgSchema("S-ERP"); export const tbSAPEquipInfo = sErpSchema.table("TB_SAP_EquipInfo", { id: serial().primaryKey(), - Equipment: varchar({ length: 20 }), + Equipment: varchar({ length: 20 }), // pk Description: varchar({ length: 100 }), EquipCategory: varchar({ length: 2 }), SystemStatus: varchar({ length: 10 }), @@ -63,12 +63,15 @@ export const tbSAPEquipInfo = sErpSchema.table("TB_SAP_EquipInfo", { FinancialManagementArea: varchar({ length: 10 }), CommitmentItem: varchar({ length: 20 }), SysStatus: varchar({ length: 1 }), -}); +}, (table) => ({ + // Equipment 컬럼에 UNIQUE 인덱스 추가 + uniqueEquipment: uniqueIndex("unique_equipment").on(table.Equipment), +})); export const tbSAPOrder = sErpSchema.table("TB_SAP_Order", { id: serial().primaryKey(), BreakdownIndicator: varchar({ length: 50 }), - Order: varchar({ length: 50 }), + Order: varchar({ length: 50 }), // pk OrderType: varchar({ length: 50 }), OrderDescription: varchar({ length: 150 }), MainWorkCenterDesc: varchar({ length: 100 }), @@ -99,21 +102,24 @@ export const tbSAPOrder = sErpSchema.table("TB_SAP_Order", { BasicStartTime: varchar({ length: 50 }), ActualStartDate: varchar({ length: 50 }), ActualFinishTime: varchar({ length: 50 }), - PlanCost: integer(), - ActualCost: integer(), - SettlementCost: integer(), - Balance: integer(), + PlanCost: bigint({ mode: 'number' }), + ActualCost: bigint({ mode: 'number' }), + SettlementCost: bigint({ mode: 'number' }), + Balance: bigint({ mode: 'number' }), Currency: varchar({ length: 50 }), EquiCategory: varchar({ length: 50 }), ObjectType: varchar({ length: 50 }), ABCOmdocatior: varchar({ length: 50 }), EWRNo: varchar({ length: 50 }), -}); +}, (table) => ({ + // Order 컬럼에 UNIQUE 인덱스 추가 + uniqueOrder: uniqueIndex("unique_order").on(table.Order), +})); export const tbSAPOrderConfirm = sErpSchema.table("TB_SAP_OrderConfirm", { id: serial().primaryKey(), - Confirmation: varchar({ length: 50 }), - Count: varchar({ length: 50 }), + Confirmation: varchar({ length: 50 }), // pk + Count: varchar({ length: 50 }), // pk Order: varchar({ length: 50 }), OpAc: varchar({ length: 50 }), OperationText: varchar({ length: 200 }), @@ -132,12 +138,15 @@ export const tbSAPOrderConfirm = sErpSchema.table("TB_SAP_OrderConfirm", { INGRP: varchar({ length: 50 }), GRWRK: varchar({ length: 50 }), AUART: varchar({ length: 50 }), -}); +}, (table) => ({ + // Confirmation, Count 복합 PK에 UNIQUE 인덱스 추가 + uniqueConfirmationCount: uniqueIndex("unique_confirmation_count").on(table.Confirmation, table.Count), +})); export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { id: serial().primaryKey(), Status: varchar({ length: 50 }), - Notification: integer(), + Notification: bigint({ mode: 'number' }), // pk Type: varchar({ length: 50 }), Description: varchar({ length: 64 }), PlanningPlant: varchar({ length: 50 }), @@ -146,7 +155,7 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { WorkCenter: varchar({ length: 50 }), NameOfWorkCenter: varchar({ length: 50 }), FunctionalLocation: varchar({ length: 50 }), - Equipment: integer(), + Equipment: bigint({ mode: 'number' }), TagNumber: varchar({ length: 50 }), EquipmentDesc: varchar({ length: 50 }), PlantSection: varchar({ length: 50 }), @@ -157,18 +166,18 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { Createdby: varchar({ length: 50 }), SystemStatus: varchar({ length: 50 }), UserStatus: varchar({ length: 50 }), - Order: integer(), + Order: bigint({ mode: 'number' }), Requester: varchar({ length: 50 }), RequesterName: varchar({ length: 50 }), CodeGroup: varchar({ length: 50 }), - Code: integer(), + Code: bigint({ mode: 'number' }), CodeDescription: varchar({ length: 50 }), BreakdownIndicator: varchar({ length: 50 }), Priority: varchar({ length: 50 }), PriorityDesc: varchar({ length: 50 }), NotifcatnType: varchar({ length: 50 }), Name1: varchar({ length: 50 }), - WorkCenterInt: integer(), + WorkCenterInt: bigint({ mode: 'number' }), ObjectNumber: varchar({ length: 50 }), CHAR05: varchar({ length: 50 }), Link: varchar({ length: 50 }), @@ -189,15 +198,18 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { MalfunctionEnd: varchar({ length: 50 }), EndTime: varchar({ length: 50 }), BreakdownDuration: real(), // float4 타입을 real로 변환 -}); +}, (table) => ({ + // Notification 컬럼에 UNIQUE 인덱스 추가 + uniqueNotification: uniqueIndex("unique_notification").on(table.Notification), +})); export const tbSAPOrderBreakdown = sErpSchema.table("TB_SAP_OrderBreakdown", { id: serial().primaryKey(), - Order: integer(), + Order: bigint({ mode: 'number' }), // pk OrderType: varchar({ length: 50 }), FunctionalLocation: varchar({ length: 50 }), FLDesc: varchar({ length: 50 }), - Equipment: integer(), + Equipment: bigint({ mode: 'number' }), EquipmentDesc: varchar({ length: 50 }), ABCIndicator: varchar({ length: 50 }), MainWorkCenter: varchar({ length: 50 }), @@ -222,52 +234,58 @@ export const tbSAPOrderBreakdown = sErpSchema.table("TB_SAP_OrderBreakdown", { EndTime: varchar({ length: 50 }), BreakdownDuration: real(), // float4 타입을 real로 변환 Plant: varchar({ length: 50 }), - Notification: integer(), + Notification: bigint({ mode: 'number' }), ObjectNumber: varchar({ length: 50 }), OrderDesc: varchar({ length: 64 }), PlantSectionDesc: varchar({ length: 50 }), TagNumber: varchar({ length: 50 }), -}); +}, (table) => ({ + // Order 컬럼에 UNIQUE 인덱스 추가 + uniqueOrder: uniqueIndex("unique_order_breakdown").on(table.Order), +})); export const tbSAPMainternanceBOM = sErpSchema.table("TB_SAP_MainternanceBOM", { id: serial().primaryKey(), - Date: varchar({ length: 50 }), - Order: integer(), + Date: varchar({ length: 50 }), // pk + Order: bigint({ mode: 'number' }), // pk Description: varchar({ length: 50 }), FuncLocation: varchar({ length: 50 }), Description_1: varchar({ length: 50 }), WorkCenter: varchar({ length: 50 }), ObjectType: varchar({ length: 50 }), - Equipment: integer(), + Equipment: bigint({ mode: 'number' }), Discription: varchar({ length: 50 }), TagNumber: varchar({ length: 50 }), ICT: varchar({ length: 50 }), - Component: varchar({ length: 50 }), - Quantity: integer(), + Component: varchar({ length: 50 }), // pk + Quantity: bigint({ mode: 'number' }), Unit: varchar({ length: 50 }), Description_2: varchar({ length: 50 }), - Specification: varchar({ length: 50 }), - GEWRK: integer(), + Specification: varchar({ length: 200 }), + GEWRK: bigint({ mode: 'number' }), STLNR: varchar({ length: 50 }), STLAL: varchar({ length: 50 }), WERKS: varchar({ length: 50 }), TPLNR_T: varchar({ length: 50 }), - EQUNR_T: integer(), -}); + EQUNR_T: bigint({ mode: 'number' }), +}, (table) => ({ + // Date, Order, Component 복합 PK에 UNIQUE 인덱스 추가 + uniqueDateOrderComponent: uniqueIndex("unique_date_order_component").on(table.Date, table.Order, table.Component), +})); export const tbSAPMaterialRepair = sErpSchema.table("TB_SAP_MaterialRepair", { id: serial().primaryKey(), BreakdownIndicator: varchar({ length: 50 }), - Order: integer(), + Order: bigint({ mode: 'number' }), // pk OrderType: varchar({ length: 50 }), OrderDescription: varchar({ length: 50 }), MainWorkCenterDescription: varchar({ length: 50 }), FunctionalLocation: varchar({ length: 50 }), - Equipment: integer(), + Equipment: bigint({ mode: 'number' }), EquipmentDescription: varchar({ length: 50 }), EquipmentSortField: varchar({ length: 50 }), TagNumber: varchar({ length: 50 }), - Notification: integer(), + Notification: bigint({ mode: 'number' }), Priority: varchar({ length: 50 }), PriorityDesc: varchar({ length: 50 }), PlantSection: varchar({ length: 50 }), @@ -298,41 +316,47 @@ export const tbSAPMaterialRepair = sErpSchema.table("TB_SAP_MaterialRepair", { SettlementCost: varchar({ length: 50 }), Balance: varchar({ length: 50 }), Currency: varchar({ length: 50 }), - EquiCategory: integer(), + EquiCategory: bigint({ mode: 'number' }), ObjectType: varchar({ length: 50 }), ABCIndicatior: varchar({ length: 50 }), EWRNo: varchar({ length: 50 }), -}); +}, (table) => ({ + // Order 컬럼에 UNIQUE 인덱스 추가 + uniqueOrderRepair: uniqueIndex("unique_order_repair").on(table.Order), +})); export const tbSAPMaterialInfo = sErpSchema.table("TB_SAP_MaterialInfo", { id: serial().primaryKey(), - Plnt: varchar({ length: 50 }), - Material: varchar({ length: 50 }), - Sloc: varchar({ length: 50 }), + Plnt: varchar({ length: 50 }), // pk + Material: varchar({ length: 50 }), // pk + Sloc: varchar({ length: 50 }), // pk Bin: varchar({ length: 50 }), MatlGroup: varchar({ length: 50 }), MaterialDescription: varchar({ length: 500 }), MaterialName: varchar({ length: 500 }), Specification: varchar({ length: 500 }), - Unrestr: integer(), - QualInsp: integer(), - Blocked: integer(), + Unrestr: bigint({ mode: 'number' }), + QualInsp: bigint({ mode: 'number' }), + Blocked: bigint({ mode: 'number' }), Bun: varchar({ length: 50 }), Warehouse: varchar({ length: 50 }), Message: varchar({ length: 500 }), -}); +}, (table) => ({ + // Plnt, Material, Sloc 복합 PK에 UNIQUE 인덱스 추가 + uniquePlntMaterialSloc: uniqueIndex("unique_plnt_material_sloc").on(table.Plnt, table.Material, table.Sloc), +})); export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", { id: serial().primaryKey(), WBS: varchar({ length: 50 }), OldProjec: varchar({ length: 50 }), - Material: varchar({ length: 50 }), + Material: varchar({ length: 50 }), // pk MaterialD: varchar({ length: 50 }), Specificat: varchar({ length: 50 }), MRPType: varchar({ length: 50 }), - Batch: varchar({ length: 50 }), + Batch: varchar({ length: 50 }), // pk Amount: varchar({ length: 50 }), - StorageLo: varchar({ length: 50 }), + StorageLo: varchar({ length: 50 }), // pk StorageLo_1: varchar({ length: 50 }), StorageBin: varchar({ length: 50 }), Warehouse: varchar({ length: 50 }), @@ -341,11 +365,11 @@ export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", { TNo: varchar({ length: 50 }), BOXNo: varchar({ length: 50 }), MaterialT: varchar({ length: 50 }), - Unrestrict: integer(), - QIStock: integer(), - BlockedSt: integer(), + Unrestrict: bigint({ mode: 'number' }), + QIStock: bigint({ mode: 'number' }), + BlockedSt: bigint({ mode: 'number' }), REMARK: varchar({ length: 50 }), - TotalStoc: integer(), + TotalStoc: bigint({ mode: 'number' }), Unit: varchar({ length: 50 }), MAP: varchar({ length: 50 }), NetWeight: real(), // float4 타입을 real로 변환 @@ -361,22 +385,25 @@ export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", { ValveFitt: varchar({ length: 50 }), BLNo: varchar({ length: 50 }), TAGNO: varchar({ length: 50 }), -}); +}, (table) => ({ + // Material, Batch, StorageLo 복합 PK에 UNIQUE 인덱스 추가 + uniqueMaterialBatchStorage: uniqueIndex("unique_material_batch_storage").on(table.Material, table.Batch, table.StorageLo), +})); export const tbSAPMaterialRelease = sErpSchema.table("TB_SAP_MaterialRelease", { id: serial().primaryKey(), - PostingGIdate: varchar({ length: 50 }), - Plant: varchar({ length: 50 }), - StorageLoc: varchar({ length: 50 }), + PostingGIdate: varchar({ length: 50 }), // pk + Plant: varchar({ length: 50 }), // pk + StorageLoc: varchar({ length: 50 }), // pk StockWBS: varchar({ length: 50 }), InputWBS: varchar({ length: 50 }), Material: varchar({ length: 50 }), OldMaterialNumber: varchar({ length: 50 }), MaterialDesc: varchar({ length: 50 }), - Spec: varchar({ length: 64 }), + Spec: varchar({ length: 100 }), Batch: varchar({ length: 50 }), MovementType: varchar({ length: 50 }), - Quantity: integer(), + Quantity: bigint({ mode: 'number' }), BUn: varchar({ length: 50 }), GoodsRecipinet: varchar({ length: 50 }), // Goods Recipinet(Ship-To Party) NetWeight: real(), // float4 타입을 real로 변환 @@ -385,33 +412,36 @@ export const tbSAPMaterialRelease = sErpSchema.table("TB_SAP_MaterialRelease", { Amount: varchar({ length: 50 }), Currency: varchar({ length: 50 }), MvtTypeTxt: varchar({ length: 50 }), - MaterialDocument: integer(), - DocumentYear: integer(), + MaterialDocument: bigint({ mode: 'number' }), // pk + DocumentYear: bigint({ mode: 'number' }), // pk S: varchar({ length: 50 }), MatName: varchar({ length: 50 }), MatGroupDesc: varchar({ length: 50 }), InputProject: varchar({ length: 50 }), HeaderText: varchar({ length: 50 }), -}); +}, (table) => ({ + // PostingGIdate, Plant, StorageLoc, MaterialDocument, DocumentYear 복합 PK에 UNIQUE 인덱스 추가 + uniqueReleaseComposite: uniqueIndex("unique_release_composite").on(table.PostingGIdate, table.Plant, table.StorageLoc, table.MaterialDocument, table.DocumentYear), +})); export const tbSAPMaterialReceiving = sErpSchema.table("TB_SAP_MaterialReceiving", { id: serial().primaryKey(), - PostingGRDate: varchar({ length: 50 }), - Plant: varchar({ length: 50 }), - StorageLoc: varchar({ length: 50 }), + PostingGRDate: varchar({ length: 50 }), // pk + Plant: varchar({ length: 50 }), // pk + StorageLoc: varchar({ length: 50 }), // pk StockWBS: varchar({ length: 50 }), InputWBS: varchar({ length: 50 }), Material: varchar({ length: 50 }), OldMaterialNumber: varchar({ length: 50 }), MaterialDesc: varchar({ length: 50 }), - Spec: varchar({ length: 50 }), + Spec: varchar({ length: 100 }), Batch: varchar({ length: 50 }), MovementType: varchar({ length: 50 }), - Quantity: integer(), + Quantity: bigint({ mode: 'number' }), BUn: varchar({ length: 50 }), GoodsRecipinet: varchar({ length: 50 }), // Goods Recipinet(Ship-To Party) PO: varchar({ length: 50 }), - POItem: integer(), + POItem: bigint({ mode: 'number' }), Vendor: varchar({ length: 50 }), VendorName: varchar({ length: 50 }), NetWeight: real(), // float4 타입을 real로 변환 @@ -420,19 +450,22 @@ export const tbSAPMaterialReceiving = sErpSchema.table("TB_SAP_MaterialReceiving Amount: varchar({ length: 50 }), Currency: varchar({ length: 50 }), MvtTypeTxt: varchar({ length: 50 }), - MatDoc: integer(), - Year: integer(), + MatDoc: bigint({ mode: 'number' }), // pk + Year: bigint({ mode: 'number' }), // pk S: varchar({ length: 50 }), MatName: varchar({ length: 50 }), MatGroupDesc: varchar({ length: 50 }), InputProject: varchar({ length: 50 }), HeaderText: varchar({ length: 50 }), -}); +}, (table) => ({ + // PostingGRDate, Plant, StorageLoc, MatDoc, Year 복합 PK에 UNIQUE 인덱스 추가 + uniqueReceivingComposite: uniqueIndex("unique_receiving_composite").on(table.PostingGRDate, table.Plant, table.StorageLoc, table.MatDoc, table.Year), +})); export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", { id: serial().primaryKey(), Status: varchar({ length: 50 }), - Notification: integer(), + Notification: bigint({ mode: 'number' }), Type: varchar({ length: 50 }), Description: varchar({ length: 64 }), PlanningPlant: varchar({ length: 50 }), @@ -441,7 +474,7 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", WorkCenter: varchar({ length: 50 }), NameOfWorkCenter: varchar({ length: 50 }), FunctionalLocation: varchar({ length: 50 }), - Equipment: integer(), + Equipment: bigint({ mode: 'number' }), TagNumber: varchar({ length: 50 }), EquipmentDesc: varchar({ length: 50 }), PlantSection: varchar({ length: 50 }), @@ -452,18 +485,18 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", CreatedBy: varchar({ length: 50 }), SystemStatus: varchar({ length: 50 }), UserStatus: varchar({ length: 50 }), - Order: integer(), + Order: bigint({ mode: 'number' }), Requester: varchar({ length: 50 }), RequesterName: varchar({ length: 50 }), CodeGroup: varchar({ length: 50 }), - Code: integer(), + Code: bigint({ mode: 'number' }), CodeDescription: varchar({ length: 50 }), BreakdownIndicator: varchar({ length: 50 }), Priority: varchar({ length: 50 }), PriorityDesc: varchar({ length: 50 }), NotifcatnType: varchar({ length: 50 }), Name1: varchar({ length: 50 }), - WorkCenterInt: integer(), + WorkCenterInt: bigint({ mode: 'number' }), ObjectNumber: varchar({ length: 50 }), CHAR05: varchar({ length: 50 }), Link: varchar({ length: 50 }), @@ -484,4 +517,50 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", MalfunctionEnd: varchar({ length: 50 }), EndTime: varchar({ length: 50 }), BreakdownDuration: real(), // float4 타입을 real로 변환 -}); \ No newline at end of file +}); + +export const technicalGuidanceInvestment = sErpSchema.table("Technical_Guidance_Investment", { + id: serial().primaryKey(), + FUMNR: varchar({ length: 10 }), // pk + FUMIT: bigint({ mode: 'number' }), // pk + DESCR: varchar({ length: 50 }), + FU_APPDATE: varchar({ length: 8 }), + COST_INVEST: varchar({ length: 15 }) +}, (table) => ({ + // FUMNR, FUMIT 복합 PK에 UNIQUE 인덱스 추가 + uniqueFumnrFumit: uniqueIndex("unique_fumnr_fumit").on(table.FUMNR, table.FUMIT), +})); + +export const technicalGuidanceOrder = sErpSchema.table("Technical_Guidance_Order", { + id: serial().primaryKey(), + AUFNR: varchar({ length: 12 }), // pk (Order) + VORNR: varchar({ length: 4 }), // pk (Operation) + ORD_ERDAT: varchar({ length: 50 }), + FUMNR: varchar({ length: 10 }), + FUMIT: bigint({ mode: 'number' }), + DESCR: varchar({ length: 50 }), + FU_APPDATE: varchar({ length: 50 }), + BANFN: varchar({ length: 10 }), + BNFPO: bigint({ mode: 'number' }), + BADAT: varchar({ length: 50 }), + EBELN: varchar({ length: 10 }), + EBELP: bigint({ mode: 'number' }), + PO_ERDAT: varchar({ length: 50 }), + AUART: varchar({ length: 4 }), + STTXT: varchar({ length: 40 }), + EQUNR: varchar({ length: 18 }), + KTEXT: varchar({ length: 20 }), + INGRP: varchar({ length: 3 }), + INNAM: varchar({ length: 18 }), + CON_STEP: varchar({ length: 20 }), + CON_DESC: varchar({ length: 40 }), + CON_CO: varchar({ length: 30 }), + COST_INVEST: varchar({ length: 15 }), + COST_ORD: varchar({ length: 13 }), + COST_PR: varchar({ length: 13 }), + COST_PO: varchar({ length: 13 }), + COST_IV: varchar({ length: 13 }), +}, (table) => ({ + // AUFNR, VORNR 복합 PK에 UNIQUE 인덱스 추가 + uniqueAufnrVornr: uniqueIndex("unique_aufnr_vornr").on(table.AUFNR, table.VORNR), +})); \ No newline at end of file -- cgit v1.2.3