Files
sam-docs/dev/dev_plans/bending-management/README.md
김보곤 828b452186 feat: [bending] 절곡품 관리 기능 개발 계획서 추가
- README.md: 전체 개요, 메뉴 구조, 작업 순서
- step1-데이터분석.md: 레거시 매핑 + options 확장 스키마
- step2-API.md: 엔드포인트 설계 (docs 규칙 준수)
- step3-MNG화면.md: Blade+HTMX 화면 구성 (3타입별 폼)
- step4-React연동.md: 견적 이미지 + 운영 화면 계획
2026-03-16 17:41:13 +09:00

25 KiB
Raw Blame History

절곡품 관리 기능 개발 계획서

시작일: 2026-03-16 위치: MNG 생산관리 > 절곡품 관리 (신규 메뉴) 목표: 경동기업(5130) 수준의 절곡품 마스터 관리 + 전개도 데이터 + 이미지 관리 원칙: 기존 BendingInfoBuilder/PrefixResolver 보존, items.options 확장 방식


배경

SAM은 절곡품의 "계산과 조합"(BendingInfoBuilder/PrefixResolver)은 잘 되어 있지만, "관리와 시각화"가 빠져 있다. 경동기업(5130) guiderail/list.php 수준의 관리 화면을 MNG에 구현한다.

갭 분석: docs/dev/dev_plans/bending-parts-analysis.md 참조


MNG 현재 구조

생산관리 메뉴 (sidebar-static.blade.php)

생산 관리 (production-group)
├─ 품목기준 필드 관리 ✅ (구현됨)
├─ 견적수식 관리 ✅ (구현됨)
├─ 제품 관리 (준비중)
├─ 자재 관리 (준비중)
├─ BOM 관리 (준비중)
├─ 카테고리 관리 (준비중)
└─ 절곡품 관리 ← 🆕 추가 대상
   ├─ 기초관리 (개별 부품 CRUD)
   └─ 절곡품 (모델별 조합 관리)

기존 절곡 관련 코드 (MNG)

파일 역할 변경 여부
views/documents/partials/bending-worklog.blade.php 절곡 작업일지 렌더링 무변경
views/documents/partials/bending-inspection-data.blade.php 절곡 중간검사 무변경

작업 순서

Step 1 (DB분석)  → Step 2 (API)  → Step 3 (MNG 화면)  → Step 4 (React 연동)
레거시 매핑       options 확장     Blade + HTMX         견적 이미지
+ 데이터 정리     + 엔드포인트     + 메뉴 등록

상세 계획: 아래 문서 참조

문서 내용
step1-데이터분석.md 레거시 매핑 + options 확장
step2-API.md API 엔드포인트 + 컨트롤러 설계
step3-MNG화면.md Blade 뷰 + HTMX + 메뉴 등록
step4-React연동.md 견적 페이지 이미지 컴포넌트

참조 문서

문서 경로 용도
갭 분석 dev_plans/bending-parts-analysis.md 요구사항 기준
API 규칙 standards/api-rules.md API 네이밍/응답
options 정책 standards/options-column-policy.md JSON 컬럼 설계
품목 정책 rules/item-policy.md BD 코드 체계
Phase 2 dev_plans/integrated-phase-2.md 절곡 설계
Phase 3 dev_plans/integrated-phase-3.md 절곡 검사

프로토타입

위치 설명
SAM/work/절곡/index.html 사이드바 + iframe 전체 구조
SAM/work/절곡/base.html 기초관리 목록 (참고용)
SAM/work/절곡/base-form.html 등록/수정 폼 + 절곡 테이블 (참고용)
SAM/work/절곡/products.html 절곡품 탭 목록 (참고용)
SAM/work/절곡/product-form.html 절곡품 등록/수정 (참고용)

절곡품 관리 — 전체 흐름도


1. 시스템 전체 구조

┌─────────────────────────────────────────────────────────────────────┐
│                        SAM 절곡품 관리 시스템                         │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌──────────┐     ┌──────────┐     ┌──────────┐                   │
│  │  MNG     │     │  API     │     │  React   │                   │
│  │ (샘플용)  │────→│ (핵심)   │←────│ (운영용)  │                   │
│  │ Blade    │     │ Laravel  │     │ Next.js  │                   │
│  └──────────┘     └─────┬────┘     └──────────┘                   │
│                         │                                          │
│                    ┌────┴────┐                                     │
│                    │  samdb  │                                     │
│                    │ items   │  ← item_category = 'BENDING'       │
│                    │ files   │  ← field_key = 'bending_diagram'   │
│                    └─────────┘                                     │
│                         │                                          │
│                    ┌────┴────┐                                     │
│                    │   R2    │  ← Cloudflare (이미지 저장)          │
│                    └─────────┘                                     │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

