四六级数据同步(待优化)
This commit is contained in:
parent
0ef7780459
commit
d13486422c
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,4 +21,5 @@ public interface ICet4MajorService extends IService<Cet4_major> {
|
||||||
|
|
||||||
Result<?> importStudentData(HttpServletRequest request);
|
Result<?> importStudentData(HttpServletRequest request);
|
||||||
|
|
||||||
|
Result<?> asyncData();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue