From 067193efa9ddfc976e3023a6fe26a6863d8b92af Mon Sep 17 00:00:00 2001 From: hjjeong Date: Wed, 20 May 2026 09:59:52 +0900 Subject: [PATCH] =?UTF-8?q?fix(=EB=B0=B0=EC=B9=98=EA=B4=80=EB=A6=AC):=20?= =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20NaN=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=20+=2024=EC=8B=9C=EA=B0=84=20=EC=B0=A8=ED=8A=B8=20=EB=8D=94?= =?UTF-8?q?=EB=AF=B8=EB=8D=B0=EC=9D=B4=ED=84=B0=20=E2=86=92=20=EC=8B=A4?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 백엔드: getBatchManagementGlobalSparklineData 쿼리 추가 (generate_series 로 24개 슬롯 고정, 회사 전체 배치 LEFT JOIN 집계) - 백엔드: GET /api/batch-management/sparkline 엔드포인트 추가 - 프론트: BatchStats/SparklineData 타입을 백엔드 mapper 의 snake_case 응답키와 일치시킴 (today_count, today_failed_count, hour_slot, success_count, ...). 키 미스매치로 stats 카드가 NaN 으로 표시되던 버그 해소 - 프론트: GlobalSparkline 컴포넌트의 Math.random() 더미 막대를 실데이터 prop 으로 교체. row-level Sparkline 도 동일 키 정렬로 정상 렌더되도록 수정 Co-Authored-By: Claude Opus 4.7 (1M context) --- .../controller/BatchManagementController.java | 9 +++ .../erp/service/BatchManagementService.java | 5 ++ .../main/resources/mapper/batchManagement.xml | 26 +++++++++ .../admin/automaticMng/batchmngList/page.tsx | 58 +++++++++++++------ frontend/lib/api/batch.ts | 39 ++++++++++--- 5 files changed, 109 insertions(+), 28 deletions(-) diff --git a/backend-spring/src/main/java/com/erp/controller/BatchManagementController.java b/backend-spring/src/main/java/com/erp/controller/BatchManagementController.java index 34aafd6b..93ed0744 100644 --- a/backend-spring/src/main/java/com/erp/controller/BatchManagementController.java +++ b/backend-spring/src/main/java/com/erp/controller/BatchManagementController.java @@ -136,6 +136,15 @@ public class BatchManagementController { return ResponseEntity.ok(ApiResponse.success(batchManagementService.getBatchSparkline(params))); } + /** GET /api/batch-management/sparkline — 회사 전체 배치의 최근 24시간 1시간 단위 실행 집계 (24개 슬롯 고정) */ + @GetMapping("/sparkline") + public ResponseEntity>>> getGlobalSparkline( + @RequestAttribute("company_code") String companyCode) { + Map params = new HashMap<>(); + params.put("company_code", companyCode); + return ResponseEntity.ok(ApiResponse.success(batchManagementService.getGlobalSparkline(params))); + } + /** GET /api/batch-management/batch-configs/:id/recent-logs — 최근 실행 로그 (최대 20건) */ @GetMapping("/batch-configs/{id}/recent-logs") public ResponseEntity>>> getBatchRecentLogs( diff --git a/backend-spring/src/main/java/com/erp/service/BatchManagementService.java b/backend-spring/src/main/java/com/erp/service/BatchManagementService.java index 2ee2786c..c33d1333 100644 --- a/backend-spring/src/main/java/com/erp/service/BatchManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/BatchManagementService.java @@ -296,6 +296,11 @@ public class BatchManagementService extends BaseService { return sqlSession.selectList(NS + "getBatchManagementSparklineData", params); } + public List> getGlobalSparkline(Map params) { + commonService.applyCompanyCodeFilter(params); + return sqlSession.selectList(NS + "getBatchManagementGlobalSparklineData", params); + } + public List> getBatchRecentLogs(Map params) { return sqlSession.selectList(NS + "getBatchManagementRecentLogList", params); } diff --git a/backend-spring/src/main/resources/mapper/batchManagement.xml b/backend-spring/src/main/resources/mapper/batchManagement.xml index 304987ec..2e4ed21e 100644 --- a/backend-spring/src/main/resources/mapper/batchManagement.xml +++ b/backend-spring/src/main/resources/mapper/batchManagement.xml @@ -87,6 +87,32 @@ ORDER BY hour_slot + + +