2. 데이터 구조 (2계층)

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  [1계층] 기초관리 — 개별 부품 (items 테이블)                      │
│  ════════════════════════════════════════                        │
│                                                                 │
│  items (item_category = 'BENDING')                              │
│  ┌──────────────────────────────────────────────────┐          │
│  │ id: 100                                          │          │
│  │ code: BD-가이드레일-KSS01-SUS-120*70              │          │
│  │ name: 가이드레일 KSS01 SUS 120*70                 │          │
│  │ options: {                                        │          │
│  │   item_name: "마감재"          ← 부품 품명         │          │
│  │   item_sep: "스크린"           ← 대분류            │          │
│  │   item_bending: "가이드레일"    ← 중분류            │          │
│  │   material: "SUS 1.2T"        ← 재질              │          │
│  │   model_name: "KSS01"         ← 소속 모델          │          │
│  │   model_UA: "인정"            ← 인정여부           │          │
│  │   item_spec: "120*70"         ← 규격              │          │
│  │   rail_width: 70              ← 레일폭            │          │
│  │   bendingData: [              ← 전개도 데이터       │          │
│  │     {no:1, input:10, rate:"", sum:10, ...},       │          │
│  │     {no:2, input:11, rate:"", sum:21, ...},       │          │
│  │     ...                                           │          │
│  │   ]                                               │          │
│  │   + 케이스전용: exit_direction, box_width, ...     │          │
│  │ }                                                 │          │
│  └──────────────────────────────────────────────────┘          │
│      ↑ 265건 (레거시) + α                                       │
│                                                                 │
│  ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─          │
│                                                                 │
│  [2계층] 절곡품 — 모델별 부품 조합                                │
│  ════════════════════════════════                                │
│                                                                 │
│  ┌────────────────────────────────────────────────────────┐    │
│  │ 가이드레일 모델: KSS01 벽면형 SUS마감                    │    │
│  │                                                        │    │
│  │  components (부품 조합):                                │    │
│  │  ┌─────┬───────────┬──────────┬────┬────────┐         │    │
│  │  │순서 │ 부품명     │ 재질     │수량│전개폭합│         │    │
│  │  ├─────┼───────────┼──────────┼────┼────────┤         │    │
│  │  │  1  │ 마감재     │ SUS 1.2T│  2 │  203   │ ──→ item:100│
│  │  │  2  │ 본체      │ EGI 1.55│  1 │  296   │ ──→ item:101│
│  │  │  3  │ 벽면형-C  │ EGI 1.55│  1 │  144   │ ──→ item:102│
│  │  │  4  │ 벽면형-D  │ EGI 1.55│  1 │  144   │ ──→ item:103│
│  │  └─────┴───────────┴──────────┴────┴────────┘         │    │
│  │                                                        │    │
│  │  재질별 폭합: SUS 1.2T → 406 | EGI 1.55T → 398       │    │
│  └────────────────────────────────────────────────────────┘    │
│      ↑ 가이드레일 20건 + 케이스 + 하단마감재                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3. 3가지 타입 비교

