docs(migration): 27개 메뉴 통합 진행 상태 README — 6도메인 매트릭스

영업4 + 구매요청2 + 프로젝트2 + 개발5 + 구매9 + 생산5 = 27개 메뉴 한눈에:
 - 매트릭스: 완료17 / 🟡베이스7 / 🟠빈그리드3
 - 도메인별 진행 상태 + 대표 커밋 + 상세문서 링크
 - 공통 인프라(공용 컴포넌트/마이그레이션 패턴/결재/채번)
 - 핵심 정책 8종 + 도메인 함정 8종
 - 다음 작업 우선순위 6종 + 인덱스

품질관리(chpark 베이스, d7c645d2)는 부록으로만 언급.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hjjeong
2026-05-15 11:57:33 +09:00
parent 21cd81bd79
commit 748fde3d3d
+140
View File
@@ -0,0 +1,140 @@
# vexplor_rps 이식 통합 진행 상태
> 작성: 2026-05-15 / 작성자: hjjeong
> 대상: vexplor_rps (RPS 전용 분기, COMPANY_16 단독)
> 원본: wace_plm (Java 7 / Spring 3.2.4 / JSP / MyBatis) — `waceplm.esgrin.com` 운영판이 1순위 진실
## 0. 전체 한눈에 보기
**6개 도메인 / 27개 메뉴** 진행 중. (영업 4 + 구매요청 2 + 프로젝트 2 + 개발 5 + 구매 9 + 생산 5).
| 상태 | 메뉴 수 | 의미 |
|---|---|---|
| ✅ 완료 | 17 | wace 1:1 검증 PASS 또는 마이너 차이만 (기능/SQL 일치) |
| 🟡 베이스 | 7 | 그리드/검색 완료, 액션 모달 또는 detail SQL 일부 미진 |
| 🟠 빈 그리드 | 3 | 화면은 있으나 데이터 SQL 미연결 (의존 테이블 DDL 추출 선행 필요) |
| 🔴 미진 | 0 | — |
## 1. 27개 메뉴 매트릭스
| # | 도메인 | 메뉴명 | RPS 위치 | 상태 | 핵심 미진 |
|---|---|---|---|---|---|
| 1 | 영업관리 | 견적관리 | `sales/estimate` | ✅ | — |
| 2 | 영업관리 | 주문서관리 | `sales/order` | ✅ | — |
| 3 | 영업관리 | 판매관리 | `sales/sale` | ✅ | — |
| 4 | 영업관리 | 매출관리 | `sales/revenue` | ✅ | — |
| 5 | 영업/구매요청 | 구매요청서관리 | `purchase-request/request` (이동 중) | 🟡 | 구매요청서작성 다이얼로그 · 품의서생성 액션 |
| 6 | 영업/구매요청 | 품의서관리(영업) | `purchase-request/proposal` (이동 중) | 🟡 | Amaranth 결재상신 (`target_type='PROPOSAL'`, `formId='1163'`) |
| 7 | 프로젝트관리 | 진행관리 | `project/progress` | ✅ | — |
| 8 | 프로젝트관리 | 제품구분_WBS관리 | `project/wbs-template` | ✅ | — |
| 9 | 개발관리 | PART 등록 | `development/part-regist` | ✅ | — |
| 10 | 개발관리 | PART 조회 | `development/part-search` | ✅ | — |
| 11 | 개발관리 | E-BOM 등록 | `development/ebom-regist` | ✅ | — |
| 12 | 개발관리 | E-BOM 조회 | `development/ebom-search` | ✅ | — |
| 13 | 개발관리 | 설계변경 리스트 | `development/change-list` | ✅ | — |
| 14 | 구매관리 | 구매리스트 | `purchase/list` | 🟡 | detail SQL 보강 |
| 15 | 구매관리 | 품의서(구매) | `purchase/proposal` | 🟡 | 발주서 생성 액션 |
| 16 | 구매관리 | 프로젝트 현황 | `purchase/project-status` | 🟡 | — |
| 17 | 구매관리 | 견적요청 | `purchase/quote-request` | 🟠 | `sales_request_part` DDL 추출 + detail SQL |
| 18 | 구매관리 | 입고관리 | `purchase/inbound` | 🟠 | inbound detail SQL |
| 19 | 구매관리 | 입고관리-일자별 | `purchase/inbound-by-date` | 🟠 | inbound detail SQL |
| 20 | 구매관리 | 입고관리-품목별 | `purchase/inbound-by-item` | 🟠 | inbound detail SQL |
| 21 | 구매관리 | 발주관리 | `purchase/order` | ✅ | — |
| 22 | 구매관리 | M-BOM (중복) | `purchase/mbom` | ✅ | `production/mbom` re-export |
| 23 | 생산관리 | M-BOM 관리 | `production/mbom` | ✅ PR-B5+ | PR-B6 Excel / PR-B7 행이동 (후순위) |
| 24 | 생산관리 | 생산계획&실적 | `production/plan-result` | 🟡 | [생산계획 생성] · [생산실적 등록] 모달 |
| 25 | 생산관리 | 생산계획&실적(장비) | `production/plan-result-equip` | ✅ | WBS할당 모달 의도적 보류 |
| 26 | 생산관리 | 반제품 소요량 | `production/semi-product-req` | ✅ | 단위/소재/규격 3컬럼 UX 추가 (의도적) |
| 27 | 생산관리 | 원자재 소요량 | `production/raw-material-req` | ✅ | — |
## 2. 도메인별 진행 상태
| 도메인 | 메뉴 | 마감도 | 대표 커밋 | 상세 문서 |
|---|---|---|---|---|
| **영업관리** | 4 | 100% (G6 메일 발송까지) | (다수) | [sales/README.md](./sales/README.md) |
| **구매요청** (영업↔구매 교차) | 2 | 베이스 (액션 모달 미진) | `7e7c6a0a` | [sales/09-purchase-request.md](./sales/09-purchase-request.md) |
| **프로젝트관리** | 2 | 100% | `a1ace226` / `332688a4` / `7c4817b0` / `50669a66` | [project/00-gap.md](./project/00-gap.md) |
| **개발관리** | 5 | 100% + Import + 도면 다중 업로드 (16 커밋) | (PR-A/B/C 다수) | [development/00-gap.md](./development/00-gap.md) |
| **구매관리** | 9 | 1차 스캐폴드 (마스터 3 데이터 노출 / detail 4 빈 그리드 / 발주·M-BOM 완료) | `b38f5957` | (메모리만) |
| **생산관리** | 5 | 100% + PR-B5+ BOM 복사 다이얼로그 | `bd47ca80` / `63682587` | [production/README.md](./production/README.md) |
부록 — **품질관리**: chpark 가 베이스 4메뉴(`incoming-request/incoming-mgmt/process-inspection/semi-product-inspection`) + 고객CS/ECR 리팩토링 (`d7c645d2`). 후속 상세화 별 PR.
## 3. 공통 인프라 (도메인 가로지름)
### 3.1 공용 컴포넌트 (의무 사용)
- **PageHeader** — 메뉴명 자동 매칭, 우측 액션 영역, 조회/초기화 표준 위치
- **CompactFilterBar** + **CompactFilterField** + **CompactDateRange** — 컴팩트 검색 그리드
- **SmartSelect** / **CustomerSelect** — native `<select>` 금지, 자동 완성/공통코드 바인딩
- **DataGrid** (logicstudio 스타일 6종) — toolbar(⟳⬇⚙️📊) + footer 통계 + range 페이지네이션 + 차트 패널 (`36c1f357`)
- **AttachFileDropZone** — attach_file_info 다중 파일 업로드, 도메인별 신규 드롭존 금지
### 3.2 데이터 마이그레이션 패턴
- 운영 `211.115.91.141:11133/waceplm` (PG 16.8) → RPS `:11134` DDL/data CSV staging
- 도메인별 폴더 `docs/migration/{sales,project,development,quality,production}/` + `ddl-extracted/` + `data-sync/`
- 누락 컬럼 발견 시: CSV export → TEMP staging → UPDATE FROM JOIN (`is_last` NULL 함정 동시 해결)
### 3.3 결재 시스템 (Amaranth 연동)
- 영업관리 G7~G11 (견적 메일 + Amaranth 결재상신)
- 영업/구매요청 품의서(`target_type='PROPOSAL'`) — 결재완료 시 구매관리 발주풀로 자동 노출
### 3.4 채번/식별자 패턴
- numeric/bigint objid: UUID v4 → Java String.hashCode → int32 String (createObjId 1:1 패턴)
- varchar prefix: 영업관리 prefix-string 패턴 (예: `R-YYYYMMDD-NNN`)
- DataGrid `row.id` ↔ 백엔드 `objid` useMemo 매핑 필수 (누락 시 체크박스 빈 상태)
## 4. 핵심 정책 (사용자 확정)
1. **vexplor 로코드툴 프레임워크 안 씀** — 모든 메뉴 wace 도메인으로 풀-커스텀 재개발
2. **`wace_plm` 이 항상 1순위 진실** — 이전 이식물(영업/개발 일부)은 검증 안 된 변형 가능
3. **JSP/매퍼 비활성 보존**: `/* */` · `<!-- -->` · `//` 블록 = 이식 대상 아님 (grep 카운트 함정 주의)
4. **company_code 멀티테넌시 불필요** — COMPANY_16 단독, 새 코드/SQL에 분기 만들지 말 것
5. **숫자 포맷**: 금액 1,234.00 / 수량 1,234 / 모든 숫자 right align
6. **존댓말 사용** — 모든 한국어 응답 (2026-05-08 직접 지적)
7. **UI 문자열에 내부 참조 금지** — PageHeader description / toast 에 wace · 매퍼명 · 테이블명 · 개발자 메모 금지 (2026-05-15 직접 지적)
8. **커밋 범위 엄격** — 내 세션 작업만, 사용자 병행 작업/untracked 절대 포함 금지 (2026-05-14 직접 지적)
## 5. 도메인 핵심 함정 (이식 시 참고)
| 함정 | 메모리 |
|---|---|
| 큰 파일(570MB SQL · 45KB+ JSP) 통째 Read 시 surrogate 에러 → grep + offset/limit | `feedback_large_file_handling` |
| wace JSP 컬럼/검색폼 끝 주석 블록 (비활성 보존) | `feedback_wace_jsp_columns` |
| wace "Excel" 명칭 메뉴가 실제는 CSV 운영 (`fnc_setFileDropZone(...,"csv")` 확인) | `feedback_wace_csv_vs_excel` |
| wace partMng 폼 colgroup 5컬럼(12/12/25/12/*) + colspan=2 | `feedback_wace_colgroup_pattern` |
| BOM_PART_QTY 트리 재귀 CTE: 자식.parent_objid = 부모.child_objid (objid 아님) | `feedback_bom_part_qty_tree_join` |
| 없는 테이블 → 운영 DDL 추출 (211.115.91.141:11133) | `feedback_missing_tables_workflow` |
| wace 매퍼는 request 파라미터 암묵 수신 — Java paramMap 만 보고 옮기면 핵심 필터 누락 | `feedback_wace_mapper_implicit_params` |
| numeric(15,4) 캐스팅: `NULLIF::INTEGER` 패턴 시 "invalid input syntax" → `COALESCE(x,0)::INTEGER` | `feedback_data_migration_sync` |
## 6. 다음 작업 우선순위 (제안)
1. **구매요청 2메뉴 액션 완성** — 영업↔구매 교차 핵심
- 구매요청서작성 다이얼로그
- 품의서생성 액션
- 결재상신 (`target_type='PROPOSAL'`, `formId='1163'`)
- 선행: `sales_request_part` 운영DB DDL 추출
2. **구매관리 빈 그리드 4개 보강**`sales_request_part` 추출 후 quote-request / inbound 3종 detail SQL
3. **plan-result 액션 모달**`prodPlanFormPopup.jsp` / `prodResultFormPopup.jsp` 1:1
4. **공통 PartSelect 컴포넌트** — wace `Select2-part`(AJAX 자동완성), 영업/생산/구매 다수 메뉴 공통
5. **품질관리 후속** (chpark 베이스 4메뉴 상세화) / **자재관리 신규 도메인 진입**
6. **M-BOM 후순위** — PR-B6 Excel / PR-B7 행이동
## 7. 인덱스
### 7.1 도메인별 README / Gap 문서
- [sales/README.md](./sales/README.md) — 영업관리 + 구매요청 (메뉴 매핑 / 도메인 테이블 / 마스터 매핑 / 채번 / UX)
- [sales/00-gap.md](./sales/00-gap.md) · [01-estimate.md](./sales/01-estimate.md) · [02-order.md](./sales/02-order.md) · [03-sale.md](./sales/03-sale.md) · [04-revenue.md](./sales/04-revenue.md) · [05-master-mapping.md](./sales/05-master-mapping.md) · [09-purchase-request.md](./sales/09-purchase-request.md)
- [project/00-gap.md](./project/00-gap.md) · [01-progress.md](./project/01-progress.md) · [02-wbs-template.md](./project/02-wbs-template.md)
- [development/00-gap.md](./development/00-gap.md) · [01-part.md](./development/01-part.md) · [02-ebom.md](./development/02-ebom.md) · [03-eo-history.md](./development/03-eo-history.md)
- [production/README.md](./production/README.md) — 생산관리 (5메뉴 + PR-B5+ BOM 복사 + 23 매퍼 매핑)
- [quality/01_quality_tables_from_ilshin.sql](./quality/01_quality_tables_from_ilshin.sql) · [02_wace_plm_quality_tables.sql](./quality/02_wace_plm_quality_tables.sql)
### 7.2 공통
- [common/menu_desc_sync.sql](./common/menu_desc_sync.sql) — 메뉴 설명 동기화
### 7.3 외부 환경
- 운영 DB: `211.115.91.141:11133/waceplm` (PG 16.8) — DDL/data 추출 소스
- RPS DB: `211.115.91.141:11134/vexplor_rps` — 이식 대상
- 운영 화면: `waceplm.esgrin.com`
- wace_plm 소스: `/Users/jhj/wace_plm` (JSP + Controller + 매퍼 XML)