작업계획서대로 진행

This commit is contained in:
2026-01-11 10:50:51 +09:00
parent 5cda181cc5
commit d4620dc1fa
39 changed files with 3344 additions and 120 deletions

View File

@@ -64,6 +64,33 @@ export default defineEventHandler(async (event) => {
const totalWorkHours = employeeStats.reduce((sum: number, e: any) => sum + parseFloat(e.work_hours || 0), 0)
const totalPlanHours = employeeStats.reduce((sum: number, e: any) => sum + parseFloat(e.plan_hours || 0), 0)
// 4. TODO 현황
const todoStats = await query<any>(`
SELECT
COUNT(*) FILTER (WHERE status = 'PENDING') as pending,
COUNT(*) FILTER (WHERE status = 'IN_PROGRESS') as in_progress,
COUNT(*) FILTER (WHERE status = 'COMPLETED' AND completed_at >= NOW() - INTERVAL '7 days') as completed_this_week,
COUNT(*) FILTER (WHERE due_date < CURRENT_DATE AND status NOT IN ('COMPLETED', 'CANCELLED')) as overdue
FROM wr_todo
`, [])
// 5. 유지보수 현황
const maintenanceStats = await query<any>(`
SELECT
COUNT(*) FILTER (WHERE status = 'PENDING') as pending,
COUNT(*) FILTER (WHERE status = 'IN_PROGRESS') as in_progress,
COUNT(*) FILTER (WHERE status = 'COMPLETED' AND updated_at >= NOW() - INTERVAL '7 days') as completed_this_week
FROM wr_maintenance_task
`, [])
// 6. 최근 회의 현황
const meetingStats = await query<any>(`
SELECT
COUNT(*) FILTER (WHERE meeting_date >= CURRENT_DATE - INTERVAL '7 days') as this_week,
COUNT(*) FILTER (WHERE meeting_date >= CURRENT_DATE - INTERVAL '30 days') as this_month
FROM wr_meeting
`, [])
return {
year,
week,
@@ -75,6 +102,21 @@ export default defineEventHandler(async (event) => {
totalPlanHours,
projectCount: projectStats.length
},
todo: {
pending: parseInt(todoStats[0]?.pending) || 0,
inProgress: parseInt(todoStats[0]?.in_progress) || 0,
completedThisWeek: parseInt(todoStats[0]?.completed_this_week) || 0,
overdue: parseInt(todoStats[0]?.overdue) || 0
},
maintenance: {
pending: parseInt(maintenanceStats[0]?.pending) || 0,
inProgress: parseInt(maintenanceStats[0]?.in_progress) || 0,
completedThisWeek: parseInt(maintenanceStats[0]?.completed_this_week) || 0
},
meeting: {
thisWeek: parseInt(meetingStats[0]?.this_week) || 0,
thisMonth: parseInt(meetingStats[0]?.this_month) || 0
},
employees: employeeStats.map((e: any) => ({
employeeId: e.employee_id,
employeeName: e.employee_name,