feat(tkeg): tkeg BOM 자재관리 서비스 초기 세팅 (api + web + docker-compose)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
131
tkeg/api/database/init/01_schema.sql
Normal file
131
tkeg/api/database/init/01_schema.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- TK-MP BOM 시스템 데이터베이스 스키마
|
||||
-- 생성일: 2025.07.14
|
||||
|
||||
-- ================================
|
||||
-- 1. 프로젝트 관리
|
||||
-- ================================
|
||||
|
||||
-- 프로젝트 기본 정보
|
||||
CREATE TABLE projects (
|
||||
id SERIAL PRIMARY KEY,
|
||||
|
||||
-- 회사 공식 정보
|
||||
official_project_code VARCHAR(50) UNIQUE, -- PP5-5701-DRYING (정식 코드)
|
||||
project_name VARCHAR(200) NOT NULL,
|
||||
client_name VARCHAR(100),
|
||||
|
||||
-- 설계팀 사용 정보
|
||||
design_project_code VARCHAR(50), -- 설계팀이 실제 사용한 코드
|
||||
design_project_name VARCHAR(200), -- 설계팀이 사용한 프로젝트명
|
||||
|
||||
-- 매칭 정보
|
||||
is_code_matched BOOLEAN DEFAULT false, -- 정식 코드 매칭 완료 여부
|
||||
matched_by VARCHAR(100), -- 매칭 작업자
|
||||
matched_at TIMESTAMP, -- 매칭 완료 시점
|
||||
|
||||
-- 기본 정보
|
||||
status VARCHAR(20) DEFAULT 'active', -- active/completed/on_hold
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
description TEXT,
|
||||
notes TEXT
|
||||
);
|
||||
|
||||
-- ================================
|
||||
-- 2. 파일 관리
|
||||
-- ================================
|
||||
|
||||
-- 업로드된 자재 목록 파일들
|
||||
CREATE TABLE files (
|
||||
id SERIAL PRIMARY KEY,
|
||||
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
|
||||
filename VARCHAR(255) NOT NULL,
|
||||
original_filename VARCHAR(255) NOT NULL,
|
||||
file_path VARCHAR(500) NOT NULL,
|
||||
revision VARCHAR(20) DEFAULT 'Rev.0', -- Rev.0, Rev.1, Rev.2
|
||||
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
uploaded_by VARCHAR(100),
|
||||
file_type VARCHAR(10), -- excel/csv/txt
|
||||
file_size INTEGER,
|
||||
is_active BOOLEAN DEFAULT true
|
||||
);
|
||||
|
||||
-- ================================
|
||||
-- 3. 자재 정보 (핵심 테이블)
|
||||
-- ================================
|
||||
|
||||
-- 개별 자재 상세 정보
|
||||
CREATE TABLE materials (
|
||||
id SERIAL PRIMARY KEY,
|
||||
file_id INTEGER REFERENCES files(id) ON DELETE CASCADE,
|
||||
line_number INTEGER, -- Excel 행 번호
|
||||
original_description TEXT NOT NULL, -- 원본 품명
|
||||
|
||||
-- 분류 정보
|
||||
classified_category VARCHAR(50), -- 파이프/피팅/볼트/밸브/계기
|
||||
classified_subcategory VARCHAR(100), -- 엘보우/플랜지/벤드 등
|
||||
|
||||
-- 재질 및 스펙
|
||||
material_grade VARCHAR(50), -- A333-6, A105, SS316
|
||||
schedule VARCHAR(20), -- SCH40, SCH80, STD
|
||||
size_spec VARCHAR(50), -- 6인치, 150A, M16
|
||||
|
||||
-- 수량 정보
|
||||
quantity DECIMAL(10,3) NOT NULL,
|
||||
unit VARCHAR(10) NOT NULL, -- EA/mm/SET/kg
|
||||
|
||||
-- 도면 정보
|
||||
drawing_name VARCHAR(100), -- P&ID-001-TANK
|
||||
area_code VARCHAR(20), -- #01, #02, #03
|
||||
line_no VARCHAR(50), -- LINE-001-A
|
||||
|
||||
-- 분류 신뢰도 및 검증
|
||||
classification_confidence DECIMAL(3,2), -- 0.00-1.00 분류 신뢰도
|
||||
classification_details JSONB, -- 분류 상세 정보 (JSON)
|
||||
is_verified BOOLEAN DEFAULT false, -- 사용자 검증 여부
|
||||
verified_by VARCHAR(100),
|
||||
verified_at TIMESTAMP,
|
||||
|
||||
-- 기타
|
||||
drawing_reference VARCHAR(100),
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- ================================
|
||||
-- 4. 인덱스 생성 (성능 최적화)
|
||||
-- ================================
|
||||
|
||||
-- 프로젝트 관련 인덱스
|
||||
CREATE INDEX idx_projects_official_code ON projects(official_project_code);
|
||||
CREATE INDEX idx_projects_design_code ON projects(design_project_code);
|
||||
|
||||
-- 파일 관련 인덱스
|
||||
CREATE INDEX idx_files_project ON files(project_id);
|
||||
CREATE INDEX idx_files_active ON files(is_active);
|
||||
|
||||
-- 자재 관련 인덱스
|
||||
CREATE INDEX idx_materials_file ON materials(file_id);
|
||||
CREATE INDEX idx_materials_category ON materials(classified_category, classified_subcategory);
|
||||
CREATE INDEX idx_materials_material_size ON materials(material_grade, size_spec);
|
||||
|
||||
-- ================================
|
||||
-- 5. 기본 뷰 생성
|
||||
-- ================================
|
||||
|
||||
-- 프로젝트 상태 요약 뷰
|
||||
CREATE VIEW project_status_view AS
|
||||
SELECT
|
||||
p.id,
|
||||
COALESCE(p.official_project_code, p.design_project_code) as display_code,
|
||||
p.project_name,
|
||||
p.status,
|
||||
COUNT(f.id) as file_count,
|
||||
COUNT(m.id) as material_count,
|
||||
p.created_at
|
||||
FROM projects p
|
||||
LEFT JOIN files f ON p.id = f.project_id AND f.is_active = true
|
||||
LEFT JOIN materials m ON f.id = m.file_id
|
||||
GROUP BY p.id, p.official_project_code, p.design_project_code,
|
||||
p.project_name, p.status, p.created_at
|
||||
ORDER BY p.created_at DESC;
|
||||
8
tkeg/api/database/init/02_add_classification_details.sql
Normal file
8
tkeg/api/database/init/02_add_classification_details.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- classification_details 컬럼 추가 마이그레이션
|
||||
-- 생성일: 2025.01.27
|
||||
|
||||
-- materials 테이블에 classification_details 컬럼 추가
|
||||
ALTER TABLE materials ADD COLUMN IF NOT EXISTS classification_details JSONB;
|
||||
|
||||
-- 인덱스 추가 (JSONB 컬럼 검색 최적화)
|
||||
CREATE INDEX IF NOT EXISTS idx_materials_classification_details ON materials USING GIN (classification_details);
|
||||
0
tkeg/api/database/init/02_seed_data.sql
Normal file
0
tkeg/api/database/init/02_seed_data.sql
Normal file
78
tkeg/api/database/init/20_purchase_confirmations.sql
Normal file
78
tkeg/api/database/init/20_purchase_confirmations.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
-- 구매 수량 확정 관련 테이블 생성
|
||||
|
||||
-- 1. 구매 확정 마스터 테이블
|
||||
CREATE TABLE IF NOT EXISTS purchase_confirmations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
job_no VARCHAR(50) NOT NULL,
|
||||
file_id INTEGER REFERENCES files(id),
|
||||
bom_name VARCHAR(255) NOT NULL,
|
||||
revision VARCHAR(50) NOT NULL DEFAULT 'Rev.0',
|
||||
confirmed_at TIMESTAMP NOT NULL,
|
||||
confirmed_by VARCHAR(100) NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 2. 확정된 구매 품목 테이블
|
||||
CREATE TABLE IF NOT EXISTS confirmed_purchase_items (
|
||||
id SERIAL PRIMARY KEY,
|
||||
confirmation_id INTEGER REFERENCES purchase_confirmations(id) ON DELETE CASCADE,
|
||||
item_code VARCHAR(100) NOT NULL,
|
||||
category VARCHAR(50) NOT NULL,
|
||||
specification TEXT,
|
||||
size VARCHAR(100),
|
||||
material VARCHAR(100),
|
||||
bom_quantity DECIMAL(15,3) NOT NULL DEFAULT 0,
|
||||
calculated_qty DECIMAL(15,3) NOT NULL DEFAULT 0,
|
||||
unit VARCHAR(20) NOT NULL DEFAULT 'EA',
|
||||
safety_factor DECIMAL(5,3) NOT NULL DEFAULT 1.0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 3. files 테이블에 확정 관련 컬럼 추가 (이미 있으면 무시)
|
||||
ALTER TABLE files
|
||||
ADD COLUMN IF NOT EXISTS purchase_confirmed BOOLEAN DEFAULT FALSE,
|
||||
ADD COLUMN IF NOT EXISTS confirmed_at TIMESTAMP,
|
||||
ADD COLUMN IF NOT EXISTS confirmed_by VARCHAR(100);
|
||||
|
||||
-- 인덱스 생성
|
||||
CREATE INDEX IF NOT EXISTS idx_purchase_confirmations_job_revision
|
||||
ON purchase_confirmations(job_no, revision, is_active);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_confirmed_purchase_items_confirmation
|
||||
ON confirmed_purchase_items(confirmation_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_confirmed_purchase_items_category
|
||||
ON confirmed_purchase_items(category);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_files_purchase_confirmed
|
||||
ON files(purchase_confirmed);
|
||||
|
||||
-- 코멘트 추가
|
||||
COMMENT ON TABLE purchase_confirmations IS '구매 수량 확정 마스터 테이블';
|
||||
COMMENT ON TABLE confirmed_purchase_items IS '확정된 구매 품목 상세 테이블';
|
||||
COMMENT ON COLUMN files.purchase_confirmed IS '구매 수량 확정 여부';
|
||||
COMMENT ON COLUMN files.confirmed_at IS '구매 수량 확정 시간';
|
||||
COMMENT ON COLUMN files.confirmed_by IS '구매 수량 확정자';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1419
tkeg/api/database/init/99_complete_schema.sql
Normal file
1419
tkeg/api/database/init/99_complete_schema.sql
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user