115 lines
5.3 KiB
SQL
115 lines
5.3 KiB
SQL
-- migrations/002_add_master_tables.sql
|
|
-- 기존 daily_work_reports 테이블을 유지하면서 필요한 마스터 테이블들만 추가
|
|
|
|
-- 1. 작업 유형 테이블 생성
|
|
CREATE TABLE IF NOT EXISTS work_types (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(100) NOT NULL COMMENT '작업 유형명',
|
|
description TEXT COMMENT '작업 유형 설명',
|
|
category VARCHAR(50) COMMENT '작업 카테고리',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 2. 업무 상태 유형 테이블 생성
|
|
CREATE TABLE IF NOT EXISTS work_status_types (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(50) NOT NULL COMMENT '상태명',
|
|
description TEXT COMMENT '상태 설명',
|
|
is_error BOOLEAN DEFAULT FALSE COMMENT '에러 상태 여부',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 3. 에러 유형 테이블 생성
|
|
CREATE TABLE IF NOT EXISTS error_types (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(100) NOT NULL COMMENT '에러 유형명',
|
|
description TEXT COMMENT '에러 설명',
|
|
severity ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium' COMMENT '심각도',
|
|
solution_guide TEXT COMMENT '해결 가이드',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 4. 감사 로그 테이블 생성 (누적입력 추적용)
|
|
CREATE TABLE IF NOT EXISTS work_report_audit_log (
|
|
log_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
action ENUM('ADD_ACCUMULATE', 'DELETE_SINGLE', 'UPDATE', 'DELETE', 'CREATE', 'DELETE_BATCH') NOT NULL COMMENT '작업 유형',
|
|
report_id INT NULL COMMENT '관련 보고서 ID',
|
|
old_values JSON NULL COMMENT '변경 전 값',
|
|
new_values JSON NULL COMMENT '변경 후 값',
|
|
changed_by INT NOT NULL COMMENT '변경자 ID',
|
|
change_reason VARCHAR(500) COMMENT '변경 사유',
|
|
ip_address VARCHAR(45) COMMENT 'IP 주소',
|
|
user_agent TEXT COMMENT '사용자 에이전트',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '변경 시간',
|
|
|
|
INDEX idx_action_date (action, created_at),
|
|
INDEX idx_changed_by (changed_by),
|
|
INDEX idx_report_id (report_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 5. 기존 daily_work_reports 테이블에 누적입력을 위한 인덱스만 추가
|
|
ALTER TABLE daily_work_reports
|
|
ADD INDEX IF NOT EXISTS idx_created_by (created_by),
|
|
ADD INDEX IF NOT EXISTS idx_date_worker_creator (report_date, worker_id, created_by);
|
|
|
|
-- 6. 기본 데이터 삽입 (기존 데이터와 호환되도록)
|
|
|
|
-- 업무 상태 유형 기본 데이터
|
|
INSERT IGNORE INTO work_status_types (id, name, description, is_error) VALUES
|
|
(1, '정규', '정상적으로 완료된 작업', FALSE),
|
|
(2, '에러', '오류가 발생한 작업', TRUE);
|
|
|
|
-- 작업 유형 기본 데이터 (기존 데이터의 work_type_id=1과 호환)
|
|
INSERT IGNORE INTO work_types (id, name, description, category) VALUES
|
|
(1, '일반작업', '기본 작업 유형', '생산관리'),
|
|
(2, '생산', '제품 생산 작업', '생산관리'),
|
|
(3, '품질검사', '제품 품질 검사', '품질관리'),
|
|
(4, '안전점검', '안전 상태 점검', '안전관리'),
|
|
(5, '자재입고', '원자재 입고 작업', '구매관리'),
|
|
(6, '설비점검', '생산 설비 점검', '설비관리'),
|
|
(7, '재고관리', '재고 현황 관리', '창고관리'),
|
|
(8, '포장', '제품 포장 작업', '생산관리'),
|
|
(9, '출하', '제품 출하 작업', '물류관리');
|
|
|
|
-- 에러 유형 기본 데이터
|
|
INSERT IGNORE INTO error_types (id, name, description, severity, solution_guide) VALUES
|
|
(1, '설비고장', '생산 설비 고장', 'high', '즉시 설비팀에 연락하여 수리 요청'),
|
|
(2, '자재부족', '필요 자재 부족', 'medium', '구매팀에 긴급 주문 요청'),
|
|
(3, '품질불량', '제품 품질 기준 미달', 'high', '품질팀에 즉시 보고 및 생산 중단'),
|
|
(4, '안전사고', '작업 중 안전사고 발생', 'critical', '즉시 작업 중단 및 안전팀 신고'),
|
|
(5, '시스템오류', 'IT 시스템 오류', 'medium', 'IT팀에 장애 신고');
|
|
|
|
-- 7. 기존 데이터 호환성을 위한 뷰 생성
|
|
CREATE OR REPLACE VIEW v_daily_reports_with_names AS
|
|
SELECT
|
|
dwr.id,
|
|
dwr.report_date,
|
|
dwr.worker_id,
|
|
w.worker_name,
|
|
dwr.project_id,
|
|
p.project_name,
|
|
dwr.work_type_id,
|
|
COALESCE(wt.name, '일반작업') as work_type_name,
|
|
COALESCE(wt.category, '생산관리') as work_category,
|
|
dwr.work_status_id,
|
|
COALESCE(wst.name, '정규') as work_status_name,
|
|
COALESCE(wst.is_error, FALSE) as is_error,
|
|
dwr.error_type_id,
|
|
et.name as error_type_name,
|
|
et.severity as error_severity,
|
|
dwr.work_hours,
|
|
dwr.created_by,
|
|
u.name as created_by_name,
|
|
dwr.created_at,
|
|
dwr.updated_at
|
|
FROM daily_work_reports dwr
|
|
LEFT JOIN Workers w ON dwr.worker_id = w.worker_id
|
|
LEFT JOIN Projects p ON dwr.project_id = p.project_id
|
|
LEFT JOIN work_types wt ON dwr.work_type_id = wt.id
|
|
LEFT JOIN work_status_types wst ON dwr.work_status_id = wst.id
|
|
LEFT JOIN error_types et ON dwr.error_type_id = et.id
|
|
LEFT JOIN Users u ON dwr.created_by = u.user_id;
|
|
|
|
COMMIT; |