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 a4eee717..280bed9c 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 @@ -29,7 +29,6 @@ public class CenterServiceImpl implements CenterService { private Cet_4Mapper cet4Mapper; @Resource private Cet_6Mapper cet6Mapper; - @Resource private RedisTemplate redisTemplate; @@ -87,7 +86,7 @@ public class CenterServiceImpl implements CenterService { List> Cet_4Batch = cet4Mapper.selectMaps(Cet_4BatchQW); // 收集不重复的批次 - Set batchSet = new TreeSet<>(Comparator.naturalOrder()); + Set batchSet = new TreeSet<>(Comparator.naturalOrder()); for (Map map : Cet_4Batch) { batchSet.add(String.valueOf(map.get("batch"))); } @@ -121,7 +120,7 @@ public class CenterServiceImpl implements CenterService { .groupBy(Cet_4::getEntrydate); List> Cet_4Entrydate = cet4Mapper.selectMaps(Cet_4EntrydateQW); // 收集不重复的年级 - Set entrydateSet = new TreeSet<>(Comparator.naturalOrder()); + Set entrydateSet = new TreeSet<>(Comparator.naturalOrder()); for (Map map : Cet_4Entrydate) { entrydateSet.add(String.valueOf(map.get("entrydate"))); } @@ -140,24 +139,43 @@ public class CenterServiceImpl implements CenterService { @Override public Result getData(String college, String entryDate) { - String[] batchs = {"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 result = new JSONObject(); - LambdaQueryWrapper Cet_4CollegeQW = new LambdaQueryWrapper<>(); - double[] passNumber4 = new double[10]; //四级新通过人数 - double[] attendNumber4 = new double[10]; - Map entryDataMap = new HashMap<>(); - entryDataMap.put("2019", 0); - entryDataMap.put("2020", 2); - entryDataMap.put("2021", 4); - entryDataMap.put("2022", 6); - entryDataMap.put("2023", 8); + //获取所有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"}; + //根据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); + } + } + } + int n = batchList.size();//批次数 + //所有参加过四级考试的学生 Map attendMap4 = new HashMap<>(); - long[] mapSize4 = new long[10]; - int index4 = 0; - for (int i = entryDataMap.get(entryDate); i < batchs.length; i++) { - Cet_4CollegeQW.clear(); // 清空查询条件,以便重新设置 - Cet_4CollegeQW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchs[i]); - List> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4CollegeQW); + //累计通过的人数 + int[] passNumber = new int[n]; + //每个批次参加四级考试的学生 + int[] attendNumber4 = new int[n]; + //每年新通过的人数 + int[] passNew4 = new int[n]; + //每个批次获取数据 + LambdaQueryWrapper Cet_4QW = 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)); + } else { + Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i)); + } + List> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW); if (!Cet_4eEntrydate.isEmpty()) { for (Map map : Cet_4eEntrydate) { String str = (String) map.get("id"); @@ -169,40 +187,47 @@ public class CenterServiceImpl implements CenterService { } } } - mapSize4[index4] = attendMap4.values().stream().filter(value -> value == 1).count(); + //累计通过的人数 + passNumber[i] = (int) attendMap4.values().stream().filter(value -> value == 1).count(); + //每个批次参加四级考试的学生 attendNumber4[i] = Cet_4eEntrydate.size(); - passNumber4[i] = i == entryDataMap.get(entryDate) ? mapSize4[index4] : mapSize4[index4] - mapSize4[index4 - 1]; - System.out.println("四级参加人数:" + attendMap4.size() + ",总通过人数:" + mapSize4[index4] + ",新通过人数:" + passNumber4[i]); - index4++; + //每批次新通过的人数,注意索引超出 + if (i == 0) { + passNew4[i] = passNumber[i]; + } else { + passNew4[i] = passNumber[i] - passNumber[i - 1]; + } } else { - // 数据为空,设置为0 + passNumber[i] = (int) attendMap4.values().stream().filter(value -> value == 1).count(); attendNumber4[i] = 0; - passNumber4[i] = 0; + passNew4[i] = 0; } + //打印 + System.out.println("每个批次参加四级:" + attendNumber4[i] + ", 每个批次新通过:" + passNew4[i] + ", 累计通过:" + passNumber[i] + ", 参加四级:" + attendMap4.size()); } - JSONArray list4 = new JSONArray(); - JSONObject ans = new JSONObject(); - String[] grade = {"大一", "大二", "大三", "大四"}; - int temp = 0; - double passSum4 = 0; + //保留三位小数 DecimalFormat df = new DecimalFormat("#.###"); - for (int i = entryDataMap.get(entryDate); i < batchs.length - 1; i += 2) { - if ((attendNumber4[i] != 0 || attendNumber4[i + 1] != 0) && temp < 4) { - JSONObject json = new JSONObject(); - double attendNumbers = attendNumber4[i] + attendNumber4[i + 1]; - double passNumbers = passNumber4[i] + passNumber4[i + 1]; - passSum4 += passNumbers; - json.put("grade", grade[temp]); - json.put("attendNumber", attendNumbers); - json.put("passNumber", passNumbers); - json.put("passRate", df.format(passSum4 / (double) attendMap4.size()));//累计通过人数/四年参加人数 - list4.add(json); - } - temp++; + String[] grade = {"大一", "大二", "大三", "大四"}; + JSONArray list = new JSONArray(); + //遍历批次分年级 + 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 passRate = passNumber[i + 1] / (double) attendMap4.size(); + //写入json + json.put("grade", grade[i / 2]); + json.put("attendNumber", attendNumber); + json.put("passNumber", passNew); + json.put("passRate", df.format(passRate)); + list.add(json); } - ans.put("cet4", list4); - ans.put("total",(double) attendMap4.size()); - result.put("data", ans); + JSONObject result = new JSONObject(); + result.put("cet4", list); + result.put("total", attendMap4.size()); return Result.ok(result); }