基本功能完成

This commit is contained in:
xbx 2024-04-08 16:41:29 +08:00
parent dba83d453e
commit 810e818201
7 changed files with 297 additions and 86 deletions

View File

@ -69,10 +69,10 @@ public class CenterController {
}
@GetMapping("/getRateByBatch")
public Result<JSONObject> getRateByBatch(@RequestParam("college") String college, @RequestParam("batch") String batch, @RequestParam("level") String level) {
public Result<JSONObject> getRateByBatch(@RequestParam("college") String college, @RequestParam("entrydate") String entrydate, @RequestParam("level") String level) {
//四六级分开查询
if (level.equals("cet4")) {
return cet4Service.getRateByBatch(college,batch);
return cet4Service.getRateByBatch(college,entrydate);
} else if (level.equals("cet6")) {
Cet_6 cet = new Cet_6();
// cet.setBatch(date);

View File

@ -12,8 +12,11 @@ public class Cet4_major {
private String college;
private String major_id;
private String majorname;
private String educat;
private String class_name;
private String educate;
private String entrydate;
private String campus;
private String state;
private String level;
private String category;
}

View File

@ -76,5 +76,9 @@ public class Cet_4 implements Serializable {
@Excel(name = "培养层次", width = 15)
@ApiModelProperty(value = "培养层次")
private String level;
/**在校状态*/
@Excel(name = "在校状态", width = 15)
@ApiModelProperty(value = "在校状态")
private String state;
}

View File

@ -70,4 +70,22 @@ public class Cet_4old {
@Excel(name = "作文成绩", width = 15)
@ApiModelProperty(value = "作文成绩")
private Integer writing;
/**
* 专业名字
*/
@Excel(name = "专业名称", width = 15)
@ApiModelProperty(value = "专业名称")
private String majorname;
/**
* 培养层次
*/
@Excel(name = "培养层次", width = 15)
@ApiModelProperty(value = "培养层次")
private String level;
/**
* 在校状态
*/
@Excel(name = "在校状态", width = 15)
@ApiModelProperty(value = "在校状态")
private String state;
}

View File

@ -14,6 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByCollege(String college,String major);
Result<JSONObject> getRateByBatch(String college, String batchStr);
Result<JSONObject> getRateByBatch(String college, String entrydate);
}

View File

@ -184,9 +184,14 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
@Override
public Result<JSONObject> getData(String college, String major, String entryDate) {
System.out.println(college + "+" + major + "+" + entryDate);
//获取所有batch
String[] batchs = {"2017-12-01", "2018-06-01", "2018-12-01", "2019-06-01", "2019-12-01", "2020-09-01", "2020-12-01", "2021-06-01", "2021-12-01", "2022-09-01", "2023-03-01", "2023-06-01", "2023-12-01", "2024-06-01"};
JSONObject batch = getBatch();
JSONArray batchsArray = batch.getJSONArray("batches");
//转换为String数组
String[] batchs = new String[batchsArray.size()];
for (int i = 0; i < batchsArray.size(); i++) {
batchs[i] = batchsArray.getJSONObject(i).getString("value");
}
//根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>();
for (int i = 0; i < batchs.length; i++) {
@ -212,25 +217,48 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
int[] attendNumber4 = new int[n];
//每年新通过的人数
int[] passNew4 = new int[n];
//全校/学院的全部在籍学生
long allStudent = 0;
//每个批次获取数据
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
//获取全部在籍学生
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
for (int i = 0; i < n; i++) {
Cet_4QW.clear(); // 清空查询条件以便重新设置
if (college.equals("全校")) {
Cet_4QW.eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
//查询该年级的全校在籍学生
Cet4_majorQW.clear();
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getEntrydate, entryDate).eq(Cet4_major::getState,"在校");
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
} else if (college.equals("专升本")) {
Cet_4QW.eq(Cet_4::getLevel, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
//查询该年级的专升本在籍学生
Cet4_majorQW.clear();
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getLevel, college).eq(Cet4_major::getState,"在校").eq(Cet4_major::getEntrydate, entryDate);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
} else if (major.equals("")) {
Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
//查询该年级的学院在籍学生
Cet4_majorQW.clear();
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getCollege, college).eq(Cet4_major::getState,"在校").eq(Cet4_major::getEntrydate, entryDate);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
} else {
//查询该年级的学院专业在籍学生
Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getMajorname, major).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
Cet4_majorQW.clear();
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getCollege, college).eq(Cet4_major::getState,"在校").eq(Cet4_major::getMajorname, major).eq(Cet4_major::getEntrydate, entryDate);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
}
List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
int pass = 0;
if (!Cet_4eEntrydate.isEmpty()) {
for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id");
if (!map.containsKey(str)) {
if ((int) map.get("result") >= 425) {
attendMap4.put(str, 1);
} else {
if ((int) map.get("result") >= 425) {
attendMap4.put(str, 1);
} else {
if (!attendMap4.containsKey(str)) {//排除已经通过的人
attendMap4.put(str, 0);
}
}
@ -251,7 +279,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
passNew4[i] = 0;
}
//打印
// System.out.println("每个批次参加四级" + attendNumber4[i] + ", 每个批次新通过:" + passNew4[i] + ", 累计通过:" + passNumber[i] + ", 参加四级:" + attendMap4.size());
System.out.println("" + batchList.get(i) + "个批次参加考试的学生" + attendNumber4[i] + ", 每个批次新通过:" + passNew4[i] + ", 累计通过:" + passNumber[i] + ", 参加四级:" + allStudent);
}
//保留三位小数
DecimalFormat df = new DecimalFormat("#.###");
@ -260,14 +288,27 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
//遍历批次分年级
for (int i = 0; i < n; i += 2) {
JSONObject json = new JSONObject();
//每个年级的参加人数
double attendNumber = attendNumber4[i] + attendNumber4[i + 1];
//每个年级的新通过人数
double passNew = passNew4[i] + passNew4[i + 1];
//每个年级的参加人数, 每个年级的新通过人数
double attendNumber, passNew;
//每个年级的累计通过率保留三位小数
double passRate = passNumber[i + 1] / (double) attendMap4.size();
double passRate;
//每个年级的批次
JSONArray batchsGrade = new JSONArray();
// 检查是否到达数组的最后一个元素
if (i == n - 1) {
attendNumber = attendNumber4[i];
passNew = passNew4[i];
passRate = passNumber[i] / (double) allStudent;
batchsGrade.add(batchList.get(i));
} else {
attendNumber = attendNumber4[i] + attendNumber4[i + 1];
passNew = passNew4[i] + passNew4[i + 1];
passRate = passNumber[i + 1] / (double) allStudent;
batchsGrade.add(batchList.get(i) + " + " + batchList.get(i + 1));
}
//写入json
json.put("grade", grade[i / 2]);
json.put("batch", batchsGrade);
json.put("attendNumber", attendNumber);
json.put("passNumber", passNew);
json.put("passRate", df.format(passRate));
@ -275,12 +316,13 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
}
JSONObject result = new JSONObject();
result.put("cet4", list);
result.put("total", attendMap4.size());
result.put("total", allStudent);
return Result.ok(result);
}
@Override
public Result<JSONObject> getTest() {
//将专业表信息写入四级表
//获取所有参加四级学生list
LambdaQueryWrapper<Cet4_major> cet4_majorQW = new LambdaQueryWrapper<>();
List<Cet_4old> list = cet4oldMapper.selectList(null);
@ -290,7 +332,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
// 批量查询专业信息
cet4_majorQW.in(Cet4_major::getId, idList);
cet4_majorQW.select(Cet4_major::getId, Cet4_major::getMajorname, Cet4_major::getLevel);
cet4_majorQW.select(Cet4_major::getId, Cet4_major::getMajorname, Cet4_major::getLevel, Cet4_major::getState, Cet4_major::getEntrydate);
List<Map<String, Object>> mapList = cet4_majorMapper.selectMaps(cet4_majorQW);
// 将专业信息写入学生对象
@ -300,6 +342,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
));
int temp = 0;
List<Cet_4> cet4List = new ArrayList<>();
//以当前所在年级为入学年份
for (Cet_4old cet4old : list) {
Map<String, Object> map_major = idToMap.get(cet4old.getId());
Cet_4 cet4 = new Cet_4();
@ -308,19 +351,20 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
cet4.setCollege(cet4old.getCollege());
cet4.setResult(cet4old.getResult());
cet4.setBatch(cet4old.getBatch());
cet4.setEntrydate(cet4old.getEntrydate());
cet4.setEntrydate((String) map_major.get("entrydate"));
cet4.setListen(cet4old.getListen());
cet4.setReading(cet4old.getReading());
cet4.setWriting(cet4old.getWriting());
cet4.setMajorname((String) map_major.get("majorname"));
cet4.setLevel((String) map_major.get("level"));
cet4.setState((String) map_major.get("state"));
cet4List.add(cet4);
System.out.println(temp++ + ",id:" + cet4.getId() + " ,majorname:" + cet4.getMajorname() + " ,level:" + cet4.getLevel());
System.out.println(temp++ + ",id:" + cet4.getId() + " ,majorname:" + cet4.getMajorname() + " ,level:" + cet4.getLevel() + " ,state:" + cet4.getState());
}
System.out.println(cet4List.size());
// 批量更新
try {
saveBatch(cet4List, 1000);
saveBatch(cet4List, 2000);
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -332,23 +376,23 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
// @Override
// public Result<JSONObject> getTest() {
// //去除不在学籍表中的学生
// LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
// Cet4_majorQW.select(Cet4_major::getId);
// List<Object> list = cet4_majorMapper.selectObjs(Cet4_majorQW);
// System.out.println(list.size());//所有符合的学号
// System.out.println("所有符合的学号:"+list.size());//所有符合的学号
// LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
// Cet_4QW.select(Cet_4::getId);
// List<Object> list1 = cet4Mapper.selectObjs(Cet_4QW);
// System.out.println(list1.size());//所有参加过四级考试的学生
// System.out.println("所有参加过四级考试的学生:"+list1.size());//所有参加过四级考试的学生
// //删除所有参加过四级考试的学生中不符合的学号
// List<Object> notin = new ArrayList<>();
// for (Object obj : list1) {
// if (!list.contains(obj)) {
// notin.add(obj);
// System.out.println(obj);
// }
// }
// System.out.println(notin.size());
// System.out.println("不符合的学号:"+notin.size());//不符合的学号
// //批量删除list1中notin的学号
// Cet_4QW.clear();
// Cet_4QW.in(Cet_4::getId, notin);

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -10,12 +11,14 @@ import org.jeecg.modules.entity.Cet4_major;
import org.jeecg.modules.entity.Cet_4;
import org.jeecg.modules.mapper.Cet4_majorMapper;
import org.jeecg.modules.mapper.Cet_4Mapper;
import org.jeecg.modules.service.CenterService;
import org.jeecg.modules.service.ICet_4Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -34,9 +37,12 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
Cet_4Mapper cet4Mapper;
@Autowired
Cet4_majorMapper cet4_MajorMapper;
@Resource
private CenterService centerService;
@Resource
private Cet4_majorMapper cet4_majorMapper;
public Result<JSONObject> getRateByCollege(String college, String major) {
System.out.println(college + " " + major);
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
//select count(*) from cet_4 where college ='?' and result>=425
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
@ -50,7 +56,7 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
queryWrapper.orderByAsc(Cet_4::getBatch);
List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
Map<Date, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getBatch,LinkedHashMap::new,Collectors.toList()));
Map<Date, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getBatch, LinkedHashMap::new, Collectors.toList()));
for (Map.Entry<Date, List<Cet_4>> entry : collect.entrySet()) {
double sum;
@ -69,75 +75,211 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
String format = sdf.format(key);
jsonObject.put(format, res);
}
return Result.OK(jsonObject);
}
public Result<JSONObject> getRateByBatch(String college, String batchStr) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date batch;
try {
batch = dateFormat.parse(batchStr);
} catch (ParseException e) {
throw new RuntimeException(e);
// public Result<JSONObject> getRateByBatch(String college, String entrydate) {
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// Date batch;
// try {
// batch = dateFormat.parse(batchStr);
// } catch (ParseException e) {
// throw new RuntimeException(e);
// }
// JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
//
// LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
// //构造查询条件
// Map<String, List<Cet_4>> collect = new HashMap<>();
// //根据批次查人数
// if (college.equals("全校")) {
// queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
// } else {
// queryWrapper.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname));
// }
//// System.out.println(collect);
//// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// //通过批次
//// Map<String, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
// for (Map.Entry<String, List<Cet_4>> entry : collect.entrySet()) {
// double sum;
// if (college.equals("全校")) {
// sum = (double) getNumCollege(entry.getKey(), batch);
// } else {
// //查某个学院的所有专业
// LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
// cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname);
// //若为转专业的则剔除
// List<Object> majorList = cet4_MajorMapper.selectObjs(cet4MajorQW);
// System.out.println(majorList);
// if (majorList.contains(entry.getKey())) {
// sum = (double) getNumMajor(entry.getKey(), batch);
// } else {
// continue;
// }
// }
// double size = entry.getValue().size();
// double passRate = size / sum;
// // 定义格式化规则保留四位小数
// DecimalFormat decimalFormat = new DecimalFormat("#.####");
// String rate = decimalFormat.format(passRate);
// double res = Double.parseDouble(rate);
// jsonObject.put(String.valueOf(entry.getKey()), res);
// }
// //对jsonObject的值进行排序
// List<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet());
// Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1);
// jsonObject.clear();
//
// for (Map.Entry<String, Object> stringObjectEntry : list) {
// jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue());
//
// }
// return Result.OK(jsonObject);
// }
public Result<JSONObject> getRateByBatch(String college, String entryDate) {
//获取所有batch
JSONObject batch = centerService.getBatch();
JSONArray batchsArray = batch.getJSONArray("batches");
//转换为String数组
String[] batchs = new String[batchsArray.size()];
for (int i = 0; i < batchsArray.size(); i++) {
batchs[i] = batchsArray.getJSONObject(i).getString("value");
}
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
//构造查询条件
Map<String, List<Cet_4>> collect = new HashMap<>();
//根据批次查人数
if (college.equals("全校")) {
queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
} else {
queryWrapper.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname));
}
// System.out.println(collect);
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
//通过批次
// Map<String, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
for (Map.Entry<String, List<Cet_4>> entry : collect.entrySet()) {
double sum;
if (college.equals("全校")) {
sum = (double) getNumCollege(entry.getKey(), batch);
} else {
//查某个学院的所有专业
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname);
//若为转专业的则剔除
List<Object> majorList = cet4_MajorMapper.selectObjs(cet4MajorQW);
System.out.println(majorList);
if (majorList.contains(entry.getKey())) {
sum = (double) getNumMajor(entry.getKey(), batch);
} else {
continue;
//根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>();
for (int i = 0; i < batchs.length; i++) {
if (batchList.size() >= 8) {
break;
}
String value = batchs[i];
//获取入学年份之后的批次
if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt(entryDate)) {
batchList.add(value);
} else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt(entryDate)) {
if (Integer.parseInt(value.substring(5, 7)) > 9) {
batchList.add(value);
}
}
double size = entry.getValue().size();
double passRate = size / sum;
// 定义格式化规则保留四位小数
DecimalFormat decimalFormat = new DecimalFormat("#.####");
String rate = decimalFormat.format(passRate);
double res = Double.parseDouble(rate);
jsonObject.put(String.valueOf(entry.getKey()), res);
}
//对jsonObject的值进行排序
List<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet());
Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1);
jsonObject.clear();
int n = batchList.size();//批次数
//每个批次获取数据
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
//获取全部在籍学生
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
///学院/专业的全部在籍学生
long allStudent = 0;
JSONArray ans = new JSONArray();
//如果是全校获取每个学院的数据
if (college.equals("全校")) {
//获取所有学院列表
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper);
//查某个入学年级的所有学院
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege);
//若无该学院则剔除
List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// 在循环开始之前获取所有学院的在籍学生数量
LambdaQueryWrapper<Cet4_major> allStudentQW = new LambdaQueryWrapper<>();
allStudentQW.select(Cet4_major::getCollege, Cet4_major::getId).eq(Cet4_major::getState,"在校").eq(Cet4_major::getEntrydate, entryDate);
List<Map<String, Object>> allStudentList = cet4_majorMapper.selectMaps(allStudentQW);
Map<String, Long> allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting()));
// 在循环开始之前获取所有批次的数据
LambdaQueryWrapper<Cet_4> allBatchQW = new LambdaQueryWrapper<>();
allBatchQW.select(Cet_4::getCollege,Cet_4::getId,Cet_4::getResult).eq(Cet_4::getEntrydate, entryDate).in(Cet_4::getBatch, batchList);
List<Map<String, Object>> allBatchList = cet4Mapper.selectMaps(allBatchQW);
Map<String, List<Map<String, Object>>> allBatchMap = allBatchList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college")));
for (Map.Entry<String, Object> stringObjectEntry : list) {
jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue());
//对于每个学院获取数据
for (Object collegeName : collegeList) {
if (collegeSet.contains(collegeName)) {
//所有参加过四级考试的学生
Map<String, Integer> attendMap4 = new HashMap<>();
//获取该学院在籍学生数量
allStudent = allStudentMap.getOrDefault(collegeName, 0L);
JSONObject json = new JSONObject();
//一次性获取所有批次的数据
List<Map<String, Object>> Cet_4eEntrydate = allBatchMap.get(collegeName);
for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id");
if ((int) map.get("result") >= 425) {
attendMap4.put(str, 1);
} else {
if (!attendMap4.containsKey(str)) {//排除已经通过的人
attendMap4.put(str, 0);
}
}
}
//累计通过的人数
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent;
//保留三位小数
DecimalFormat df = new DecimalFormat("#.###");
json.put("college", collegeName);
json.put("passRate", df.format(passRate));
// System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate);
ans.add(json);
}
}
} else {
//获取该学院的所有专业
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
collegeQueryWrapper.eq(Cet_4::getCollege, college).select(Cet_4::getMajorname).groupBy(Cet_4::getMajorname);
List<Object> majorList = cet4Mapper.selectObjs(collegeQueryWrapper);
//查某个学院的所有专业
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname);
//若为转专业的则剔除
List<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// System.out.println("专业:" + majorList);
//对于每个专业获取数据
for (Object majorName : majorList) {
if (majorSet.contains(majorName)) {
//所有参加过四级考试的学生
Map<String, Integer> attendMap4 = new HashMap<>();
//获取该专业的在籍学生
Cet4_majorQW.clear();
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getCollege, college).eq(Cet4_major::getMajorname, majorName).eq(Cet4_major::getEntrydate, entryDate);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
JSONObject json = new JSONObject();
//一次性获取所有批次的数据
Cet_4QW.clear(); // 清空查询条件以便重新设置
Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getMajorname, majorName).eq(Cet_4::getEntrydate, entryDate).in(Cet_4::getBatch, batchList);
List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id");
if ((int) map.get("result") >= 425) {
attendMap4.put(str, 1);
} else {
if (!attendMap4.containsKey(str)) {//排除已经通过的人
attendMap4.put(str, 0);
}
}
}
//累计通过的人数
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent;
//保留三位小数
DecimalFormat df = new DecimalFormat("#.###");
json.put("college", majorName);
json.put("passRate", df.format(passRate));
// System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率:" + df.format(passRate));
ans.add(json);
}
}
}
return Result.OK(jsonObject);
JSONObject result = new JSONObject();
result.put("data", ans);
return Result.ok(result);
}
private long getNumCollege(String college, Date batch) {