From 690001d513e19dd4f86e14d67ca2e44daa1b3a21 Mon Sep 17 00:00:00 2001 From: yang Date: Fri, 21 Jun 2024 03:30:40 +0900 Subject: [PATCH 1/3] =?UTF-8?q?RAC-401=20refactor=20:=20=EC=A0=95=EC=82=B0?= =?UTF-8?q?=20=EB=B0=B0=EC=B9=98=20=EC=B2=98=EB=A6=AC=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=20=EB=B0=8F=20=EB=A6=AC=EC=8A=A4=EB=84=88?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/salary/CreateSalaryJobConfig.java | 2 ++ .../batch/salary/CreateSalaryStepListener.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/com/postgraduate/batch/salary/CreateSalaryStepListener.java diff --git a/src/main/java/com/postgraduate/batch/salary/CreateSalaryJobConfig.java b/src/main/java/com/postgraduate/batch/salary/CreateSalaryJobConfig.java index e77f8381..6d5f6eb7 100644 --- a/src/main/java/com/postgraduate/batch/salary/CreateSalaryJobConfig.java +++ b/src/main/java/com/postgraduate/batch/salary/CreateSalaryJobConfig.java @@ -71,12 +71,14 @@ public Step createSalaryStep() { .skip(Exception.class) .skipLimit(Integer.MAX_VALUE) .listener(createSalarySkipListener) + .listener(new CreateSalaryStepListener()) .build(); } @Bean public QueryDslZeroPagingItemReader salaryReader() { LocalDate date = getSalaryDate().plusDays(7); + log.info("not in date : {}", date); return new QueryDslZeroPagingItemReader<>(entityManagerFactory, CHUNK_SIZE, queryFactory -> queryFactory.select(Projections.constructor(CreateSalary.class, senior.seniorId, diff --git a/src/main/java/com/postgraduate/batch/salary/CreateSalaryStepListener.java b/src/main/java/com/postgraduate/batch/salary/CreateSalaryStepListener.java new file mode 100644 index 00000000..9f0f9ce8 --- /dev/null +++ b/src/main/java/com/postgraduate/batch/salary/CreateSalaryStepListener.java @@ -0,0 +1,18 @@ +package com.postgraduate.batch.salary; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.batch.core.*; + +@Slf4j +public class CreateSalaryStepListener implements StepExecutionListener { + @Override + public void beforeStep(StepExecution stepExecution) { + log.info("createSalaryStep Start"); + } + + @Override + public ExitStatus afterStep(StepExecution stepExecution) { + log.info("salary total read : {} and total write : {}", stepExecution.getReadCount(), stepExecution.getWriteCount()); + return stepExecution.getExitStatus(); + } +} From 2d36e28e1dbe180563a0f144b38e81d1c080fba4 Mon Sep 17 00:00:00 2001 From: yang Date: Fri, 21 Jun 2024 03:30:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?RAC-401=20refactor=20:=20=EB=A9=98=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20=EC=9E=90=EB=8F=99=20=EC=B7=A8=EC=86=8C=20SkipListe?= =?UTF-8?q?ner=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/cancel/CancelJobConfig.java | 2 ++ .../cancel/CancelMentoringSkipListener.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/com/postgraduate/batch/cancel/CancelMentoringSkipListener.java diff --git a/src/main/java/com/postgraduate/batch/cancel/CancelJobConfig.java b/src/main/java/com/postgraduate/batch/cancel/CancelJobConfig.java index 4ba2e3ab..a0634bce 100644 --- a/src/main/java/com/postgraduate/batch/cancel/CancelJobConfig.java +++ b/src/main/java/com/postgraduate/batch/cancel/CancelJobConfig.java @@ -34,6 +34,7 @@ public class CancelJobConfig { private final CancelMentoringProcessor cancelMentoringProcessor; private final CancelMentoringWriter cancelMentoringWriter; private final EntityManagerFactory entityManagerFactory; + private final CancelMentoringSkipListener cancelMentoringSkipListener; private static final int CHUNK_SIZE = 50; @@ -54,6 +55,7 @@ public Step cancelStep() { .faultTolerant() .skip(Exception.class) .skipLimit(Integer.MAX_VALUE) + .listener(cancelMentoringSkipListener) .build(); } diff --git a/src/main/java/com/postgraduate/batch/cancel/CancelMentoringSkipListener.java b/src/main/java/com/postgraduate/batch/cancel/CancelMentoringSkipListener.java new file mode 100644 index 00000000..0175ca57 --- /dev/null +++ b/src/main/java/com/postgraduate/batch/cancel/CancelMentoringSkipListener.java @@ -0,0 +1,32 @@ +package com.postgraduate.batch.cancel; + +import com.postgraduate.domain.mentoring.domain.entity.Mentoring; +import com.postgraduate.global.slack.SlackErrorMessage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.batch.core.SkipListener; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +@Slf4j +public class CancelMentoringSkipListener implements SkipListener { + private final SlackErrorMessage slackErrorMessage; + + @Override + public void onSkipInRead(Throwable t) { + log.error("멘토링 자동 완료 ItemReader Skip message : {}", t.getMessage()); + } + + @Override + public void onSkipInProcess(Mentoring mentoring, Throwable t) { + log.error("mentoringId : {} 자동 취소 실패, message : {}", mentoring.getMentoringId(), t.getMessage()); + slackErrorMessage.sendSlackMentoringError(mentoring.getMentoringId(), t); + } + + @Override + public void onSkipInWrite(CancelMentoring cancelMentoring, Throwable t) { + log.error("mentoringId : {} 자동 취소 실패, message : {}", cancelMentoring.mentoringId(), t.getMessage()); + slackErrorMessage.sendSlackMentoringError(cancelMentoring.mentoringId(), t); + } +} From ac8812e7963421c2d1c36c1fb8d3c3e03db55943 Mon Sep 17 00:00:00 2001 From: yang Date: Fri, 21 Jun 2024 03:31:24 +0900 Subject: [PATCH 3/3] =?UTF-8?q?RAC-401=20feat=20:=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=88=98=EB=8F=99=20?= =?UTF-8?q?=EB=B0=B0=EC=B9=98=20=EC=8B=A4=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/AdminBatchUseCase.java | 37 ++++++++++++++++ .../AdminWithThymeLeafController.java | 24 +++++++++++ src/main/resources/templates/adminBatch.html | 42 +++++++++++++++++++ src/main/resources/templates/adminMain.html | 8 ++++ 4 files changed, 111 insertions(+) create mode 100644 src/main/java/com/postgraduate/admin/application/usecase/AdminBatchUseCase.java create mode 100644 src/main/resources/templates/adminBatch.html diff --git a/src/main/java/com/postgraduate/admin/application/usecase/AdminBatchUseCase.java b/src/main/java/com/postgraduate/admin/application/usecase/AdminBatchUseCase.java new file mode 100644 index 00000000..04aff989 --- /dev/null +++ b/src/main/java/com/postgraduate/admin/application/usecase/AdminBatchUseCase.java @@ -0,0 +1,37 @@ +package com.postgraduate.admin.application.usecase; + +import com.postgraduate.batch.scheduler.JobSchedulerConfig; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +@RequiredArgsConstructor +public class AdminBatchUseCase { + private final JobSchedulerConfig jobSchedulerConfig; + + public void startSalaryBatch() { + try { + jobSchedulerConfig.launchSalaryJob(); + } catch (Exception e) { + log.error("Create Salary Batch Exception : {}", e.getStackTrace()); + } + } + + public void startMentoringDoneBatch() { + try { + jobSchedulerConfig.launchDoneJob(); + } catch (Exception e) { + log.error("Create Salary Batch Exception : {}", e.getStackTrace()); + } + } + + public void startMentoringCancelBatch() { + try { + jobSchedulerConfig.launchCancelJob(); + } catch (Exception e) { + log.error("Create Salary Batch Exception : {}", e.getStackTrace()); + } + } +} diff --git a/src/main/java/com/postgraduate/admin/presentation/AdminWithThymeLeafController.java b/src/main/java/com/postgraduate/admin/presentation/AdminWithThymeLeafController.java index 37812f9d..fccb790b 100644 --- a/src/main/java/com/postgraduate/admin/presentation/AdminWithThymeLeafController.java +++ b/src/main/java/com/postgraduate/admin/presentation/AdminWithThymeLeafController.java @@ -27,6 +27,7 @@ public class AdminWithThymeLeafController { private final AdminMentoringUseCase adminMentoringUseCase; private final AdminSalaryUseCase adminSalaryUseCase; private final AdminPaymentUseCase adminPaymentUseCase; + private final AdminBatchUseCase adminBatchUseCase; private final JwtUseCase jwtUseCase; @GetMapping("/loginForm") @@ -166,4 +167,27 @@ public String sendMessage(@RequestBody SendMessageRequest messageRequest) { adminUserUseCase.sendMatchingMessage(messageRequest); return "adminEmpty"; } + + @GetMapping("/batch") + public String batchManage() { + return "adminBatch"; + } + + @PostMapping("/batch/salary") + public String startSalaryBatch() { + adminBatchUseCase.startSalaryBatch(); + return "adminEmpty"; + } + + @PostMapping("/batch/mentoring/done") + public String startMentoringDone() { + adminBatchUseCase.startMentoringDoneBatch(); + return "adminEmpty"; + } + + @PostMapping("/batch/mentoring/cancel") + public String startMentoringCancel() { + adminBatchUseCase.startMentoringCancelBatch(); + return "adminEmpty"; + } } diff --git a/src/main/resources/templates/adminBatch.html b/src/main/resources/templates/adminBatch.html new file mode 100644 index 00000000..64c941d6 --- /dev/null +++ b/src/main/resources/templates/adminBatch.html @@ -0,0 +1,42 @@ + + + + + + + + +
+
+ + + + + + +
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/adminMain.html b/src/main/resources/templates/adminMain.html index 098273aa..6e7da635 100644 --- a/src/main/resources/templates/adminMain.html +++ b/src/main/resources/templates/adminMain.html @@ -123,6 +123,14 @@ type="button">알림톡 전송 + +
+
+ +
+