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 b227ed01..0dd3cf83 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 @@ -152,7 +152,8 @@ public class Cet_4ServiceImpl extends ServiceImpl implements public Result getRateByCollege(JSONObject webData) { JSONArray colleges = webData.getJSONArray("college"); - String entryDate = webData.getString("entrydate"); + JSONArray entryDateArray = webData.getJSONArray("entrydate"); + //获取所有batch JSONObject batch = centerService.getBatch(); JSONArray batchsArray = batch.getJSONArray("batches"); @@ -161,147 +162,152 @@ public class Cet_4ServiceImpl extends ServiceImpl implements 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++) { - 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) { + JSONObject result = new JSONObject(); + JSONObject oneEntryDate = new JSONObject(); + + for (Object entryDate : entryDateArray) { + + //根据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((String) entryDate)) { batchList.add(value); + } else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt((String) entryDate)) { + if (Integer.parseInt(value.substring(5, 7)) > 9) { + batchList.add(value); + } } } - } - int n = batchList.size();//批次数 - //每个批次获取数据 - LambdaQueryWrapper Cet_4QW = new LambdaQueryWrapper<>(); - //获取全部在籍学生 - LambdaQueryWrapper Cet4_majorQW = new LambdaQueryWrapper<>(); - ///学院/专业的全部在籍学生 - long allStudent = 0; - JSONObject result = new JSONObject(); - JSONArray ans = new JSONArray(); - //如果是全校,获取每个学院的数据 - if (colleges.size() > 1 || colleges.get(0).equals("全校")) { - //获取所有学院列表 - LambdaQueryWrapper collegeQueryWrapper = new LambdaQueryWrapper<>(); - collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege); - List collegeList = cet4Mapper.selectObjs(collegeQueryWrapper); - if (colleges.size() > 1) { - collegeList = colleges; - } - //查某个入学年级的所有学院 - LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); - cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege); + int n = batchList.size();//批次数 + //每个批次获取数据 + LambdaQueryWrapper Cet_4QW = new LambdaQueryWrapper<>(); + //获取全部在籍学生 + LambdaQueryWrapper Cet4_majorQW = new LambdaQueryWrapper<>(); + ///学院/专业的全部在籍学生 + long allStudent = 0; + JSONArray ans = new JSONArray(); + //如果是全校,获取每个学院的数据 + if (colleges.size() > 1 || colleges.get(0).equals("全校")) { + //获取所有学院列表 + LambdaQueryWrapper collegeQueryWrapper = new LambdaQueryWrapper<>(); + collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege); + List collegeList = cet4Mapper.selectObjs(collegeQueryWrapper); + if (colleges.size() > 1) { + collegeList = colleges; + } + //查某个入学年级的所有学院 + LambdaQueryWrapper cet4MajorQW = new LambdaQueryWrapper<>(); + cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege); - //若无该学院则剔除 - List collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW); + //若无该学院则剔除 + 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 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"))); + // 在循环开始之前,获取所有批次的数据 + 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 (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); + //对于每个学院,获取数据 + 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; - passRate = passRate * 100; - //保留三位小数 - DecimalFormat df = new DecimalFormat("#.#"); - json.put("college", collegeName); - json.put("passRate", df.format(passRate)); + //累计通过的人数 + int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); + //每个年级的累计通过率保留三位小数 + double passRate = passNumber / (double) allStudent; + passRate = passRate * 100; + //保留三位小数 + DecimalFormat df = new DecimalFormat("#.#"); + json.put("college", collegeName); + json.put("passRate", df.format(passRate)); // System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate); - ans.add(json); + ans.add(json); + } } - } - } else { + } else { - //获取该学院的所有专业 - LambdaQueryWrapper collegeQueryWrapper = new LambdaQueryWrapper<>(); - collegeQueryWrapper.eq(Cet_4::getCollege, colleges.get(0)).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, colleges.get(0)).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname); - //若为转专业的则剔除 - List majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW); + //获取该学院的所有专业 + LambdaQueryWrapper collegeQueryWrapper = new LambdaQueryWrapper<>(); + collegeQueryWrapper.eq(Cet_4::getCollege, colleges.get(0)).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, colleges.get(0)).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, colleges.get(0)).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, colleges.get(0)).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); + //对于每个专业,获取数据 + 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, colleges.get(0)).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, colleges.get(0)).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; - passRate = passRate * 100; - //保留三位小数 - DecimalFormat df = new DecimalFormat("#.#"); - json.put("college", majorName); - json.put("passRate", df.format(passRate)); + //累计通过的人数 + int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); + //每个年级的累计通过率保留三位小数 + double passRate = passNumber / (double) allStudent; + passRate = passRate * 100; + //保留三位小数 + 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); + ans.add(json); + } } } + oneEntryDate.put((String) entryDate, ans); } - result.put("data", ans); - + result.put("data", oneEntryDate); return Result.ok(result); }