docs: [bending] 코드체계 변경 문서 업데이트 + kkk 폴더 git 추적 제외
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
> **위치**: MNG 생산관리 > 절곡품 관리 (신규 메뉴)
|
||||
> **목표**: 경동기업(5130) 수준의 절곡품 마스터 관리 + 전개도 데이터 + 이미지 관리
|
||||
> **원칙**: 기존 BendingInfoBuilder/PrefixResolver 보존, **전용 테이블 분리 방식**
|
||||
> **최종수정**: 2026-03-19 (테이블 분리 완료, 데이터 이관 완료)
|
||||
> **최종수정**: 2026-03-21 (code/lot_no 분리 완료, bending_models lot_no 제거)
|
||||
|
||||
---
|
||||
|
||||
@@ -56,8 +56,9 @@ CREATE TABLE bending_items (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
tenant_id BIGINT UNSIGNED NOT NULL,
|
||||
|
||||
-- 코드 체계 (LOT 코드 = 제품Code + 종류Code + YYMMDD)
|
||||
code VARCHAR(50) NOT NULL, -- LOT: {제품}{종류}{YYMMDD} (예: CP260319 = 케이스 점검구)
|
||||
-- 코드 체계 (code/lot_no 분리 — 2026-03-21)
|
||||
code VARCHAR(50) NOT NULL DEFAULT 'BD', -- 고정값 'BD' (절곡품 타입 식별)
|
||||
lot_no VARCHAR(50) NULL, -- LOT 번호: {제품}{종류}{YYMMDD}-{길이} (예: CP6321-30)
|
||||
legacy_code VARCHAR(50) NULL, -- 이전 BD-LEGACY-* / BD-{품명}-* 코드
|
||||
legacy_bending_id INT UNSIGNED NULL, -- chandj.bending.id 참조
|
||||
|
||||
@@ -96,11 +97,47 @@ CREATE TABLE bending_items (
|
||||
INDEX idx_material (material),
|
||||
INDEX idx_model_name (model_name),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_lot_no (lot_no),
|
||||
INDEX idx_legacy_code (legacy_code),
|
||||
UNIQUE KEY uk_tenant_code (tenant_id, code, deleted_at)
|
||||
UNIQUE KEY uk_tenant_lot_no (tenant_id, lot_no, deleted_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
```
|
||||
|
||||
## ⚠️ 아키텍처 변경 2: code/lot_no 분리 (2026-03-21)
|
||||
|
||||
### 변경 결정 배경
|
||||
|
||||
초기 설계는 `code` 컬럼에 LOT 코드(`CP260319`)를 저장했으나, 다음 문제로 **code/lot_no 분리**:
|
||||
|
||||
| 문제 | 설명 |
|
||||
|------|------|
|
||||
| **역할 혼재** | code가 "타입 식별"과 "LOT 번호" 두 역할을 겸함 |
|
||||
| **bending_models 불일치** | models는 GR/SB/BB 접두사인데 items는 CP260319 등 가변 |
|
||||
| **검색 비효율** | code 앞 2자리 파싱이 필요 → lot_no로 분리하면 직접 검색 가능 |
|
||||
|
||||
### 최종 구조
|
||||
|
||||
| 테이블 | code | lot_no | legacy_code |
|
||||
|--------|------|--------|-------------|
|
||||
| **bending_items** | `'BD'` (고정) | `'CP6321-30'` (LOT 번호) | `'BD-CP-30'` (이전 코드) |
|
||||
| **bending_models** | `'GR'`/`'SB'`/`'BB'` (타입별) | **없음** (DROP) | `'GR-KSS01-벽면형-SUS'` (전체 코드) |
|
||||
|
||||
### 검색 로직 변경 (BendingCodeService.resolveItem)
|
||||
|
||||
```
|
||||
이전: WHERE code LIKE 'CP%' AND length_code = '30'
|
||||
현재: WHERE lot_no LIKE 'CP%' AND length_code = '30'
|
||||
폴백: WHERE legacy_code = 'BD-CP-30'
|
||||
```
|
||||
|
||||
### 마이그레이션
|
||||
|
||||
`2026_03_21_100000_separate_code_and_lot_no.php`:
|
||||
1. bending_items: lot_no 컬럼 추가 → 기존 code 값 이관 → code를 'BD'로 통일
|
||||
2. bending_models: 기존 code 값을 legacy_code로 이관 → code를 접두사(GR/SB/BB)만 유지 → lot_no DROP
|
||||
|
||||
---
|
||||
|
||||
### 전개도 데이터: `bending_items.bending_data` (JSON 컬럼)
|
||||
|
||||
> **변경 이력**: 초기 설계는 별도 `bending_data` 테이블이었으나, JSON 통합으로 최종 결정.
|
||||
@@ -115,7 +152,7 @@ CREATE TABLE bending_items (
|
||||
]
|
||||
```
|
||||
|
||||
### 테이블 관계도 (최종)
|
||||
### 테이블 관계도 (최종 — 2026-03-21)
|
||||
|
||||
```
|
||||
┌──────────────────────────┐ ┌──────────────────────┐
|
||||
@@ -124,11 +161,12 @@ CREATE TABLE bending_items (
|
||||
│ 기초관리 마스터 │ │ 가이드레일/케이스/ │
|
||||
│ 품명/재질/규격 (정규컬럼) │◄···│ 하단마감재 모델 │
|
||||
│ bending_data: JSON (내장) │ │ components JSON │
|
||||
│ code: RM260319 등 │ │ (sam_item_id 참조) │
|
||||
│ code: 'BD' (고정) │ │ code: 'GR'/'SB'/'BB' │
|
||||
│ lot_no: CP6321-30 (LOT) │ │ legacy_code: 전체코드 │
|
||||
└──────────┬───────────────┘ └──────────────────────┘
|
||||
│
|
||||
│ 코드 매핑 (FK 없음)
|
||||
│ code 앞 2자리로 items.code 패턴 매칭
|
||||
│ lot_no 앞 2자리로 items.code 패턴 매칭
|
||||
▼
|
||||
┌──────────────────────┐
|
||||
│ items (기존 무변경) │
|
||||
@@ -148,15 +186,16 @@ CREATE TABLE bending_items (
|
||||
│ 기초관리 마스터 전용 │ 코드 │ BD-{prod}{spec}-{length} │
|
||||
│ 품명/재질/규격 정규 컬럼 │ ·····→ │ 재고/BOM/작업지시서 연결 │
|
||||
│ 전개도 데이터 │ 매핑 │ item_category='BENDING' │
|
||||
│ code: CP260319 등 │ │ 재고관리용 (무변경) │
|
||||
│ bending_item_mappings 흡수│ │ │
|
||||
│ code: 'BD' (고정) │ │ 재고관리용 (무변경) │
|
||||
│ lot_no: CP6321-30 (LOT) │ │ │
|
||||
└──────────────────────────┘ └──────────────────────────┘
|
||||
|
||||
연결 방식: FK 없음
|
||||
- 재고 조회 필요 시: code 앞 2자리(제품+종류)로 items.code 패턴 매칭
|
||||
- 재고 조회 필요 시: lot_no 앞 2자리(제품+종류)로 items.code 패턴 매칭
|
||||
- resolveItem(): lot_no LIKE '{prod}{spec}%' AND length_code = '{len}'
|
||||
- items 테이블의 재고/BOM 기능은 완전히 독립 유지
|
||||
- BendingInfoBuilder는 items 테이블 계속 참조 (무변경)
|
||||
- bending_item_mappings 테이블 → 제거 (code에 흡수)
|
||||
- bending_item_mappings 테이블 → 제거 (lot_no에 흡수)
|
||||
```
|
||||
|
||||
### 영향도 분석 — 변경 / 무변경 구분
|
||||
@@ -209,6 +248,7 @@ CREATE TABLE bending_items (
|
||||
2026_03_19_100005_add_length_columns_to_bending_items.php
|
||||
2026_03_19_100006_create_bending_models_table.php
|
||||
2026_03_19_100007_move_bending_data_back_to_json.php
|
||||
2026_03_21_100000_separate_code_and_lot_no.php ← 🆕 code/lot_no 분리 + BD 통일 + models lot_no 제거
|
||||
|
||||
✅ 제거:
|
||||
app/Models/Production/BendingItemMapping.php ← 삭제됨
|
||||
@@ -305,31 +345,24 @@ docker cp /home/kkk/sam/5130/bottombar docker-api-1:/tmp/legacy_5130/bottombar
|
||||
MNG2 editPartOriginal() → sam_item_id로 기초관리 편집 페이지 연결
|
||||
```
|
||||
|
||||
### LOT 코드 체계
|
||||
### LOT 코드 체계 (2026-03-21 최종)
|
||||
|
||||
```
|
||||
형식: {제품Code}{종류Code}{YYMMDD}
|
||||
유니크: (tenant_id, code, length_code, deleted_at)
|
||||
code/lot_no 분리:
|
||||
code = 'BD' (고정, 절곡품 타입 식별)
|
||||
lot_no = {제품Code}{종류Code}{DateCode}-{LengthCode}
|
||||
|
||||
형식: {ProdCode 1자}{SpecCode 1자}{YYMDD 4자}-{LengthCode 2자}
|
||||
유니크: (tenant_id, lot_no, deleted_at)
|
||||
|
||||
예시:
|
||||
RS260319 + length_code=30 → 가이드레일(벽면) SUS마감 3000mm
|
||||
CF260319 → 케이스 전면부
|
||||
BS260319 + length_code=40 → 하단마감재(스크린) SUS 4000mm
|
||||
lot_no = CP6321-30 → 케이스(C) 점검구(P) 2026-03-21 길이3000mm
|
||||
lot_no = RS6319-30 → 가이드레일벽면(R) SUS마감(S) 2026-03-19 길이3000mm
|
||||
lot_no = BS6319-40 → 하단마감재스크린(B) SUS(S) 2026-03-19 길이4000mm
|
||||
|
||||
변환 완료: BD-PREFIX-LEN 112건 → LOT 코드
|
||||
미변환: BD-한글 58건, BD-LEGACY 40건 (legacy_code 유지, 향후 변환)
|
||||
```
|
||||
|
||||
### LOT 코드 체계 (레거시 형태 유지)
|
||||
|
||||
```
|
||||
형식: {제품Code}{종류Code}{YYMMDD}
|
||||
|
||||
예시:
|
||||
RM260319 → 가이드레일(벽면형) 본체, 2026-03-19
|
||||
RS260319 → 가이드레일(벽면형) SUS마감재, 2026-03-19
|
||||
CF260319 → 케이스 전면부, 2026-03-19
|
||||
BS260319 → 하단마감재(스크린) SUS, 2026-03-19
|
||||
검색 로직 (BendingCodeService.resolveItem):
|
||||
1차: WHERE lot_no LIKE '{prod}{spec}%' AND length_code = '{len}'
|
||||
2차: WHERE legacy_code = 'BD-{prod}{spec}-{len}' (폴백)
|
||||
```
|
||||
|
||||
**LOT 코드 테이블 (정본)**:
|
||||
@@ -366,7 +399,7 @@ docker cp /home/kkk/sam/5130/bottombar docker-api-1:/tmp/legacy_5130/bottombar
|
||||
| **bending_items** (전용 테이블) | **266건** | ✅ 전건 bending_data JSON 포함 |
|
||||
| **bending_models** (전용 테이블) | **62건** | ✅ guiderail 21 + shutterbox 30 + bottombar 11 |
|
||||
| items BENDING (기존, 무변경) | 215건 | 재고/BOM용 독립 유지 |
|
||||
| bending_item_mappings | **DROP 완료** | bending_items.code에 흡수 |
|
||||
| bending_item_mappings | **DROP 완료** | bending_items.lot_no에 흡수 |
|
||||
| 하장바 (bending_items) | **10건** | ✅ chandj 유효건과 일치 |
|
||||
| 이미지 (R2) | **미업로드** | 레거시 파일 docker 복사 후 커맨드 실행 필요 |
|
||||
|
||||
@@ -443,6 +476,12 @@ Step 1 (DB분석) → Step 2 (API) → Step 3 (MNG 화면) → Step 4 (React
|
||||
- 파일: FileViewController (API R2 프록시) + 이미지 업로드/표시
|
||||
- DB 메뉴: 기초관리 + 절곡품 + 케이스 + 하단마감재 (4개)
|
||||
|
||||
**Step 1 추가 완료 (2026-03-21 code/lot_no 분리):**
|
||||
- `2026_03_21_100000_separate_code_and_lot_no` 마이그레이션
|
||||
- bending_items: code → 'BD' 고정, lot_no 신규 컬럼 (기존 code 값 이관)
|
||||
- bending_models: code → 접두사만(GR/SB/BB), legacy_code에 전체코드 이관, lot_no DROP
|
||||
- BendingCodeService.resolveItem(): lot_no 기반 검색으로 변경
|
||||
|
||||
**미완료:**
|
||||
- ⬜ 이미지 R2 업로드 — 레거시 파일 docker 복사 후 커맨드 재실행 필요
|
||||
- ⬜ Step 4 React 연동 — 미착수
|
||||
@@ -517,7 +556,8 @@ Step 1 (DB분석) → Step 2 (API) → Step 3 (MNG 화면) → Step 4 (React
|
||||
│ bending_items (266건) │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ id: 100 │ │
|
||||
│ │ code: RM260319 ← LOT 코드 (제품+종류+날짜)│ │
|
||||
│ │ code: 'BD' ← 고정값 (절곡품 타입) │ │
|
||||
│ │ lot_no: CP6321-30 ← LOT 번호 (제품+종류+날짜-길이)│ │
|
||||
│ │ legacy_code: BD-LEGACY-042 ← 이전 코드 보존 │ │
|
||||
│ │ item_name: "마감재" ← 정규 컬럼 (인덱스) │ │
|
||||
│ │ item_sep: "스크린" ← 정규 컬럼 (인덱스) │ │
|
||||
@@ -770,7 +810,7 @@ fetch_guiderail_detail.php → React GuiderailPreview
|
||||
drawingTool.js (Canvas) → 2차 구현 (1차는 이미지 업로드만)
|
||||
inputList[] (별도 배열 5개) → bending_data JSON [{no, input, rate, sum, color, aAngle}]
|
||||
items (BENDING) + options → items 유지 (재고/BOM용, BendingInfoBuilder 무변경)
|
||||
bending_item_mappings → DROP 완료 (bending_items.code에 흡수)
|
||||
bending_item_mappings → DROP 완료 (bending_items.lot_no에 흡수)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user