From bea0fec4f1a8d259a738409fab5c85f4a40b01a3 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Thu, 5 Feb 2026 10:23:29 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9E=91=EC=97=85=20=EB=B6=84=EC=84=9D?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9E=91=EC=97=85=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=EC=9D=84=20=EB=8C=80=EB=B6=84=EB=A5=98=EB=A1=9C=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getMajorCategory() 함수 추가 - work_type_id를 대분류(Base제작, 용기제작, 파이핑, 작업대기, 휴무, 시설설비, 기타)로 매핑 - 개별 작업유형 대신 대분류 기준으로 집계 - 세부 분류는 다른 분석에서 처리 Co-Authored-By: Claude Opus 4.5 --- web-ui/pages/work/analysis.html | 52 ++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/web-ui/pages/work/analysis.html b/web-ui/pages/work/analysis.html index b1cb577..0a2fcfe 100644 --- a/web-ui/pages/work/analysis.html +++ b/web-ui/pages/work/analysis.html @@ -982,7 +982,23 @@ function isVacationProject(projectName) { return WorkAnalysis.utils.isVacationProject(projectName); } - + + // 대분류 매핑 함수 (work_type_id → 대분류) + function getMajorCategory(workTypeId) { + // 대분류 매핑: 1=Base제작, 2=용기제작, 3=파이핑 + const majorCategories = { + 1: { id: 1, name: 'Base제작' }, + 2: { id: 2, name: '용기제작' }, + 3: { id: 3, name: '파이핑' }, + 4: { id: 4, name: '작업대기' }, + 11: { id: 11, name: '휴무' }, + 12: { id: 12, name: '시설설비' } + }; + + // 매핑된 대분류가 있으면 반환, 없으면 기타 + return majorCategories[workTypeId] || { id: 0, name: '기타' }; + } + function getKSTDate() { return WorkAnalysis.utils.getKSTDate(); } @@ -1503,21 +1519,20 @@ vacationData.regularHours += hours; } } else { - // 일반 프로젝트 처리 - const workTypeKey = work.work_type_id || 'unknown'; + // 일반 프로젝트 처리 - 대분류로 그룹화 + const majorCategory = getMajorCategory(work.work_type_id); const projectName = work.project_name || `프로젝트 ${work.project_id}`; - const workTypeName = work.work_type_name || `작업유형 ${workTypeKey}`; - - // 작업 형태별로 집계 (프로젝트별로 구분) - const combinedKey = `${work.project_id || 'unknown'}_${workTypeKey}`; - + + // 대분류 기준으로 집계 (프로젝트별로 구분) + const combinedKey = `${work.project_id || 'unknown'}_${majorCategory.id}`; + if (!workTypeMap.has(combinedKey)) { workTypeMap.set(combinedKey, { project_id: work.project_id, project_name: projectName, job_no: work.job_no, - work_type_id: workTypeKey, - work_type_name: workTypeName, + work_type_id: majorCategory.id, + work_type_name: majorCategory.name, regularHours: 0, errorHours: 0, errorDetails: new Map(), // 오류 유형별 세분화 @@ -1780,9 +1795,9 @@ } } - // 주말 체크 함수 및 연차/휴무 프로젝트 체크 함수는 상단에 통합 정의됨 - - // recent-work 데이터로 프로젝트별 취합 + // 주말 체크 함수, 연차/휴무 프로젝트 체크 함수, 대분류 매핑 함수는 상단에 정의됨 + + // recent-work 데이터로 프로젝트별 취합 (대분류 기준) function aggregateProjectData(recentWorkData) { const projectMap = new Map(); let vacationData = { @@ -1822,12 +1837,15 @@ } const project = projectMap.get(projectKey); - const workTypeKey = `${work.work_type_id}_${work.work_type_name}`; - + + // 대분류로 그룹화 + const majorCategory = getMajorCategory(work.work_type_id); + const workTypeKey = `${majorCategory.id}_${majorCategory.name}`; + if (!project.work_types.has(workTypeKey)) { project.work_types.set(workTypeKey, { - work_type_id: work.work_type_id, - work_type_name: work.work_type_name, + work_type_id: majorCategory.id, + work_type_name: majorCategory.name, total_hours: 0, regular_hours: 0, error_hours: 0,