## 1. 프로그램 개요

| 항목 | 내용 |
| --- | --- |
| **프로그램 명** | PackingInvoiceMapper |
| **실행 파일 명** | State_Comparision_Ver_1.0.0.exe |
| **설치 위치** | 4층 포장 구역 오른쪽 컴퓨터 |
| **용도** | 출하 지시서 등록 전 포장 제품과 송장번호 연결 처리 |

## 2. 프로그램 UI

| 출하내용 확인 |  데이터 맵핑 | 대량 맵핑 |
| --- | --- |--- |
|  ![출하내용 확인](/docs/state.png)| ![데이터 맵핑](/docs/map.png) | ![대량 맵핑](/docs/mass.png)|

### 2.1 UI 구성요소

- 코드 번호 입력 필드
- 출하 지시서 정보 표시
- 패킹 정보 표시
- 제품 리스트 동적 생성 영역

### 2.2 상단 설정 옵션

| 구분 | 버튼 ID | 설명 |
| --- | --- | --- |
| **API 설정** | `ckbAPIUse` | API 사용 여부 |
|  | `ckbPostgre` | Direct DB 접근 |
| **기능 설정** | `rdbState` | 출하내용 확인 |
|  | `rdbMap` | 데이터 맵핑 |
|  | `rdbMass` | 대량 맵핑 |
| **사용 설정** | `ckbBarcode` | 바코드 사용 |
|  | `ckbAuto` | 자동 측정 |
| **맵핑 설정** | `rdbStatePack` | 전표+패킹+송장 |
|  | `rdbStateInv` | 전표+송장 |

## 3. 기능 요약

### 3.1 출하내용 확인 (rdbState)

- **목적**: 전표번호를 입력받아 출하 상태/연결 상태/제품 정보 확인
- **처리 방식**:
    - 패킹 코드 (길이 12자리): 패킹 정보 기반 조회
    - ERP/MES 코드: API 호출 및 JSON 파싱

### 3.2 데이터 맵핑 (rdbMap)

- **목적**: 출하지시서와 패킹 정보를 매핑하여 송장번호 연결
- **처리 방식**:
    - 전표+송장: 송장번호 유효성 검사
    - 패킹 처리: 패킹 정보 조회 후 매핑
    - MES 처리: API 데이터 조회 후 매핑

### 3.3 대량 맵핑 (rdbMass)

- **목적**: 대량 출하지시서 처리
- **처리 방식**:
    - 세트 코드 검증
    - 패킹-출하지시서 매핑 검증
    - 대량 저장 처리

## 4. 데이터베이스 테이블

### 4.1 주요 테이블

| 테이블명 | 변수명 | 실제 DB 경로 | 주요 컬럼 | 용도 |
| --- | --- | --- | --- | --- |
| **주문 테이블** | `mainOrderDB` / `testOrderDB` | `jomtOrderDB.jomtOrderTbl` | Order_Code, Packing_Code, Invoice_Number | 주문-패킹-송장 매핑 |
| **매출 테이블** | `mainSalesDB` / `testSalesDB` | `jomtTesterDB.jomtSalesPackingTbl` | PackingCode, Main_Product_SN, Pro_Face_Serial | 패킹 정보 및 시리얼 번호 |
| **제품 테이블** | `mainProdDB` / `testProdDB` | `jomtTesterDB.jomtProductTbl` | ProductCode, ProductName, Specifications | 제품 기본 정보 |
| **카트리지 테이블** | `mainCartDB` / `testCartDB` | `jomtTesterDB.jomtCartridgeTbl` | CartridgeCode, CartridgeName, Type | 카트리지 정보 |
| **제품 리스트** | `mainPlistDB` / `testPlistDB` | `jomtTesterDB.jomtProdList` | ItemCode, ItemName, FaceShot, EyeShot | 제품 정보 |
| **소모품 테이블** | `mainClistDB` / `testClistDB` | `jomtTesterDB.jomtComponentTbl` | ItemCode, ItemName | 소모품 정보 |
| **Non-TD 테이블** | `MainNonTDDB` / `TestNonTDDB` | `jomtTesterDB.jomtNonTDTbl` | NonTDCode, NonTDName | Non-TD 제품 정보 |
| **세트 코드** | `mainPKCodeDB` | `jomtTesterDB.jomtPKCodeTbl` | PKCode, ProdCode, ProdCount | 세트 구성 정보 |

### 4.2 데이터베이스 환경별 설정

### 운영 환경 (Main)

- **Database**: `jomtOrderDB`, `jomtTesterDB`
- **서버**: 운영 서버
- **용도**: 실제 운영 데이터 처리

### 테스트 환경 (Test)

- **Database**: `jomtTesterServerDB`
- **서버**: 테스트 서버
- **용도**: 개발 및 테스트용 데이터 처리

### 4.3 외부 연동

- **MES API**: `apiItemOutURL` 통해 주문/제품/고객 정보 수신
- **PostgreSQL**: Direct DB 접근 시 사용 (`ckbPostgre` 체크 시)

## 5. 사용자 조작 흐름

### 5.1 검색 모드 (btnSearch.Text ≠ "등록")

| 순서 | 패킹 코드 검색 (길이 12자리) | ERP/MES 코드 검색 |
| --- | --- | --- |
| 1 | 패킹 코드 입력 | 코드 입력 (ERP/MES 형식) |
| 2 | 패킹 정보 존재 여부 확인 | 코드에서 날짜 추출 |
| 3 | 연결된 주문 코드 조회 | MES API 호출 |
| 4 | 주문자 정보 조회 | JSON 응답 파싱 |
| 5 | 시리얼 번호 및 소모품 조회 | 제품 이미지 정보 조회 |
| 6 | 결과를 UI에 표시 | 결과를 UI에 표시 |

### 5.2 등록 모드 (btnSearch.Text = "등록")

| 순서 | 데이터 맵핑 등록 | 대량 맵핑 등록 |
| --- | --- | --- |
| 1 | 출하지시서 코드 입력 | 출하지시서 스캔 |
| 2 | 패킹 코드 입력 | 세트 코드 검증 |
| 3 | 송장번호 입력 | 패킹 코드 스캔 |
| 4 | 데이터 매핑 검증 | 매핑 검증 |
| 5 | 최종 저장 처리 | 대량 저장 처리 |
