- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON) - MES 프로젝트 문서 - API/프론트엔드 스펙 문서 - 가이드 및 레퍼런스 문서
6.8 KiB
6.8 KiB
품목/모델 (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 테이블 (모델 마스터)
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단계)
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단계)
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)
// 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로 부모 부품과 연결
}
복사 기능
// 모델 복사 시 하위 구조 전체 복사
if ($mode == "copy") {
// 1. 모델 복사 → 새 model_id
// 2. 부품 복사 → partMapping (old_id → new_id)
// 3. 하위 부품 복사 → partMapping 기반 parent_id 변환
}
가격 계산
bendSum: 벤딩 공정 비용 합계plateSum: 판재 비용 합계finalSum: bendSum + plateSumcomputedPrice: 추가 가공비 포함lineTotal: unitPrice × quantity
관련 JSON 데이터
models.json
[
{
"model_name": "KD-SLAT-001",
"slatitem": "슬랫",
"pair": "single"
},
{
"model_name": "KD-SCREEN-001",
"slatitem": "스크린",
"pair": "double"
}
]
items.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 구조 개선
-- 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. 가격 계산 분리
-- SAM: 가격 계산 이력 관리
price_calculations (
id,
bom_item_id,
calculation_type, -- bending, material, labor
base_price,
markup_rate,
final_price,
effective_from,
effective_to
)
3. 버전 관리
-- 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()- 모델 선택 헬퍼 함수