Files
sam-kd/dev/viewBendingWork.md
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

9.6 KiB

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

개요

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

시스템 구조

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. 자재 중량 계산 시스템

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. 길이 코드 생성 시스템

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. 동적 이미지 생성 시스템

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
  • 혼합형: 벽면형과 측면형의 조합

벽면형 구성요소

$itemPrefixes = [
    '①마감재' => 'RS',    // SUS 마감
    '②본체' => 'RM',      // EGI 본체
    '③C형' => 'RC',       // EGI C형
    '④D형' => 'RD'        // EGI D형 (KSS02 제외)
];

측면형 구성요소

$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. 셔터박스 시스템

  • 박스 방향: 양면, 밑면, 후면
  • 표준 규격: 500350, 500380
  • 커스텀 규격: 사용자 정의 크기

박스 구성요소

$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. 로트번호 입력 필드

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

2. 로트번호 데이터 구조

$lotData = [
    'itemname' => 'RS-30',      // 품목명-길이코드
    'usesurang' => 2,           // 사용 수량
    'lottype' => 'product',     // 로트 타입 (product/material)
    'lotnum' => 'LOT2024001'    // 실제 로트번호
];

3. 로트번호 모달 시스템

  • 생산품 탭: 완성된 제품의 로트번호 관리
  • 원자재 탭: 원자재의 로트번호 관리
  • XX로 시작하는 품목: 자동으로 원자재 탭으로 분류

결재 시스템

1. 결재 구조

$approvalData = [
    'writer' => [
        'name' => $orderman,
        'date' => $indateStr
    ],
    'reviewer' => [
        'name' => $user_name,
        'date' => $todayStr
    ],
    'approver' => [
        'name' => $user_name,
        'date' => $todayStr
    ]
];

2. 품질 승인 권한

$QCadmin = false;
if($user_name=='이세희' || $user_name=='개발자' || $user_name=='함신옥') {
    $QCadmin = true;
}

데이터 저장 및 관리

1. JSON 데이터 구조

$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. 세션 기반 인증

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

결론

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

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