fix: 작업 분석에서 공정(대분류)으로 올바르게 분류
문제: work_type_id에 task_id가 저장된 경우 공정 분류가 안됨 - work_type_id=10 → 실제로는 task "노즐 용접" (공정: Vessel) 해결: - API에서 task_id인 경우 해당 task의 work_type_id로 공정 조회 - getRecentWork, getProjectWorkTypeRawData 쿼리 수정 - 프론트엔드는 API 결과의 work_type_name 직접 사용 공정(대분류): Base(구조물), Vessel(용기), Piping Assembly(배관), 작업대기, 휴무, 시설설비 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -182,8 +182,10 @@ class WorkAnalysis {
|
||||
|
||||
// 최근 작업 현황
|
||||
async getRecentWork(startDate, endDate, limit = 50) {
|
||||
// work_type_id가 work_types에 있으면 직접 사용,
|
||||
// 없으면 tasks 테이블을 통해 해당 task의 work_type_id로 공정(대분류) 조회
|
||||
const query = `
|
||||
SELECT
|
||||
SELECT
|
||||
dwr.id,
|
||||
dwr.report_date,
|
||||
dwr.worker_id,
|
||||
@@ -191,8 +193,10 @@ class WorkAnalysis {
|
||||
dwr.project_id,
|
||||
p.project_name,
|
||||
p.job_no,
|
||||
dwr.work_type_id,
|
||||
wt.name as work_type_name,
|
||||
dwr.work_type_id as original_work_type_id,
|
||||
COALESCE(wt.id, t.work_type_id) as work_type_id,
|
||||
COALESCE(wt.name, wt2.name) as work_type_name,
|
||||
t.task_name as task_name,
|
||||
dwr.work_status_id,
|
||||
wst.name as work_status_name,
|
||||
dwr.error_type_id,
|
||||
@@ -205,6 +209,8 @@ class WorkAnalysis {
|
||||
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 tasks t ON dwr.work_type_id = t.task_id
|
||||
LEFT JOIN work_types wt2 ON t.work_type_id = wt2.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
|
||||
@@ -224,7 +230,8 @@ class WorkAnalysis {
|
||||
project_name: row.project_name || `프로젝트 ${row.project_id}`,
|
||||
job_no: row.job_no || 'N/A',
|
||||
work_type_id: row.work_type_id,
|
||||
work_type_name: row.work_type_name || `작업유형 ${row.work_type_id}`,
|
||||
work_type_name: row.work_type_name || `작업유형 ${row.original_work_type_id}`,
|
||||
task_name: row.task_name || null,
|
||||
work_status_id: row.work_status_id,
|
||||
work_status_name: row.work_status_name || '정상',
|
||||
error_type_id: row.error_type_id,
|
||||
@@ -427,15 +434,16 @@ class WorkAnalysis {
|
||||
throw new Error(`대시보드 데이터 조회 실패: ${error.message}`);
|
||||
}
|
||||
}
|
||||
// 프로젝트별-작업별 시간 분석용 데이터 조회
|
||||
// 프로젝트별-작업별 시간 분석용 데이터 조회 (공정/대분류 기준)
|
||||
async getProjectWorkTypeRawData(startDate, endDate) {
|
||||
// work_type_id가 실제로 task_id인 경우 해당 task의 work_type_id로 공정 조회
|
||||
const query = `
|
||||
SELECT
|
||||
COALESCE(p.project_id, dwr.project_id) as project_id,
|
||||
COALESCE(p.project_name, CONCAT('프로젝트 ', dwr.project_id)) as project_name,
|
||||
COALESCE(p.job_no, 'N/A') as job_no,
|
||||
dwr.work_type_id,
|
||||
COALESCE(wt.name, CONCAT('작업유형 ', dwr.work_type_id)) as work_type_name,
|
||||
COALESCE(wt.id, t.work_type_id) as work_type_id,
|
||||
COALESCE(wt.name, wt2.name, CONCAT('작업유형 ', dwr.work_type_id)) as work_type_name,
|
||||
|
||||
-- 총 시간
|
||||
SUM(dwr.work_hours) as total_hours,
|
||||
@@ -460,9 +468,13 @@ class WorkAnalysis {
|
||||
FROM daily_work_reports dwr
|
||||
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 tasks t ON dwr.work_type_id = t.task_id
|
||||
LEFT JOIN work_types wt2 ON t.work_type_id = wt2.id
|
||||
WHERE dwr.report_date BETWEEN ? AND ?
|
||||
GROUP BY dwr.project_id, p.project_name, p.job_no, dwr.work_type_id, wt.name
|
||||
ORDER BY p.project_name, wt.name
|
||||
GROUP BY dwr.project_id, p.project_name, p.job_no,
|
||||
COALESCE(wt.id, t.work_type_id),
|
||||
COALESCE(wt.name, wt2.name)
|
||||
ORDER BY p.project_name, work_type_name
|
||||
`;
|
||||
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user