From b1128bedb5d649084fddcfa80cafbe670d9a8c1a Mon Sep 17 00:00:00 2001 From: kent Date: Sat, 13 Dec 2025 11:26:37 +0900 Subject: [PATCH] =?UTF-8?q?docs:=205130=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EB=AC=B8=EC=84=9C=ED=99=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- docs/DATABASE.md | 428 +++++++++++++++++++++++++++++++++++++++++++++++ docs/MODULES.md | 335 +++++++++++++++++++++++++++++++++++++ docs/README.md | 366 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1129 insertions(+) create mode 100644 docs/DATABASE.md create mode 100644 docs/MODULES.md create mode 100644 docs/README.md diff --git a/docs/DATABASE.md b/docs/DATABASE.md new file mode 100644 index 00000000..3ef736d1 --- /dev/null +++ b/docs/DATABASE.md @@ -0,0 +1,428 @@ +# 5130 데이터베이스 구조 + +## 데이터베이스 정보 + +| 항목 | 값 | +|------|-----| +| DB명 | chandj | +| 엔진 | MySQL 8.0 | +| 문자셋 | utf8mb4 | + +--- + +## 주요 테이블 목록 + +### 핵심 업무 테이블 + +| 테이블 | 설명 | 비고 | +|--------|------|------| +| `output` | 출고/주문 | 메인 업무 테이블 | +| `estimate` | 견적 | 스크린/스라트 견적 | +| `instock` | 수입검사 | 자재 입고/검사 | +| `lot` | LOT 관리 | 재고 LOT | + +### 전자결재 테이블 + +| 테이블 | 설명 | 비고 | +|--------|------|------| +| `eworks` | 전자결재 통합 | 품의서, 지출결의서, 연차 등 | + +### 게시판 테이블 + +| 테이블 | 설명 | 비고 | +|--------|------|------| +| `notice` | 공지사항 | | +| `notice_ripple` | 공지 댓글 | | +| `qna` | 자료실 | | +| `rnd` | 개발일지 | | + +### 회원/조직 테이블 + +| 테이블 | 설명 | 비고 | +|--------|------|------| +| `member` | 회원 정보 | 로그인 계정 | + +### 자산 관리 테이블 + +| 테이블 | 설명 | 비고 | +|--------|------|------| +| `car` | 차량 정보 | 정비이력 JSON | +| `lift` | 지게차 정보 | 정비이력 JSON | + +--- + +## 테이블 상세 + +### output (출고/주문) + +```sql +CREATE TABLE output ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 기본 정보 + indate DATE, -- 접수일 + outdate DATE, -- 출고예정일 + outdonedate DATE, -- 출고완료일 + + -- 현장 정보 + outworkplace VARCHAR(200), -- 현장명 + outarea VARCHAR(100), -- 지역 + + -- 제품 정보 + prodCode VARCHAR(50), -- 제품코드 (KS, KW 등) + + -- 인정검사 + ACIregDate DATE, -- 인정검사 요청일 + ACIaskDate DATE, -- 인정검사 신청일 + ACIdoneDate DATE, -- 인정검사 완료일 + + -- 배송 + deliveryfeeList JSON, -- 배차/운송비 목록 + + -- 상태 + is_deleted TINYINT DEFAULT 0, -- 삭제 여부 + devMode TINYINT, -- 개발모드 + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +### estimate (견적) + +```sql +CREATE TABLE estimate ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 견적 정보 + estimate_date DATE, -- 견적일 + customer VARCHAR(100), -- 고객명 + project_name VARCHAR(200), -- 프로젝트명 + + -- 제품 정보 + product_type VARCHAR(50), -- 제품유형 (screen, slat) + specifications JSON, -- 사양 정보 + + -- 금액 + unit_price DECIMAL(15,2), -- 단가 + total_amount DECIMAL(15,2), -- 총금액 + + -- 상태 + is_deleted TINYINT DEFAULT 0, + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +### instock (수입검사) + +```sql +CREATE TABLE instock ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 검사 정보 + inspection_date DATE, -- 검사일 + item_name VARCHAR(200), -- 품명 + supplier VARCHAR(100), -- 공급사 + + -- 검사 상세 + specification TEXT, -- 규격 + iList JSON, -- 검사 상세 항목 + + -- 판정 + resultJudgement VARCHAR(20), -- 합격/불합격 + + -- 비고 + remarks TEXT, + weight_kg DECIMAL(10,2), -- 중량 + + -- 상태 + is_deleted TINYINT DEFAULT NULL, + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +### eworks (전자결재) + +```sql +CREATE TABLE eworks ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 문서 유형 + eworks_item VARCHAR(50), -- 품의서, 지출결의서, 연차 등 + al_company VARCHAR(20), -- 회사 (경동, 주일) + + -- 기본 정보 + indate DATE, -- 작성일 + outworkplace VARCHAR(200), -- 제목/현장명 + + -- 금액 (품의서/지출결의서) + suppliercost VARCHAR(50), -- 금액 + expense_data JSON, -- 지출 상세 (지출결의서) + + -- 연차 정보 + al_askdatefrom DATE, -- 연차 시작일 + al_askdateto DATE, -- 연차 종료일 + + -- 결재 정보 + status VARCHAR(20), -- 상태 (draft, pending, end) + e_line_id VARCHAR(200), -- 결재라인 ID + e_confirm TEXT, -- 결재 확인 정보 + + -- 상태 + is_deleted TINYINT DEFAULT NULL, + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +### member (회원) + +```sql +CREATE TABLE member ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 계정 정보 + userid VARCHAR(50) UNIQUE, + password VARCHAR(255), + name VARCHAR(50), + + -- 조직 정보 + company VARCHAR(50), -- 회사 + department VARCHAR(50), -- 부서 + position VARCHAR(50), -- 직급 + + -- 권한 + level INT, -- 권한 레벨 + eworks_lv INT, -- 결재 레벨 + eworks_level INT, -- 결재 단계 + authority VARCHAR(50), -- 특수 권한 + + -- 연락처 + email VARCHAR(100), + phone VARCHAR(20), + + -- 결재 설정 + first_approval_id VARCHAR(50), + first_approval_name VARCHAR(50), + + -- 상태 + is_active TINYINT DEFAULT 1, + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +### notice (공지사항) + +```sql +CREATE TABLE notice ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 게시글 정보 + subject VARCHAR(200), -- 제목 + content TEXT, -- 내용 + + -- 공지 설정 + noticecheck CHAR(1), -- 전체공지 여부 (y/n) + + -- 작성자 + name VARCHAR(50), + userid VARCHAR(50), + + -- 조회 + hit INT DEFAULT 0, + + -- 날짜 + regist_day DATETIME, + + -- 파일 + file_name VARCHAR(200), + file_path VARCHAR(500), + + -- 상태 + is_deleted TINYINT DEFAULT 0 +); +``` + +### car (차량) + +```sql +CREATE TABLE car ( + num INT AUTO_INCREMENT PRIMARY KEY, + + -- 차량 정보 + vehicle_type VARCHAR(100), -- 차종 + license_plate VARCHAR(20), -- 차량번호 + purchase_date DATE, -- 구매일 + + -- 정비 이력 (JSON) + engine_oil_change_data JSON, -- 엔진오일 교환 이력 + maintenance_data JSON, -- 정비 이력 + + -- 상태 + is_deleted TINYINT DEFAULT 0, + + -- 메타 + created_at TIMESTAMP, + updated_at TIMESTAMP +); + +-- JSON 구조 예시 +-- engine_oil_change_data: [ +-- {"engine_oil_change_date": "2024-01-15", "mileage": "50000"} +-- ] +-- maintenance_data: [ +-- {"maintenance_date": "2024-02-20", "maintenance_record": "타이어 교체"} +-- ] +``` + +### lift (지게차) + +```sql +-- car 테이블과 동일한 구조 +CREATE TABLE lift ( + num INT AUTO_INCREMENT PRIMARY KEY, + vehicle_type VARCHAR(100), + purchase_date DATE, + engine_oil_change_data JSON, + maintenance_data JSON, + is_deleted TINYINT DEFAULT 0, + created_at TIMESTAMP, + updated_at TIMESTAMP +); +``` + +--- + +## 공통 컬럼 패턴 + +### Soft Delete + +대부분의 테이블에서 `is_deleted` 컬럼으로 소프트 삭제 구현: + +```sql +-- 삭제되지 않은 레코드 조회 +WHERE is_deleted IS NULL OR is_deleted = '0' + +-- 삭제 처리 +UPDATE table SET is_deleted = '1' WHERE num = ? +``` + +### 타임스탬프 + +```sql +created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +``` + +### JSON 컬럼 + +복잡한 데이터 구조는 JSON 컬럼으로 저장: + +```sql +-- 예: 배차 정보 +deliveryfeeList JSON +-- 값: [{"col1": "업체명", "col5": "100000"}, ...] + +-- 예: 검사 항목 +iList JSON +-- 값: [{"inputItems": {"resultJudgement": "합격"}}, ...] +``` + +--- + +## 인덱스 권장 사항 + +### output 테이블 + +```sql +CREATE INDEX idx_output_indate ON output(indate); +CREATE INDEX idx_output_outdate ON output(outdate); +CREATE INDEX idx_output_is_deleted ON output(is_deleted); +CREATE INDEX idx_output_prodcode ON output(prodCode); +``` + +### eworks 테이블 + +```sql +CREATE INDEX idx_eworks_company ON eworks(al_company); +CREATE INDEX idx_eworks_item ON eworks(eworks_item); +CREATE INDEX idx_eworks_status ON eworks(status); +CREATE INDEX idx_eworks_indate ON eworks(indate); +CREATE INDEX idx_eworks_leave_dates ON eworks(al_askdatefrom, al_askdateto); +``` + +### instock 테이블 + +```sql +CREATE INDEX idx_instock_date ON instock(inspection_date); +CREATE INDEX idx_instock_deleted ON instock(is_deleted); +``` + +--- + +## 연결 설정 + +### PDO 연결 (lib/mydb.php) + +```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"; + + $options = [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => false + ]; + + $pdo = new PDO($dsn, $db_user, $db_pass, $options); + return $pdo; +} +``` + +### 환경 변수 (.env) + +```env +DB_HOST=localhost +DB_NAME=chandj +DB_USER=chandj +DB_PASS=your_password +``` + +--- + +## 백업 권장 + +### 일일 백업 + +```bash +mysqldump -u chandj -p chandj > backup_$(date +%Y%m%d).sql +``` + +### 주요 테이블 우선 백업 + +```bash +mysqldump -u chandj -p chandj output estimate instock eworks member > critical_backup.sql +``` + +--- + +*문서 작성일: 2025-12-13* \ No newline at end of file diff --git a/docs/MODULES.md b/docs/MODULES.md new file mode 100644 index 00000000..a55ca178 --- /dev/null +++ b/docs/MODULES.md @@ -0,0 +1,335 @@ +# 5130 모듈 상세 문서 + +## 모듈 분류 + +### 핵심 업무 모듈 + +| 모듈 | 폴더 | 파일 수 | 설명 | +|------|------|---------|------| +| 견적 | `estimate/` | 67 | 스크린/스라트 견적 | +| 출고 | `output/` | 136 | 주문/출고 관리 | +| 작업 | `work/` | 33 | 생산/작업 관리 | +| 수입검사 | `instock/` | 50 | 자재 입고/검사 | +| LOT | `lot/` | - | LOT 관리 | + +### 전자결재 모듈 + +| 모듈 | 폴더 | 설명 | +|------|------|------| +| 연차 | `annualleave/` | 연차/반차/조퇴 신청 | +| 품의서 | `askitem/` | 품의 신청 (경동) | +| 품의서 | `askitem_juil/` | 품의 신청 (주일) | +| 지출결의 | `askitem_ER/` | 지출결의서 (경동) | +| 지출결의 | `askitem_ER_juil/` | 지출결의서 (주일) | + +### 회계 모듈 + +| 모듈 | 폴더 | 설명 | +|------|------|------| +| 회계 | `account/` | 회계 관리 (경동) | +| 회계 | `account_juil/` | 회계 관리 (주일) | +| 회계계획 | `account_plan/` | 회계 계획 (경동) | +| 회계계획 | `account_plan_juil/` | 회계 계획 (주일) | + +### 자산 관리 모듈 + +| 모듈 | 폴더 | 설명 | +|------|------|------| +| 차량 | `car/` | 차량 관리 (정비, 오일교환) | +| 지게차 | `lift/` | 지게차 관리 | + +### 게시판 모듈 + +| 모듈 | 폴더 | 설명 | +|------|------|------| +| 공지 | `notice/` | 공지사항 | +| 자료실 | `qna/` | 자료실/Q&A | +| 개발일지 | `rnd/` | R&D 개발일지 | + +### 기타 모듈 + +| 모듈 | 폴더 | 설명 | +|------|------|------| +| 회원 | `member/` | 회원 관리 | +| 로그인 | `login/` | 인증 | +| 벤딩 | `bending/` | 벤딩 작업 | +| 벤딩비 | `bendingfee/` | 벤딩 비용 | +| 입찰 | `bid/` | 입찰 관리 | +| A/S | `as/` | A/S 관리 | +| 분석 | `analysis/` | 데이터 분석 | +| 단가 | `KDunitprice/` | 단가 관리 | + +--- + +## 견적 모듈 (`estimate/`) + +### 파일 구조 + +``` +estimate/ +├── list.php # 견적 목록 +├── write_form.php # 견적 작성/수정 +├── update.php # 견적 저장 +├── delete.php # 견적 삭제 +├── view.php # 견적 상세 +│ +├── estimate.php # 스크린 견적서 출력 +├── estimateSlat.php # 스라트 견적서 출력 +│ +├── get_screen_amount.php # 스크린 금액 계산 엔진 +├── get_slat_amount.php # 스라트 금액 계산 엔진 +│ +├── EsDetail_screen.php # 스크린 상세 정보 +├── EsDetail_slat.php # 스라트 상세 정보 +│ +├── common/ # 공통 컴포넌트 +├── css/ # 스타일 +│ +├── _request.php # 요청 처리 +├── _row.php # 행 템플릿 +│ +└── README.md # 모듈 문서 +``` + +### 주요 기능 + +1. **견적 작성**: 스크린/스라트 제품 견적 +2. **금액 계산**: 자동 견적 금액 산출 +3. **견적서 출력**: PDF/인쇄 형태 견적서 +4. **이력 관리**: 견적 수정 이력 + +--- + +## 출고 모듈 (`output/`) + +### 파일 구조 + +``` +output/ +├── list.php # 출고 목록 +├── write_form.php # 출고 작성/수정 +├── update.php # 출고 저장 +├── delete.php # 출고 삭제 +│ +├── delivery.php # 배송 관리 +├── bendingview.php # 벤딩 뷰 +│ +├── statistics.php # 출고 통계 +├── list_deliveryfee.php # 배차/운송비 목록 +│ +├── list_ACI.php # 인정검사 목록 +├── write_ACI.php # 인정검사 (스크린) +├── write_ACI_slat.php # 인정검사 (스라트) +│ +├── common/ # 공통 컴포넌트 (29개) +├── css/ # 스타일 +│ +├── _request.php # 요청 처리 +├── _row.php # 행 템플릿 +└── _row_extra.php # 추가 행 템플릿 +``` + +### 주요 기능 + +1. **주문 접수**: 고객 주문 등록 +2. **출고 관리**: 출고 예정일, 출고 완료 관리 +3. **배차**: 배송 차량 및 운송비 관리 +4. **인정검사**: KS/KW 인증 검사 기록 +5. **통계**: 일/월/년 출고 통계 + +### 상태 플로우 + +``` +접수 → 생산예정 → 생산완료 → 출고예정 → 출고완료 + ↓ + 인정검사 요청 → 인정검사 완료 +``` + +--- + +## 수입검사 모듈 (`instock/`) + +### 파일 구조 + +``` +instock/ +├── list.php # 검사 목록 +├── write_form.php # 검사 등록 +├── update.php # 검사 저장 +│ +├── i_EGI155.php # EGI155 검사 양식 +├── i_Fireproof_sealings.php # 방화 실링 검사 +├── i_GIplate.php # GI 판재 검사 +├── i_SUScoil.php # SUS 코일 검사 +│ +├── statistics.php # 구매 통계 +├── func_statistics.php # 통계 함수 +│ +├── fetch_*.php # AJAX 데이터 조회 +├── common/ # 공통 컴포넌트 +└── css/ # 스타일 +``` + +### 주요 기능 + +1. **검사 등록**: 자재별 수입검사 기록 +2. **품목별 양식**: 자재 유형별 검사 양식 +3. **합격/불합격**: 검사 판정 +4. **구매 통계**: 월별 구매 현황 + +### 품목별 검사 양식 + +- `i_EGI155.php`: EGI155 강판 +- `i_GIplate.php`: GI 판재 +- `i_SUScoil.php`: SUS 코일 +- `i_Fireproof_sealings.php`: 방화 실링재 + +--- + +## 작업 관리 모듈 (`work/`) + +### 파일 구조 + +``` +work/ +├── list.php # 작업 목록 +├── write_form.php # 작업 등록 +├── update.php # 작업 저장 +├── delete.php # 작업 삭제 +│ +├── handover_list.php # 인계서 목록 +├── handover_doc.php # 인계서 문서 +├── delete_handover.php # 인계서 삭제 +│ +├── accountlist.php # 정산 목록 +├── accountlist_good.php # 양품 정산 +├── accountlist_bad.php # 불량 정산 +├── accountlist_request.php # 요청 정산 +│ +├── _request.php # 요청 처리 +└── _row.php # 행 템플릿 +``` + +### 주요 기능 + +1. **작업 등록**: 생산 작업 기록 +2. **인계서**: 작업 인계 문서 관리 +3. **정산**: 양품/불량 정산 처리 + +--- + +## 전자결재 시스템 + +### 공통 테이블: `eworks` + +모든 전자결재 문서가 `eworks` 테이블에 저장됩니다. + +```sql +eworks 테이블 주요 컬럼: +- num: PK +- eworks_item: 문서 유형 (품의서, 지출결의서, 연차 등) +- al_company: 회사 (경동, 주일) +- indate: 작성일 +- status: 결재 상태 +- e_line_id: 결재라인 +- e_confirm: 결재 완료 정보 +``` + +### 결재 상태 + +``` +draft → pending → approved / rejected + ↓ + end (결재 완료) +``` + +### 연차 신청 (`annualleave/`) + +``` +annualleave/ +├── index.php # 연차 현황 +├── write_form.php # 신청 작성 +├── list.php # 신청 목록 +└── ... +``` + +### 품의서 (`askitem/`) + +``` +askitem/ +├── list.php # 품의 목록 +├── write_form.php # 품의 작성 +└── ... +``` + +### 지출결의서 (`askitem_ER/`) + +``` +askitem_ER/ +├── list.php # 지출결의 목록 +├── write_form.php # 지출결의 작성 +└── ... +``` + +--- + +## 게시판 모듈 공통 구조 + +모든 게시판은 유사한 파일 구조를 가집니다: + +``` +{board}/ +├── list.php # 목록 +├── view.php # 상세 보기 +├── write_form.php # 작성/수정 +├── update.php # 저장 +├── delete.php # 삭제 +├── delete_ripple.php # 댓글 삭제 +└── common/ # 공통 컴포넌트 +``` + +### 공지사항 (`notice/`) + +- 전체 공지 기능 (`noticecheck='y'`) +- 댓글 기능 (`notice_ripple` 테이블) + +### 자료실 (`qna/`) + +- 파일 첨부 기능 +- 카테고리 분류 + +### 개발일지 (`rnd/`) + +- R&D 활동 기록 +- 프로젝트별 분류 + +--- + +## 모듈 개발 가이드 + +### 새 모듈 생성 시 필수 파일 + +1. `list.php` - 목록 페이지 +2. `write_form.php` - 등록/수정 폼 +3. `update.php` - 데이터 저장 +4. `delete.php` - 데이터 삭제 +5. `_request.php` - 요청 파라미터 처리 +6. `_row.php` - 행 템플릿 + +### 공통 include 순서 + +```php + +``` + +--- + +*문서 작성일: 2025-12-13* \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..be23e512 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,366 @@ +# 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 분석) | + +--- + +*이 문서는 코드 분석을 통해 자동 생성되었습니다.* \ No newline at end of file