# 절곡 작업일지 시스템 개발문서 ## 개요 절곡 작업일지 시스템은 스크린 셔터 제품의 절곡 작업 과정을 관리하고 기록하는 웹 애플리케이션입니다. 이 시스템은 가이드레일, 하단마감재, 셔터박스, 연기차단재 등의 자재를 체계적으로 관리하며, 각 자재별로 로트번호를 추적할 수 있습니다. ## 시스템 구조 ### 1. 주요 파일 구성 - `viewBendingWork.php` - 메인 작업일지 화면 - `_row.php` - 데이터 행 표시 템플릿 - `load_output_extraTable.php` - 추가 테이블 데이터 로드 - `mymodal.php` - 모달 컴포넌트 - `fetch_lot_bending.php` - 로트 데이터 조회 - `insert_recordbending.php` - 작업 기록 저장 ### 2. 데이터베이스 테이블 - `output` - 메인 작업 데이터 - `output_extra` - 추가 작업 데이터 - `recordbending` - 절곡 작업 기록 (JSON 형태) ## 핵심 기능 ### 1. 자재 중량 계산 시스템 ```php function calWeight($calItem, $calWidth, $calHeight) { global $SUS_total, $EGI_total; // SUS 304: 7.93 g/cm³, EGI 1.2T: 7.85 g/cm³ if (strpos($calItem, 'SUS') !== false) { $density = 7.93; } elseif (strpos($calItem, 'EGI') !== false) { $density = 7.85; } $volume_cm3 = ($thickness * $calWidth * $calHeight) / 1000; $weight_kg = ($volume_cm3 * $density) / 1000; // 누적 합계 계산 if (strpos($calItem, 'SUS') !== false) { $SUS_total += $weight_kg; } elseif (strpos($calItem, 'EGI') !== false) { $EGI_total += $weight_kg; } return ['current_weight' => number_format($weight_kg, 2)]; } ``` ### 2. 길이 코드 생성 시스템 ```php function getSLengthCode($length, $category) { switch ($category) { case '연기차단재50': switch ($length) { case '3000': return '53'; case '4000': return '54'; default: return null; } case '연기차단재80': switch ($length) { case '3000': return '83'; case '4000': return '84'; default: return null; } case '기타': switch ($length) { case '1219': return '12'; case '2438': return '24'; case '3000': return '30'; case '3500': return '35'; case '4000': return '40'; case '4150': return '41'; case '4200': return '42'; case '4300': return '43'; default: return null; } default: return null; } } ``` ### 3. 동적 이미지 생성 시스템 ```php function drawImage($sourcePath, $savePath, $textData, $fontSize = 3) { // GD 라이브러리를 사용한 이미지 텍스트 추가 $image = imagecreatefromjpeg($sourcePath); $textColor = imagecolorallocate($image, 255, 0, 0); // 빨간색 foreach ($textData as $textItem) { imagestring( $image, $fontSize, intval($textItem['x']), intval($textItem['y']), $textItem['text'], $textColor ); } imagejpeg($image, $savePath); imagedestroy($image); return true; } ``` ## 자재 분류 및 관리 ### 1. 가이드레일 시스템 - **벽면형**: 120*70 규격, SUS 1.2T 또는 EGI 1.55T - **측면형**: 120*120 규격, SUS 1.2T 또는 EGI 1.55T - **혼합형**: 벽면형과 측면형의 조합 #### 벽면형 구성요소 ```php $itemPrefixes = [ '①마감재' => 'RS', // SUS 마감 '②본체' => 'RM', // EGI 본체 '③C형' => 'RC', // EGI C형 '④D형' => 'RD' // EGI D형 (KSS02 제외) ]; ``` #### 측면형 구성요소 ```php $itemPrefixes = [ '①②마감재' => 'SS', // SUS 마감 '③본체' => 'SM', // EGI 본체 '④본체디딤' => 'SC', // EGI 디딤 '⑤C형' => 'SD', // EGI C형 '⑥D형' => 'SM' // EGI D형 (KSS02 제외) ]; ``` ### 2. 하단마감재 시스템 - **하단마감재**: 60*40 규격, 길이별(3000, 4000) - **하단보강엘바**: 60*17 규격, 길이별(3000, 4000) - **하단보강평철**: 50*1.15T 규격, 길이별(3000, 4000) ### 3. 셔터박스 시스템 - **박스 방향**: 양면, 밑면, 후면 - **표준 규격**: 500*350, 500*380 - **커스텀 규격**: 사용자 정의 크기 #### 박스 구성요소 ```php $components = [ '①전면부' => ['prefix' => 'CF', 'dimension' => $boxheight + 122], '②린텔부' => ['prefix' => 'CL', 'dimension' => $boxwidth - 330], '③점검구' => ['prefix' => 'CP', 'dimension' => $boxwidth - 200], '④후면코너부' => ['prefix' => 'CB', 'dimension' => 170], '⑤상부덮개' => ['prefix' => 'XX', 'dimension' => $calculateWidth], '⑥측면부' => ['prefix' => 'XX', 'dimension' => $box['size']] ]; ``` ### 4. 연기차단재 시스템 - **레일용 [W50]**: EGI 0.8T + 화이바 글라스 코팅직물 - **케이스용 [W80]**: EGI 0.8T + 화이바 글라스 코팅직물 ## 로트번호 관리 시스템 ### 1. 로트번호 입력 필드 ```html ``` ### 2. 로트번호 데이터 구조 ```php $lotData = [ 'itemname' => 'RS-30', // 품목명-길이코드 'usesurang' => 2, // 사용 수량 'lottype' => 'product', // 로트 타입 (product/material) 'lotnum' => 'LOT2024001' // 실제 로트번호 ]; ``` ### 3. 로트번호 모달 시스템 - **생산품 탭**: 완성된 제품의 로트번호 관리 - **원자재 탭**: 원자재의 로트번호 관리 - **XX로 시작하는 품목**: 자동으로 원자재 탭으로 분류 ## 결재 시스템 ### 1. 결재 구조 ```php $approvalData = [ 'writer' => [ 'name' => $orderman, 'date' => $indateStr ], 'reviewer' => [ 'name' => $user_name, 'date' => $todayStr ], 'approver' => [ 'name' => $user_name, 'date' => $todayStr ] ]; ``` ### 2. 품질 승인 권한 ```php $QCadmin = false; if($user_name=='이세희' || $user_name=='개발자' || $user_name=='함신옥') { $QCadmin = true; } ``` ## 데이터 저장 및 관리 ### 1. JSON 데이터 구조 ```php $formData = [ ['approval' => $approvalData], ['productionManager' => $productionManager], ['lotNumbers' => $lotNums], ['wireLotNumbers' => $wireLotNums], ['num' => $num], ['tablename' => $tablename] ]; ``` ### 2. 데이터 저장 프로세스 1. 폼 데이터 수집 2. JSON 형태로 변환 3. AJAX를 통한 서버 전송 4. `insert_recordbending.php`에서 데이터베이스 저장 ## UI/UX 특징 ### 1. 반응형 디자인 - Bootstrap 5 기반 반응형 레이아웃 - 모바일 및 데스크톱 환경 지원 ### 2. 사용자 인터페이스 - 직관적인 테이블 형태의 데이터 표시 - 툴팁을 통한 중량 정보 표시 - 모달을 통한 로트번호 선택 ### 3. 상호작용 요소 - 실시간 데이터 입력 및 검증 - 드래그 앤 드롭 지원 - 키보드 단축키 지원 ## 보안 및 권한 관리 ### 1. 세션 기반 인증 ```php include $_SERVER['DOCUMENT_ROOT'] . "/session.php"; ``` ### 2. 권한별 기능 제한 - 일반 사용자: 기본 작업일지 작성 - 품질담당자: 품질 승인 권한 - 관리자: 모든 기능 접근 권한 ## 성능 최적화 ### 1. 이미지 처리 최적화 - GD 라이브러리 사용으로 빠른 이미지 생성 - 이미지 캐싱을 통한 중복 생성 방지 ### 2. 데이터베이스 최적화 - Prepared Statement 사용으로 SQL 인젝션 방지 - 인덱스를 통한 빠른 데이터 검색 ### 3. AJAX 최적화 - 비동기 데이터 로딩으로 사용자 경험 향상 - 요청 취소 기능으로 불필요한 네트워크 트래픽 방지 ## 확장성 및 유지보수 ### 1. 모듈화된 구조 - 기능별로 분리된 PHP 함수들 - 재사용 가능한 컴포넌트 설계 ### 2. 설정 파일 분리 - 데이터베이스 연결 정보 분리 - 환경별 설정 관리 ### 3. 에러 처리 및 로깅 - 상세한 에러 메시지 제공 - 디버그 로그 시스템 ## 개발 가이드라인 ### 1. 코드 스타일 - PSR-12 코딩 표준 준수 - 일관된 네이밍 컨벤션 사용 - 적절한 주석 및 문서화 ### 2. 데이터베이스 설계 - 정규화된 테이블 구조 - 적절한 인덱스 설정 - 외래키 제약조건 활용 ### 3. 보안 고려사항 - SQL 인젝션 방지 - XSS 공격 방지 - CSRF 토큰 사용 ## 테스트 및 배포 ### 1. 테스트 환경 - 로컬 개발 환경 - 스테이징 환경 - 프로덕션 환경 ### 2. 배포 프로세스 - 버전 관리 시스템 활용 - 자동화된 배포 스크립트 - 롤백 계획 수립 ## 향후 개선 방향 ### 1. 기능 개선 - 실시간 협업 기능 추가 - 모바일 앱 개발 - API 기반 시스템 구축 ### 2. 성능 개선 - 캐싱 시스템 도입 - 데이터베이스 쿼리 최적화 - CDN 활용 ### 3. 사용자 경험 개선 - 직관적인 UI/UX 설계 - 접근성 향상 - 다국어 지원 ## 결론 절곡 작업일지 시스템은 제조업의 품질 관리와 생산 과정 추적을 위한 핵심 시스템입니다. 체계적인 자재 관리, 정확한 중량 계산, 그리고 효율적인 로트번호 추적을 통해 제품의 품질과 일관성을 보장합니다. 이 문서를 참고하여 유사한 시스템을 개발할 때는 위의 구조와 패턴을 활용하여 일관성 있고 유지보수가 용이한 코드를 작성하는 것이 중요합니다.