343 lines
9.6 KiB
Markdown
343 lines
9.6 KiB
Markdown
|
|
# 절곡 작업일지 시스템 개발문서
|
||
|
|
|
||
|
|
## 개요
|
||
|
|
절곡 작업일지 시스템은 스크린 셔터 제품의 절곡 작업 과정을 관리하고 기록하는 웹 애플리케이션입니다. 이 시스템은 가이드레일, 하단마감재, 셔터박스, 연기차단재 등의 자재를 체계적으로 관리하며, 각 자재별로 로트번호를 추적할 수 있습니다.
|
||
|
|
|
||
|
|
## 시스템 구조
|
||
|
|
|
||
|
|
### 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 설계
|
||
|
|
- 접근성 향상
|
||
|
|
- 다국어 지원
|
||
|
|
|
||
|
|
## 결론
|
||
|
|
|
||
|
|
절곡 작업일지 시스템은 제조업의 품질 관리와 생산 과정 추적을 위한 핵심 시스템입니다. 체계적인 자재 관리, 정확한 중량 계산, 그리고 효율적인 로트번호 추적을 통해 제품의 품질과 일관성을 보장합니다.
|
||
|
|
|
||
|
|
이 문서를 참고하여 유사한 시스템을 개발할 때는 위의 구조와 패턴을 활용하여 일관성 있고 유지보수가 용이한 코드를 작성하는 것이 중요합니다.
|