四级可视化分析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 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<JSONObject> getRateByBatch(@RequestParam("college") String college, @RequestParam("entrydate") String entrydate, @RequestParam("level") String level) {
@PostMapping("/getRateByCollege")
public Result<JSONObject> 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<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);
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<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")
public Result<JSONObject> getTest() {
return centerService.getTest();

View File

@ -13,7 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @Version: V1.0
*/
public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByCollege(String college,String major);
Result<JSONObject> getRateByBatch(String college, String entrydate);
Result<JSONObject> getRateByAllBatch(String college, String major);
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 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<Cet_4Mapper, Cet_4> implements
@Resource
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<>());
//select count(*) from cet_4 where college ='?' and result>=425
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 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<Cet_4Mapper, Cet_4> implements
return Result.OK(jsonObject);
}
// public Result<JSONObject> 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<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
// //构造查询条件
// Map<String, List<Cet_4>> collect = new HashMap<>();
// //根据批次查人数
// if (college.equals("全校")) {
// queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
// List<Cet_4> 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<Cet_4> result = cet4Mapper.selectList(queryWrapper);
// collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname));
// }
//// System.out.println(collect);
//// 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()) {
// double sum;
// if (college.equals("全校")) {
// sum = (double) getNumCollege(entry.getKey(), batch);
// } else {
// //查某个学院的所有专业
// LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
// cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname);
// //若为转专业的则剔除
// List<Object> 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<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet());
// Collections.sort(list, (o1, o2) -> (double) o1.getValue() > (double) o2.getValue() ? -1 : 1);
// jsonObject.clear();
//
// for (Map.Entry<String, Object> stringObjectEntry : list) {
// jsonObject.put(stringObjectEntry.getKey(), stringObjectEntry.getValue());
//
// }
// return Result.OK(jsonObject);
// }
public Result<JSONObject> getRateByBatch(String college, String entryDate) {
@Override
public Result<JSONObject> 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<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
//构造查询条件
Map<String, List<Cet_4>> collect;
//根据批次查人数
if (college.equals("全校")) {
queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
List<Cet_4> 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<Cet_4> result = cet4Mapper.selectList(queryWrapper);
collect = result.stream().collect(Collectors.groupingBy(Cet_4::getMajorname));
}
// System.out.println(collect);
// 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()) {
double sum;
if (college.equals("全校")) {
sum = (double) getNumCollege(entry.getKey(), batch);
} else {
//查某个学院的所有专业
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getMajorname).eq(Cet4_major::getCollege, college).groupBy(Cet4_major::getMajorname);
//若为转专业的则剔除
List<Object> 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<Map.Entry<String, Object>> 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<String, Object> stringObjectEntry : list) {
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
JSONObject batch = centerService.getBatch();
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<>();
///学院/专业的全部在籍学生
long allStudent = 0;
JSONObject result = new JSONObject();
JSONArray ans = new JSONArray();
//如果是全校获取每个学院的数据
if (college.equals("全校")) {
if (colleges.size() > 1 || colleges.get(0).equals("全校")) {
//获取所有学院列表
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper);
if (colleges.size() > 1) {
collegeList = colleges;
}
//查某个入学年级的所有学院
LambdaQueryWrapper<Cet4_major> cet4MajorQW = new LambdaQueryWrapper<>();
cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege);
//若无该学院则剔除
List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// 在循环开始之前获取所有学院的在籍学生数量
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);
Map<String, Long> allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting()));
// 在循环开始之前获取所有批次的数据
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);
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();
//每个年级的累计通过率保留三位小数
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<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);
//查某个学院的所有专业
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);
// 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<>();
//获取该专业的在籍学生
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<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
for (Map<String, Object> map : Cet_4eEntrydate) {
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();
//每个年级的累计通过率保留三位小数
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);
}