- docs/README.md: 프로젝트 개요, 기술 스택, 구조, 핵심 모듈 - docs/MODULES.md: 모듈별 상세 (견적, 출고, 수입검사, 작업, 전자결재) - docs/DATABASE.md: DB 스키마, 테이블 구조, 연결 설정 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
366 lines
8.8 KiB
Markdown
366 lines
8.8 KiB
Markdown
# 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 분석) |
|
|
|
|
---
|
|
|
|
*이 문서는 코드 분석을 통해 자동 생성되었습니다.* |