MES 분석 문서 구조 정리: v1/v2 분리
- v1-analysis: 5130 레거시 기반 견적 분석 추가 - v2-analysis: 기존 MES 분석 문서들 이동 - customer, master-data, order, price - production, production-userflow, quote, site
This commit is contained in:
313
projects/mes/v2-analysis/order-analysis/04-app-order-section.md
Normal file
313
projects/mes/v2-analysis/order-analysis/04-app-order-section.md
Normal file
@@ -0,0 +1,313 @@
|
||||
# App.jsx 수주 섹션 분석
|
||||
|
||||
> 분석 일시: 2024-12-18
|
||||
> 소스: design/mes기획서_리액트/src/App.jsx (52768~56357줄)
|
||||
|
||||
## 컴포넌트 위치
|
||||
|
||||
| 컴포넌트 | 라인 | 설명 |
|
||||
|----------|------|------|
|
||||
| OrderList | 52768 | 수주 목록 |
|
||||
| OrderDetail | 53479 | 수주 상세 |
|
||||
| OrderCreate | 55280 | 수주 등록 |
|
||||
| OrderEdit | 56357 | 수주 수정 |
|
||||
|
||||
---
|
||||
|
||||
## 1. OrderList (수주 목록)
|
||||
|
||||
### Props
|
||||
```javascript
|
||||
{
|
||||
orders, // 수주 배열
|
||||
shipments, // 출하 배열 (연결용)
|
||||
workOrders, // 작업지시 배열 (연결용)
|
||||
onNavigate, // 화면 이동
|
||||
onCreateWorkOrders, // 작업지시 생성
|
||||
onDeleteOrders // 수주 삭제
|
||||
}
|
||||
```
|
||||
|
||||
### 탭 필터
|
||||
| 탭 ID | 라벨 | 필터 조건 |
|
||||
|-------|------|-----------|
|
||||
| all | 전체 | - |
|
||||
| registered | 수주등록 | status === '수주등록' |
|
||||
| confirmed | 수주확정 | status === '수주확정' |
|
||||
| production-complete | 생산지시완료 | status === '생산지시완료' |
|
||||
|
||||
### 리포트 카드 (4개)
|
||||
| 항목 | 계산 |
|
||||
|------|------|
|
||||
| 이번 달 수주 | `orders.reduce(sum + totalAmount)` |
|
||||
| 분할 대기 | 수주확정 && splits 없음 |
|
||||
| 생산지시 대기 | splits 있으나 productionStatus 미지시 |
|
||||
| 출하 대기 | 출하진행률 0% |
|
||||
|
||||
### 테이블 컬럼
|
||||
```
|
||||
체크박스 | 번호 | 로트번호 | 견적번호 | 발주처 | 현장명 | 상태 | 출고예정일 | 배송방식 | (작업)
|
||||
```
|
||||
|
||||
### 검색 필드
|
||||
- 로트번호 (orderNo)
|
||||
- 견적번호 (quoteNo)
|
||||
- 발주처 (customerName)
|
||||
- 현장명 (siteName)
|
||||
|
||||
### 정렬
|
||||
```javascript
|
||||
.sort((a, b) => b.id - a.id) // ID 기준 내림차순 (최신 등록 최상단)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. OrderDetail (수주 상세)
|
||||
|
||||
### Props
|
||||
```javascript
|
||||
{
|
||||
order, // 수주 데이터
|
||||
productionOrders, // 생산지시 배열
|
||||
customers, // 거래처 배열 (결제조건 확인)
|
||||
onNavigate,
|
||||
onBack,
|
||||
onUpdate, // 수주 업데이트
|
||||
onCreateWorkOrder, // 작업지시 생성
|
||||
onCreateProductionOrder
|
||||
}
|
||||
```
|
||||
|
||||
### 문서 탭
|
||||
| 탭 ID | 라벨 | 용도 |
|
||||
|-------|------|------|
|
||||
| contract | 계약서 | 수주 계약 문서 |
|
||||
| statement | 거래명세서 | 납품 시 발행 |
|
||||
| purchaseOrder | 발주서 | 발주처 제출용 |
|
||||
|
||||
### 분할(Split) 관리
|
||||
|
||||
**분할 데이터 구조:**
|
||||
```javascript
|
||||
{
|
||||
id: number,
|
||||
splitNo: string, // "{orderNo}-{순번2자리}"
|
||||
splitOrder: number,
|
||||
splitType: string, // '개소별'
|
||||
dueDate: string,
|
||||
itemIds: number[], // 분할 품목 ID 배열
|
||||
productionStatus: string, // '작업대기', '작업지시'
|
||||
shipmentStatus: string, // '출고대기', ...
|
||||
productionOrderNo: string,
|
||||
totalQty: number,
|
||||
completedQty: number,
|
||||
remainingQty: number
|
||||
}
|
||||
```
|
||||
|
||||
### 생산지시 생성 로직
|
||||
|
||||
**공정별 작업지시 자동 분리:**
|
||||
1. **스크린 공정**: 스크린 카테고리 품목
|
||||
2. **슬랫 공정**: 슬랫/철재 카테고리 품목
|
||||
3. **절곡 공정**: BOM 데이터 기반 절곡물
|
||||
|
||||
**작업지시 번호 생성:**
|
||||
```javascript
|
||||
const woNo = `KD-PL-${dateCode}-${순번2자리}`;
|
||||
// 예: KD-PL-241218-01
|
||||
```
|
||||
|
||||
**공정별 작업 단계:**
|
||||
```javascript
|
||||
{
|
||||
'스크린': ['원단절단', '미싱', '앤드락작업', '중간검사', '포장'],
|
||||
'슬랫': ['코일절단', '중간검사', '미미작업', '포장'],
|
||||
'절곡': ['절단', '절곡', '중간검사', '포장'],
|
||||
}
|
||||
```
|
||||
|
||||
**팀 자동 배정:**
|
||||
```javascript
|
||||
{
|
||||
'스크린': { assignee: '스크린팀', assignees: ['김스크린', '이스크린', '박스크린'] },
|
||||
'슬랫': { assignee: '슬랫팀', assignees: ['김슬랫', '이슬랫', '박슬랫'] },
|
||||
'절곡': { assignee: '절곡팀', assignees: ['김절곡', '이절곡'] },
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. OrderCreate (수주 등록)
|
||||
|
||||
### Props
|
||||
```javascript
|
||||
{
|
||||
quotes, // 견적 배열 (선택용)
|
||||
fromQuote, // 전환된 견적
|
||||
additionalItems, // 추가분 품목
|
||||
relatedOrders, // 관련 수주 (추가분용)
|
||||
isAdditional, // 추가분 여부
|
||||
onNavigate,
|
||||
onBack,
|
||||
onSave
|
||||
}
|
||||
```
|
||||
|
||||
### 수주 유형
|
||||
| 유형 | orderType | 설명 |
|
||||
|------|-----------|------|
|
||||
| 견적전환 | from-quote | 견적에서 수주 전환 |
|
||||
| 직접입력 | direct | 견적 없이 직접 등록 |
|
||||
| 추가분 | additional | 기존 수주에 추가 |
|
||||
|
||||
### 수주번호 생성 규칙
|
||||
```javascript
|
||||
// 신규: KD-SO-YYMMDD-순번
|
||||
const orderNo = `KD-SO-${dateCode}-${seq}`;
|
||||
// 예: KD-SO-241218-01
|
||||
|
||||
// 추가분: 원수주번호-A, B, C...
|
||||
const additionalOrderNo = `${baseOrderNo}-${suffix}`;
|
||||
// 예: KD-SO-241218-01-A
|
||||
```
|
||||
|
||||
### 폼 필드
|
||||
|
||||
**기본 정보:**
|
||||
| 필드 | 타입 | 필수 | 설명 |
|
||||
|------|------|------|------|
|
||||
| orderDate | date | - | 수주일 (기본: 오늘) |
|
||||
| customerName | text | ✅ | 발주처 |
|
||||
| customerId | text | - | 거래처 ID |
|
||||
| siteName | text | ✅ | 현장명 |
|
||||
| manager | text | - | 담당자 |
|
||||
| contact | text | - | 연락처 |
|
||||
|
||||
**납품 정보:**
|
||||
| 필드 | 타입 | 필수 | 옵션 |
|
||||
|------|------|------|------|
|
||||
| dueDate | date | ✅ | 납기일 |
|
||||
| deliveryMethod | select | - | 배송방법 (12종) |
|
||||
| deliveryAddress | text | - | 납품주소 |
|
||||
| receiverName | text | - | 수령자명 |
|
||||
| receiverPhone | text | - | 수령자연락처 |
|
||||
|
||||
**배송방법 옵션 (12종):**
|
||||
```
|
||||
상차(선불), 상차(착불), 직접배차, 직접수령,
|
||||
경동화물(선불/착불), 경동택배(선불/착불),
|
||||
대신화물(선불/착불), 대신택배(선불/착불)
|
||||
```
|
||||
|
||||
### 품목 추가/수정 폼
|
||||
|
||||
**품목 필드:**
|
||||
| 필드 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| productCode | text | 품목코드 |
|
||||
| productName | select | 품목명 |
|
||||
| floor | text | 층 |
|
||||
| location | text | 위치 |
|
||||
| openWidth | number | 개구폭(mm) |
|
||||
| openHeight | number | 개구높이(mm) |
|
||||
| qty | number | 수량 |
|
||||
| unitPrice | number | 단가 |
|
||||
| guideRailType | select | 가이드레일형태 |
|
||||
| guideRailSpec | select | 가이드레일규격 |
|
||||
| finish | select | 마감 |
|
||||
|
||||
### 제작 스펙 자동 계산
|
||||
```javascript
|
||||
const prodWidth = openWidth + 140;
|
||||
const prodHeight = Math.max(openHeight + 400, 2950);
|
||||
const shaft = openWidth > 6000 ? 5 : 4;
|
||||
const capacity = openWidth > 6000 ? 300 : 160;
|
||||
```
|
||||
|
||||
### 저장 시 생성되는 데이터
|
||||
```javascript
|
||||
const newOrder = {
|
||||
id,
|
||||
orderNo,
|
||||
orderDate,
|
||||
quoteId, quoteNo,
|
||||
orderType, // 'from-quote' | 'direct' | 'additional'
|
||||
parentOrderNo, // 추가분일 경우
|
||||
customerId, customerName,
|
||||
creditGrade, // 거래처 신용등급
|
||||
siteName, siteCode,
|
||||
manager, contact,
|
||||
dueDate,
|
||||
status: '수주등록',
|
||||
paymentStatus: '미입금',
|
||||
accountingStatus: '미확인',
|
||||
deliveryMethod,
|
||||
totalAmount,
|
||||
deliveryAddress,
|
||||
receiverName, receiverPhone,
|
||||
items, // 품목 배열
|
||||
motorSpec, // 모터/전장품 스펙
|
||||
bomData, // 절곡물 BOM
|
||||
calculatedItems, // 견적 산출 품목
|
||||
splits: [],
|
||||
documentHistory: [],
|
||||
changeHistory: [],
|
||||
createdAt, createdBy,
|
||||
note
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 수주 상태 흐름
|
||||
|
||||
```
|
||||
수주등록 → 수주확정 → 생산중 → 생산완료 → 출하완료
|
||||
↓
|
||||
분할 관리
|
||||
↓
|
||||
생산지시 (공정별)
|
||||
↓
|
||||
작업지시 생성
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 관련 API 추정
|
||||
|
||||
### 수주 CRUD
|
||||
```
|
||||
GET /api/orders - 수주 목록
|
||||
GET /api/orders/{id} - 수주 상세
|
||||
POST /api/orders - 수주 등록
|
||||
PUT /api/orders/{id} - 수주 수정
|
||||
DELETE /api/orders/{id} - 수주 삭제
|
||||
DELETE /api/orders (bulk) - 수주 일괄 삭제
|
||||
```
|
||||
|
||||
### 분할 관리
|
||||
```
|
||||
POST /api/orders/{id}/splits - 분할 추가
|
||||
PUT /api/orders/{id}/splits/{splitId} - 분할 수정
|
||||
DELETE /api/orders/{id}/splits/{splitId} - 분할 삭제
|
||||
```
|
||||
|
||||
### 생산지시
|
||||
```
|
||||
POST /api/orders/{id}/production-order - 전체 생산지시
|
||||
POST /api/orders/{id}/splits/{splitId}/production-order - 분할 생산지시
|
||||
```
|
||||
|
||||
### 작업지시
|
||||
```
|
||||
POST /api/work-orders - 작업지시 생성
|
||||
GET /api/work-orders?orderNo={orderNo} - 수주별 작업지시 조회
|
||||
```
|
||||
|
||||
### 문서 출력
|
||||
```
|
||||
GET /api/orders/{id}/documents/contract - 계약서
|
||||
GET /api/orders/{id}/documents/statement - 거래명세서
|
||||
GET /api/orders/{id}/documents/purchase-order - 발주서
|
||||
```
|
||||
Reference in New Issue
Block a user