# 절곡 작업일지 시스템 개발문서

## 개요
절곡 작업일지 시스템은 스크린 셔터 제품의 절곡 작업 과정을 관리하고 기록하는 웹 애플리케이션입니다. 이 시스템은 가이드레일, 하단마감재, 셔터박스, 연기차단재 등의 자재를 체계적으로 관리하며, 각 자재별로 로트번호를 추적할 수 있습니다.

## 시스템 구조

### 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
<input type="text" 
       class="form-control noborder-input lotnumInput" 
       data-itemname="RS-30" 
       data-usesurang="2" 
       name="lotnum_wall[]" 
       autocomplete="off" 
       placeholder="로트번호" />
```

### 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 설계
- 접근성 향상
- 다국어 지원

## 결론

절곡 작업일지 시스템은 제조업의 품질 관리와 생산 과정 추적을 위한 핵심 시스템입니다. 체계적인 자재 관리, 정확한 중량 계산, 그리고 효율적인 로트번호 추적을 통해 제품의 품질과 일관성을 보장합니다.

이 문서를 참고하여 유사한 시스템을 개발할 때는 위의 구조와 패턴을 활용하여 일관성 있고 유지보수가 용이한 코드를 작성하는 것이 중요합니다.
