From e0614cb9fa53719a3ccdaab4a0cbf6768af5baa2 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 01 七月 2024 13:13:50 +0800
Subject: [PATCH] 考试定时任务、考试修改调整

---
 src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java |    4 ++++
 src/main/java/com/ycl/jxkg/job/ExamJob.java                  |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/ycl/jxkg/JxkgApplication.java              |    2 ++
 3 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/JxkgApplication.java b/src/main/java/com/ycl/jxkg/JxkgApplication.java
index 3df1b54..0c95d80 100644
--- a/src/main/java/com/ycl/jxkg/JxkgApplication.java
+++ b/src/main/java/com/ycl/jxkg/JxkgApplication.java
@@ -4,6 +4,7 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
@@ -12,6 +13,7 @@
  * Copyright (C), 2020-2024, 姝︽眽鎬濈淮璺宠穬绉戞妧鏈夐檺鍏徃
  * @date 2021/12/25 9:45
  */
+@EnableScheduling
 @SpringBootApplication
 @EnableTransactionManagement
 @EnableConfigurationProperties(value = { SystemConfig.class})
diff --git a/src/main/java/com/ycl/jxkg/job/ExamJob.java b/src/main/java/com/ycl/jxkg/job/ExamJob.java
new file mode 100644
index 0000000..2f97502
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/job/ExamJob.java
@@ -0,0 +1,52 @@
+package com.ycl.jxkg.job;
+
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.ycl.jxkg.domain.entity.Exam;
+import com.ycl.jxkg.enums.general.ExamStatusEnum;
+import com.ycl.jxkg.mapper.ExamMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/1 11:06
+ */
+@Component
+@RequiredArgsConstructor
+public class ExamJob {
+
+    private final ExamMapper examMapper;
+
+
+    @Scheduled(fixedRate = 120000) // 涓ゅ垎閽熸墽琛屼竴娆★紝瀹氭椂浠诲姟浣滀负mq娑堣垂澶辫触鐨勪繚搴�
+    private void updateExamStatus() {
+        List<Exam> notFinishedExams = new LambdaQueryChainWrapper<>(examMapper)
+                .select(Exam::getId, Exam::getStatus, Exam::getStartTime, Exam::getEndTime)
+                .ne(Exam::getStatus, ExamStatusEnum.FINISHED)
+                .list();
+        List<Exam> notStartExams = notFinishedExams.stream().filter(item -> ExamStatusEnum.NOT_START.equals(item.getStatus())).collect(Collectors.toList());
+        List<Exam> ingExams = notFinishedExams.stream().filter(item -> ExamStatusEnum.ING.equals(item.getStatus())).collect(Collectors.toList());
+        Date now = new Date();
+        // 鏈紑濮嬬殑鐘舵�� 鍒� 杩涜涓�
+        for (Exam exam : notStartExams) {
+            if (now.after(exam.getStartTime()) && now.before(exam.getEndTime())) {
+                exam.setStatus(ExamStatusEnum.ING);
+                examMapper.updateById(exam);
+            }
+        }
+        // 浠庤繘琛屼腑鐘舵�� 鍒� 缁撴潫
+        for (Exam ingExam : ingExams) {
+            if (now.after(ingExam.getEndTime())) {
+                ingExam.setStatus(ExamStatusEnum.FINISHED);
+                examMapper.updateById(ingExam);
+            }
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
index 70dc960..e4f46d6 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -94,6 +94,10 @@
         Exam entity = baseMapper.selectById(form.getId());
         // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        // 鍒ゆ柇鑰冭瘯鐘舵��
+        if (! ExamStatusEnum.NOT_START.equals(entity.getStatus())) {
+            throw new RuntimeException("鍙兘淇敼杩樻湭寮�濮嬬殑鑰冭瘯");
+        }
         BeanUtils.copyProperties(form, entity);
         entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
         baseMapper.updateById(entity);

--
Gitblit v1.8.0