- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
9.6 KiB
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. 데이터 저장 프로세스
- 폼 데이터 수집
- JSON 형태로 변환
- AJAX를 통한 서버 전송
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 설계
- 접근성 향상
- 다국어 지원
결론
절곡 작업일지 시스템은 제조업의 품질 관리와 생산 과정 추적을 위한 핵심 시스템입니다. 체계적인 자재 관리, 정확한 중량 계산, 그리고 효율적인 로트번호 추적을 통해 제품의 품질과 일관성을 보장합니다.
이 문서를 참고하여 유사한 시스템을 개발할 때는 위의 구조와 패턴을 활용하여 일관성 있고 유지보수가 용이한 코드를 작성하는 것이 중요합니다.