# 생산/공사 (Production/Work) 분석 ## 개요 - **디렉토리**: `/make/`, `/work/` - **DB 테이블**: `work`, 동적 테이블 (`make_*`) - **주요 기능**: 공사 관리, 생산 지시, 작업 진행 추적 ## 디렉토리 구조 ### /make/ (생산 지시) ``` /make/ ├── _request.php # 요청 파라미터 ├── _row.php # 행 렌더링 ├── insert.php # 데이터 저장 ├── insert_new.php # 신규 저장 ├── list.php # 생산 목록 ├── write.php # 생산 지시 등록 ├── write_form.php # 생산 지시 폼 (37KB) ├── print.php # 인쇄 ├── print_list.php # 목록 인쇄 ├── make.js # 자바스크립트 (22KB) ├── get_check_done.php # 완료 체크 ├── get_screenlist.php # 스크린 목록 ├── update_checkbox.php # 체크박스 업데이트 └── load*.php # 데이터 로드 ``` ### /work/ (공사 관리) ``` /work/ ├── _request.php # 요청 파라미터 (91개 변수) ├── _row.php # 행 렌더링 ├── insert.php # 데이터 저장 ├── list.php # 공사 목록 ├── write_form.php # 공사 등록 폼 ├── view.php # 공사 상세 ├── searchkd.php # 검색 ├── workerlist.php # 작업자 목록 ├── savefile.php # 파일 저장 └── ... ``` ## DB 스키마 ### work 테이블 (공사 마스터) ```sql CREATE TABLE work ( num INT AUTO_INCREMENT PRIMARY KEY, -- 공사 기본정보 work_state VARCHAR(50), -- 공사상태 workplacename VARCHAR(200), -- 현장명 address TEXT, -- 현장주소 chargedperson VARCHAR(50), -- 공사담당자 -- 발주처 정보 (1차) firstord VARCHAR(100), -- 1차 발주처 (건설사) firstordman VARCHAR(50), -- 1차 담당자 firstordmantel VARCHAR(20), -- 1차 연락처 -- 발주처 정보 (2차) secondord VARCHAR(100), -- 2차 발주처 (시공사) secondordman VARCHAR(50), -- 2차 담당자 secondordmantel VARCHAR(20), -- 2차 연락처 -- 작업 정보 worklist TEXT, -- 작업 목록 motormaker VARCHAR(100), -- 모터 제조사 power VARCHAR(50), -- 전원 -- 일정 정보 workday DATE, -- 시공 시작일 endworkday DATE, -- 시공 완료일 cableday DATE, -- 결선 시작일 endcableday DATE, -- 결선 완료일 -- 작업자 정보 worker VARCHAR(100), -- 시공팀 cablestaff VARCHAR(100), -- 결선팀 -- AS 정보 asday DATE, -- AS 접수일 asman VARCHAR(50), -- AS 담당자 asendday DATE, -- AS 완료일 asproday DATE, -- AS 처리예정일 setdate DATE, -- 세팅예정일 asorderman VARCHAR(50), -- AS 의뢰자 asordermantel VARCHAR(20), -- AS 의뢰자 연락처 aslist TEXT, -- AS 내역 asresult TEXT, -- AS 결과 ashistory TEXT, -- AS 이력 as_state VARCHAR(50), -- AS 상태 as_step VARCHAR(50), -- AS 단계 as_check TINYINT, -- AS 체크 aswriter VARCHAR(50), -- AS 등록자 asfee TINYINT, -- AS 유/무상 asfee_estimate INT, -- AS 유상금액 as_checkboxvalue1 CHAR(1), -- AS 체크1 as_checkboxvalue2 CHAR(1), -- AS 체크2 as_checkboxvalue3 CHAR(1), -- AS 체크3 as_checkboxvalue4 CHAR(1), -- AS 체크4 -- 클레임 정보 claimperson VARCHAR(50), -- 클레임 담당자 claimtel VARCHAR(20), -- 클레임 연락처 claimList TEXT, -- 클레임 리스트 (JSON) -- 금액 정보 sum_estimate DECIMAL(15,0), -- 견적합계 sum_bill DECIMAL(15,0), -- 청구합계 sum_receivable DECIMAL(15,0), -- 미수금 sum_deposit DECIMAL(15,0), -- 입금합계 sum_claimamount DECIMAL(15,0), -- 클레임금액 receivable DECIMAL(15,0), -- 미수잔액 totalbill DECIMAL(15,0), -- 총청구액 decided_estimate DECIMAL(15,0), -- 확정견적 total_receivable DECIMAL(15,0), -- 총미수금 total_deposit DECIMAL(15,0), -- 총입금액 issued_receivable DECIMAL(15,0), -- 발행미수금 issued_amount DECIMAL(15,0), -- 발행금액 -- 보증 정보 warrantyFromDate DATE, -- 보증 시작일 warrantyToDate DATE, -- 보증 종료일 warrantyPeriod VARCHAR(50), -- 보증 기간 warrantyMemo TEXT, -- 보증 메모 -- 인정검사 정보 certifiedInspector VARCHAR(50), -- 인정검사원 certifiedLabelAttachedDate DATE, -- 인정라벨 부착일 -- 상태 정보 checkbox TINYINT, -- 계약체결여부 checkstep VARCHAR(50), -- 진행단계 workStatus VARCHAR(50), -- 시공상태 cableworkStatus VARCHAR(50), -- 결선상태 motorwirestatus VARCHAR(50), -- 모터결선상태 -- 체크 플래그 checkreceivable TINYINT, -- 미수금 체크 checkbond TINYINT, -- 채권 체크 -- JSON 데이터 accountList TEXT, -- 회계 리스트 (JSON) estimateList TEXT, -- 견적 리스트 (JSON) equipmentList TEXT, -- 장비 리스트 (JSON) -- 기타 comment TEXT, -- 비고 outputmemo TEXT, -- 출하 메모 accountnote TEXT, -- 회계 메모 change_worklist TEXT, -- 변경 작업목록 as_refer TEXT, -- AS 참조 promiseday DATE, -- 약속일 -- 시스템 필드 regist_day DATETIME, -- 등록일 update_day DATETIME, -- 수정일 update_log TEXT, -- 수정이력 searchtag TEXT, -- 검색태그 is_deleted TINYINT DEFAULT 0, -- 삭제플래그 hit INT DEFAULT 0, -- 조회수 INDEX idx_workplacename (workplacename), INDEX idx_secondord (secondord), INDEX idx_work_state (work_state) ); ``` ## 공사 진행 상태 ### work_state 상태값 | 상태 | 설명 | 조건 | |------|------|------| | 계약전 | 초기 상태 | checkbox = 0 | | 착공전 | 계약 완료 | checkbox = 1 | | 시공중 | 시공 시작 | workday 입력 | | 결선대기 | 시공 완료 | endworkday 입력 | | 결선중 | 결선 시작 | cableday 입력 | | 결선완료 | 결선 완료 | endcableday 입력 | ### AS 상태 (as_state) | 상태 | 설명 | 조건 | |------|------|------| | 미접수 | 초기 상태 | - | | 접수완료 | AS 접수 | asday 입력 | | 처리예약 | 처리 예정 | asproday 입력 | | 세팅예약 | 세팅 예정 | setdate 입력 | | 처리완료 | AS 완료 | asendday 입력 | ## 비즈니스 로직 ### 공사 상태 자동 계산 ```php // as/list.php $state_work = 0; if ($row["checkbox"] == 0) $state_work = 1; // 착공전 if (substr($row["workday"], 0, 2) == "20") $state_work = 2; // 시공중 if (substr($row["endworkday"], 0, 2) == "20") $state_work = 3; // 결선대기 if (substr($row["cableday"], 0, 2) == "20") $state_work = 4; // 결선중 if (substr($row["endcableday"], 0, 2) == "20") $state_work = 5; // 결선완료 ``` ### 생산 지시 처리 ```php // make/insert.php // screen_state 업데이트 $sql = "UPDATE $DB.$tablename SET screen_state=?, update_log=? WHERE num=?"; ``` ## 관련 디렉토리 ### 벤딩 관련 ``` /bending/ # 벤딩 작업 관리 /bendingfee/ # 벤딩 비용 /bendingmap/ # 벤딩 맵 /etcbending/ # 기타 벤딩 ``` ### 출력물 관련 ``` /output/ # 출하/출력 /egimake/ # EGI 제작 /guiderail/ # 가이드레일 /shutterbox/ # 셔터박스 ``` ## SAM 마이그레이션 포인트 ### 1. 공사/프로젝트 분리 ```sql -- SAM: 프로젝트 마스터 projects ( id, tenant_id, project_number, project_name, customer_id, status, -- draft, contracted, in_progress, completed contracted_date, start_date, end_date ) -- SAM: 공사 단계 project_phases ( id, project_id, phase_type, -- construction, wiring, testing planned_start, planned_end, actual_start, actual_end, assigned_team, status ) ``` ### 2. 작업 지시서 ```sql -- SAM: 작업 지시 work_orders ( id, project_id, work_order_number, work_type, -- production, assembly, installation status, priority, due_date, assigned_to ) -- SAM: 작업 상세 work_order_items ( id, work_order_id, item_id, quantity, completed_quantity, status ) ``` ### 3. 진행 상태 추적 ```sql -- SAM: 상태 이력 status_histories ( id, entity_type, -- project, work_order, phase entity_id, from_status, to_status, changed_by, changed_at, reason ) ``` ## 참고 파일 - `/work/_request.php` - 91개 요청 변수 정의 - `/work/insert.php` - 저장 로직 - `/make/write_form.php` - 생산 지시 UI - `/as/list.php` - 공사 상태 계산 로직