基本功能完成

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") @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")) { if (level.equals("cet4")) {
return cet4Service.getRateByBatch(college,batch); return cet4Service.getRateByBatch(college,entrydate);
} else if (level.equals("cet6")) { } else if (level.equals("cet6")) {
Cet_6 cet = new Cet_6(); Cet_6 cet = new Cet_6();
// cet.setBatch(date); // cet.setBatch(date);

View File

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

View File

@ -76,5 +76,9 @@ public class Cet_4 implements Serializable {
@Excel(name = "培养层次", width = 15) @Excel(name = "培养层次", width = 15)
@ApiModelProperty(value = "培养层次") @ApiModelProperty(value = "培养层次")
private String level; 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) @Excel(name = "作文成绩", width = 15)
@ApiModelProperty(value = "作文成绩") @ApiModelProperty(value = "作文成绩")
private Integer writing; 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> { public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByCollege(String college,String major); 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 @Override
public Result<JSONObject> getData(String college, String major, String entryDate) { public Result<JSONObject> getData(String college, String major, String entryDate) {
System.out.println(college + "+" + major + "+" + entryDate);
//获取所有batch //获取所有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 //根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>(); List<String> batchList = new ArrayList<>();
for (int i = 0; i < batchs.length; i++) { 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[] attendNumber4 = new int[n];
//每年新通过的人数 //每年新通过的人数
int[] passNew4 = new int[n]; int[] passNew4 = new int[n];
//全校/学院的全部在籍学生
long allStudent = 0;
//每个批次获取数据 //每个批次获取数据
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
//获取全部在籍学生
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
Cet_4QW.clear(); // 清空查询条件以便重新设置 Cet_4QW.clear(); // 清空查询条件以便重新设置
if (college.equals("全校")) { if (college.equals("全校")) {
Cet_4QW.eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i)); 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("")) { } else if (major.equals("")) {
Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i)); 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 { } 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)); 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); List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
int pass = 0;
if (!Cet_4eEntrydate.isEmpty()) { if (!Cet_4eEntrydate.isEmpty()) {
for (Map<String, Object> map : Cet_4eEntrydate) { for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id"); String str = (String) map.get("id");
if (!map.containsKey(str)) { if ((int) map.get("result") >= 425) {
if ((int) map.get("result") >= 425) { attendMap4.put(str, 1);
attendMap4.put(str, 1); } else {
} else { if (!attendMap4.containsKey(str)) {//排除已经通过的人
attendMap4.put(str, 0); attendMap4.put(str, 0);
} }
} }
@ -251,7 +279,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
passNew4[i] = 0; 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("#.###"); 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) { for (int i = 0; i < n; i += 2) {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
//每个年级的参加人数 //每个年级的参加人数, 每个年级的新通过人数
double attendNumber = attendNumber4[i] + attendNumber4[i + 1]; double attendNumber, passNew;
//每个年级的新通过人数
double passNew = passNew4[i] + passNew4[i + 1];
//每个年级的累计通过率保留三位小数 //每个年级的累计通过率保留三位小数
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
json.put("grade", grade[i / 2]); json.put("grade", grade[i / 2]);
json.put("batch", batchsGrade);
json.put("attendNumber", attendNumber); json.put("attendNumber", attendNumber);
json.put("passNumber", passNew); json.put("passNumber", passNew);
json.put("passRate", df.format(passRate)); json.put("passRate", df.format(passRate));
@ -275,12 +316,13 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
} }
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("cet4", list); result.put("cet4", list);
result.put("total", attendMap4.size()); result.put("total", allStudent);
return Result.ok(result); return Result.ok(result);
} }
@Override @Override
public Result<JSONObject> getTest() { public Result<JSONObject> getTest() {
//将专业表信息写入四级表
//获取所有参加四级学生list //获取所有参加四级学生list
LambdaQueryWrapper<Cet4_major> cet4_majorQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet4_major> cet4_majorQW = new LambdaQueryWrapper<>();
List<Cet_4old> list = cet4oldMapper.selectList(null); 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.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); 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; int temp = 0;
List<Cet_4> cet4List = new ArrayList<>(); List<Cet_4> cet4List = new ArrayList<>();
//以当前所在年级为入学年份
for (Cet_4old cet4old : list) { for (Cet_4old cet4old : list) {
Map<String, Object> map_major = idToMap.get(cet4old.getId()); Map<String, Object> map_major = idToMap.get(cet4old.getId());
Cet_4 cet4 = new Cet_4(); 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.setCollege(cet4old.getCollege());
cet4.setResult(cet4old.getResult()); cet4.setResult(cet4old.getResult());
cet4.setBatch(cet4old.getBatch()); cet4.setBatch(cet4old.getBatch());
cet4.setEntrydate(cet4old.getEntrydate()); cet4.setEntrydate((String) map_major.get("entrydate"));
cet4.setListen(cet4old.getListen()); cet4.setListen(cet4old.getListen());
cet4.setReading(cet4old.getReading()); cet4.setReading(cet4old.getReading());
cet4.setWriting(cet4old.getWriting()); cet4.setWriting(cet4old.getWriting());
cet4.setMajorname((String) map_major.get("majorname")); cet4.setMajorname((String) map_major.get("majorname"));
cet4.setLevel((String) map_major.get("level")); cet4.setLevel((String) map_major.get("level"));
cet4.setState((String) map_major.get("state"));
cet4List.add(cet4); 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()); System.out.println(cet4List.size());
// 批量更新 // 批量更新
try { try {
saveBatch(cet4List, 1000); saveBatch(cet4List, 2000);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -332,23 +376,23 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
// @Override // @Override
// public Result<JSONObject> getTest() { // public Result<JSONObject> getTest() {
// //去除不在学籍表中的学生
// LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
// Cet4_majorQW.select(Cet4_major::getId); // Cet4_majorQW.select(Cet4_major::getId);
// List<Object> list = cet4_majorMapper.selectObjs(Cet4_majorQW); // 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<>(); // LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
// Cet_4QW.select(Cet_4::getId); // Cet_4QW.select(Cet_4::getId);
// List<Object> list1 = cet4Mapper.selectObjs(Cet_4QW); // List<Object> list1 = cet4Mapper.selectObjs(Cet_4QW);
// System.out.println(list1.size());//所有参加过四级考试的学生 // System.out.println("所有参加过四级考试的学生:"+list1.size());//所有参加过四级考试的学生
// //删除所有参加过四级考试的学生中不符合的学号 // //删除所有参加过四级考试的学生中不符合的学号
// List<Object> notin = new ArrayList<>(); // List<Object> notin = new ArrayList<>();
// for (Object obj : list1) { // for (Object obj : list1) {
// if (!list.contains(obj)) { // if (!list.contains(obj)) {
// notin.add(obj); // notin.add(obj);
// System.out.println(obj);
// } // }
// } // }
// System.out.println(notin.size()); // System.out.println("不符合的学号:"+notin.size());//不符合的学号
// //批量删除list1中notin的学号 // //批量删除list1中notin的学号
// Cet_4QW.clear(); // Cet_4QW.clear();
// Cet_4QW.in(Cet_4::getId, notin); // Cet_4QW.in(Cet_4::getId, notin);

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.service.impl; package org.jeecg.modules.service.impl;
import com.alibaba.fastjson.JSONArray;
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.LambdaQueryWrapper;
@ -10,12 +11,14 @@ import org.jeecg.modules.entity.Cet4_major;
import org.jeecg.modules.entity.Cet_4; import org.jeecg.modules.entity.Cet_4;
import org.jeecg.modules.mapper.Cet4_majorMapper; import org.jeecg.modules.mapper.Cet4_majorMapper;
import org.jeecg.modules.mapper.Cet_4Mapper; import org.jeecg.modules.mapper.Cet_4Mapper;
import org.jeecg.modules.service.CenterService;
import org.jeecg.modules.service.ICet_4Service; import org.jeecg.modules.service.ICet_4Service;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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;
import javax.annotation.Resource;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -34,9 +37,12 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
Cet_4Mapper cet4Mapper; Cet_4Mapper cet4Mapper;
@Autowired @Autowired
Cet4_majorMapper cet4_MajorMapper; Cet4_majorMapper cet4_MajorMapper;
@Resource
private CenterService centerService;
@Resource
private Cet4_majorMapper cet4_majorMapper;
public Result<JSONObject> getRateByCollege(String college, String major) { public Result<JSONObject> getRateByCollege(String college, String major) {
System.out.println(college + " " + major);
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
//select count(*) from cet_4 where college ='?' and result>=425 //select count(*) from cet_4 where college ='?' and result>=425
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>(); 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); queryWrapper.orderByAsc(Cet_4::getBatch);
List<Cet_4> result = cet4Mapper.selectList(queryWrapper); 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()) { for (Map.Entry<Date, List<Cet_4>> entry : collect.entrySet()) {
double sum; double sum;
@ -69,75 +75,211 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
String format = sdf.format(key); String format = sdf.format(key);
jsonObject.put(format, res); jsonObject.put(format, res);
} }
return Result.OK(jsonObject); return Result.OK(jsonObject);
} }
public Result<JSONObject> getRateByBatch(String college, String batchStr) { // public Result<JSONObject> getRateByBatch(String college, String entrydate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date batch; // Date batch;
try { // try {
batch = dateFormat.parse(batchStr); // batch = dateFormat.parse(batchStr);
} catch (ParseException e) { // } catch (ParseException e) {
throw new RuntimeException(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<>()); //根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>();
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>(); for (int i = 0; i < batchs.length; i++) {
//构造查询条件 if (batchList.size() >= 8) {
Map<String, List<Cet_4>> collect = new HashMap<>(); break;
//根据批次查人数 }
if (college.equals("全校")) { String value = batchs[i];
queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); //获取入学年份之后的批次
List<Cet_4> result = cet4Mapper.selectList(queryWrapper); if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt(entryDate)) {
collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); batchList.add(value);
} else { } else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt(entryDate)) {
queryWrapper.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); if (Integer.parseInt(value.substring(5, 7)) > 9) {
List<Cet_4> result = cet4Mapper.selectList(queryWrapper); batchList.add(value);
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的值进行排序 int n = batchList.size();//批次数
List<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet()); //每个批次获取数据
Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1); LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
jsonObject.clear(); //获取全部在籍学生
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) { private long getNumCollege(String college, Date batch) {