신규 독립 시스템 tkpurchase (구매/방문 관리) 구축: - 협력업체 CRUD + 소속 작업자 관리 (마스터 데이터 소유) - 당일 방문 등록/체크인/체크아웃 + 일괄 마감 - 업체 자동완성, CSV 내보내기, 집계 통계 - 자정 자동 체크아웃 (node-cron) - tkuser 협력업체 읽기 전용 탭 + 권한 그리드(tkpurchase-perms) 추가 - docker-compose에 tkpurchase-api/web 서비스 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
76 lines
2.6 KiB
SQL
76 lines
2.6 KiB
SQL
-- tkpurchase Phase 1: 협력업체 + 방문 관리 테이블
|
|
|
|
-- ① 협력업체
|
|
CREATE TABLE IF NOT EXISTS partner_companies (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
company_name VARCHAR(200) NOT NULL,
|
|
business_number VARCHAR(20) UNIQUE,
|
|
representative VARCHAR(100),
|
|
contact_name VARCHAR(100),
|
|
contact_phone VARCHAR(20),
|
|
address VARCHAR(500),
|
|
business_type JSON,
|
|
insurance_number VARCHAR(30),
|
|
insurance_expiry DATE,
|
|
notes TEXT,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- ② 협력업체 소속 작업자
|
|
CREATE TABLE IF NOT EXISTS partner_workers (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
company_id INT NOT NULL,
|
|
worker_name VARCHAR(100) NOT NULL,
|
|
position VARCHAR(50),
|
|
is_team_leader BOOLEAN DEFAULT FALSE,
|
|
phone VARCHAR(20),
|
|
safety_training_date DATE,
|
|
notes TEXT,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (company_id) REFERENCES partner_companies(id)
|
|
);
|
|
|
|
-- ③ 당일 방문 기록
|
|
CREATE TABLE IF NOT EXISTS daily_visits (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
visit_date DATE NOT NULL,
|
|
company_id INT,
|
|
company_name VARCHAR(200),
|
|
visitor_name VARCHAR(100) NOT NULL,
|
|
visitor_count INT DEFAULT 1,
|
|
purpose ENUM('day_labor','equipment_repair','inspection','delivery',
|
|
'safety_audit','client_audit','construction','other') NOT NULL,
|
|
purpose_detail VARCHAR(500),
|
|
workplace_name VARCHAR(200),
|
|
safety_education_yn BOOLEAN DEFAULT FALSE,
|
|
vehicle_number VARCHAR(20),
|
|
check_in_time DATETIME,
|
|
check_out_time DATETIME,
|
|
checkout_note VARCHAR(500),
|
|
notes TEXT,
|
|
status ENUM('checked_in','checked_out','auto_checkout','cancelled') DEFAULT 'checked_in',
|
|
managing_department VARCHAR(50),
|
|
registered_by INT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_visit_date (visit_date),
|
|
INDEX idx_company (company_id),
|
|
INDEX idx_status (status),
|
|
FOREIGN KEY (company_id) REFERENCES partner_companies(id) ON DELETE SET NULL
|
|
);
|
|
|
|
-- ④ 방문 건별 개별 인원 명단
|
|
CREATE TABLE IF NOT EXISTS daily_visit_workers (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
daily_visit_id INT NOT NULL,
|
|
partner_worker_id INT,
|
|
worker_name VARCHAR(100) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (daily_visit_id) REFERENCES daily_visits(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (partner_worker_id) REFERENCES partner_workers(id) ON DELETE SET NULL
|
|
);
|