From fda519db46993cf98af5873b91f74679b26f0a3b Mon Sep 17 00:00:00 2001 From: jangdongsin Date: Tue, 31 Dec 2024 01:24:50 +0900 Subject: [PATCH] =?UTF-8?q?Report=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/server/task/ReportQueueTask.java | 64 ++++++++++++------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/munjaon/server/server/task/ReportQueueTask.java b/src/main/java/com/munjaon/server/server/task/ReportQueueTask.java index cc3c335..66e36b4 100644 --- a/src/main/java/com/munjaon/server/server/task/ReportQueueTask.java +++ b/src/main/java/com/munjaon/server/server/task/ReportQueueTask.java @@ -73,32 +73,44 @@ public class ReportQueueTask implements Runnable { public void run() { /* 정상적인 Report Queue 저장로직을 수행할 경우 */ int cntReport = 0; - if (isProcessRun) { + while (isProcessRun) { + /* 리포트큐가 max에 도달한 경우 */ + if (reportQueue.isWriteLimit(reportUserDto.getMaxQueueCount())) { + break; + } + + /* DB : 리포트 데이터 조회 */ ReportService reportService = (ReportService) CacheService.REPORT_SERVICE.getService(); List list = reportService.getReportListForUser(reportUserDto.getUserId()); - /* Report Queue 저장 & DB 데이터 삭제 */ - if (list != null && list.size() > 0) { - List msgList = new ArrayList<>(); - /* Report Queue에 저장 */ - for (ReportDto dto : list) { - boolean isError = false; - try { - reportQueue.pushReportToQueue(dto); - msgList.add(dto.getMsgId()); - cntReport++; // Report를 처리한 카운트 - saveLog("reportDto : " + dto.toString()); - } catch (Exception e) { - saveLog("ReportQueueTask ERROR"); - saveLog(e); - isError = true; - } - /* 에러인 경우 */ - if (isError) { - break; - } - } + /* 리포트 처리를 할 대상이 없는 경우 */ + if (list == null || list.isEmpty()) { + break; + } + /* 리포트 큐에 저장 */ + boolean isError = false; + List msgList = new ArrayList<>(); + /* Report Queue에 저장 */ + for (ReportDto dto : list) { + try { + reportQueue.pushReportToQueue(dto); + msgList.add(dto.getMsgId()); + cntReport++; // Report를 처리한 카운트 + saveLog("reportDto : " + dto.toString()); + } catch (Exception e) { + saveLog("ReportQueueTask ERROR"); + saveLog(e); + isError = true; + } + /* 에러인 경우 */ + if (isError) { + break; + } + } + + /* Report DB 데이터 삭제 */ + try { /* DB에서 데이터 삭제 */ if (msgList.size() > 0) { Map reqMap = new HashMap<>(); @@ -106,6 +118,14 @@ public class ReportQueueTask implements Runnable { reqMap.put("msgList", msgList); reportService.deleteBulkReport(reqMap); } + } catch (Exception e) { + saveLog("ReportQueueTask SQL ERROR"); + saveLog(e); + isError = true; + } + /* 에러인 경우 */ + if (isError) { + break; } }