From d13486422c9b6e8f66e3b68dffe8636840439556 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Thu, 24 Oct 2024 15:04:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9B=E5=85=AD=E7=BA=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=88=E5=BE=85=E4=BC=98=E5=8C=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/config/ThreadPoolManager.java | 39 +++++++++++++ .../controller/Cet4MajorController.java | 5 ++ .../jeecg/modules/runnable/CetDataAsync.java | 55 +++++++++++++++++++ .../modules/service/ICet4MajorService.java | 1 + .../jeecg/modules/service/ICet_6Service.java | 1 + .../service/impl/Cet4MajorServiceImpl.java | 35 ++++++++++++ .../service/impl/Cet_6ServiceImpl.java | 52 +++++++++--------- 7 files changed, 162 insertions(+), 26 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/config/ThreadPoolManager.java create mode 100644 jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/runnable/CetDataAsync.java diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/config/ThreadPoolManager.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/config/ThreadPoolManager.java new file mode 100644 index 00000000..171995de --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/config/ThreadPoolManager.java @@ -0,0 +1,39 @@ +package org.jeecg.modules.config; + +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/10/24/13:54 + * @Description: 线程池管理 + */ +public class ThreadPoolManager { + // 单例实例,使用 volatile 关键字 + private static volatile ThreadPoolExecutor executor; + + private ThreadPoolManager() {} + + public static ThreadPoolExecutor getExecutor() { + if (executor == null) { + synchronized (ThreadPoolManager.class) { + if (executor == null) { + executor = new ThreadPoolExecutor( + 10, + 20, + 60L, + TimeUnit.SECONDS, + new LinkedBlockingQueue<>(100), + Executors.defaultThreadFactory(), + new ThreadPoolExecutor.AbortPolicy() + ); + } + } + } + return executor; + } +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/Cet4MajorController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/Cet4MajorController.java index 9666d164..6fcbf672 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/Cet4MajorController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/Cet4MajorController.java @@ -174,4 +174,9 @@ public class Cet4MajorController extends JeecgController asyncData() { + return cet4MajorService.asyncData(); + } } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/runnable/CetDataAsync.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/runnable/CetDataAsync.java new file mode 100644 index 00000000..54909ece --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/runnable/CetDataAsync.java @@ -0,0 +1,55 @@ +package org.jeecg.modules.runnable; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.jeecg.modules.entity.Cet4_major; +import org.jeecg.modules.entity.Cet_4; +import org.jeecg.modules.entity.Cet_6; +import org.jeecg.modules.service.ICet4MajorService; +import org.jeecg.modules.service.ICet_4Service; +import org.jeecg.modules.service.ICet_6Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/10/24/14:38 + * @Description: + */ +@Component +public class CetDataAsync implements Runnable { + + private final ICet_6Service cet6Service; + private final ICet_4Service cet4Service; + private final ICet4MajorService cet4MajorService; + + // 构造函数注入 + @Autowired + public CetDataAsync(ICet_6Service cet6Service, ICet_4Service cet4Service, ICet4MajorService cet4MajorService) { + this.cet6Service = cet6Service; + this.cet4Service = cet4Service; + this.cet4MajorService = cet4MajorService; + } + + @Override + public void run() { + List majorList = cet4MajorService.list(); + majorList.forEach(e -> { + LambdaUpdateWrapper cet4Wrapper = new LambdaUpdateWrapper<>(); + LambdaUpdateWrapper cet6Wrapper = new LambdaUpdateWrapper<>(); + cet4Wrapper.eq(Cet_4::getId, e.getId()) + .set(Cet_4::getMajorname, e.getMajorname()) + .set(Cet_4::getState, e.getState()) + .set(Cet_4::getLevel, e.getLevel()); + cet6Wrapper.eq(Cet_6::getId, e.getId()) + .set(Cet_6::getMajorname, e.getMajorname()) + .set(Cet_6::getState, e.getState()) + .set(Cet_6::getLevel, e.getLevel()); + cet4Service.update(cet4Wrapper); + cet6Service.update(cet6Wrapper); + }); + } +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet4MajorService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet4MajorService.java index e12e3d25..5e55ef81 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet4MajorService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet4MajorService.java @@ -21,4 +21,5 @@ public interface ICet4MajorService extends IService { Result importStudentData(HttpServletRequest request); + Result asyncData(); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_6Service.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_6Service.java index 3b2f13c2..232402af 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_6Service.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_6Service.java @@ -16,6 +16,7 @@ public interface ICet_6Service extends IService { Result getRate(Cet_6 data); Result getGrateRate(); + Result loadImportDataList(); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet4MajorServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet4MajorServiceImpl.java index a3d20f30..4a75b2cc 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet4MajorServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet4MajorServiceImpl.java @@ -5,13 +5,27 @@ import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.checkerframework.checker.units.qual.A; import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.config.ThreadPoolManager; +import org.jeecg.modules.controller.Cet4MajorController; import org.jeecg.modules.entity.Cet4_major; +import org.jeecg.modules.entity.Cet_4; +import org.jeecg.modules.entity.Cet_6; import org.jeecg.modules.mapper.Cet4_majorMapper; import org.jeecg.modules.pojo.CetStudent; +import org.jeecg.modules.runnable.CetDataAsync; import org.jeecg.modules.service.ICet4MajorService; +import org.jeecg.modules.service.ICet_4Service; +import org.jeecg.modules.service.ICet_6Service; import org.jeecg.modules.utils.ExportUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,6 +37,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.Timestamp; import java.util.*; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -36,6 +53,14 @@ public class Cet4MajorServiceImpl extends ServiceImpl downloadTemplate(HttpServletResponse response) { try { @@ -144,4 +169,14 @@ public class Cet4MajorServiceImpl extends ServiceImpl asyncData() { + //异步同步数据 + ThreadPoolExecutor executor = ThreadPoolManager.getExecutor(); + executor.execute(new CetDataAsync(cet6Service,cet4Service,cet4MajorService)); + return Result.ok(); + } } + + diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_6ServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_6ServiceImpl.java index 20396d9d..832a0039 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_6ServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_6ServiceImpl.java @@ -33,9 +33,9 @@ import java.util.stream.Collectors; public class Cet_6ServiceImpl extends ServiceImpl implements ICet_6Service { @Resource Cet_6Mapper cet6Mapper; - - @Autowired - ICet4MajorService cet4MajorService; +// +// @Autowired +// ICet4MajorService cet4MajorService; @Autowired Cet_4ServiceImpl cet4Service; @Autowired @@ -79,29 +79,29 @@ public class Cet_6ServiceImpl extends ServiceImpl implements @Override public Result getGrateRate() { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(Cet_6::getEntrydate, "2020"); - List list1 = list(wrapper); - Set allStudent1 = list1.stream().map(Cet_6::getId).collect(Collectors.toSet()); - log.info("六级总考试人数,{}", allStudent1.size()); - wrapper.ge(Cet_6::getResult, 425); - List list = list(wrapper); - log.info("六级总通过人数,{}", list.size()); - - Set passStudent = list.stream().map(Cet_6::getId).collect(Collectors.toSet()); - log.info("六级通过人数,{}", passStudent.size()); - LambdaQueryWrapper majorWrapper = new LambdaQueryWrapper<>(); - majorWrapper.eq(Cet4_major::getEntrydate, "2020").eq(Cet4_major::getState, "在校"); - List majorList = cet4MajorService.list(majorWrapper); - Set allStudent = majorList.stream().map(Cet4_major::getId).collect(Collectors.toSet()); - log.info("所有学生人数{}", allStudent.size()); - log.info("通过率,{}", (double) passStudent.size() / allStudent.size()); - LambdaQueryWrapper cet4Wrapper = new LambdaQueryWrapper<>(); - cet4Wrapper.eq(Cet_4::getEntrydate, "2020"); - cet4Wrapper.ge(Cet_4::getResult, 425); - List cet4PassedStudent = cet4Service.list(cet4Wrapper); - Set cet4AllPassedStudent = cet4PassedStudent.stream().map(Cet_4::getId).collect(Collectors.toSet()); - log.info("四级通过人数,{}", cet4AllPassedStudent.size()); +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(Cet_6::getEntrydate, "2020"); +// List list1 = list(wrapper); +// Set allStudent1 = list1.stream().map(Cet_6::getId).collect(Collectors.toSet()); +// log.info("六级总考试人数,{}", allStudent1.size()); +// wrapper.ge(Cet_6::getResult, 425); +// List list = list(wrapper); +// log.info("六级总通过人数,{}", list.size()); +// +// Set passStudent = list.stream().map(Cet_6::getId).collect(Collectors.toSet()); +// log.info("六级通过人数,{}", passStudent.size()); +// LambdaQueryWrapper majorWrapper = new LambdaQueryWrapper<>(); +// majorWrapper.eq(Cet4_major::getEntrydate, "2020").eq(Cet4_major::getState, "在校"); +// List majorList = cet4MajorService.list(majorWrapper); +// Set allStudent = majorList.stream().map(Cet4_major::getId).collect(Collectors.toSet()); +// log.info("所有学生人数{}", allStudent.size()); +// log.info("通过率,{}", (double) passStudent.size() / allStudent.size()); +// LambdaQueryWrapper cet4Wrapper = new LambdaQueryWrapper<>(); +// cet4Wrapper.eq(Cet_4::getEntrydate, "2020"); +// cet4Wrapper.ge(Cet_4::getResult, 425); +// List cet4PassedStudent = cet4Service.list(cet4Wrapper); +// Set cet4AllPassedStudent = cet4PassedStudent.stream().map(Cet_4::getId).collect(Collectors.toSet()); +// log.info("四级通过人数,{}", cet4AllPassedStudent.size()); return null; }