M-BOM ERP BOM 동기화 진행 상황 문서 추가 (개발 진행 중) #210
82
ERP_BOM_SYNC_TODO.md
Normal file
82
ERP_BOM_SYNC_TODO.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# M-BOM → ERP BOM 동기화 (개발 진행 중)
|
||||
|
||||
> 상태: **개발 진행 중 / 운영 검증 전**
|
||||
> 자동 호출 비활성화됨. 수동 호출만 가능.
|
||||
|
||||
## 1. 현재 상태
|
||||
|
||||
- M-BOM 저장 후 **자동 ERP BOM 동기화 호출은 일시 비활성화**되어 있음
|
||||
- 위치: `src/com/pms/service/ProductionPlanningService.java` (saveMbom 마지막 영역, `// [임시 주석] DB 커밋 성공 후 ERP BOM 동기화 ...` 블록)
|
||||
- 사유: 검증 전 자동 호출 시 운영 데이터에 영향 가능
|
||||
- **수동 동기화 엔드포인트는 활성화 상태** — 테스트/임시 운영용으로 사용 가능
|
||||
|
||||
## 2. 구성 파일
|
||||
|
||||
| 파일 | 역할 |
|
||||
|------|------|
|
||||
| `src/com/pms/api/BomErpApiClient.java` | 아마란스 ERP `api20A00` (등록 I01001 / 조회 S01001 / 삭제 D01001) HTTP 클라이언트 |
|
||||
| `src/com/pms/service/BatchService.java` `syncMbomBomToErp(String mbomHeaderObjid)` | M-BOM 헤더 단위로 모품목 추출 → 기존 ERP BOM 삭제 → PLM 구조 재등록 |
|
||||
| `src/com/pms/controller/AdminController.java` `/admin/syncMbomBomToErp.do` | 수동 동기화 엔드포인트 (POST, `mbomHeaderObjid` 파라미터) |
|
||||
| `src/com/pms/service/ProductionPlanningService.java` saveMbom() 1592~1612 | **현재 주석 처리** — DB 커밋 성공 후 자동 호출 블록 |
|
||||
|
||||
## 3. 동작 흐름 (자동 호출 활성화 시)
|
||||
|
||||
1. 사용자가 M-BOM 저장 (`fn_saveMbom`)
|
||||
2. `ProductionPlanningService.saveMbom`에서 DB 커밋 성공
|
||||
3. (주석 해제 시) `batchService.syncMbomBomToErp(mbomHeaderObjid)` 호출
|
||||
4. 내부 흐름:
|
||||
- 매퍼 `productionplanning.getMbomHeaderByObjid` 로 헤더 조회
|
||||
- 모품목 DISTINCT 목록 추출
|
||||
- 모품목별 기존 ERP BOM `bomSq` 조회 후 일괄 삭제
|
||||
- PLM M-BOM 구조 → ERP 형식 변환 후 `api20A00I01001` 로 재등록
|
||||
- SUPPLY_TYPE: `자급` → `bomOdrFg=0` (자재), `사급` → `bomOdrFg=1` (사급)
|
||||
|
||||
## 4. 수동 호출 방법
|
||||
|
||||
```bash
|
||||
curl -X POST 'https://wace-plm-host/admin/syncMbomBomToErp.do' \
|
||||
-d 'mbomHeaderObjid=MBOM_HEADER_OBJID값'
|
||||
```
|
||||
|
||||
또는 관리자 화면에 별도 버튼이 추가되었다면 거기서 호출 (현재 화면 버튼은 미반영).
|
||||
|
||||
## 5. 검증 체크리스트 (자동 호출 활성화 전 확인할 것)
|
||||
|
||||
- [ ] BomErpApiClient의 ERP base URL / ACCESS_TOKEN / HASH_KEY가 운영 환경 값으로 맞는지
|
||||
- [ ] `productionplanning.getMbomHeaderByObjid` 매퍼 쿼리 정상 동작
|
||||
- [ ] 모품목 DISTINCT 추출 쿼리 정확성
|
||||
- [ ] ERP 측 기존 `bomSq` 조회 → 삭제가 정상 (조회 결과 파싱 포함)
|
||||
- [ ] 자급/사급 → `bomOdrFg` 매핑 누락 케이스 (다른 SUPPLY_TYPE 값) 처리
|
||||
- [ ] ERP API 실패 시 PLM DB 트랜잭션은 유지되는지 (현재 try/catch로 감싸 PLM 트랜잭션 유지하도록 의도됨 — 검증 필요)
|
||||
- [ ] 대량 BOM (수백 건) 시 타임아웃/성능
|
||||
- [ ] 중복 호출 / 재시도 시 이중 등록 방지 (삭제 후 재등록 패턴이라 OK 추정)
|
||||
- [ ] 운영 ERP 계정의 권한 / 호출 빈도 제한
|
||||
|
||||
## 6. 자동 호출 활성화 방법
|
||||
|
||||
검증 완료 후 `src/com/pms/service/ProductionPlanningService.java` saveMbom() 의 주석 블록(`// [임시 주석] DB 커밋 성공 후 ERP BOM 동기화` 부분)에서 `//` 제거.
|
||||
|
||||
```java
|
||||
// 현재
|
||||
// if(result && mbomHeaderObjidForErp != null && !mbomHeaderObjidForErp.isEmpty()) {
|
||||
// try {
|
||||
// ...
|
||||
// Map<String, Object> erpResult = batchService.syncMbomBomToErp(mbomHeaderObjidForErp);
|
||||
// ...
|
||||
// }
|
||||
// }
|
||||
|
||||
// 활성화 시
|
||||
if(result && mbomHeaderObjidForErp != null && !mbomHeaderObjidForErp.isEmpty()) {
|
||||
try {
|
||||
...
|
||||
Map<String, Object> erpResult = batchService.syncMbomBomToErp(mbomHeaderObjidForErp);
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 7. 관련 커밋
|
||||
|
||||
- `2b5a7e5` — 배치 ERP 세트 추가 (BatchService + BomErpApiClient + AdminController)
|
||||
- `b466e3b` — ProductionPlanningService 자동 호출부 일시 주석
|
||||
Reference in New Issue
Block a user