四六级数据同步(待优化)

This commit is contained in:
Cool 2024-10-24 15:04:41 +08:00
parent 0ef7780459
commit d13486422c
7 changed files with 162 additions and 26 deletions

View File

@ -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;
}
}

View File

@ -174,4 +174,9 @@ public class Cet4MajorController extends JeecgController<Cet4_major, ICet4MajorS
return cet4MajorService.loadTable(); return cet4MajorService.loadTable();
} }
@RequestMapping("asyncData")
@ApiOperation("同步数据")
public Result<?> asyncData() {
return cet4MajorService.asyncData();
}
} }

View File

@ -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<Cet4_major> majorList = cet4MajorService.list();
majorList.forEach(e -> {
LambdaUpdateWrapper<Cet_4> cet4Wrapper = new LambdaUpdateWrapper<>();
LambdaUpdateWrapper<Cet_6> 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);
});
}
}

View File

@ -21,4 +21,5 @@ public interface ICet4MajorService extends IService<Cet4_major> {
Result<?> importStudentData(HttpServletRequest request); Result<?> importStudentData(HttpServletRequest request);
Result<?> asyncData();
} }

View File

@ -16,6 +16,7 @@ public interface ICet_6Service extends IService<Cet_6> {
Result<JSONObject> getRate(Cet_6 data); Result<JSONObject> getRate(Cet_6 data);
Result<?> getGrateRate(); Result<?> getGrateRate();
Result<JSONObject> loadImportDataList(); Result<JSONObject> loadImportDataList();
} }

View File

@ -5,13 +5,27 @@ import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.fastjson.JSONObject; 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.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.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.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.mapper.Cet4_majorMapper;
import org.jeecg.modules.pojo.CetStudent; import org.jeecg.modules.pojo.CetStudent;
import org.jeecg.modules.runnable.CetDataAsync;
import org.jeecg.modules.service.ICet4MajorService; 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.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 org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,6 +37,9 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.*; import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -36,6 +53,14 @@ public class Cet4MajorServiceImpl extends ServiceImpl<Cet4_majorMapper, Cet4_maj
private final String CET_STUDENT_IMPORT_TEMPLATE = "template/cetStudentImportTemplate.xls"; private final String CET_STUDENT_IMPORT_TEMPLATE = "template/cetStudentImportTemplate.xls";
private final String CET_STUDENT_FILE_TEMPLATE_NAME = "四六级学生信息导入模版.xlsx"; private final String CET_STUDENT_FILE_TEMPLATE_NAME = "四六级学生信息导入模版.xlsx";
@Autowired
private ICet_6Service cet6Service;
@Autowired
ICet_4Service cet4Service;
@Autowired
@Lazy
private ICet4MajorService cet4MajorService;
@Override @Override
public Result<?> downloadTemplate(HttpServletResponse response) { public Result<?> downloadTemplate(HttpServletResponse response) {
try { try {
@ -144,4 +169,14 @@ public class Cet4MajorServiceImpl extends ServiceImpl<Cet4_majorMapper, Cet4_maj
} }
return Result.error("文件导入失败!"); return Result.error("文件导入失败!");
} }
@Override
public Result<?> asyncData() {
//异步同步数据
ThreadPoolExecutor executor = ThreadPoolManager.getExecutor();
executor.execute(new CetDataAsync(cet6Service,cet4Service,cet4MajorService));
return Result.ok();
}
} }

View File

@ -33,9 +33,9 @@ import java.util.stream.Collectors;
public class Cet_6ServiceImpl extends ServiceImpl<Cet_6Mapper, Cet_6> implements ICet_6Service { public class Cet_6ServiceImpl extends ServiceImpl<Cet_6Mapper, Cet_6> implements ICet_6Service {
@Resource @Resource
Cet_6Mapper cet6Mapper; Cet_6Mapper cet6Mapper;
//
@Autowired // @Autowired
ICet4MajorService cet4MajorService; // ICet4MajorService cet4MajorService;
@Autowired @Autowired
Cet_4ServiceImpl cet4Service; Cet_4ServiceImpl cet4Service;
@Autowired @Autowired
@ -79,29 +79,29 @@ public class Cet_6ServiceImpl extends ServiceImpl<Cet_6Mapper, Cet_6> implements
@Override @Override
public Result<?> getGrateRate() { public Result<?> getGrateRate() {
LambdaQueryWrapper<Cet_6> wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<Cet_6> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Cet_6::getEntrydate, "2020"); // wrapper.eq(Cet_6::getEntrydate, "2020");
List<Cet_6> list1 = list(wrapper); // List<Cet_6> list1 = list(wrapper);
Set<String> allStudent1 = list1.stream().map(Cet_6::getId).collect(Collectors.toSet()); // Set<String> allStudent1 = list1.stream().map(Cet_6::getId).collect(Collectors.toSet());
log.info("六级总考试人数,{}", allStudent1.size()); // log.info("六级总考试人数,{}", allStudent1.size());
wrapper.ge(Cet_6::getResult, 425); // wrapper.ge(Cet_6::getResult, 425);
List<Cet_6> list = list(wrapper); // List<Cet_6> list = list(wrapper);
log.info("六级总通过人数,{}", list.size()); // log.info("六级总通过人数,{}", list.size());
//
Set<String> passStudent = list.stream().map(Cet_6::getId).collect(Collectors.toSet()); // Set<String> passStudent = list.stream().map(Cet_6::getId).collect(Collectors.toSet());
log.info("六级通过人数,{}", passStudent.size()); // log.info("六级通过人数,{}", passStudent.size());
LambdaQueryWrapper<Cet4_major> majorWrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<Cet4_major> majorWrapper = new LambdaQueryWrapper<>();
majorWrapper.eq(Cet4_major::getEntrydate, "2020").eq(Cet4_major::getState, "在校"); // majorWrapper.eq(Cet4_major::getEntrydate, "2020").eq(Cet4_major::getState, "在校");
List<Cet4_major> majorList = cet4MajorService.list(majorWrapper); // List<Cet4_major> majorList = cet4MajorService.list(majorWrapper);
Set<String> allStudent = majorList.stream().map(Cet4_major::getId).collect(Collectors.toSet()); // Set<String> allStudent = majorList.stream().map(Cet4_major::getId).collect(Collectors.toSet());
log.info("所有学生人数{}", allStudent.size()); // log.info("所有学生人数{}", allStudent.size());
log.info("通过率,{}", (double) passStudent.size() / allStudent.size()); // log.info("通过率,{}", (double) passStudent.size() / allStudent.size());
LambdaQueryWrapper<Cet_4> cet4Wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<Cet_4> cet4Wrapper = new LambdaQueryWrapper<>();
cet4Wrapper.eq(Cet_4::getEntrydate, "2020"); // cet4Wrapper.eq(Cet_4::getEntrydate, "2020");
cet4Wrapper.ge(Cet_4::getResult, 425); // cet4Wrapper.ge(Cet_4::getResult, 425);
List<Cet_4> cet4PassedStudent = cet4Service.list(cet4Wrapper); // List<Cet_4> cet4PassedStudent = cet4Service.list(cet4Wrapper);
Set<String> cet4AllPassedStudent = cet4PassedStudent.stream().map(Cet_4::getId).collect(Collectors.toSet()); // Set<String> cet4AllPassedStudent = cet4PassedStudent.stream().map(Cet_4::getId).collect(Collectors.toSet());
log.info("四级通过人数,{}", cet4AllPassedStudent.size()); // log.info("四级通过人数,{}", cet4AllPassedStudent.size());
return null; return null;
} }