Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
✨ 주요 기능: - 완전한 데이터베이스 스키마 분석 및 자동 마이그레이션 시스템 - 44개 테이블 완전 지원 (운영 서버 43개 + 1개 추가) - 누락된 테이블/컬럼 자동 감지 및 생성 🔧 해결된 스키마 문제: - users.status 컬럼 누락 → 자동 추가 - files 테이블 4개 컬럼 누락 → 자동 추가 - materials 테이블 22개 컬럼 누락 → 자동 추가 - support_details, purchase_requests, purchase_request_items 테이블 누락 → 자동 생성 - material_purchase_tracking.description, purchase_status 컬럼 누락 → 자동 추가 🚀 자동화 도구: - schema_analyzer.py: 코드와 DB 스키마 비교 분석 - auto_migrator.py: 자동 마이그레이션 실행 - docker_migrator.py: Docker 환경용 간편 마이그레이션 - schema_monitor.py: 실시간 스키마 모니터링 📋 리비전 관리 시스템: - 8개 카테고리별 리비전 페이지 구현 - PIPE Cutting Plan 관리 시스템 - PIPE Issue Management 시스템 - 완전한 리비전 비교 및 추적 기능 🎯 사용법: docker exec tk-mp-backend python3 scripts/docker_migrator.py 앞으로 스키마 문제가 발생하면 위 명령 하나로 자동 해결!
256 lines
7.1 KiB
Markdown
256 lines
7.1 KiB
Markdown
# 🗄️ PIPE 관리 시스템 데이터베이스 테이블 가이드
|
|
|
|
## 📋 테이블 개요
|
|
|
|
PIPE 관리 시스템은 **7개의 전용 테이블**로 구성되어 있으며, 각각 고유한 역할을 담당합니다.
|
|
|
|
---
|
|
|
|
## 🔧 **1. pipe_cutting_plans**
|
|
**용도**: PIPE Cutting Plan의 단관 정보 저장
|
|
|
|
### **주요 컬럼**
|
|
- `job_no`: 작업 번호
|
|
- `area`: 구역 정보 (#01, #02 등)
|
|
- `drawing_name`: 도면명 (P&ID-001)
|
|
- `line_no`: 라인번호 (LINE-A-001)
|
|
- `material_grade`: 재질 (A106 GR.B)
|
|
- `schedule_spec`: 스케줄 (SCH40, SCH80)
|
|
- `nominal_size`: 호칭 크기 (4", 6")
|
|
- `length_mm`: 길이 (mm 단위)
|
|
- `end_preparation`: 끝단 가공 (무개선, 한개선, 양개선)
|
|
|
|
### **사용 시점**
|
|
- Cutting Plan 작성 시 단관 정보 저장
|
|
- 구역별 도면 할당 완료 후
|
|
- 라인번호 입력 완료 후
|
|
|
|
---
|
|
|
|
## 🔄 **2. pipe_revision_comparisons**
|
|
**용도**: PIPE 리비전 비교 결과 및 통계 저장
|
|
|
|
### **주요 컬럼**
|
|
- `job_no`: 작업 번호
|
|
- `current_file_id`: 현재 파일 ID
|
|
- `previous_cutting_plan_id`: 이전 Cutting Plan ID
|
|
- `total_drawings`: 전체 도면 수
|
|
- `changed_drawings`: 변경된 도면 수
|
|
- `total_segments`: 전체 단관 수
|
|
- `added_segments`: 추가된 단관 수
|
|
- `removed_segments`: 삭제된 단관 수
|
|
- `modified_segments`: 수정된 단관 수
|
|
|
|
### **사용 시점**
|
|
- 새로운 BOM 업로드 시 (Cutting Plan 작성 후)
|
|
- 기존 Cutting Plan과 신규 BOM 비교 시
|
|
- 리비전 변경사항 분석 시
|
|
|
|
---
|
|
|
|
## 📝 **3. pipe_revision_changes**
|
|
**용도**: PIPE 리비전 변경사항 상세 정보 저장
|
|
|
|
### **주요 컬럼**
|
|
- `comparison_id`: 비교 결과 ID (pipe_revision_comparisons 참조)
|
|
- `drawing_name`: 도면명
|
|
- `change_type`: 변경 유형 (added, removed, modified, unchanged)
|
|
- `old_*`: 이전 데이터 (라인번호, 재질, 길이 등)
|
|
- `new_*`: 새로운 데이터 (라인번호, 재질, 길이 등)
|
|
- `change_reason`: 변경 사유
|
|
|
|
### **사용 시점**
|
|
- 리비전 비교 수행 시 각 단관별 변경사항 기록
|
|
- 변경사항 상세 분석 시
|
|
- 리비전 이력 추적 시
|
|
|
|
---
|
|
|
|
## 📸 **4. pipe_issue_snapshots**
|
|
**용도**: 이슈 관리용 스냅샷 메타데이터 저장
|
|
|
|
### **주요 컬럼**
|
|
- `job_no`: 작업 번호
|
|
- `snapshot_name`: 스냅샷 이름
|
|
- `is_active`: 활성 상태
|
|
- `is_locked`: 잠금 상태 (이슈 관리 시작 시 true)
|
|
- `total_segments`: 총 단관 수
|
|
- `total_drawings`: 총 도면 수
|
|
- `created_at`: 생성 시간
|
|
- `locked_at`: 잠금 시간
|
|
|
|
### **사용 시점**
|
|
- Cutting Plan 확정 시 자동 생성
|
|
- 이슈 관리 시작 시 잠금
|
|
- 리비전 보호 활성화 시
|
|
|
|
---
|
|
|
|
## 🔒 **5. pipe_issue_segments**
|
|
**용도**: 스냅샷된 단관 정보 저장 (고정 데이터)
|
|
|
|
### **주요 컬럼**
|
|
- `snapshot_id`: 스냅샷 ID (pipe_issue_snapshots 참조)
|
|
- `area`: 구역 정보
|
|
- `drawing_name`: 도면명
|
|
- `line_no`: 라인번호
|
|
- `material_grade`: 재질
|
|
- `length_mm`: 길이
|
|
- `end_preparation`: 끝단 가공
|
|
- `original_cutting_plan_id`: 원본 Cutting Plan ID
|
|
|
|
### **사용 시점**
|
|
- Cutting Plan 확정 시 현재 데이터 복사
|
|
- 이슈 관리 페이지에서 기준 데이터로 사용
|
|
- 리비전과 무관하게 고정된 데이터 제공
|
|
|
|
---
|
|
|
|
## 📋 **6. pipe_drawing_issues**
|
|
**용도**: 도면 전반적인 이슈 저장
|
|
|
|
### **주요 컬럼**
|
|
- `snapshot_id`: 스냅샷 ID (pipe_issue_snapshots 참조)
|
|
- `area`: 구역 정보
|
|
- `drawing_name`: 도면명
|
|
- `issue_description`: 이슈 설명 (자유 텍스트)
|
|
- `severity`: 심각도 (low, medium, high, critical)
|
|
- `status`: 상태 (open, in_progress, resolved)
|
|
- `resolution_notes`: 해결 방법
|
|
- `reported_by`: 보고자
|
|
|
|
### **사용 시점**
|
|
- 현장에서 도면 전체에 대한 문제 발견 시
|
|
- 배관 간섭, 라우팅 변경 등 전반적 이슈 기록
|
|
- 설계 변경 요청 시
|
|
|
|
### **예시**
|
|
```
|
|
구역: #01
|
|
도면: P&ID-001
|
|
이슈: "도면 A 전체적으로 배관 간섭이 심함. 현장 여건상 일부 루트 변경 필요"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 **7. pipe_segment_issues**
|
|
**용도**: 개별 단관별 이슈 저장
|
|
|
|
### **주요 컬럼**
|
|
- `snapshot_id`: 스냅샷 ID (pipe_issue_snapshots 참조)
|
|
- `segment_id`: 단관 ID (pipe_issue_segments 참조)
|
|
- `issue_description`: 이슈 설명
|
|
- `issue_type`: 이슈 유형 (cutting, installation, material, routing, other)
|
|
- `length_change`: 길이 변경량 (+/- mm)
|
|
- `new_length`: 최종 길이
|
|
- `material_change`: 재질 변경 정보
|
|
- `severity`: 심각도
|
|
- `status`: 상태
|
|
|
|
### **사용 시점**
|
|
- 개별 단관에서 문제 발견 시
|
|
- 현장 절단, 설치 문제 등 구체적 이슈 기록
|
|
- 단관별 수정사항 추적
|
|
|
|
### **예시**
|
|
```
|
|
구역: #01
|
|
도면: P&ID-001
|
|
라인번호: LINE-A-001
|
|
이슈: "설치가 힘들어 30mm 절단함"
|
|
길이 변경: -30mm
|
|
최종 길이: 1470mm
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 **테이블 관계도**
|
|
|
|
```
|
|
pipe_cutting_plans (단관 정보)
|
|
↓
|
|
pipe_revision_comparisons (리비전 비교)
|
|
↓
|
|
pipe_revision_changes (변경사항 상세)
|
|
|
|
pipe_cutting_plans (단관 정보)
|
|
↓ (확정 시 스냅샷)
|
|
pipe_issue_snapshots (스냅샷 메타)
|
|
↓
|
|
pipe_issue_segments (고정된 단관 정보)
|
|
↓
|
|
pipe_segment_issues (단관별 이슈)
|
|
|
|
pipe_issue_snapshots (스냅샷 메타)
|
|
↓
|
|
pipe_drawing_issues (도면별 이슈)
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 **데이터 흐름**
|
|
|
|
### **1. Cutting Plan 작성**
|
|
```
|
|
BOM 업로드 → PIPE 데이터 추출 → pipe_cutting_plans 저장
|
|
```
|
|
|
|
### **2. 리비전 발생**
|
|
```
|
|
새 BOM 업로드 → 기존 데이터 비교 → pipe_revision_comparisons + pipe_revision_changes 저장
|
|
```
|
|
|
|
### **3. Cutting Plan 확정**
|
|
```
|
|
확정 버튼 클릭 → pipe_issue_snapshots 생성 → pipe_issue_segments 복사 (고정)
|
|
```
|
|
|
|
### **4. 이슈 관리**
|
|
```
|
|
현장 이슈 발생 → pipe_drawing_issues (도면별) 또는 pipe_segment_issues (단관별) 저장
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 **리비전 보호 메커니즘**
|
|
|
|
### **확정 전**
|
|
- `pipe_cutting_plans`: 리비전 시 변경됨 ❌
|
|
- Excel 내보내기: 현재 데이터 기준 (변동 가능)
|
|
|
|
### **확정 후**
|
|
- `pipe_issue_snapshots`: 잠금 상태 🔒
|
|
- `pipe_issue_segments`: 고정된 데이터 ✅
|
|
- Excel 내보내기: 스냅샷 데이터 기준 (고정)
|
|
- 이슈 관리: 고정된 데이터 기준으로 진행
|
|
|
|
---
|
|
|
|
## 📊 **자동 마이그레이션**
|
|
|
|
모든 PIPE 관련 테이블은 `backend/scripts/analyze_and_fix_schema.py`에 포함되어 있어 **자동으로 생성**됩니다.
|
|
|
|
### **마이그레이션 포함 사항**
|
|
- ✅ 7개 테이블 자동 생성
|
|
- ✅ 모든 인덱스 자동 생성
|
|
- ✅ 외래키 제약조건 설정
|
|
- ✅ 기본값 및 제약조건 설정
|
|
|
|
### **배포 시 자동 실행**
|
|
```bash
|
|
# Docker 컨테이너 시작 시 자동 실행
|
|
./start.sh → analyze_and_fix_schema.py → PIPE 테이블 생성
|
|
```
|
|
|
|
---
|
|
|
|
## 🎉 **핵심 장점**
|
|
|
|
1. **완전한 리비전 보호**: 확정 후 데이터 변경 불가
|
|
2. **체계적 이슈 관리**: 도면별/단관별 구분 관리
|
|
3. **자동 마이그레이션**: 배포 시 자동 테이블 생성
|
|
4. **성능 최적화**: 모든 주요 컬럼에 인덱스 설정
|
|
5. **데이터 무결성**: 외래키 제약조건으로 관계 보장
|
|
|
|
이제 **완벽한 PIPE 관리 시스템**의 데이터베이스 기반이 구축되었습니다! 🚀
|