Files
sam-docs/projects/legacy-5130/02_PRODUCT.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

251 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 품목/모델 (Product/Model) 분석
## 개요
- **디렉토리**: `/models/`
- **DB 테이블**: `models`, `parts`, `parts_sub`
- **주요 기능**: 제품 모델 정의, BOM(Bill of Materials) 관리, 단가 계산
## 디렉토리 구조
```
/models/
├── _request.php # 요청 파라미터
├── _row.php # 행 렌더링
├── _part_row.php # 부품 행 렌더링
├── _part_sub_row.php # 하위 부품 행 렌더링
├── insert.php # 모델/부품 저장
├── list.php # 모델 목록
├── write_form.php # 모델 등록/수정 폼
├── modelslist.php # 모델 리스트 조회
├── itemlist.php # 아이템 리스트
├── sub_table.php # 하위 부품 테이블
├── basic_model.php # 기본 모델 설정
├── models.json # 모델 JSON 데이터
└── items.json # 아이템 JSON 데이터
```
## DB 스키마
### 1. models 테이블 (모델 마스터)
```sql
CREATE TABLE models (
model_id INT AUTO_INCREMENT PRIMARY KEY,
model_name VARCHAR(100), -- 모델명
major_category VARCHAR(50), -- 대분류 (슬랫, 스크린 등)
finishing_type VARCHAR(50), -- 마감 유형
description TEXT, -- 설명
guiderail_type VARCHAR(50), -- 가이드레일 유형
update_log TEXT, -- 수정이력
is_deleted TINYINT DEFAULT 0, -- 삭제플래그
INDEX idx_model_name (model_name),
INDEX idx_major_category (major_category)
);
```
### 2. parts 테이블 (부품 - 2단계)
```sql
CREATE TABLE parts (
part_id INT AUTO_INCREMENT PRIMARY KEY,
model_id INT, -- 부모 모델 ID
part_name VARCHAR(100), -- 부품명
spec VARCHAR(100), -- 규격
unit VARCHAR(20), -- 단위
quantity DECIMAL(10,2), -- 수량
unitprice DECIMAL(15,0), -- 단가
memo TEXT, -- 메모
is_deleted TINYINT DEFAULT 0, -- 삭제플래그
FOREIGN KEY (model_id) REFERENCES models(model_id),
INDEX idx_model_id (model_id)
);
```
### 3. parts_sub 테이블 (하위 부품 - 3단계)
```sql
CREATE TABLE parts_sub (
subpart_id INT AUTO_INCREMENT PRIMARY KEY,
part_id INT, -- 부모 부품 ID
subpart_name VARCHAR(100), -- 하위 부품명
material VARCHAR(100), -- 소재
-- 가격 계산 필드
bendSum DECIMAL(15,0), -- 벤딩 합계
plateSum DECIMAL(15,0), -- 판재 합계
finalSum DECIMAL(15,0), -- 최종 합계
unitPrice DECIMAL(15,0), -- 단가
computedPrice DECIMAL(15,0), -- 계산 가격
quantity DECIMAL(10,2), -- 수량
lineTotal DECIMAL(15,0), -- 행 합계
image_url VARCHAR(500), -- 이미지 URL
is_deleted TINYINT DEFAULT 0, -- 삭제플래그
FOREIGN KEY (part_id) REFERENCES parts(part_id),
INDEX idx_part_id (part_id)
);
```
## 계층 구조
```
models (모델)
└── parts (부품)
└── parts_sub (하위 부품)
예시:
├── KD-SLAT-001 (슬랫 모델)
│ ├── 가이드레일 (부품)
│ │ ├── 상부 브라켓 (하위 부품)
│ │ ├── 하부 브라켓 (하위 부품)
│ │ └── 레일 바디 (하위 부품)
│ ├── 슬랫 본체 (부품)
│ │ ├── 슬랫 코일 (하위 부품)
│ │ └── 인터락 (하위 부품)
│ └── 구동부 (부품)
│ ├── 모터 (하위 부품)
│ └── 샤프트 (하위 부품)
```
## 비즈니스 로직
### 모델 관리 (insert.php)
```php
// 1단계: 모델 저장
if ($mode == "insert") {
$sql = "INSERT INTO models (model_name, major_category, finishing_type,
description, update_log, guiderail_type) VALUES (?, ?, ?, ?, ?, ?)";
}
// 2단계: 부품 저장 (배열 처리)
if(isset($_POST['part_name']) && is_array($_POST['part_name'])) {
// 기존 부품과 비교하여 삭제된 부품 처리
// 신규 부품 INSERT, 기존 부품 UPDATE
}
// 3단계: 하위 부품 저장
if(isset($_POST['subpart_name']) && is_array($_POST['subpart_name'])) {
// parent_part_id로 부모 부품과 연결
}
```
### 복사 기능
```php
// 모델 복사 시 하위 구조 전체 복사
if ($mode == "copy") {
// 1. 모델 복사 → 새 model_id
// 2. 부품 복사 → partMapping (old_id → new_id)
// 3. 하위 부품 복사 → partMapping 기반 parent_id 변환
}
```
### 가격 계산
- `bendSum`: 벤딩 공정 비용 합계
- `plateSum`: 판재 비용 합계
- `finalSum`: bendSum + plateSum
- `computedPrice`: 추가 가공비 포함
- `lineTotal`: unitPrice × quantity
## 관련 JSON 데이터
### models.json
```json
[
{
"model_name": "KD-SLAT-001",
"slatitem": "슬랫",
"pair": "single"
},
{
"model_name": "KD-SCREEN-001",
"slatitem": "스크린",
"pair": "double"
}
]
```
### items.json
```json
[
{
"item_code": "ITM001",
"item_name": "가이드레일 A형",
"category": "가이드레일"
}
]
```
## 관련 디렉토리
### 단가 관리 디렉토리
```
/price_angle/ # 앵글 단가
/price_bend/ # 벤딩 단가
/price_motor/ # 모터 단가
/price_pipe/ # 파이프 단가
/price_pole/ # 폴 단가
/price_raw_materials/ # 원자재 단가
/price_screenplate/ # 스크린판 단가
/price_shaft/ # 샤프트 단가
/price_smokeban/ # 연기차단 단가
```
### 벤딩/가공 관련
```
/bending/ # 벤딩 작업
/bendingfee/ # 벤딩 비용
/bendingmap/ # 벤딩 맵
/etcbending/ # 기타 벤딩
```
## SAM 마이그레이션 포인트
### 1. BOM 구조 개선
```sql
-- SAM: 재귀적 BOM 구조
bom_items (
id,
tenant_id,
parent_id, -- NULL이면 최상위 모델
item_type, -- model, assembly, part, material
item_code,
item_name,
quantity,
unit_price,
level, -- BOM 레벨 (1, 2, 3, ...)
sort_order
)
```
### 2. 가격 계산 분리
```sql
-- SAM: 가격 계산 이력 관리
price_calculations (
id,
bom_item_id,
calculation_type, -- bending, material, labor
base_price,
markup_rate,
final_price,
effective_from,
effective_to
)
```
### 3. 버전 관리
```sql
-- SAM: 모델 버전 관리
model_versions (
id,
model_id,
version,
snapshot JSON, -- BOM 스냅샷
created_at,
created_by
)
```
## 참고 파일
- `/models/insert.php` - 3단계 계층 저장 로직
- `/models/write_form.php` - BOM 편집 UI
- `/common.php:selectModel()` - 모델 선택 헬퍼 함수