# 5130 프로젝트 문서 ## 프로젝트 개요 **5130**은 (주)경동기업의 방화셔터 및 철강 제조업 관리 시스템입니다. PHP 7.3 기반의 레거시 웹 애플리케이션으로, 견적, 출고, 재고, 전자결재 등 제조업 전반의 업무를 관리합니다. ### 기본 정보 | 항목 | 내용 | |------|------| | 도메인 | https://5130.co.kr, https://5130.sam.kr (개발) | | PHP 버전 | 7.3 | | 데이터베이스 | MySQL 8.0 (chandj) | | UI 프레임워크 | Bootstrap 5, jQuery | | 회사 | (주)경동기업, (주)주일철강 | ### 핵심 기능 - **견적 시스템**: 스크린/스라트 방화셔터 견적 산출 - **출고 관리**: 주문 접수부터 출고 완료까지 전체 프로세스 - **수입검사**: 자재 입고 및 품질 검사 - **전자결재**: 품의서, 지출결의서, 연차신청 등 - **재고 관리**: LOT 관리, 자재 입출고 - **Dashboard**: 실시간 현황 및 통계 --- ## 기술 스택 ``` Backend: PHP 7.3 Database: MySQL 8.0 (PDO) Frontend: Bootstrap 5, jQuery, Bootstrap Icons Charts: (통계 차트용) Grid: AG-Grid (일부 모듈) ``` --- ## 프로젝트 구조 ``` 5130/ ├── index.php # 메인 대시보드 ├── session.php # 세션 관리 (.env 로드 포함) ├── common.php # 공통 유틸리티 함수 ├── proDB.php # JSON API (CRUD 작업) ├── lib/ │ └── mydb.php # PDO 데이터베이스 연결 │ ├── estimate/ # 견적 모듈 ├── output/ # 출고 관리 ├── work/ # 작업/생산 관리 ├── instock/ # 수입검사/입고 ├── lot/ # LOT 관리 │ ├── account/ # 회계 (경동) ├── account_juil/ # 회계 (주일) ├── account_plan/ # 회계 계획 │ ├── annualleave/ # 연차 관리 ├── askitem/ # 품의서 ├── askitem_ER/ # 지출결의서 │ ├── notice/ # 공지사항 ├── qna/ # 자료실 ├── rnd/ # 개발일지 │ ├── member/ # 회원 관리 ├── login/ # 로그인 │ ├── car/ # 차량 관리 ├── lift/ # 지게차 관리 │ ├── bending/ # 벤딩 관리 ├── bendingfee/ # 벤딩 비용 │ ├── dbeditor/ # phpMyAdmin (DB 관리 도구) ├── DBcontrol/ # DB 제어 유틸 │ ├── img/ # 이미지 리소스 ├── js/ # JavaScript 파일 ├── css/ # CSS 스타일 └── docs/ # 문서 (현재 폴더) ``` --- ## 핵심 모듈 상세 ### 1. 견적 모듈 (`estimate/`) 방화셔터(스크린/스라트) 견적 산출 시스템 **주요 파일:** - `list.php` - 견적 목록 - `write_form.php` - 견적 작성/수정 - `estimate.php` / `estimateSlat.php` - 견적서 출력 - `get_screen_amount.php` - 스크린 금액 계산 - `get_slat_amount.php` - 스라트 금액 계산 **상세 문서:** [estimate/README.md](../estimate/README.md) ### 2. 출고 모듈 (`output/`) 주문 접수부터 출고까지 전체 프로세스 관리 (136개 파일) **주요 파일:** - `list.php` - 출고 목록 - `write_form.php` - 출고 작성/수정 - `delivery.php` - 배송 관리 - `statistics.php` - 출고 통계 - `list_ACI.php` - 인정검사 목록 - `write_ACI.php` / `write_ACI_slat.php` - 인정검사 작성 **주요 테이블:** `output` ### 3. 수입검사 모듈 (`instock/`) 자재 입고 및 품질 검사 관리 **주요 파일:** - `list.php` - 수입검사 목록 - `write_form.php` - 검사 등록 - `i_*.php` - 품목별 검사 양식 (EGI155, GIplate, SUScoil 등) - `statistics.php` - 구매 통계 **주요 테이블:** `instock` ### 4. 작업 관리 모듈 (`work/`) 생산 작업 및 인계 관리 **주요 파일:** - `list.php` - 작업 목록 - `write_form.php` - 작업 등록 - `handover_list.php` / `handover_doc.php` - 인계서 관리 - `accountlist.php` - 정산 목록 ### 5. 전자결재 (`annualleave/`, `askitem/`, `askitem_ER/`) **연차 신청 (`annualleave/`):** - 연차/반차/조퇴 신청 및 승인 - 결재라인 설정 **품의서 (`askitem/`):** - 물품 구매 등 품의 신청 **지출결의서 (`askitem_ER/`):** - 비용 지출 결의 **공통 테이블:** `eworks` (전자결재 통합 테이블) --- ## 데이터베이스 구조 ### 주요 테이블 | 테이블명 | 설명 | |----------|------| | `output` | 출고/주문 정보 | | `estimate` | 견적 정보 | | `instock` | 수입검사/입고 | | `eworks` | 전자결재 (연차, 품의서, 지출결의서) | | `notice` | 공지사항 | | `qna` | 자료실 | | `rnd` | 개발일지 | | `member` | 회원 정보 | | `car` | 차량 정보 | | `lift` | 지게차 정보 | | `lot` | LOT 정보 | ### 데이터베이스 연결 ```php // lib/mydb.php function db_connect(){ loadEnv(); $db_host = $_ENV['DB_HOST'] ?? 'localhost'; $db_name = $_ENV['DB_NAME'] ?? 'chandj'; $db_user = $_ENV['DB_USER'] ?? 'chandj'; $db_pass = $_ENV['DB_PASS'] ?? ''; $dsn = "mysql:host=".$db_host.";dbname=".$db_name.";charset=utf8mb4"; $pdo = new PDO($dsn, $db_user, $db_pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); return $pdo; } ``` --- ## 세션 및 인증 ### 세션 변수 ```php // session.php에서 관리 $_SESSION["level"] // 권한 레벨 (1: 관리자) $_SESSION["name"] // 사용자 이름 $_SESSION["userid"] // 사용자 ID $_SESSION["DB"] // 데이터베이스명 (기본: chandj) $_SESSION["eworks_lv"] // 결재 레벨 $_SESSION["eworks_level"] // 결재 단계 $_SESSION["position"] // 직급 $_SESSION["mycompany"] // 회사 (경동/주일) $_SESSION["mypart"] // 부서 $_SESSION["authority"] // 특수 권한 (ACCOUNT: 회계권한) ``` ### 권한 체크 ```php // index.php 예시 if(!isset($_SESSION["level"]) || intval($_SESSION["level"]) > 7) { header("Location:" . $WebSite . "login/login_form.php"); exit; } ``` --- ## API 엔드포인트 ### proDB.php - 범용 CRUD API ``` POST /proDB.php Content-Type: application/json Parameters: - table: 테이블명 - command: insert | update | delete - field: 필드명 - strtmp: 값 - recnum: 레코드 번호 (update/delete 시) Response: JSON ``` --- ## 환경 설정 ### .env 파일 ```env DB_HOST=localhost DB_NAME=chandj DB_USER=chandj DB_PASS=password APP_URL=https://5130.co.kr ``` ### Docker 설정 (개발 환경) - 도메인: `5130.sam.kr` - PHP 컨테이너: `php73:9000` - Nginx 프록시 설정 참조: `docker/nginx/nginx.conf` --- ## 코드 패턴 ### 목록 페이지 패턴 ```php // list.php 일반 구조 require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php"); $pdo = db_connect(); // 검색 조건 $where = " WHERE 1=1 "; if(!empty($search)) { $where .= " AND field LIKE '%$search%' "; } // 페이징 $sql = "SELECT COUNT(*) FROM table" . $where; $total = $pdo->query($sql)->fetchColumn(); // 데이터 조회 $sql = "SELECT * FROM table" . $where . " ORDER BY num DESC LIMIT $start, $limit"; $stmh = $pdo->query($sql); ``` ### 등록/수정 페이지 패턴 ```php // write_form.php 일반 구조 $mode = $_REQUEST['mode'] ?? 'write'; $num = $_REQUEST['num'] ?? ''; if($mode == 'modify' || $mode == 'view') { // 기존 데이터 조회 $sql = "SELECT * FROM table WHERE num = ?"; $stmh = $pdo->prepare($sql); $stmh->execute([$num]); $row = $stmh->fetch(); } // 폼 처리는 update.php에서 ``` --- ## 주요 공통 함수 ### common.php ```php // 날짜 관련 specialDate($date) // 특수 날짜 변환 NullCheckDate($date) // NULL 날짜 체크 trans_date($date) // 날짜 형식 변환 // 연차 계산 calculateAnnualLeave($info) // 연차 계산 // 카테고리 getCategoryByName($name) // 카테고리 조회 // 모델 선택 selectModel($code) // 제품 모델 선택 ``` --- ## 보안 고려사항 ### 현재 구현 1. 세션 기반 인증 2. 권한 레벨 체크 (`$_SESSION["level"]`) 3. PDO Prepared Statements (일부) ### 개선 필요 사항 1. CSRF 토큰 미적용 2. 일부 SQL 인젝션 취약점 (직접 쿼리 문자열 연결) 3. XSS 필터링 불완전 4. 입력값 검증 강화 필요 --- ## 관련 문서 - [견적 모듈 상세](../estimate/README.md) - [동적 행 생성 시스템](../README.md) --- ## 변경 이력 | 날짜 | 내용 | |------|------| | 2025-12-13 | 초기 문서 작성 (Claude Code 분석) | --- *이 문서는 코드 분석을 통해 자동 생성되었습니다.*