学院对比查询待完善

This commit is contained in:
Cool 2024-04-23 16:45:14 +08:00
parent 7b45bb819a
commit 9f24ffb871
3 changed files with 87 additions and 29 deletions

View File

@ -11,8 +11,6 @@ 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.util.Collections;
import java.util.List;
@RestController @RestController
@RequestMapping("/cet") @RequestMapping("/cet")
@ -66,15 +64,15 @@ public class CenterController {
return centerService.getData(college, major, entrydate); return centerService.getData(college, major, entrydate);
} }
@PostMapping("/getRateByCollege") @PostMapping("/getAllRate")
public Result<JSONObject> getRateByCollege(@RequestBody JSONObject webData) { public Result<JSONObject> getAllRate(@RequestBody JSONObject webData) {
String level= webData.getString("level"); String level= webData.getString("level");
//四六级分开查询 //四六级分开查询
if (level.equals("cet4")) { if (level.equals("cet4")) {
return cet4Service.getRateByCollege(webData); return cet4Service.getAllRate(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);
@ -83,7 +81,10 @@ public class CenterController {
return null; return null;
} }
} }
@PostMapping("/getRateByCollege")
public Result<JSONObject> getRateByCollege(@RequestBody JSONObject webData){
return cet4Service.getRateByCollege(webData);
}
@GetMapping("/getRateByAllBatch") @GetMapping("/getRateByAllBatch")
public Result<JSONObject> getRateByAllBatch(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) { public Result<JSONObject> getRateByAllBatch(@RequestParam("college") String college,@RequestParam("major") String major, @RequestParam("level") String level) {

View File

@ -17,6 +17,8 @@ public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByBatch(String college, String batchStr); Result<JSONObject> getRateByBatch(String college, String batchStr);
Result<JSONObject> getAllRate(JSONObject webData);
Result<JSONObject> getRateByCollege(JSONObject webData); Result<JSONObject> getRateByCollege(JSONObject webData);
Result<JSONObject> getRateByMajor(JSONObject webData); Result<JSONObject> getRateByMajor(JSONObject webData);

View File

@ -149,7 +149,7 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
} }
@Override @Override
public Result<JSONObject> getRateByCollege(JSONObject webData) { public Result<JSONObject> getAllRate(JSONObject webData) {
JSONArray colleges = webData.getJSONArray("college"); JSONArray colleges = webData.getJSONArray("college");
JSONArray entryDateArray = webData.getJSONArray("entrydate"); JSONArray entryDateArray = webData.getJSONArray("entrydate");
//获取所有batch //获取所有batch
@ -257,33 +257,87 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
double passRate2 = Double.parseDouble(json2.getString("passRate")); double passRate2 = Double.parseDouble(json2.getString("passRate"));
return passRate1 > passRate2 ? -1 : 1; return passRate1 > passRate2 ? -1 : 1;
}); });
} else { }
oneEntryDate.put((String) entryDate, ans);
}
result.put("data", oneEntryDate);
return Result.ok(result);
}
//获取该学院的所有专业 @Override
public Result<JSONObject> getRateByCollege(JSONObject webData){
JSONArray colleges = webData.getJSONArray("college");
JSONArray entryDateArray = webData.getJSONArray("entrydate");
//获取所有batch
JSONObject batch = centerService.getBatch();
JSONArray batchsArray = batch.getJSONArray("batches");
//转换为String数组
String[] batchs = new String[batchsArray.size()];
for (int i = 0; i < batchsArray.size(); i++) {
batchs[i] = batchsArray.getJSONObject(i).getString("value");
}
JSONObject result = new JSONObject();
JSONObject oneEntryDate = new JSONObject();
//遍历每个年级
for (Object entryDate : entryDateArray) {
//根据entrydate转换为入学年份之后的八次list
List<String> 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);
}
}
}
///学院/专业的全部在籍学生
long allStudent = 0;
JSONArray ans = new JSONArray();
//获取所有学院列表
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
collegeQueryWrapper.eq(Cet_4::getCollege, colleges.get(0)).select(Cet_4::getMajorname).groupBy(Cet_4::getMajorname); collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
List<Object> majorList = 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::getMajorname).eq(Cet4_major::getCollege, colleges.get(0)).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname); cet4MajorQW.select(Cet4_major::getCollege).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getCollege);
//若为转专业的则剔除
List<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
// System.out.println("专业:" + majorList);
//对于每个专业获取数据 //若无该学院则剔除
for (Object majorName : majorList) { List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
if (majorSet.contains(majorName)) {
// 在循环开始之前获取所有学院的在籍学生数量
LambdaQueryWrapper<Cet4_major> allStudentQW = new LambdaQueryWrapper<>();
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);
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")));
//对于每个学院获取数据
for (Object collegeName : collegeList) {
if (collegeSet.contains(collegeName)) {
//所有参加过四级考试的学生 //所有参加过四级考试的学生
Map<String, Integer> attendMap4 = new HashMap<>(); Map<String, Integer> attendMap4 = new HashMap<>();
//获取该专业的在籍学生 //获取该学院在籍学生数量
Cet4_majorQW.clear(); allStudent = allStudentMap.getOrDefault(collegeName, 0L);
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(); JSONObject json = new JSONObject();
//一次性获取所有批次的数据 //一次性获取所有批次的数据
Cet_4QW.clear(); // 清空查询条件以便重新设置 List<Map<String, Object>> Cet_4eEntrydate = allBatchMap.get(collegeName);
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) { for (Map<String, Object> map : Cet_4eEntrydate) {
String str = (String) map.get("id"); String str = (String) map.get("id");
if ((int) map.get("result") >= 425) { if ((int) map.get("result") >= 425) {
@ -301,18 +355,18 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
passRate = passRate * 100; passRate = passRate * 100;
//保留三位小数 //保留三位小数
DecimalFormat df = new DecimalFormat("#.#"); DecimalFormat df = new DecimalFormat("#.#");
json.put("college", majorName); json.put("college", collegeName);
json.put("passRate", df.format(passRate)); json.put("passRate", df.format(passRate));
// System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率" + df.format(passRate)); // System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate);
ans.add(json); ans.add(json);
} }
} }
}
oneEntryDate.put((String) entryDate, ans); oneEntryDate.put((String) entryDate, ans);
} }
result.put("data", oneEntryDate); result.put("data", oneEntryDate);
return Result.ok(result); return Result.ok(result);
} }
@Override @Override
@ -331,6 +385,7 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
JSONObject ans = new JSONObject(); JSONObject ans = new JSONObject();
//遍历每个学院的专业 //遍历每个学院的专业
for (int j = 0; j < collegeMajors.size(); j++) { for (int j = 0; j < collegeMajors.size(); j++) {
System.out.println(collegeMajors.get(j));
//获取该学院专业的所有在籍学生 //获取该学院专业的所有在籍学生
long allStudent; long allStudent;
JSONArray colleges = collegeMajors.getJSONArray(j); JSONArray colleges = collegeMajors.getJSONArray(j);