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 앞으로 스키마 문제가 발생하면 위 명령 하나로 자동 해결!
7.1 KiB
7.1 KiB
🗄️ 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: 현재 파일 IDprevious_cutting_plan_id: 이전 Cutting Plan IDtotal_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개 테이블 자동 생성
- ✅ 모든 인덱스 자동 생성
- ✅ 외래키 제약조건 설정
- ✅ 기본값 및 제약조건 설정
배포 시 자동 실행
# Docker 컨테이너 시작 시 자동 실행
./start.sh → analyze_and_fix_schema.py → PIPE 테이블 생성
🎉 핵심 장점
- 완전한 리비전 보호: 확정 후 데이터 변경 불가
- 체계적 이슈 관리: 도면별/단관별 구분 관리
- 자동 마이그레이션: 배포 시 자동 테이블 생성
- 성능 최적화: 모든 주요 컬럼에 인덱스 설정
- 데이터 무결성: 외래키 제약조건으로 관계 보장
이제 완벽한 PIPE 관리 시스템의 데이터베이스 기반이 구축되었습니다! 🚀