Files
hjjeong ea6606da0c 개발관리>PART 등록·조회 메뉴 신설 (PR-A) — wace partMng 1:1 이식
backend (M1+M2):
- devPartService: listTemp/listRelease/getByObjid/create/update/deploy/removeMany
- partMngBaseSimple SELECT + 추가 15컬럼(acctfg/odrfg/unit_dc/unitmang_dc/lot_fg 등) 라벨/CASE
- deploy 트랜잭션 3단계 (isLastInit → part_mng_history INSERT → partMngDeploy + EO_NO 채번)
- EO_NO 분기: is_longd='1'→EOB{yy}-{seq} / else EO{yy}-{seq}
- objidUtil: wace CommonUtils.createObjId() 1:1 (bigint objid 채번)
- DDL: 9 신규 테이블 + part_mng 15컬럼 ALTER (운영판 1:1 추출)

frontend (M1+M2):
- part-regist (M1) / part-search (M2): 23셀 그리드 + 검색폼 + 액션
- PartFormDialog: 등록/수정 통합 (mode prop, 4 섹션)
- PartDetailDialog: 읽기 전용 + "수정" dispatch
- AdminPageRenderer dynamic 임포트 2건 + menu_info URL spec 정렬

본 PR 제외 (별 PR): 도면 다중 업로드, ERP 업로드, Excel Import, BOM_PART_QTY R/W

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:14:10 +09:00

