- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON) - MES 프로젝트 문서 - API/프론트엔드 스펙 문서 - 가이드 및 레퍼런스 문서
353 lines
11 KiB
Markdown
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)
|