┌─────────────────┬─────────────────┬─────────────────┐
│   가이드레일      │     케이스       │   하단마감재      │
├─────────────────┼─────────────────┼─────────────────┤
│                 │                 │                 │
│ 모델: KSS01     │ 모델: ❌ 없음    │ 모델: KSS01     │
│ 마감: SUS/EGI   │ 마감: ❌ 없음    │ 마감: SUS/EGI   │
│ 형상: 벽면/측면  │ 형상: ❌ 없음    │ 형상: ❌ 없음    │
│ 대분류: 스크린/철재│ 대분류: ❌      │ 대분류: 스크린/철재│
│ 인정: 인정/비인정 │ 인정: ❌        │ 인정: 인정/비인정 │
│                 │                 │                 │
│ 규격: 120×70    │ 규격: 650×550   │ 규격: 60×40     │
│ 레일폭: 70      │ 전면밑: 50      │                 │
│                 │ 레일폭: 75      │                 │
│                 │ 점검구: 후면     │                 │
│                 │                 │                 │
│ 파트: 3~5개     │ 파트: 5개       │ 파트: 1개       │
│ ┌─────────────┐│ ┌─────────────┐│ ┌─────────────┐│
│ │본체상부      ││ │상부덮개      ││ │하단마감      ││
│ │본체하부      ││ │전면         ││ │(단일 파트)   ││
│ │마감재       ││ │점검구       ││ └─────────────┘│
│ │(+C형,D형)   ││ │린텔        ││                 │
│ └─────────────┘│ │후면코너     ││                 │
│                 │ └─────────────┘│                 │
├─────────────────┼─────────────────┼─────────────────┤
│ 재질별 폭합      │ 재질별 폭합      │ 재질별 폭합      │
│ SUS: 406       │ EGI: 2652      │ SUS: 193       │
│ EGI: 398       │                 │                 │
└─────────────────┴─────────────────┴─────────────────┘

4. 전개도 테이블 구조 (1개 부품)

레거시 5130 화면과 동일한 구조:

┌────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│        │  1  │  2  │  3  │  4  │  5  │  6  │  7  │
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 번호   │  1  │  2  │  3  │  4  │  5  │  6  │  7  │
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 입력   │ 10  │ 11  │ 110 │ 30  │ 15  │ 15  │ 15  │  ← 치수 입력
│        │[색상]│     │     │     │     │[색상]│     │  ← 파란 배경
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 연신율  │     │     │ -1  │ -1  │ -1  │     │     │  ← 절곡 방향
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│연신율후 │ 10  │ 11  │ 109 │ 29  │ 14  │ 15  │ 15  │  ← input + rate
│        │     │     │(-1) │(-1) │(-1) │     │     │    (rate=-1 → -1mm)
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 합계   │ 10  │ 21  │ 130 │ 159 │ 173 │ 188 │ 203 │  ← 보정후 누적합
│        │[색상]│     │     │     │     │[색상]│     │  ← 노란 배경
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 음영   │ ■■  │     │     │     │     │ ■■  │     │  ← 색상 마킹
├────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ A각    │     │     │     │ A각 │     │     │     │  ← A각 표시
└────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘

연신율 보정 규칙:
  rate = ""  → 보정 없음 (input 그대로)
  rate = "-1" → input - 1mm (하향 절곡)
  rate = "1"  → input + 1mm (상향 절곡)

합계 = 보정후 값의 누적합
폭합계 = 마지막 합계값 (이 예시: 203)

5. JSON 저장 구조 (options.bendingData)