198 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 개발관리 이식 GAP 분석 (원본 wace_plm 대비)
> 작성: 2026-05-12 / 작성자: hjjeong
> 대상 메뉴 5종 (1 도메인 `development/`):
> - PART 등록 / PART 조회 / E-BOM 등록 / E-BOM 조회 / 설계변경 리스트
> 원본 위치: `wace_plm/WebContent/WEB-INF/view/partMng/` (단일 디렉토리) + `mapper/partMng.xml` 단일 매퍼.
---
## 0. 한 문장 요약
5개 메뉴 모두 wace `partMng/` 단일 디렉토리 + `partMng.xml` 매퍼에 1:1 매핑됨. 의존 테이블 15개 중 **6개 보유(`part_mng`/`comm_code`/`pms_wbs_task`/`project_mgmt`/`user_info`/`product_mgmt`)** · **9개 신규 추가 완료(`300_part_bom.sql`)** · **`part_mng`에 누락 15컬럼 ALTER 완료(`301_alter_part_mng.sql`)**. 5개 메뉴 모두 P1에서 실데이터 표시 가능.
## 0.1 이식 원칙
- JSP/매퍼XML 안의 `/* */`, `<!-- -->`, `//` 주석 블록은 비활성. 활성 코드만 이식.
- `company_code` 멀티테넌시 분기는 vexplor_rps 측에 만들지 않음 (COMPANY_16 단독).
- `CODE_NAME()`은 영업/프로젝트와 동일하게 `LEFT JOIN comm_code CC_X ON CC_X.code_id=...` 패턴 통일.
- `client_mng`/`supply_mng` → vexplor는 `customer_mng`로 통합되어 있으나, 개발관리 5개 메뉴는 `customer_mng`를 직접 참조하지 않음(`project_mgmt.customer_objid` 경유). 분기 변환 불필요.
- 금액 1,234.00 / 수량 1,234 / 모든 숫자 right-align (memory `feedback_number_format.md`).
- wace JSP 컬럼 정의 끝의 주석 블록은 비활성 항목 — grep만으로 카운트하지 말 것 (memory `feedback_wace_jsp_columns.md`).
---
## 1. 메뉴 ↔ JSP ↔ 매퍼 1:1 매핑
| # | 메뉴 | wace JSP | 매퍼 쿼리 (partMng.xml) | LOC |
|---|---|---|---|---:|
| M1 | **PART 등록** | `partMngTempList.jsp` | `partMngTempGridList` (S), `partMngDeploy` (U), `partMngDelete` (D) | 649 |
| M2 | **PART 조회** | `partMngList.jsp` | `partMngGridList` (S), `partMngDelete` (D), `partMngFormPopUp` (S) | 834 |
| M3 | **E-BOM 등록** | `structureList.jsp` | `getBOMStandardStructureGridList` (S), `deleteStructure` (D), `structureStatusChange` (U) | 782 |
| M4 | **E-BOM 조회** | `structureAscendingList.jsp` | `structureAscendingList`/`structureAscendingListExcel`/`structureDescendingExcelList` (S) | 1,064 |
| M5 | **설계변경 리스트** | `partMngHisList.jsp` | `partMngHistList` (S, read-only) | 198 |
vexplor_rps 측 라우트(예정):
```
GET /api/development/part-temp/list (M1 그리드)
POST /api/development/part-temp/deploy (M1 확정)
DEL /api/development/part-temp (M1·M2 삭제 공용)
GET /api/development/part/list (M2 그리드)
GET /api/development/part/:objid (M2 상세 팝업)
GET /api/development/ebom/list (M3 그리드)
PUT /api/development/ebom/status (M3 상태변경)
DEL /api/development/ebom/:objid (M3 삭제)
GET /api/development/ebom/ascending (M4 정전개)
GET /api/development/ebom/descending (M4 역전개)
GET /api/development/eo/history/list (M5 그리드)
```
---
## 2. 메뉴별 검색 필드 & 그리드 컬럼 (활성만)
### M1 PART 등록 (`partMngTempList.jsp`)
**검색**: SEARCH_PART_NO, SEARCH_PART_NAME (둘 다 autocomplete)
**그리드 23셀**: PART_NO · PART_NAME · CU01_CNT(3D) · CU02_CNT(2D) · CU03_CNT(PDF) · MATERIAL · HEAT_TREATMENT_HARDNESS · HEAT_TREATMENT_METHOD · SURFACE_TREATMENT · MAKER · PART_TYPE_TITLE · SPEC · ACCTFG_NM · ODRFG_NM · UNIT_DC_NM · UNITMANG_DC_NM · UNITCHNG_NB · LOT_FG_NM · USE_YN_NM · QC_FG_NM · SETITEM_FG_NM · REQ_FG_NM · UNIT_LENGTH/QTY
**액션**: 확정(Deploy) · 삭제 · 등록 · Excel Upload · 도면다중업로드 · 조회
**팝업**: partMngFormPopUp(신규) · partMngDetailPopUp(편집) · openPartExcelImportPopUp
**핵심 의존 테이블**: `part_mng` (메인) · `order_spec_mng` · `admin_supply_mng` · `bom_part_qty`
### M2 PART 조회 (`partMngList.jsp`)
**검색**: 없음(메인 조회 화면). 그리드 컬럼 동일하게 23셀(M1과 동일).
**액션**: 등록 · 삭제 · 도면연동 · ERP업로드(전체/단일/모두) · Excel Upload · 조회
**팝업**: partMngFormPopUp · partMngDetailPopUp · FileRegistPopup · openPartExcelImportPopUp
**핵심 의존 테이블**: `part_mng` · `bom_part_qty`
### M3 E-BOM 등록 (`structureList.jsp`)
**검색 9 필드**: customer_cd · project_name · unit_code · SEARCH_UNIT_NAME · SEARCH_WRITER · product_cd · SEARCH_PART_NO · SEARCH_PART_NAME · search_fromDate~toDate · status
**그리드 9셀**: PRODUCT_NAME · PART_NO · PART_NAME · BOM_CNT · DEPT_USER_NAME · REG_DATE · DEPLOY_DATE · REVISION · STATUS
**액션**: 조회 · 삭제 · E-BOM등록 · 상태변경
**팝업**: setStructureStandardFormPopup · setBomCopyFormPopup · setStructurePopupMainFS · changeDesignNotePopUp · structureStatusChangePopup · openBomReportExcelImportPopUp
**핵심 의존 테이블**: `part_bom_report` · `supply_mng` · `project_mgmt` · `pms_wbs_task` · `user_info` · `bom_part_qty` · `part_mng` · `comm_code`
### M4 E-BOM 조회 (`structureAscendingList.jsp`)
**검색 4 필드**: project_name · unit_code · search_partNo · search_partName
**그리드**: 동적 — MAX_LEVEL 레벨 컬럼 + 품번 · 품명 · 3D/2D/PDF · 수량 · 변경일 · 변경항목 · 규격 · 재질 · 중량 · 비고
**액션**: 정전개조회 · 역전개조회 · 엑셀다운로드(정/역전개)
**팝업**: partMngDetailPopUp(클릭) · FileRegistPopup(도면)
**핵심 의존 테이블**: `bom_part_qty` · `sales_bom_report` · `part_bom_report` · `product_mgmt_upg_detail`/`_master` · `part_mng` · `project_mgmt` · `pms_wbs_task` · `user_info` · `product_mgmt`
### M5 설계변경 리스트 (`partMngHisList.jsp`)
**검색 10 필드**: Year · contract_objid · unit_code · part_no · part_name · change_option · eo_start_date~end_date · change_type · part_type · writer_id
**그리드 16셀**: EO_NO · PROJECT_NO · PROJECT_NAME · UNIT_NAME · PARENT_PART_INFO · PART_NO · PART_NAME · QTY · QTY_TEMP · CHANGE_TYPE_NAME · CHANGE_OPTION_NAME · REVISION · EO_DATE · PART_TYPE_NAME · WRITER_NAME · HIS_REG_DATE_TITLE
**액션**: 조회만(Read-Only)
**팝업**: partMngHisDetailPopUp(행 클릭)
**핵심 의존 테이블**: `part_mng_history` · `project_mgmt` · `part_bom_report` · `pms_wbs_task` · `user_info` · `comm_code`
---
## 3. RPS DB 보유 매트릭스 (적용 완료)
| 테이블 | M1 | M2 | M3 | M4 | M5 | 종류 | RPS 상태 |
|---|:-:|:-:|:-:|:-:|:-:|---|---|
| `part_mng` | R/W | R/W | R | R | R | 메인 | ✅ +15컬럼 ALTER(`301_alter_part_mng.sql`) |
| `bom_part_qty` | R | R | R/W | R | R | BOM 수량 | ✅ 신규(`300`) |
| `part_bom_report` | R | R | R/W | R | R | BOM 리포트 헤더 | ✅ 신규(`300`) |
| `part_mng_history` | | – | – | – | R | 변경이력 | ✅ 신규(`300`) |
| `order_spec_mng` | R | – | – | – | – | 발주 스펙 | ✅ 신규(`300`) |
| `admin_supply_mng` | R | | – | – | – | 공급사(관리자) | ✅ 신규(`300`) |
| `supply_mng` | | – | R | – | – | 공급사 | ✅ 신규(`300`) |
| `sales_bom_report` | | | | R | – | 영업 BOM 단가 | ✅ 신규(`300`) |
| `product_mgmt_upg_master` | | – | – | R | – | 제품 업그레이드 마스터 | ✅ 신규(`300`) |
| `product_mgmt_upg_detail` | | – | – | R | – | 제품 업그레이드 디테일 | ✅ 신규(`300`) |
| `project_mgmt` | | | R | R | R | 프로젝트 | ✅ 기존 |
| `pms_wbs_task` | | | R | R | R | 작업/유닛 | ✅ 기존 |
| `user_info` | | | R | R | R | 사용자 | ✅ 기존(컬럼명 매핑 필요) |
| `comm_code` | | | R | R | R | 공통코드 | ✅ 기존 |
| `product_mgmt` | | | R | R | | 제품 | ✅ 기존 |
**→ 5개 메뉴 모두 P1에서 실데이터 표시 가능.**
---
## 4. GAP 매트릭스
| # | 우선 | 항목 | 권장 작업 |
|---|---|---|---|
| **DEV-1** | 🔴 | 개발관리 메뉴 자체 부재 → 5개 메뉴 운영판 1:1 이식 | **본 PR 시리즈 (3 묶음)** |
| **DEV-2** | 🔴 | `part_mng` 15컬럼 누락 (열처리/표면처리/단위/Y-N flag) | ✅ **완료**`301_alter_part_mng.sql` |
| **DEV-3** | 🔴 | 9개 테이블 부재 | ✅ **완료**`300_part_bom.sql` (BEGIN/COMMIT 트랜잭션, IDEMPOTENT) |
| **DEV-4** | 🟠 | `user_info` 컬럼명 매핑 (wace `empseq`/`rank` ↔ vexplor `emp_seq`/`rank_code`+`rank_name`) | 코드 측 alias로 처리 |
| **DEV-5** | 🟠 | M3 상태값(작성중/적용완료 등) — wace는 `comm_code` 0000099 자식 사용 | comm_code 그대로 사용. RPS DB에 이미 존재 여부 확인 후 부재 시 INSERT |
| **DEV-6** | 🟠 | M1·M2 팝업(등록/상세) 다이얼로그 — wace `partMngFormPopUp.jsp` 별도 LOC 큼 | M1·M2 묶음 PR에 포함 (한 번에 가는 게 효율) |
| **DEV-7** | 🟡 | M1 도면 다중 업로드 / M2 ERP 업로드 | 본 PR 시리즈 제외 (별 PR) |
| **DEV-8** | 🟡 | M3 BOM Excel Import / M4 엑셀 다운로드 | 본 PR 시리즈 제외 (별 PR) |
| **DEV-9** | 🟢 | M4 동적 MAX_LEVEL 컬럼 — BOM 트리 깊이에 따라 컬럼 추가 | DataGrid 동적 컬럼 모드. 본 PR(E-BOM 묶음)에 포함 |
| **DEV-10** | 🟢 | `admin_supply_mng.employee_email` 운영 타입 버그(`xid`) | ✅ **완료**`300` 추출 시 `character varying`으로 정정 |
---
## 5. PR 묶음 스코프 (3 PR 시리즈)
### 5.1 PR-A : PART 등록·조회 묶음 (M1+M2)
**범위**:
- backend: `routes/devPartRoutes.ts` + `services/devPartService.ts` + `controllers/devPartController.ts`
- 엔드포인트: `/api/development/part-temp/list`·`/deploy`, `/api/development/part/list`·`/:objid`, `/api/development/part` (DELETE)
- frontend:
- `app/(main)/COMPANY_16/development/part-regist/page.tsx` (M1)
- `app/(main)/COMPANY_16/development/part-search/page.tsx` (M2)
- `components/development/PartFormDialog.tsx` (등록/수정 공용)
- `components/development/PartDetailDialog.tsx` (상세)
- `lib/api/devPart.ts`
- 매퍼 1:1: `partMngTempGridList` · `partMngGridList` · `partMngFormPopUp` · `partMngDeploy` · `partMngDelete`
**제외**: 도면 다중 업로드 · ERP 업로드 · Excel Import → 별 PR
### 5.2 PR-B : E-BOM 등록·조회 묶음 (M3+M4)
**범위**:
- backend: `routes/devBomRoutes.ts` + `services/devBomService.ts` + `controllers/devBomController.ts`
- 엔드포인트: `/api/development/ebom/list`·`/status`·`/:objid` (DELETE), `/api/development/ebom/ascending`·`/descending`
- frontend:
- `app/(main)/COMPANY_16/development/ebom-regist/page.tsx` (M3)
- `app/(main)/COMPANY_16/development/ebom-search/page.tsx` (M4)
- `components/development/BomStandardFormDialog.tsx` (M3 등록)
- `components/development/BomStatusChangeDialog.tsx` (M3 상태변경)
- `lib/api/devBom.ts`
- M4 동적 MAX_LEVEL 컬럼 처리 (DataGrid 동적 컬럼)
**제외**: BOM Excel Import · 정/역전개 엑셀 다운로드 → 별 PR
### 5.3 PR-C : 설계변경 리스트 (M5)
**범위**:
- backend: `routes/devEoHistoryRoutes.ts` + `services/devEoHistoryService.ts` + `controllers/devEoHistoryController.ts`
- 엔드포인트: `/api/development/eo/history/list` (read-only)
- frontend:
- `app/(main)/COMPANY_16/development/change-list/page.tsx`
- `components/development/PartHisDetailDialog.tsx` (행 클릭 상세)
- `lib/api/devEoHistory.ts`
- read-only — INSERT/UPDATE/DELETE 없음
---
## 6. 사용자 결정 사항 (2026-05-12)
| # | 항목 | 결정 |
|---|---|---|
| 1 | 도메인 폴더 | 단일 `development/` |
| 2 | 메뉴 진행 순서 | PART 묶음(M1+M2) → E-BOM 묶음(M3+M4) → 설계변경(M5) |
| 3 | 문서 구조 | 단일 00-gap.md (본 문서) + 묶음별 *.md (총 3개) |
| 4 | DDL 적용 | 운영DB → vexplor_rps 직접 적용 완료 (9 신규 + 1 ALTER) |
---
## 7. 다음 단계
1. **PR-A** : `01-part.md` 작성 → backend route → frontend page 2개 → verify
2. **PR-B** : `02-ebom.md` 작성 → backend route → frontend page 2개 → verify
3. **PR-C** : `03-eo-history.md` 작성 → backend route → frontend page → verify