From f0c12f5926618a7ad47fc06e007e4bb30fdb9d74 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Wed, 10 Apr 2024 12:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9B=E7=BA=A7=E5=8F=AF=E8=A7=86=E5=8C=96?= =?UTF-8?q?=E5=88=86=E6=9E=901.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/controller/CenterController.java | 31 +-- .../jeecg/modules/service/ICet_4Service.java | 7 +- .../service/impl/Cet_4ServiceImpl.java | 177 ++++++++++-------- 3 files changed, 124 insertions(+), 91 deletions(-) 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 fcba6f9b..d80c1176 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 @@ -3,7 +3,6 @@ package org.jeecg.modules.controller; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.entity.Cet_4; import org.jeecg.modules.entity.Cet_6; import org.jeecg.modules.service.CenterService; import org.jeecg.modules.service.ICet_4Service; @@ -12,9 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.Collections; +import java.util.List; @RestController @RequestMapping("/cet") @@ -68,11 +66,15 @@ public class CenterController { return centerService.getData(college, major, entrydate); } - @GetMapping("/getRateByBatch") - public Result getRateByBatch(@RequestParam("college") String college, @RequestParam("entrydate") String entrydate, @RequestParam("level") String level) { + @PostMapping("/getRateByCollege") + public Result getRateByCollege(@RequestBody JSONObject webData) { + String level= webData.getString("level"); + //四六级分开查询 + if (level.equals("cet4")) { - return cet4Service.getRateByBatch(college,entrydate); + + return cet4Service.getRateByCollege(webData); } else if (level.equals("cet6")) { Cet_6 cet = new Cet_6(); // cet.setBatch(date); @@ -81,13 +83,13 @@ public class CenterController { return null; } } - //根据batch/college是否为空判断两种查询方式 - @GetMapping("/getRateByCollege") - public Result getRateByCollege(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) { + + @GetMapping("/getRateByAllBatch") + public Result getRateByAllBatch(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) { // System.out.println(college + " " + level); if (level.equals("cet4")) { - return cet4Service.getRateByCollege(college,major); + return cet4Service.getRateByAllBatch(college,major); } else if (level.equals("cet6")) { Cet_6 cet = new Cet_6(); cet.setCollege(college); @@ -96,7 +98,12 @@ public class CenterController { return null; } } - + @GetMapping("/getRateByBatch") + public Result getRateByBatch(@RequestParam("batch")String batch, @RequestParam("college") String college, @RequestParam("level")String level){ + if (level.equals("cet4")){ + return cet4Service.getRateByBatch(college,batch); + }else return null; + } @GetMapping("/getTest") public Result getTest() { return centerService.getTest(); 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 4e7cefd6..ac2d072a 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 @@ -13,7 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService; * @Version: V1.0 */ public interface ICet_4Service extends IService { - Result getRateByCollege(String college,String major); - Result getRateByBatch(String college, String entrydate); + Result getRateByAllBatch(String college, String major); + + Result getRateByBatch(String college, String batchStr); + + Result getRateByCollege(JSONObject webData); } 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 4bb4754b..b227ed01 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 @@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.checkerframework.checker.units.qual.A; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.Cet4_major; import org.jeecg.modules.entity.Cet_4; @@ -42,7 +41,8 @@ public class Cet_4ServiceImpl extends ServiceImpl implements @Resource private Cet4_majorMapper cet4_majorMapper; - public Result getRateByCollege(String college, String major) { + @Override + public Result getRateByAllBatch(String college, String major) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); //select count(*) from cet_4 where college ='?' and result>=425 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -67,7 +67,8 @@ public class Cet_4ServiceImpl extends ServiceImpl implements } double size = entry.getValue().size(); double passRate = size / sum; - DecimalFormat decimalFormat = new DecimalFormat("#.####"); + passRate = passRate * 100; + DecimalFormat decimalFormat = new DecimalFormat("#.#"); String rate = decimalFormat.format(passRate); double res = Double.parseDouble(rate); Date key = entry.getKey(); @@ -78,70 +79,80 @@ public class Cet_4ServiceImpl extends ServiceImpl implements return Result.OK(jsonObject); } - // 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) { + @Override + 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); + } + JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //构造查询条件 + Map> collect; + //根据批次查人数 + 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*100; + // 定义格式化规则,保留四位小数 + 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()); + System.out.println(list); + 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); + } + + @Override + public Result getRateByCollege(JSONObject webData) { + JSONArray colleges = webData.getJSONArray("college"); + + String entryDate = webData.getString("entrydate"); //获取所有batch JSONObject batch = centerService.getBatch(); JSONArray batchsArray = batch.getJSONArray("batches"); @@ -173,26 +184,33 @@ public class Cet_4ServiceImpl extends ServiceImpl implements LambdaQueryWrapper Cet4_majorQW = new LambdaQueryWrapper<>(); ///学院/专业的全部在籍学生 long allStudent = 0; + JSONObject result = new JSONObject(); JSONArray ans = new JSONArray(); //如果是全校,获取每个学院的数据 - if (college.equals("全校")) { + 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); + // 在循环开始之前,获取所有学院的在籍学生数量 LambdaQueryWrapper allStudentQW = new LambdaQueryWrapper<>(); - allStudentQW.select(Cet4_major::getCollege, Cet4_major::getId).eq(Cet4_major::getState,"在校").eq(Cet4_major::getEntrydate, entryDate); + 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); + 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"))); @@ -220,22 +238,25 @@ public class Cet_4ServiceImpl extends ServiceImpl implements int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); //每个年级的累计通过率保留三位小数 double passRate = passNumber / (double) allStudent; + passRate = passRate * 100; //保留三位小数 - DecimalFormat df = new DecimalFormat("#.###"); + 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); + 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, college).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname); + 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); @@ -247,12 +268,12 @@ public class Cet_4ServiceImpl extends ServiceImpl implements 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); + 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, college).eq(Cet_4::getMajorname, majorName).eq(Cet_4::getEntrydate, entryDate).in(Cet_4::getBatch, batchList); + 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"); @@ -268,17 +289,19 @@ public class Cet_4ServiceImpl extends ServiceImpl implements int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); //每个年级的累计通过率保留三位小数 double passRate = passNumber / (double) allStudent; + passRate = passRate * 100; //保留三位小数 - DecimalFormat df = new DecimalFormat("#.###"); + 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); + } } } - JSONObject result = new JSONObject(); result.put("data", ans); + return Result.ok(result); }