diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java index a3e41fa2..fcba6f9b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java @@ -69,10 +69,10 @@ public class CenterController { } @GetMapping("/getRateByBatch") - public Result getRateByBatch(@RequestParam("college") String college, @RequestParam("batch") String batch, @RequestParam("level") String level) { + public Result 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); diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet4_major.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet4_major.java index dec2979e..aa411815 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet4_major.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet4_major.java @@ -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; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4.java index 63d3fef9..eb9b12fe 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4.java @@ -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; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4old.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4old.java index abd56524..952090ab 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4old.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/Cet_4old.java @@ -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; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java index e0e74081..4e7cefd6 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java @@ -14,6 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ICet_4Service extends IService { Result getRateByCollege(String college,String major); - Result getRateByBatch(String college, String batchStr); + Result getRateByBatch(String college, String entrydate); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CenterServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CenterServiceImpl.java index aca03d2b..0775d758 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CenterServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CenterServiceImpl.java @@ -184,9 +184,14 @@ public class CenterServiceImpl extends ServiceImpl implement @Override public Result 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 batchList = new ArrayList<>(); for (int i = 0; i < batchs.length; i++) { @@ -212,25 +217,48 @@ public class CenterServiceImpl extends ServiceImpl implement int[] attendNumber4 = new int[n]; //每年新通过的人数 int[] passNew4 = new int[n]; + //全校/学院的全部在籍学生 + long allStudent = 0; //每个批次获取数据 LambdaQueryWrapper Cet_4QW = new LambdaQueryWrapper<>(); + //获取全部在籍学生 + LambdaQueryWrapper 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> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW); + int pass = 0; if (!Cet_4eEntrydate.isEmpty()) { for (Map 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 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 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 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 getTest() { + //将专业表信息写入四级表 //获取所有参加四级学生list LambdaQueryWrapper cet4_majorQW = new LambdaQueryWrapper<>(); List list = cet4oldMapper.selectList(null); @@ -290,7 +332,7 @@ public class CenterServiceImpl extends ServiceImpl 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> mapList = cet4_majorMapper.selectMaps(cet4_majorQW); // 将专业信息写入学生对象 @@ -300,6 +342,7 @@ public class CenterServiceImpl extends ServiceImpl implement )); int temp = 0; List cet4List = new ArrayList<>(); + //以当前所在年级为入学年份 for (Cet_4old cet4old : list) { Map map_major = idToMap.get(cet4old.getId()); Cet_4 cet4 = new Cet_4(); @@ -308,19 +351,20 @@ public class CenterServiceImpl extends ServiceImpl 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 implement // @Override // public Result getTest() { +// //去除不在学籍表中的学生 // LambdaQueryWrapper Cet4_majorQW = new LambdaQueryWrapper<>(); // Cet4_majorQW.select(Cet4_major::getId); // List list = cet4_majorMapper.selectObjs(Cet4_majorQW); -// System.out.println(list.size());//所有符合的学号 +// System.out.println("所有符合的学号:"+list.size());//所有符合的学号 // LambdaQueryWrapper Cet_4QW = new LambdaQueryWrapper<>(); // Cet_4QW.select(Cet_4::getId); // List list1 = cet4Mapper.selectObjs(Cet_4QW); -// System.out.println(list1.size());//所有参加过四级考试的学生 +// System.out.println("所有参加过四级考试的学生:"+list1.size());//所有参加过四级考试的学生 // //删除所有参加过四级考试的学生中不符合的学号 // List 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); diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java index e69345a3..4bb4754b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java @@ -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 implements Cet_4Mapper cet4Mapper; @Autowired Cet4_majorMapper cet4_MajorMapper; + @Resource + private CenterService centerService; + @Resource + private Cet4_majorMapper cet4_majorMapper; public Result 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 queryWrapper = new LambdaQueryWrapper<>(); @@ -50,7 +56,7 @@ public class Cet_4ServiceImpl extends ServiceImpl implements queryWrapper.orderByAsc(Cet_4::getBatch); List result = cet4Mapper.selectList(queryWrapper); - Map> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getBatch,LinkedHashMap::new,Collectors.toList())); + Map> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getBatch, LinkedHashMap::new, Collectors.toList())); for (Map.Entry> entry : collect.entrySet()) { double sum; @@ -69,75 +75,211 @@ public class Cet_4ServiceImpl extends ServiceImpl implements String format = sdf.format(key); jsonObject.put(format, res); } - return Result.OK(jsonObject); - - } - public Result 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 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 queryWrapper = new LambdaQueryWrapper<>(); +// //构造查询条件 +// Map> collect = new HashMap<>(); +// //根据批次查人数 +// if (college.equals("全校")) { +// queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); +// List 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 result = cet4Mapper.selectList(queryWrapper); +// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname)); +// } +//// System.out.println(collect); +//// List result = cet4Mapper.selectList(queryWrapper); +// //通过批次 +//// Map> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); +// for (Map.Entry> entry : collect.entrySet()) { +// double sum; +// if (college.equals("全校")) { +// sum = (double) getNumCollege(entry.getKey(), batch); +// } else { +// //查某个学院的所有专业 +// LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); +// cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname); +// //若为转专业的则剔除 +// List 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> list = new ArrayList<>(jsonObject.entrySet()); +// Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1); +// jsonObject.clear(); +// +// for (Map.Entry stringObjectEntry : list) { +// jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue()); +// +// } +// return Result.OK(jsonObject); +// } + public Result 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 queryWrapper = new LambdaQueryWrapper<>(); - //构造查询条件 - Map> collect = new HashMap<>(); - //根据批次查人数 - if (college.equals("全校")) { - queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); - List 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 result = cet4Mapper.selectList(queryWrapper); - collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname)); - } -// System.out.println(collect); -// List result = cet4Mapper.selectList(queryWrapper); - //通过批次 -// Map> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); - for (Map.Entry> entry : collect.entrySet()) { - double sum; - if (college.equals("全校")) { - sum = (double) getNumCollege(entry.getKey(), batch); - } else { - //查某个学院的所有专业 - LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); - cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname); - //若为转专业的则剔除 - List 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 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> 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_4QW = new LambdaQueryWrapper<>(); + //获取全部在籍学生 + LambdaQueryWrapper Cet4_majorQW = new LambdaQueryWrapper<>(); + ///学院/专业的全部在籍学生 + long allStudent = 0; + JSONArray ans = new JSONArray(); + //如果是全校,获取每个学院的数据 + if (college.equals("全校")) { + //获取所有学院列表 + LambdaQueryWrapper collegeQueryWrapper = new LambdaQueryWrapper<>(); + collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege); + List collegeList = cet4Mapper.selectObjs(collegeQueryWrapper); + //查某个入学年级的所有学院 + LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); + cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege); + //若无该学院则剔除 + List collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW); + // 在循环开始之前,获取所有学院的在籍学生数量 + LambdaQueryWrapper allStudentQW = new LambdaQueryWrapper<>(); + allStudentQW.select(Cet4_major::getCollege, Cet4_major::getId).eq(Cet4_major::getState,"在校").eq(Cet4_major::getEntrydate, entryDate); + List> allStudentList = cet4_majorMapper.selectMaps(allStudentQW); + Map allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting())); + // 在循环开始之前,获取所有批次的数据 + LambdaQueryWrapper 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> allBatchList = cet4Mapper.selectMaps(allBatchQW); + Map>> allBatchMap = allBatchList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"))); - for (Map.Entry stringObjectEntry : list) { - jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue()); + //对于每个学院,获取数据 + for (Object collegeName : collegeList) { + if (collegeSet.contains(collegeName)) { + //所有参加过四级考试的学生 + Map attendMap4 = new HashMap<>(); + //获取该学院在籍学生数量 + allStudent = allStudentMap.getOrDefault(collegeName, 0L); + JSONObject json = new JSONObject(); + //一次性获取所有批次的数据 + List> Cet_4eEntrydate = allBatchMap.get(collegeName); + for (Map 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 collegeQueryWrapper = new LambdaQueryWrapper<>(); + collegeQueryWrapper.eq(Cet_4::getCollege, college).select(Cet_4::getMajorname).groupBy(Cet_4::getMajorname); + List majorList = cet4Mapper.selectObjs(collegeQueryWrapper); + //查某个学院的所有专业 + LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); + cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname); + //若为转专业的则剔除 + List majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW); +// System.out.println("专业:" + majorList); + //对于每个专业,获取数据 + for (Object majorName : majorList) { + if (majorSet.contains(majorName)) { + //所有参加过四级考试的学生 + Map 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> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW); + for (Map 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) {