# 출하 (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)