Files
sam-docs/projects/legacy-5130/05_SHIPPING.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

353 lines
11 KiB
Markdown

# 출하 (Shipping/Output) 분석
## 개요
- **디렉토리**: `/output/`
- **DB 테이블**: `output` (메인), `output_extra` (서브)
- **주요 기능**: 출하 관리, 배송 추적, 인정검사(ACI), 품질 서류
## 디렉토리 구조
```
/output/
├── _request.php # 요청 파라미터 (108개)
├── _row.php # 행 렌더링
├── _row_extra.php # 추가 행 렌더링
├── insert.php # 출하 저장 (342줄)
├── list.php # 출하 목록
├── list_*.php # 용도별 목록 (20개+)
│ ├── list_ACI.php # 인정검사 목록
│ ├── list_POD.php # 출고증 목록
│ ├── list_QCdoc.php # 품질서류 목록
│ ├── list_QCsales.php # 품질매출 목록
│ ├── list_account.php # 회계 목록
│ ├── list_bending.php # 벤딩 목록
│ ├── list_bending_mid.php # 벤딩 중간검사
│ ├── list_deliveryfee.php # 배송비 목록
│ ├── list_document.php # 서류 목록
│ ├── list_jointbar.php # 조인트바 목록
│ ├── list_order.php # 발주 목록
│ ├── list_output.php # 출력 목록
│ ├── list_requestACI.php # ACI 요청 목록
│ ├── list_screen.php # 스크린 목록
│ ├── list_screen_mid.php # 스크린 중간검사
│ ├── list_slat.php # 슬랫 목록
│ └── list_slat_mid.php # 슬랫 중간검사
├── write_form.php # 출하 등록 폼 (107KB)
├── write_form_script.php # 스크립트 (267KB)
├── view*.php # 각종 뷰 (30개+)
├── insert_*.php # 부분 저장
├── fetch_*.php # AJAX 데이터 조회
└── json/ # JSON 데이터 저장
```
## DB 스키마
### output 테이블 (메인)
```sql
CREATE TABLE output (
num INT AUTO_INCREMENT PRIMARY KEY,
-- 기본 정보
outdate DATE, -- 출하일
indate DATE, -- 등록일
orderman VARCHAR(50), -- 담당자
outworkplace VARCHAR(200), -- 현장명/거래처
outputplace VARCHAR(200), -- 출하장소
receiver VARCHAR(50), -- 수령자
phone VARCHAR(20), -- 연락처
delivery VARCHAR(100), -- 배송방법/업체
-- 분류 정보
root VARCHAR(50), -- 경로
steel VARCHAR(50), -- 강종
motor VARCHAR(100), -- 모터
-- 상태 정보
regist_state VARCHAR(20), -- 등록상태 (등록, 완료)
bend_state VARCHAR(20), -- 벤딩상태
motor_state VARCHAR(20), -- 모터상태 (준비완료 등)
-- 발주처 정보
con_num VARCHAR(50), -- 계약번호
secondord VARCHAR(100), -- 2차 발주처
secondordman VARCHAR(50), -- 2차 담당자
secondordmantel VARCHAR(20), -- 2차 연락처
secondordnum VARCHAR(50), -- 2차 발주번호
-- 스크린 정보
screen VARCHAR(100), -- 스크린 유형
screen_su INT, -- 스크린 수량
screen_m2 DECIMAL(10,2), -- 스크린 면적(m²)
screenlist TEXT, -- 스크린 리스트 (JSON)
-- 슬랫 정보
slat VARCHAR(100), -- 슬랫 유형
slat_su INT, -- 슬랫 수량
slat_m2 DECIMAL(10,2), -- 슬랫 면적(m²)
slatlist TEXT, -- 슬랫 리스트 (JSON)
-- 제품/LOT 정보
prodCode VARCHAR(50), -- 제품코드
warrantyNum VARCHAR(50), -- 보증번호
lotNum VARCHAR(50), -- LOT 번호
warranty VARCHAR(100), -- 보증정보
-- 인정검사(ACI) 정보
ACIregDate DATE, -- ACI 등록일
ACIaskDate DATE, -- ACI 신청일
ACIdoneDate DATE, -- ACI 완료일
ACImemo TEXT, -- ACI 메모
ACIcheck TINYINT, -- ACI 체크
ACIgroupCode VARCHAR(50), -- ACI 그룹코드
ACIgroupName VARCHAR(100), -- ACI 그룹명
-- 배송비 정보
deliveryfeeList TEXT, -- 배송비 리스트 (JSON)
-- 견적 연결
estimate_num INT, -- 연결된 견적번호
displayText TEXT, -- 표시 텍스트
-- 체크 플래그
slatcheck VARCHAR(10), -- 슬랫 체크
partscheck VARCHAR(10), -- 부품 체크
devMode VARCHAR(10), -- 개발자모드
-- 기타
comment TEXT, -- 비고
updatecomment TEXT, -- 수정 비고
orderdate DATE, -- 발주일
-- 시스템 필드
searchtag TEXT, -- 검색태그
update_log TEXT, -- 수정이력
is_deleted TINYINT DEFAULT 0, -- 삭제플래그
INDEX idx_outdate (outdate),
INDEX idx_outworkplace (outworkplace),
INDEX idx_prodCode (prodCode)
);
```
### output_extra 테이블 (상세/견적)
```sql
CREATE TABLE output_extra (
id INT AUTO_INCREMENT PRIMARY KEY,
parent_num INT, -- output.num 참조
-- 견적 상세 JSON
detailJson TEXT, -- 상세 정보 JSON
estimateList TEXT, -- 견적 리스트 JSON
estimateSlatList TEXT, -- 슬랫 견적 리스트 JSON
estimateList_auto TEXT, -- 자동계산 리스트 JSON
estimateSlatList_auto TEXT, -- 슬랫 자동계산 JSON
-- 금액 정보
estimateTotal INT DEFAULT 0, -- 견적 총액
EstimateFirstSum INT DEFAULT 0, -- 최초 견적
EstimateUpdatetSum INT DEFAULT 0, -- 수정 견적
EstimateDiffer INT DEFAULT 0, -- 차액
estimateSurang INT DEFAULT 0, -- 수량
inspectionFee INT DEFAULT 50000, -- 인정검사비
EstimateDiscountRate DECIMAL(5,2), -- 할인율
EstimateDiscount INT DEFAULT 0, -- 할인금액
EstimateFinalSum INT DEFAULT 0, -- 최종금액
ET_unapproved INT DEFAULT 0, -- 비인정 금액
ET_total INT DEFAULT 0, -- 총 금액
-- 규격 정보
pjnum VARCHAR(50), -- 프로젝트 번호
major_category VARCHAR(50), -- 대분류
position VARCHAR(50), -- 위치
makeWidth INT, -- 제작 폭
makeHeight INT, -- 제작 높이
maguriWing VARCHAR(20), -- 마구리 윙
-- 작업/검사 리스트 (JSON)
screen_unapprovedList TEXT, -- 스크린 비인정 리스트
slat_unapprovedList TEXT, -- 슬랫 비인정 리스트
motorList TEXT, -- 모터 리스트
bendList TEXT, -- 벤딩 리스트
etcList TEXT, -- 기타 리스트
controllerList TEXT, -- 컨트롤러 리스트
-- 회계 정보
accountDate DATE, -- 회계일
accountList TEXT, -- 회계 리스트 (JSON)
FOREIGN KEY (parent_num) REFERENCES output(num),
INDEX idx_parent_num (parent_num)
);
```
## JSON 데이터 구조
### screenlist / slatlist
```json
[
{
"seq": 1,
"item_code": "SCR001",
"width": 1200,
"height": 2400,
"quantity": 2,
"area": 5.76,
"note": "비고"
}
]
```
### deliveryfeeList
```json
[
{
"delivery_date": "2025-01-15",
"carrier": "한진택배",
"fee": 50000,
"paid_by": "발송인"
}
]
```
### motorList / bendList
```json
[
{
"model": "KD-M001",
"quantity": 1,
"status": "완료",
"note": ""
}
]
```
## 비즈니스 로직
### 출하 등록 프로세스
```php
// insert.php
if ($mode == "insert") {
// 1. output 테이블 저장
$sql = "INSERT INTO $DB.output (outdate, indate, orderman, ...) VALUES (?, ?, ?, ...)";
$output_num = $pdo->lastInsertId();
// 2. output_extra 테이블 저장
$sql2 = "INSERT INTO $DB.output_extra (parent_num, detailJson, ...) VALUES (?, ?, ...)";
// 3. 첨부파일 연결 (timekey → num)
if ($timekey != '') {
$sql = "UPDATE $DB.picuploads SET parentnum=? WHERE parentnum=?";
}
}
```
### 상태 변경
```php
// 완료 처리 시 모터 상태 자동 변경
if ($regist_state == '완료') {
$motor_state = "준비완료";
}
```
## 관련 뷰 파일
### 작업 뷰 (생산 작업지시서)
- `viewBendingWork.php` - 벤딩 작업
- `viewScreenWork.php` - 스크린 작업
- `viewSlatWork.php` - 슬랫 작업
### 검사 뷰 (중간검사)
- `viewMidInspectBending.php` - 벤딩 중간검사
- `viewMidInspectScreen.php` - 스크린 중간검사
- `viewMidInspectSlat.php` - 슬랫 중간검사
### 발주/출고 뷰
- `viewOrder.php` - 발주서
- `viewOutput.php` - 출하서
- `viewConfirm.php` - 확인서
### ACI 뷰
- `view_requestACI.php` - ACI 요청
- `view_requestACIgroup.php` - ACI 그룹 요청
- `view_QCcertificate.php` - 품질인증서
## SAM 마이그레이션 포인트
### 1. 출하 구조 개선
```sql
-- SAM: 출하 헤더
shipments (
id,
tenant_id,
shipment_number,
project_id,
customer_id,
ship_date,
status, -- draft, confirmed, shipped, delivered
delivery_address,
receiver_name,
receiver_phone,
carrier,
tracking_number
)
-- SAM: 출하 상세
shipment_items (
id,
shipment_id,
item_type, -- screen, slat, motor, etc.
item_code,
quantity,
lot_number,
note
)
```
### 2. 인정검사(ACI) 분리
```sql
-- SAM: 인정검사 관리
aci_inspections (
id,
shipment_id,
inspection_number,
request_date,
inspection_date,
result, -- pending, passed, failed
inspector,
certificate_number,
documents JSON -- 첨부문서
)
```
### 3. 배송비 관리
```sql
-- SAM: 배송비 이력
delivery_fees (
id,
shipment_id,
carrier,
fee_amount,
payment_type, -- prepaid, collect
paid_date,
receipt_number
)
```
### 4. 문서 관리
```sql
-- SAM: 출하 문서
shipment_documents (
id,
shipment_id,
document_type, -- work_order, inspection, certificate
document_number,
generated_at,
file_path
)
```
## 참고 파일
- `/output/insert.php` - 저장 로직 (342줄)
- `/output/_request.php` - 108개 요청 변수
- `/output/write_form.php` - 대형 UI (107KB)
- `/output/write_form_script.php` - 스크립트 (267KB)