四级可视化分析1.1

This commit is contained in:
Cool 2024-04-10 12:41:01 +08:00
parent 810e818201
commit f0c12f5926
3 changed files with 124 additions and 91 deletions

View File

@ -3,7 +3,6 @@ package org.jeecg.modules.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result; 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.entity.Cet_6;
import org.jeecg.modules.service.CenterService; import org.jeecg.modules.service.CenterService;
import org.jeecg.modules.service.ICet_4Service; 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 org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.ParseException; import java.util.Collections;
import java.text.SimpleDateFormat; import java.util.List;
import java.util.Date;
@RestController @RestController
@RequestMapping("/cet") @RequestMapping("/cet")
@ -68,11 +66,15 @@ public class CenterController {
return centerService.getData(college, major, entrydate); return centerService.getData(college, major, entrydate);
} }
@GetMapping("/getRateByBatch") @PostMapping("/getRateByCollege")
public Result<JSONObject> getRateByBatch(@RequestParam("college") String college, @RequestParam("entrydate") String entrydate, @RequestParam("level") String level) { public Result<JSONObject> getRateByCollege(@RequestBody JSONObject webData) {
String level= webData.getString("level");
//四六级分开查询 //四六级分开查询
if (level.equals("cet4")) { if (level.equals("cet4")) {
return cet4Service.getRateByBatch(college,entrydate);
return cet4Service.getRateByCollege(webData);
} else if (level.equals("cet6")) { } else if (level.equals("cet6")) {
Cet_6 cet = new Cet_6(); Cet_6 cet = new Cet_6();
// cet.setBatch(date); // cet.setBatch(date);
@ -81,13 +83,13 @@ public class CenterController {
return null; return null;
} }
} }
//根据batch/college是否为空判断两种查询方式
@GetMapping("/getRateByCollege")
public Result<JSONObject> getRateByCollege(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) { @GetMapping("/getRateByAllBatch")
public Result<JSONObject> getRateByAllBatch(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) {
// System.out.println(college + " " + level); // System.out.println(college + " " + level);
if (level.equals("cet4")) { if (level.equals("cet4")) {
return cet4Service.getRateByCollege(college,major); return cet4Service.getRateByAllBatch(college,major);
} else if (level.equals("cet6")) { } else if (level.equals("cet6")) {
Cet_6 cet = new Cet_6(); Cet_6 cet = new Cet_6();
cet.setCollege(college); cet.setCollege(college);
@ -96,7 +98,12 @@ public class CenterController {
return null; return null;
} }
} }
@GetMapping("/getRateByBatch")
public Result<JSONObject> 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") @GetMapping("/getTest")
public Result<JSONObject> getTest() { public Result<JSONObject> getTest() {
return centerService.getTest(); return centerService.getTest();

View File

@ -13,7 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @Version: V1.0 * @Version: V1.0
*/ */
public interface ICet_4Service extends IService<Cet_4> { public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByCollege(String college,String major); Result<JSONObject> getRateByAllBatch(String college, String major);
Result<JSONObject> getRateByBatch(String college, String entrydate);
Result<JSONObject> getRateByBatch(String college, String batchStr);
Result<JSONObject> getRateByCollege(JSONObject webData);
} }

View File

@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.common.api.vo.Result;
import org.jeecg.modules.entity.Cet4_major; import org.jeecg.modules.entity.Cet4_major;
import org.jeecg.modules.entity.Cet_4; import org.jeecg.modules.entity.Cet_4;
@ -42,7 +41,8 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
@Resource @Resource
private Cet4_majorMapper cet4_majorMapper; private Cet4_majorMapper cet4_majorMapper;
public Result<JSONObject> getRateByCollege(String college, String major) { @Override
public Result<JSONObject> getRateByAllBatch(String college, String major) {
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
//select count(*) from cet_4 where college ='?' and result>=425 //select count(*) from cet_4 where college ='?' and result>=425
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
@ -67,7 +67,8 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
} }
double size = entry.getValue().size(); double size = entry.getValue().size();
double passRate = size / sum; double passRate = size / sum;
DecimalFormat decimalFormat = new DecimalFormat("#.####"); passRate = passRate * 100;
DecimalFormat decimalFormat = new DecimalFormat("#.#");
String rate = decimalFormat.format(passRate); String rate = decimalFormat.format(passRate);
double res = Double.parseDouble(rate); double res = Double.parseDouble(rate);
Date key = entry.getKey(); Date key = entry.getKey();
@ -78,70 +79,80 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
return Result.OK(jsonObject); return Result.OK(jsonObject);
} }
// public Result<JSONObject> getRateByBatch(String college, String entrydate) { @Override
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); public Result<JSONObject> getRateByBatch(String college, String batchStr) {
// Date batch; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// try { Date batch;
// batch = dateFormat.parse(batchStr); try {
// } catch (ParseException e) { batch = dateFormat.parse(batchStr);
// throw new RuntimeException(e); } catch (ParseException e) {
// } throw new RuntimeException(e);
// JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); }
// JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
// LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
// //构造查询条件 LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
// Map<String, List<Cet_4>> collect = new HashMap<>(); //构造查询条件
// //根据批次查人数 Map<String, List<Cet_4>> collect;
// if (college.equals("全校")) { //根据批次查人数
// queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425); if (college.equals("全校")) {
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper); queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// } else { collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
// queryWrapper.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper); } else {
// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname)); queryWrapper.eq(Cet_4::getCollege, college).eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// } List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
//// System.out.println(collect); collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname));
//// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// //通过批次
//// Map<String, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege)); }
// for (Map.Entry<String, List<Cet_4>> entry : collect.entrySet()) { // System.out.println(collect);
// double sum; // List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// if (college.equals("全校")) { //通过批次
// sum = (double) getNumCollege(entry.getKey(), batch); // Map<String, List<Cet_4>> collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
// } else { for (Map.Entry<String, List<Cet_4>> entry : collect.entrySet()) {
// //查某个学院的所有专业 double sum;
// LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>(); if (college.equals("全校")) {
// cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname); sum = (double) getNumCollege(entry.getKey(), batch);
// //若为转专业的则剔除 } else {
// List<Object> majorList = cet4_MajorMapper.selectObjs(cet4MajorQW); //查某个学院的所有专业
// System.out.println(majorList); LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
// if (majorList.contains(entry.getKey())) { cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname);
// sum = (double) getNumMajor(entry.getKey(), batch); //若为转专业的则剔除
// } else { List<Object> majorList = cet4_MajorMapper.selectObjs(cet4MajorQW);
// continue; System.out.println(majorList);
// } if (majorList.contains(entry.getKey())) {
// } sum = (double) getNumMajor(entry.getKey(), batch);
// double size = entry.getValue().size(); } else {
// double passRate = size / sum; continue;
// // 定义格式化规则保留四位小数 }
// DecimalFormat decimalFormat = new DecimalFormat("#.####"); }
// String rate = decimalFormat.format(passRate); double size = entry.getValue().size();
// double res = Double.parseDouble(rate); double passRate = size / sum*100;
// jsonObject.put(String.valueOf(entry.getKey()), res); // 定义格式化规则保留四位小数
// } DecimalFormat decimalFormat = new DecimalFormat("#.#");
// //对jsonObject的值进行排序 String rate = decimalFormat.format(passRate);
// List<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet()); double res = Double.parseDouble(rate);
// Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1); jsonObject.put(String.valueOf(entry.getKey()), res);
// jsonObject.clear(); }
// //对jsonObject的值进行排序
// for (Map.Entry<String, Object> stringObjectEntry : list) { List<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet());
// jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue()); System.out.println(list);
// Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1);
// } jsonObject.clear();
// return Result.OK(jsonObject);
// } for (Map.Entry<String, Object> stringObjectEntry : list) {
public Result<JSONObject> getRateByBatch(String college, String entryDate) { jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue());
}
return Result.OK(jsonObject);
}
@Override
public Result<JSONObject> getRateByCollege(JSONObject webData) {
JSONArray colleges = webData.getJSONArray("college");
String entryDate = webData.getString("entrydate");
//获取所有batch //获取所有batch
JSONObject batch = centerService.getBatch(); JSONObject batch = centerService.getBatch();
JSONArray batchsArray = batch.getJSONArray("batches"); JSONArray batchsArray = batch.getJSONArray("batches");
@ -173,26 +184,33 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
///学院/专业的全部在籍学生 ///学院/专业的全部在籍学生
long allStudent = 0; long allStudent = 0;
JSONObject result = new JSONObject();
JSONArray ans = new JSONArray(); JSONArray ans = new JSONArray();
//如果是全校获取每个学院的数据 //如果是全校获取每个学院的数据
if (college.equals("全校")) { if (colleges.size() > 1 || colleges.get(0).equals("全校")) {
//获取所有学院列表 //获取所有学院列表
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege); collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper); List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper);
if (colleges.size() > 1) {
collegeList = colleges;
}
//查某个入学年级的所有学院 //查某个入学年级的所有学院
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege); cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege);
//若无该学院则剔除 //若无该学院则剔除
List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW); List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// 在循环开始之前获取所有学院的在籍学生数量 // 在循环开始之前获取所有学院的在籍学生数量
LambdaQueryWrapper<Cet4_major> allStudentQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet4_major> 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<Map<String, Object>> allStudentList = cet4_majorMapper.selectMaps(allStudentQW); List<Map<String, Object>> allStudentList = cet4_majorMapper.selectMaps(allStudentQW);
Map<String, Long> allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting())); Map<String, Long> allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting()));
// 在循环开始之前获取所有批次的数据 // 在循环开始之前获取所有批次的数据
LambdaQueryWrapper<Cet_4> allBatchQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> 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<Map<String, Object>> allBatchList = cet4Mapper.selectMaps(allBatchQW); List<Map<String, Object>> allBatchList = cet4Mapper.selectMaps(allBatchQW);
Map<String, List<Map<String, Object>>> allBatchMap = allBatchList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"))); Map<String, List<Map<String, Object>>> allBatchMap = allBatchList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college")));
@ -220,22 +238,25 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数 //每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent; double passRate = passNumber / (double) allStudent;
passRate = passRate * 100;
//保留三位小数 //保留三位小数
DecimalFormat df = new DecimalFormat("#.###"); DecimalFormat df = new DecimalFormat("#.#");
json.put("college", collegeName); json.put("college", collegeName);
json.put("passRate", df.format(passRate)); json.put("passRate", df.format(passRate));
// System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate); // System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate);
ans.add(json); ans.add(json);
} }
} }
} else { } else {
//获取该学院的所有专业 //获取该学院的所有专业
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> 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<Object> majorList = cet4Mapper.selectObjs(collegeQueryWrapper); List<Object> majorList = cet4Mapper.selectObjs(collegeQueryWrapper);
//查某个学院的所有专业 //查某个学院的所有专业
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet4_major> 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<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW); List<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// System.out.println("专业:" + majorList); // System.out.println("专业:" + majorList);
@ -247,12 +268,12 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
Map<String, Integer> attendMap4 = new HashMap<>(); Map<String, Integer> attendMap4 = new HashMap<>();
//获取该专业的在籍学生 //获取该专业的在籍学生
Cet4_majorQW.clear(); 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); allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
//一次性获取所有批次的数据 //一次性获取所有批次的数据
Cet_4QW.clear(); // 清空查询条件以便重新设置 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<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW); List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
for (Map<String, Object> map : Cet_4eEntrydate) { for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id"); String str = (String) map.get("id");
@ -268,17 +289,19 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count(); int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数 //每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent; double passRate = passNumber / (double) allStudent;
passRate = passRate * 100;
//保留三位小数 //保留三位小数
DecimalFormat df = new DecimalFormat("#.###"); DecimalFormat df = new DecimalFormat("#.#");
json.put("college", majorName); json.put("college", majorName);
json.put("passRate", df.format(passRate)); json.put("passRate", df.format(passRate));
// System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率:" + df.format(passRate)); // System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率:" + df.format(passRate));
ans.add(json); ans.add(json);
} }
} }
} }
JSONObject result = new JSONObject();
result.put("data", ans); result.put("data", ans);
return Result.ok(result); return Result.ok(result);
} }