docs: [bending] 코드체계 변경 문서 업데이트 + kkk 폴더 git 추적 제외
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -17,3 +17,4 @@ _to_notion/
|
||||
|
||||
# 백업 파일
|
||||
contracts/docx/backup/
|
||||
kkk/
|
||||
|
||||
@@ -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에 흡수)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
553
dev/dev_plans/bending-management/diagram-전체구조.md
Normal file
553
dev/dev_plans/bending-management/diagram-전체구조.md
Normal file
@@ -0,0 +1,553 @@
|
||||
# 절곡품 관리 시스템 — 전체 다이어그램 (2026-03-21)
|
||||
|
||||
---
|
||||
|
||||
## 1. 시스템 아키텍처
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ SAM 절곡품 관리 시스템 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ MNG2 │ │ API │ │ React │ │
|
||||
│ │ (본사관리) │───→│ (핵심) │←───│ (사용자) │ │
|
||||
│ │ Blade+HTMX │ │ Laravel 12 │ │ Next.js │ │
|
||||
│ │ CRUD 프록시 │ │ REST API │ │ 생산/견적 │ │
|
||||
│ └──────────────┘ └──────┬───────┘ └──────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────┼──────────────┐ │
|
||||
│ ▼ ▼ ▼ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ bending_items│ │bending_models│ │ items │ │
|
||||
│ │ (기초관리) │ │ (절곡품모델) │ │ (재고/BOM) │ │
|
||||
│ │ 268건 │ │ 62건 │ │ 215건(BD) │ │
|
||||
│ └──────┬───────┘ └──────────────┘ └──────────────┘ │
|
||||
│ │ │
|
||||
│ │ 이미지 │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ files │───→│ Cloudflare │ │
|
||||
│ │ (메타데이터) │ │ R2 │ │
|
||||
│ └──────────────┘ └──────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 코드 체계 (2026-03-21 최종)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 코드 체계 3계층 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ [1] bending_items — 기초관리 마스터 │ │
|
||||
│ │ │ │
|
||||
│ │ code = 'BD' ← 고정값 (타입 식별) │ │
|
||||
│ │ lot_no = 'BD-CP.001' ← 자동채번 (분류+순번) │ │
|
||||
│ │ legacy_code = 'CHANDJ-18' ← 레거시 참조 │ │
|
||||
│ │ │ │
|
||||
│ │ 자동채번 규칙: │ │
|
||||
│ │ BD-{접두사2자}.{순번3자} │ │
|
||||
│ │ 예: BD-CP.001, BD-RS.003, BD-LE.001 │ │
|
||||
│ │ .001 = 대표(표준) 형상 │ │
|
||||
│ │ .002~ = 변형 형상 (최대 999종) │ │
|
||||
│ │ │ │
|
||||
│ │ Unique: (tenant_id, lot_no, deleted_at) │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ [2] bending_models — 절곡품 모델 (가이드레일/케이스/..)│ │
|
||||
│ │ │ │
|
||||
│ │ code = 'GR' / 'SB' / 'BB' ← 타입별 고정 접두사 │ │
|
||||
│ │ legacy_code = 'GR-3' ← 레거시 참조 │ │
|
||||
│ │ lot_no = (없음, DROP됨) │ │
|
||||
│ │ │ │
|
||||
│ │ 타입 구분: │ │
|
||||
│ │ GR = GUIDERAIL_MODEL (가이드레일 21건) │ │
|
||||
│ │ SB = SHUTTERBOX_MODEL (케이스 30건) │ │
|
||||
│ │ BB = BOTTOMBAR_MODEL (하단마감재 11건) │ │
|
||||
│ │ │ │
|
||||
│ │ Unique: (tenant_id, code, deleted_at) │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ [3] items — 재고/BOM용 (기존 무변경) │ │
|
||||
│ │ │ │
|
||||
│ │ code = 'BD-{prod}{spec}-{length}' │ │
|
||||
│ │ 예: BD-RS-30, BD-CF-40, BD-TE-24 │ │
|
||||
│ │ item_category = 'BENDING' │ │
|
||||
│ │ │ │
|
||||
│ │ 용도: 작업지시서, LOT 채번, 재고관리, BOM │ │
|
||||
│ │ BendingInfoBuilder가 직접 참조 │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 테이블 관계도
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ DB 테이블 관계도 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ bending_items (268건) │ │ bending_models (62건) │ │
|
||||
│ │ ─────────────────────────── │ │ ──────────────────────── │ │
|
||||
│ │ PK: id │ │ PK: id │ │
|
||||
│ │ code: 'BD' (고정) │ │ code: 'GR'/'SB'/'BB' │ │
|
||||
│ │ lot_no: 'BD-CP.001' │ │ legacy_code: 'GR-3' │ │
|
||||
│ │ legacy_code: 'CHANDJ-18' │ │ model_type: ENUM │ │
|
||||
│ │ item_name: 품명 (인덱스) │◄····│ model_name: 'KSS01' │ │
|
||||
│ │ item_sep: 대분류 (인덱스) │ 참조│ check_type: 벽면형/측면형│ │
|
||||
│ │ item_bending: 중분류 │ │ components: JSON[] │ │
|
||||
│ │ material: 재질 (인덱스) │ │ └─ legacy_bending_num │ │
|
||||
│ │ bending_data: JSON (전개도) │ │ └─ sam_item_id ──────→ │ │
|
||||
│ │ length_code: '30' │ │ material_summary: JSON │ │
|
||||
│ │ length_mm: 3000 │ │ │ │
|
||||
│ │ options: JSON (memo 등) │ │ options: JSON │ │
|
||||
│ └──────────┬──────────────────┘ └──────────┬───────────────┘ │
|
||||
│ │ │ │
|
||||
│ │ lot_no 앞 2자리 매칭 │ │
|
||||
│ │ (FK 없음, 코드 패턴 매핑) │ │
|
||||
│ ▼ │ │
|
||||
│ ┌─────────────────────────────┐ │ │
|
||||
│ │ items (215건, BENDING) │ │ │
|
||||
│ │ ─────────────────────────── │ │ │
|
||||
│ │ code: 'BD-RS-30' │ │ │
|
||||
│ │ item_category: 'BENDING' │ │ │
|
||||
│ │ 재고/BOM/작업지시서 연결 │ │ │
|
||||
│ │ BendingInfoBuilder 참조 │ │ │
|
||||
│ └─────────────────────────────┘ │ │
|
||||
│ │ │
|
||||
│ ┌─────────────────────────────┐ │ │
|
||||
│ │ files (이미지) │◄─────────────────┘ │
|
||||
│ │ ─────────────────────────── │ │
|
||||
│ │ document_type: │ │
|
||||
│ │ 'bending_item' / 'bending_model' │
|
||||
│ │ field_key: │ │
|
||||
│ │ 'bending_diagram' / 'assembly_image' │
|
||||
│ │ file_path → R2 저장 │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. API 엔드포인트 흐름
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ API 엔드포인트 맵 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ MNG2 / React │
|
||||
│ │ │
|
||||
│ ├── 기초관리 (bending_items) ──────────────────────────────────────── │
|
||||
│ │ GET /api/v1/bending-items ← 목록 (필터/검색/페이지)│
|
||||
│ │ GET /api/v1/bending-items/filters ← 필터 옵션 (distinct) │
|
||||
│ │ GET /api/v1/bending-items/{id} ← 상세 │
|
||||
│ │ POST /api/v1/bending-items ← 등록 (자동채번) │
|
||||
│ │ POST /api/v1/bending-items/{id}/duplicate ← 복사 (R2 이미지 포함)│
|
||||
│ │ PUT /api/v1/bending-items/{id} ← 수정 │
|
||||
│ │ DELETE /api/v1/bending-items/{id} ← 삭제 (soft) │
|
||||
│ │ │
|
||||
│ ├── 절곡품 모델 (bending_models) ──────────────────────────────────── │
|
||||
│ │ GET /api/v1/guiderail-models ← 목록 (?item_category=)│
|
||||
│ │ GET /api/v1/guiderail-models/filters ← 필터 옵션 │
|
||||
│ │ GET /api/v1/guiderail-models/{id} ← 상세 (부품 조합) │
|
||||
│ │ POST /api/v1/guiderail-models ← 등록 │
|
||||
│ │ PUT /api/v1/guiderail-models/{id} ← 수정 │
|
||||
│ │ DELETE /api/v1/guiderail-models/{id} ← 삭제 (soft) │
|
||||
│ │ │
|
||||
│ ├── LOT/코드 관리 (React 전용) ───────────────────────────────────── │
|
||||
│ │ POST /api/v1/bending/code-map ← 코드맵 (드롭다운) │
|
||||
│ │ GET /api/v1/bending/resolve-item ← 품목 매핑 조회 │
|
||||
│ │ POST /api/v1/bending/generate-lot ← LOT 번호 생성 │
|
||||
│ │ GET /api/v1/bending/material-lots ← 원자재 LOT 조회 │
|
||||
│ │ │
|
||||
│ └── 이미지 (공용) ────────────────────────────────────────────────── │
|
||||
│ POST /api/v1/items/{id}/files ← 업로드 │
|
||||
│ GET /api/v1/items/{id}/files ← 목록 │
|
||||
│ GET /api/v1/files/{id}/view ← 표시 (R2 presigned) │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 데이터 흐름 — CRUD
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 기초관리 CRUD 흐름 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ [CREATE] 등록 │
|
||||
│ ───────────────────────────────────────────────────────── │
|
||||
│ MNG2 폼 → POST /api/v1/bending-items │
|
||||
│ → BendingItemService.create() │
|
||||
│ ├─ code: 'BD-{접두사}.{순번}' 자동채번 │
|
||||
│ │ (BD-XX → generateCode('XX') → BD-XX.001) │
|
||||
│ ├─ lot_no: 전달값 또는 null │
|
||||
│ ├─ bending_data: JSON 저장 │
|
||||
│ └─ 이미지: handleImageUpload → R2 │
|
||||
│ │
|
||||
│ [READ] 조회 │
|
||||
│ ───────────────────────────────────────────────────────── │
|
||||
│ MNG2 목록 → GET /api/v1/bending-items?search=&item_sep= │
|
||||
│ → BendingItemService.list() │
|
||||
│ └─ 검색: item_name, code, lot_no, item_spec, legacy_code │
|
||||
│ MNG2 상세 → GET /api/v1/bending-items/{id} │
|
||||
│ → BendingItemResource (정규컬럼 + bending_data + 이미지URL) │
|
||||
│ │
|
||||
│ [UPDATE] 수정 │
|
||||
│ ───────────────────────────────────────────────────────── │
|
||||
│ MNG2 폼 → PUT /api/v1/bending-items/{id} │
|
||||
│ → BendingItemService.update() │
|
||||
│ ├─ code 변경 시 중복 검사 (422) │
|
||||
│ ├─ lot_no 업데이트 가능 │
|
||||
│ ├─ bending_data JSON 교체 │
|
||||
│ └─ 이미지: 기존 교체 또는 신규 업로드 │
|
||||
│ │
|
||||
│ [DELETE] 삭제 │
|
||||
│ ───────────────────────────────────────────────────────── │
|
||||
│ MNG2 → DELETE /api/v1/bending-items/{id} │
|
||||
│ → SoftDelete (deleted_at, deleted_by 기록) │
|
||||
│ │
|
||||
│ [DUPLICATE] 복사 │
|
||||
│ ───────────────────────────────────────────────────────── │
|
||||
│ MNG2 → POST /api/v1/bending-items/{id}/duplicate │
|
||||
│ → BendingItemService.duplicate() │
|
||||
│ ├─ 같은 접두사 다음 순번 채번 (BD-CP.001 → BD-CP.002) │
|
||||
│ └─ R2 이미지 파일 복사 (독립 복사본) │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 검색/매핑 흐름 — resolveItem
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ BendingCodeService.resolveItem() 흐름 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ React (LOT 채번 화면) │
|
||||
│ │ │
|
||||
│ │ GET /api/v1/bending/resolve-item?prod=C&spec=P&length=30 │
|
||||
│ ▼ │
|
||||
│ BendingCodeService.resolveItem('C', 'P', '30') │
|
||||
│ │ │
|
||||
│ ├─ [1차] bending_items 검색 │
|
||||
│ │ WHERE lot_no LIKE 'CP%' │
|
||||
│ │ AND length_code = '30' │
|
||||
│ │ AND is_active = true │
|
||||
│ │ │
|
||||
│ ├─ [2차] legacy_code 폴백 (1차 실패 시) │
|
||||
│ │ WHERE legacy_code = 'BD-CP-30' │
|
||||
│ │ AND is_active = true │
|
||||
│ │ │
|
||||
│ └─ 응답: │
|
||||
│ { │
|
||||
│ item_id: 1900, │
|
||||
│ item_code: 'BD-CP.001', ← lot_no ?? code │
|
||||
│ item_name: '점검구', │
|
||||
│ specification: '650*550', │
|
||||
│ unit: 'EA' │
|
||||
│ } │
|
||||
│ │
|
||||
│ React (작업일지) │
|
||||
│ │ │
|
||||
│ │ items 테이블에서 BD-* 필터 │
|
||||
│ │ lot.item_code.startsWith('BD-') │
|
||||
│ │ lotNoMap['BD-CP-30'] = 'INIT-260221-BDCP30' │
|
||||
│ │ │
|
||||
│ └─ items 테이블 (무변경) — bending_items와 독립 │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 3가지 모델 타입 비교
|
||||
|
||||
```
|
||||
┌─────────────────────┬─────────────────────┬─────────────────────┐
|
||||
│ 가이드레일 │ 케이스 │ 하단마감재 │
|
||||
│ (GUIDERAIL_MODEL) │ (SHUTTERBOX_MODEL) │ (BOTTOMBAR_MODEL) │
|
||||
├─────────────────────┼─────────────────────┼─────────────────────┤
|
||||
│ code: 'GR' │ code: 'SB' │ code: 'BB' │
|
||||
│ 건수: 21건 │ 건수: 30건 │ 건수: 11건 │
|
||||
├─────────────────────┼─────────────────────┼─────────────────────┤
|
||||
│ 모델: KSS01 │ 모델: ❌ 없음 │ 모델: KSS01 │
|
||||
│ 마감: SUS/EGI │ 마감: ❌ 없음 │ 마감: SUS/EGI │
|
||||
│ 형상: 벽면/측면 │ 형상: ❌ 없음 │ 형상: ❌ 없음 │
|
||||
│ 대분류: 스크린/철재 │ 대분류: ❌ │ 대분류: 스크린/철재 │
|
||||
│ 인정: 인정/비인정 │ 인정: ❌ │ 인정: 인정/비인정 │
|
||||
├─────────────────────┼─────────────────────┼─────────────────────┤
|
||||
│ 필수 필드: │ 필수 필드: │ 필수 필드: │
|
||||
│ item_sep │ exit_direction │ item_sep │
|
||||
│ model_name │ box_width │ model_name │
|
||||
│ check_type │ box_height │ │
|
||||
│ rail_width │ front_bottom_width │ │
|
||||
├─────────────────────┼─────────────────────┼─────────────────────┤
|
||||
│ 파트: 3~5개 │ 파트: 5개 │ 파트: 1개 │
|
||||
│ ┌─────────────────┐ │ ┌─────────────────┐ │ ┌─────────────────┐ │
|
||||
│ │ 본체 │ │ │ 상부덮개 │ │ │ 하단마감 │ │
|
||||
│ │ 마감재 │ │ │ 전면부 │ │ │ (단일 파트) │ │
|
||||
│ │ C형/D형 │ │ │ 점검구 │ │ └─────────────────┘ │
|
||||
│ │ (+보강) │ │ │ 린텔부 │ │ │
|
||||
│ └─────────────────┘ │ │ 후면코너부 │ │ │
|
||||
│ │ └─────────────────┘ │ │
|
||||
├─────────────────────┼─────────────────────┼─────────────────────┤
|
||||
│ 재질별 폭합: │ 재질별 폭합: │ 재질별 폭합: │
|
||||
│ SUS: 406 │ EGI: 2652 │ SUS: 193 │
|
||||
│ EGI: 398 │ │ │
|
||||
└─────────────────────┴─────────────────────┴─────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 접두사 코드맵 (기초관리)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 기초관리 접두사 (PREFIX_LABELS) │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 가이드레일 계열 케이스 계열 │
|
||||
│ ────────────────── ────────────────── │
|
||||
│ RS: SUS마감재 lot_no 예: CP: 밑면판/점검구 lot_no 예: │
|
||||
│ RM: 본체/보강 BD-RS.001 CF: 전면판 BD-CP.001 │
|
||||
│ RC: C형 CB: 후면코너/후면부 BD-CF.001 │
|
||||
│ RD: D형 CL: 린텔 BD-CB.001 │
|
||||
│ RE: 측면마감 CX: 상부덮개 BD-CL.001 │
|
||||
│ RT: 절단판 BD-CX.001 │
|
||||
│ RH: 뒷보강 │
|
||||
│ RN: 비인정 │
|
||||
│ │
|
||||
│ 하단마감재 계열 기타 │
|
||||
│ ────────────────── ────────────────── │
|
||||
│ BS: 스크린 SUS lot_no 예: LE: L-BAR lot_no 예: │
|
||||
│ BE: 스크린 EGI BD-BS.001 XE: 마구리 BD-LE.001 │
|
||||
│ BH: 보강평철 BD-BE.001 ZP: 특수 밑면/점검구 │
|
||||
│ TS: 철재 SUS ZF: 특수 전면판 │
|
||||
│ TE: 철재 EGI ZB: 특수 후면 │
|
||||
│ │
|
||||
│ 자동채번: BD-{접두사}.{3자리순번} │
|
||||
│ 예: BD-RS.001 → BD-RS.002 → BD-RS.003 ... │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. LOT 채번 흐름 (React → items 테이블)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ LOT 채번 흐름 (React 생산관리) │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ React LOT 채번 화면 │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ [제품] 가이드레일(벽면형) ▼ (prodCode: R)│ │
|
||||
│ │ [종류] SUS마감재 ▼ (specCode: S)│ │
|
||||
│ │ [길이] 3000mm ▼ (lengthCode: 30) │
|
||||
│ └───────────────┬─────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ API: GET /bending/resolve-item?prod=R&spec=S&length=30 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ BendingCodeService.resolveItem('R', 'S', '30') │
|
||||
│ ┌───────────────────────────────────────────────┐ │
|
||||
│ │ 1차: bending_items WHERE lot_no LIKE 'RS%' │ │
|
||||
│ │ AND length_code = '30' │ │
|
||||
│ │ 2차: legacy_code = 'BD-RS-30' (폴백) │ │
|
||||
│ │ │ │
|
||||
│ │ → item_code: 'BD-RS.001' │ │
|
||||
│ └───────────────┬───────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ API: POST /bending/generate-lot │
|
||||
│ ┌───────────────────────────────────────────────┐ │
|
||||
│ │ BendingCodeService.generateLotNumber() │ │
|
||||
│ │ prod='R', spec='S', length='30', date='260321' │ │
|
||||
│ │ → lot_no: 'RS6321-30' │ │
|
||||
│ └───────────────┬───────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ items 테이블에 LOT 등록 (재고 관리용) │
|
||||
│ ┌───────────────────────────────────────────────┐ │
|
||||
│ │ code: 'BD-RS-30' │ │
|
||||
│ │ lot_no: 'RS6321-30' │ │
|
||||
│ │ item_category: 'BENDING' │ │
|
||||
│ └───────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. MNG2 화면 흐름
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ MNG2 화면 구조 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 사이드바 (DB menus) │
|
||||
│ ├─ 생산 관리 │
|
||||
│ │ ├─ 품목기준 필드 관리 ✅ │
|
||||
│ │ ├─ 견적수식 관리 ✅ │
|
||||
│ │ └─ 절곡품 관리 │
|
||||
│ │ ├─ 기초관리 (/bending/base) │
|
||||
│ │ ├─ 절곡품 (/bending/products) ← 가이드레일 │
|
||||
│ │ ├─ 케이스 (/bending/cases) ← 케이스 │
|
||||
│ │ └─ 하단마감재 (/bending/bottombars) ← 하단마감재 │
|
||||
│ │ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌────────────────────┐ ┌────────────────────┐ │
|
||||
│ │ 기초관리 목록 │ │ 절곡품 목록 │ │
|
||||
│ │ /bending/base │ │ /bending/products │ │
|
||||
│ │ │ │ /bending/cases │ │
|
||||
│ │ 필터: 대분류/인정/ │ │ /bending/bottombars │ │
|
||||
│ │ 분류/품명/검색 │ │ │ │
|
||||
│ │ 268건 테이블 │ │ 필터+테이블 │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ [+등록] [복사] │ │ [+등록] │ │
|
||||
│ │ 행 클릭 → 상세 │ │ 행 클릭 → 상세 │ │
|
||||
│ └────────┬───────────┘ └────────┬───────────┘ │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌────────────────────┐ ┌────────────────────┐ │
|
||||
│ │ 기초관리 폼 │ │ 절곡품 폼 │ │
|
||||
│ │ ┌────────┬───────┐ │ │ ┌────────┬───────┐ │ │
|
||||
│ │ │기본정보│ 이미지 │ │ │ │기본정보│ 이미지 │ │ │
|
||||
│ │ │ 12필드 │ 업로드 │ │ │ │타입별 │ 업로드 │ │ │
|
||||
│ │ │+케이스 │ 그리기 │ │ │ │+파트탭 │ 그리기 │ │ │
|
||||
│ │ │ 전용 │ Ctrl+V │ │ │ │절곡테이블│ │ │ │
|
||||
│ │ ├────────┤ │ │ │ ├────────┤ │ │ │
|
||||
│ │ │절곡테이블│ │ │ │ │재질별 │ │ │ │
|
||||
│ │ │ (단일) │ │ │ │ │ 폭합 │ │ │ │
|
||||
│ │ ├────────┤ │ │ │ └────────┴───────┘ │ │
|
||||
│ │ │폭합계 │ │ │ │ [저장] [인쇄] │ │
|
||||
│ │ └────────┴───────┘ │ └────────────────────┘ │
|
||||
│ │ [등록/저장] [삭제] │ │
|
||||
│ └────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. 전개도 JSON 구조
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 전개도 데이터 (bending_data JSON) │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 레거시 (별도 배열 5개) SAM (객체 배열 1개) │
|
||||
│ ───────────────────── ────────────────────── │
|
||||
│ inputList: [10,11,110...] bending_data: [ │
|
||||
│ bendingrateList: ["","","-1"...] { no:1, input:10, rate:"", │
|
||||
│ sumList: [10,21,130...] sum:10, color:true, aAngle:false },│
|
||||
│ colorList: [true,false,false...] { no:2, input:11, rate:"", │
|
||||
│ AList: [false,false,false...] sum:21, color:false, aAngle:false },│
|
||||
│ { no:3, input:110, rate:"-1", │
|
||||
│ → 5개 배열 동기화 필요 sum:130, color:false, aAngle:false },│
|
||||
│ → 열 추가/삭제 시 5개 다 조작 ... │
|
||||
│ ] │
|
||||
│ → 1개 배열만 관리 │
|
||||
│ → 열 추가 = 객체 1개 push │
|
||||
│ │
|
||||
│ 화면 렌더링: │
|
||||
│ ┌────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │
|
||||
│ │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │
|
||||
│ ├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │
|
||||
│ │ 입력 │ 10 │ 11 │ 110 │ 30 │ 15 │ 15 │ 15 │ │
|
||||
│ │ │[색]│ │ │ │ │[색]│ │ │
|
||||
│ ├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │
|
||||
│ │ 연신율 │ │ │ -1 │ -1 │ -1 │ │ │ │
|
||||
│ ├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │
|
||||
│ │ 합계 │ 10 │ 21 │ 130 │ 159 │ 173 │ 188 │ 203 │ ← 폭합계=203 │
|
||||
│ ├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │
|
||||
│ │ 음영 │ ■■ │ │ │ │ │ ■■ │ │ │
|
||||
│ │ A각 │ │ │ │ A각 │ │ │ │ │
|
||||
│ └────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ │
|
||||
│ │
|
||||
│ 연신율 보정: rate="" → 보정없음 / rate="-1" → -1mm / rate="1" → +1mm │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 12. 마이그레이션 이력
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 마이그레이션 타임라인 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 2026-03-19 │
|
||||
│ ├─ 100000: bending_items 테이블 생성 │
|
||||
│ ├─ 100001~100003: bending_data 별도 테이블 → JSON 통합 과정 │
|
||||
│ ├─ 100004: bending_item_mappings DROP │
|
||||
│ ├─ 100005: length_code, length_mm 컬럼 추가 │
|
||||
│ ├─ 100006: bending_models 테이블 생성 │
|
||||
│ └─ 100007: bending_data 테이블 DROP (JSON 통합 완료) │
|
||||
│ │
|
||||
│ 2026-03-21 │
|
||||
│ └─ 100000: code/lot_no 분리 마이그레이션 ← 최신 │
|
||||
│ ├─ bending_items: lot_no 컬럼 추가, 기존 code → lot_no 이관 │
|
||||
│ │ code → 'BD' 고정 │
|
||||
│ ├─ bending_models: 기존 code → legacy_code 이관 │
|
||||
│ │ code → 접두사만 (GR/SB/BB) │
|
||||
│ │ lot_no 컬럼 DROP │
|
||||
│ └─ 개발서버 적용 완료 ✅ │
|
||||
│ │
|
||||
│ 이관 커맨드: │
|
||||
│ ├─ bending:clean-reimport ← 기초관리 266건 + bending_data + 이미지 │
|
||||
│ └─ bending:model-import ← 모델 62건 + 조립도 + 부품이미지 │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 13. 프로젝트별 영향도 요약
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 코드 체계 변경 영향도 매트릭스 │
|
||||
├──────────┬──────────┬──────────────────────────────┬────────┬──────────────┤
|
||||
│ 프로젝트 │ 상태 │ 사유 │ 수정 │ 비고 │
|
||||
├──────────┼──────────┼──────────────────────────────┼────────┼──────────────┤
|
||||
│ API │ ✅ 완료 │ 마이그레이션 + 코드 merge │ 13파일 │ 개발서버 반영 │
|
||||
├──────────┼──────────┼──────────────────────────────┼────────┼──────────────┤
|
||||
│ MNG2 │ ✅ 이상없음│ API 프록시, id 기반 CRUD │ 0파일 │ code 표시만 │
|
||||
│ │ │ code는 표시용 │ │ 'BD' 고정 │
|
||||
├──────────┼──────────┼──────────────────────────────┼────────┼──────────────┤
|
||||
│ React │ ✅ 이상없음│ BD-XX-YY는 items 테이블 참조 │ 0파일 │ items 무변경 │
|
||||
│ │ │ resolveItem 응답 필드 동일 │ │ │
|
||||
├──────────┼──────────┼──────────────────────────────┼────────┼──────────────┤
|
||||
│ items │ ✅ 무변경 │ 재고/BOM/작업지시서 독립 유지 │ 0파일 │ BD-XX-YY 유지│
|
||||
│ 테이블 │ │ BendingInfoBuilder 무변경 │ │ │
|
||||
├──────────┼──────────┼──────────────────────────────┼────────┼──────────────┤
|
||||
│ DB │ ✅ 완료 │ 마이그레이션 실행 완료 │ 1파일 │ 로컬+개발서버│
|
||||
│ │ │ 데이터 restore 완료 │ │ 268+62건 │
|
||||
└──────────┴──────────┴──────────────────────────────┴────────┴──────────────┘
|
||||
```
|
||||
@@ -3,7 +3,7 @@
|
||||
> **프로젝트**: API (`sam/api`)
|
||||
> **선행 조건**: 없음
|
||||
> **참조**: `standards/options-column-policy.md`, `rules/item-policy.md`
|
||||
> **최종수정**: 2026-03-19 (items.options → bending_items 전용 테이블 분리 완료)
|
||||
> **최종수정**: 2026-03-21 (code/lot_no 분리 완료, bending_models lot_no 제거)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **프로젝트**: API (`sam/api`)
|
||||
> **선행 조건**: Step 1 완료
|
||||
> **상태**: ✅ 구현 완료 (2026-03-16~17)
|
||||
> **상태**: ✅ 구현 완료 (2026-03-16~17, 2026-03-21 code/lot_no 분리 반영)
|
||||
> **참조**: `standards/api-rules.md`, `standards/options-column-policy.md`, `rules/item-policy.md`
|
||||
|
||||
---
|
||||
@@ -32,9 +32,11 @@
|
||||
item_type: FG(완제품), PT(부품), SM(부자재), RM(원자재), CS(소모품)
|
||||
item_category: 'BENDING' (절곡품 구분)
|
||||
|
||||
절곡품 API 방향:
|
||||
절곡품 API 방향 (2026-03-21 최종):
|
||||
→ 기존 ItemsController 무변경
|
||||
→ 별도 BendingItemController 생성 (items 테이블을 item_category='BENDING'으로 필터)
|
||||
→ 별도 BendingItemController → bending_items 전용 테이블 사용
|
||||
→ bending_items.code = 'BD' (고정), lot_no = LOT 번호
|
||||
→ BendingCodeService.resolveItem(): lot_no 기반 검색
|
||||
→ 절곡품 전용 필터/검색/전개도 데이터 관리
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user