From d09c8e13d88bd535987b75320a58a4564c563c66 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Thu, 17 Oct 2024 17:30:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=89=B9=E6=AC=A1=E8=8E=B7?= =?UTF-8?q?=E5=BE=97=E5=B9=B4=E7=BA=A7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/controller/CenterController.java | 22 ++-- .../jeecg/modules/service/CenterService.java | 6 + .../jeecg/modules/service/ICet_4Service.java | 4 + .../service/impl/CenterServiceImpl.java | 58 ++++------ .../service/impl/Cet_4ServiceImpl.java | 106 ++++++++++++------ 5 files changed, 115 insertions(+), 81 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 e4eeeaa2..ee7b0319 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 @@ -79,7 +79,7 @@ public class CenterController { @PostMapping("/getAllRate") @Cacheable(value = "getAllRate", key = "'getAllRate' + #webData") public Result getAllRate(@RequestBody JSONObject webData) { - String level= webData.getString("level"); + String level = webData.getString("level"); //四六级分开查询 if (level.equals("cet4")) { @@ -92,18 +92,19 @@ public class CenterController { return null; } } + @PostMapping("/getRateByCollege") - public Result getRateByCollege(@RequestBody JSONObject webData){ + public Result getRateByCollege(@RequestBody JSONObject webData) { return cet4Service.getRateByCollege(webData); } @GetMapping("/getRateByAllBatch") // @Cacheable(value = "getRateByAllBatch", key = "'getRateByAllBatch' + #college+#major+#level") - public Result getRateByAllBatch(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) { + 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.getRateByAllBatch(college,major); + return cet4Service.getRateByAllBatch(college, major); } else if (level.equals("cet6")) { Cet_6 cet = new Cet_6(); cet.setCollege(college); @@ -114,18 +115,19 @@ public class CenterController { } @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; + 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; } @PostMapping("/getRateByMajor") - public Result getRateByMajor(@RequestBody JSONObject webData){ - return cet4Service.getRateByMajor(webData); + public Result getRateByMajor(@RequestBody JSONObject webData) { + return cet4Service.getRateByMajor(webData); } + /** * @param getRateByMajorAndLastestBatchParam * @return {@link Result }<{@link JSONObject }> diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/CenterService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/CenterService.java index 29ad0f11..8d31f021 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/CenterService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/CenterService.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.Cet_4; +import java.util.Date; +import java.util.List; + /** * @Description: cet_6 * @Author: jeecg-boot @@ -21,5 +24,8 @@ public interface CenterService extends IService { Result getData(String college,String major, String entryDate); Result getTest(); + Result getCollegeMajor(); + + List getEntryDateByBatch(Date batch); } 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 19b27bae..12fcbc85 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 @@ -8,6 +8,8 @@ import org.jeecg.modules.dto.getRateByMajorAndLastestBatchDto; import org.jeecg.modules.entity.Cet_4; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Date; + /** * @Description: cet_4 * @Author: jeecg-boot @@ -26,6 +28,8 @@ public interface ICet_4Service extends IService { Result getRateByMajor(JSONObject webData); Result getDataByStudent(JSONObject jsonObject); + + JSONObject getGradeByBatch(Date batch,String college); boolean cleanData(); Result getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam); 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 51217506..71628552 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 @@ -1,5 +1,6 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -8,13 +9,11 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.Cet4_major; import org.jeecg.modules.entity.Cet_4; import org.jeecg.modules.entity.Cet_4old; -import org.jeecg.modules.entity.Cet_6; import org.jeecg.modules.mapper.Cet4_majorMapper; import org.jeecg.modules.mapper.Cet_4Mapper; import org.jeecg.modules.mapper.Cet_4oldMapper; import org.jeecg.modules.mapper.Cet_6Mapper; import org.jeecg.modules.service.CenterService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -114,6 +113,23 @@ public class CenterServiceImpl extends ServiceImpl implement return Result.ok(result); } + @Override + public List getEntryDateByBatch(Date batch) { + List res=new ArrayList<>(); + String batchStr = DateUtil.format(batch, "yyyy-MM-dd"); + String[] dateArr = batchStr.split("-"); + //根据月份来判断是否是当年新生 + int month = Integer.parseInt(dateArr[1]); + int year=Integer.parseInt(dateArr[0]); + if (month < 10) { + year--; + } + for(int i=0;i<4;i++){ + res.add(String.valueOf(year--)); + } + return res; + } + /** * 统计四级表和六级表中存在的批次 */ @@ -186,7 +202,7 @@ public class CenterServiceImpl extends ServiceImpl implement @Override public Result getData(String college, String major, String entryDate) { //判断是否存在缓存 - String key = "getData:"+college + major + entryDate; + String key = "getData:" + college + major + entryDate; if (Boolean.TRUE.equals(redisTemplate.hasKey(key))) { System.out.println((JSONObject) redisTemplate.opsForValue().get(key)); return Result.ok((JSONObject) redisTemplate.opsForValue().get(key)); @@ -238,28 +254,28 @@ public class CenterServiceImpl extends ServiceImpl implement 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,"在校"); + 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("专升本")) { totalName = "全校"; 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); + 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("")) { totalName = "学院"; 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); + 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 { totalName = "专业"; //查询该年级的学院专业在籍学生 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); + 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); @@ -329,7 +345,7 @@ public class CenterServiceImpl extends ServiceImpl implement result.put("cet4", resultJson); result.put("total", allStudent);//总人数 result.put("totalName", totalName);//总人数 - result.put("passNumber",passNumber[n - 1]);//累计通过人数 + result.put("passNumber", passNumber[n - 1]);//累计通过人数 result.put("passRate", df.format((passNumber[n - 1] / (double) allStudent)));//累计通过率 // 将数据存入缓存 redisTemplate.opsForValue().set(key, result, Duration.ofDays(7)); @@ -390,30 +406,4 @@ 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());//所有符合的学号 -// LambdaQueryWrapper Cet_4QW = new LambdaQueryWrapper<>(); -// Cet_4QW.select(Cet_4::getId); -// List list1 = cet4Mapper.selectObjs(Cet_4QW); -// System.out.println("所有参加过四级考试的学生:"+list1.size());//所有参加过四级考试的学生 -// //删除所有参加过四级考试的学生中不符合的学号 -// List notin = new ArrayList<>(); -// for (Object obj : list1) { -// if (!list.contains(obj)) { -// notin.add(obj); -// } -// } -// System.out.println("不符合的学号:"+notin.size());//不符合的学号 -// //批量删除list1中notin的学号 -// Cet_4QW.clear(); -// Cet_4QW.in(Cet_4::getId, notin); -// cet4Mapper.delete(Cet_4QW); -// System.out.println("删除完成"); -// return null; -// } } 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 1d2ccf86..2a165ffb 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 @@ -95,50 +95,47 @@ public class Cet_4ServiceImpl extends ServiceImpl implements @Override public Result getRateByBatch(String college, String batchStr) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + DecimalFormat decimalFormat = new DecimalFormat("#.#"); Date batch; try { batch = dateFormat.parse(batchStr); } catch (ParseException e) { throw new RuntimeException(e); } + // 根据批次获得正确的年级 + List trueEntryDate = centerService.getEntryDateByBatch(batch); + JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); JSONObject resultData = new JSONObject(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //构造查询条件 Map> collect; + + queryWrapper.eq(Cet_4::getBatch, batch).eq(!college.equals("全校"), Cet_4::getCollege, college); + List allStudentList = list(queryWrapper); //根据批次查人数 - 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)); - //获取全校人数 - long allStudent = getNumAll(batch); - //获取全校通过人数 - LambdaQueryWrapper passQW = new LambdaQueryWrapper<>(); - passQW.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); - long passStudent = cet4Mapper.selectCount(queryWrapper); - double passRateSum = passStudent / (double) allStudent * 100; - DecimalFormat decimalFormat = new DecimalFormat("#.#"); - String rate = decimalFormat.format(passRateSum); - double res = Double.parseDouble(rate); - resultData.put("sumRate", res); - } 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)); - //获取学院人数 - long allStudent = getNumCollege(college, batch); - //获取学院通过人数 - LambdaQueryWrapper passQW = new LambdaQueryWrapper<>(); - passQW.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); - long passStudent = cet4Mapper.selectCount(queryWrapper); - double passRateSum = passStudent / (double) allStudent * 100; - DecimalFormat decimalFormat = new DecimalFormat("#.#"); - String rate = decimalFormat.format(passRateSum); - double res = Double.parseDouble(rate); - resultData.put("sumRate", res); - } + + queryWrapper.ge(Cet_4::getResult, 425); + List result = cet4Mapper.selectList(queryWrapper); + collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); + + // 过滤除去错误的数据 + allStudentList = allStudentList.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.toList()); + long allStudent = allStudentList.size(); + //获取通过人数 + LambdaQueryWrapper passWrapper = new LambdaQueryWrapper<>(); + passWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425).eq(!college.equals("全校"), Cet_4::getCollege, college); + List passedList = list(passWrapper); + passedList = passedList.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.toList()); + + long passStudent = passedList.size(); + double passRateSum = (passStudent / (double) allStudent) * 100; + String rate = decimalFormat.format(passRateSum); + double res = Double.parseDouble(rate); + resultData.put("sumRate", res); + + // System.out.println(collect); // List result = cet4Mapper.selectList(queryWrapper); //通过批次 @@ -162,10 +159,9 @@ public class Cet_4ServiceImpl extends ServiceImpl implements 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); + String passRateStr = decimalFormat.format(passRate); + double rateRes = Double.parseDouble(passRateStr); + jsonObject.put(String.valueOf(entry.getKey()), rateRes); } //对jsonObject的值进行排序 List> list = new ArrayList<>(jsonObject.entrySet()); @@ -174,7 +170,9 @@ public class Cet_4ServiceImpl extends ServiceImpl implements for (Map.Entry stringObjectEntry : list) { jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue()); } + JSONObject gradeByBatch = getGradeByBatch(batch,college); resultData.put("data", jsonObject); + resultData.put("gradeData", gradeByBatch); System.out.println(resultData); return Result.OK(resultData); } @@ -692,11 +690,45 @@ public class Cet_4ServiceImpl extends ServiceImpl implements return Result.ok(result); } + @Override + public JSONObject getGradeByBatch(Date batch,String college) { + //根据批次获取正确的年级 + List trueEntryDate = centerService.getEntryDateByBatch(batch); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(!college.equals("全校"),Cet_4::getCollege,college) + .eq(Cet_4::getBatch, batch); + List allStudent = list(wrapper); + wrapper.ge(Cet_4::getResult, 425); + List allPassStudent = list(wrapper); + + //所有参加该批次四级的学生,根据年级分组 + Map gradeStudentCount = allStudent.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.groupingBy(Cet_4::getEntrydate, Collectors.counting())); + + //所有参加该批次四级且通过的学生,根据年级分组 + Map allPassStudentCount = allPassStudent.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.groupingBy(Cet_4::getEntrydate, Collectors.counting())); + Set entryDateKeySet = gradeStudentCount.keySet(); + JSONObject res = new JSONObject(); + for (String key : entryDateKeySet) { + JSONObject jsonObject = new JSONObject(); + double passRate; + long passStudent = allPassStudentCount.getOrDefault(key, 0L); + long allStudentNum = gradeStudentCount.getOrDefault(key, 0L); + passRate = passStudent / (double) allStudentNum; + passRate = passRate * 100; + DecimalFormat df = new DecimalFormat("#.##"); + jsonObject.fluentPut("allStudent", allStudentNum) + .fluentPut("passed", passStudent) + .fluentPut("passRate", df.format(passRate)); + res.put(key, jsonObject); + } + return res; + } + //获取全校人数 - private long getNumAll(Date batch) { + private List getNumAll(Date batch) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Cet_4::getBatch, batch); - return cet4Mapper.selectCount(queryWrapper); + return list(queryWrapper); } //获取学院的人数