레거시 (별도 배열 5개)              SAM (객체 배열 1개)
────────────────────              ────────────────────
inputList: [10,11,110...]         bendingData: [
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

6. 화면 흐름도

┌──────────────────────────────────────────────────────────────┐
│                     MNG 사이드바                               │
│                                                              │
│  생산 관리                                                    │
│  ├─ 품목기준 필드 관리                                        │
│  ├─ 견적수식 관리                                             │
│  └─ 🆕 절곡품 관리                                           │
│     ├─ 기초관리 ─────────────────┐                           │
│     └─ 절곡품 ──────────────┐    │                           │
│                             │    │                           │
└─────────────────────────────┼────┼───────────────────────────┘
                              │    │
          ┌───────────────────┘    └───────────────────┐
          ▼                                            ▼
┌──────────────────────┐              ┌──────────────────────┐
│ 절곡품 목록            │              │ 기초관리 목록          │
│                      │              │                      │
│ [가이드레일] [케이스]  │              │ 265건 테이블           │
│ [하단마감재]          │              │ 필터: 대분류/인정/     │
│                      │              │ 그룹/품명/검색        │
│ 필터 + 테이블         │              │                      │
│                      │              │ 행 클릭 ──→ 상세      │
│ 행 클릭 ──→ 상세     │              │ [+등록] ──→ 등록      │
│ [+등록] ──→ 등록     │              └───────────┬──────────┘
└───────────┬──────────┘                          │
            │                                     │
            ▼                                     ▼
┌──────────────────────┐              ┌──────────────────────┐
│ 절곡품 등록/수정       │              │ 기초관리 등록/수정     │
│                      │              │                      │
│ ┌──────────┬───────┐ │              │ ┌──────────┬───────┐ │
│ │ 기본정보  │ 이미지 │ │              │ │ 기본정보  │ 이미지 │ │
│ │ (타입별)  │ 업로드 │ │              │ │ 대분류    │ 업로드 │ │
│ ├──────────┤ 검색어 │ │              │ │ 그룹/품명 │ 검색어 │ │
│ │ 파트 탭   │       │ │              │ │ 재질/규격 │       │ │
│ │ [1][2][3] │       │ │              │ ├──────────┤       │ │
│ │          │       │ │              │ │ 절곡 테이블│       │ │
│ │ 절곡테이블│       │ │              │ │ (단일)    │       │ │
│ │ (파트별)  │       │ │              │ ├──────────┤       │ │
│ ├──────────┤       │ │              │ │ 재질별폭합│       │ │
│ │ 재질별폭합│       │ │              │ └──────────┴───────┘ │
│ └──────────┴───────┘ │              └──────────────────────┘
└──────────────────────┘

7. API 엔드포인트 흐름

MNG / React
    │
    ├── GET  /api/v1/bending-items              ← 기초관리 목록
    ├── GET  /api/v1/bending-items/filters      ← 필터 옵션
    ├── GET  /api/v1/bending-items/{id}         ← 상세
    ├── POST /api/v1/bending-items              ← 등록
    ├── PUT  /api/v1/bending-items/{id}         ← 수정
    ├── DELETE /api/v1/bending-items/{id}       ← 삭제
    │
    ├── GET  /api/v1/guiderail-models           ← 절곡품 모델 목록
    ├── GET  /api/v1/guiderail-models/{id}      ← 모델 상세 (부품조합)
    ├── POST /api/v1/guiderail-models           ← 모델 등록
    ├── PUT  /api/v1/guiderail-models/{id}      ← 모델 수정
    ├── DELETE /api/v1/guiderail-models/{id}    ← 모델 삭제
    │
    ├── POST /api/v1/items/{id}/files           ← 이미지 업로드 (기존)
    ├── GET  /api/v1/items/{id}/files           ← 이미지 목록 (기존)
    └── GET  /api/v1/files/{id}/view            ← 이미지 표시 (기존)

    ※ 이미지는 기존 ItemsFileController 재사용
    ※ field_key: 'bending_diagram'

8. 작업 순서

Step 1                Step 2              Step 3             Step 4
데이터 분석            API 구현             MNG 화면            React 화면
━━━━━━━━             ━━━━━━━━            ━━━━━━━━           ━━━━━━━━

┌──────────┐       ┌──────────┐       ┌──────────┐       ┌──────────┐
│레거시 265건│       │Controller│       │기초관리   │       │견적 이미지│
│SAM 170건  │──→    │Service   │──→    │ 목록/등록 │──→    │GuiderailP│
│매핑 테이블 │       │FormReq   │       │절곡품     │       │review    │
│           │       │Resource  │       │ 목록/등록 │       │          │
│options 확장│       │          │       │          │       │절곡품    │
│artisan cmd│       │이미지:   │       │메뉴 등록  │       │관리 화면 │
│           │       │기존 재사용│       │(tinker)  │       │(본 화면) │
│회귀 테스트 │       │          │       │          │       │          │
└──────────┘       └──────────┘       └──────────┘       └──────────┘
  API 프로젝트        API 프로젝트        MNG 프로젝트        React 프로젝트
                                        (샘플 확인용)        (운영용)

9. 레거시 → SAM 대응표

레거시 (5130)                          SAM
━━━━━━━━━━━━━                         ━━━━━
chandj.bending (265건)           →    items (item_category='BENDING') + options
chandj.guiderail (20건)          →    guiderail-models API (신규 저장 구조)
guiderail/list.php               →    MNG /bending/products (절곡품 목록)
bending CRUD                     →    MNG /bending/base (기초관리)
put_guiderail_image.php          →    기존 ItemsFileController (R2)
fetch_guiderail_detail.php       →    React GuiderailPreview
drawingTool.js (Canvas)          →    2차 구현 (1차는 이미지 업로드만)
inputList[] (별도 배열)           →    bendingData[] (객체 배열)
bendingrateList[]                →    bendingData[].rate
sumList[]                        →    bendingData[].sum
colorList[]                      →    bendingData[].color
AList[]                          →    bendingData[].aAngle