根据批次获得年级数据

This commit is contained in:
Cool 2024-10-17 17:30:26 +08:00
parent 73b1c89ecd
commit d09c8e13d8
5 changed files with 115 additions and 81 deletions

View File

@ -92,6 +92,7 @@ public class CenterController {
return null;
}
}
@PostMapping("/getRateByCollege")
public Result<JSONObject> getRateByCollege(@RequestBody JSONObject webData) {
return cet4Service.getRateByCollege(webData);
@ -126,6 +127,7 @@ public class CenterController {
}
/**
* @param getRateByMajorAndLastestBatchParam
* @return {@link Result }<{@link JSONObject }>

View File

@ -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<Cet_4> {
Result<JSONObject> getData(String college,String major, String entryDate);
Result<JSONObject> getTest();
Result<JSONObject> getCollegeMajor();
List<String> getEntryDateByBatch(Date batch);
}

View File

@ -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<Cet_4> {
Result<JSONObject> getRateByMajor(JSONObject webData);
Result<JSONObject> getDataByStudent(JSONObject jsonObject);
JSONObject getGradeByBatch(Date batch,String college);
boolean cleanData();
Result<JSONObject> getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam);

View File

@ -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<Cet_4Mapper, Cet_4> implement
return Result.ok(result);
}
@Override
public List<String> getEntryDateByBatch(Date batch) {
List<String> 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;
}
/**
* 统计四级表和六级表中存在的批次
*/
@ -390,30 +406,4 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
}
// @Override
// public Result<JSONObject> getTest() {
// //去除不在学籍表中的学生
// LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
// Cet4_majorQW.select(Cet4_major::getId);
// List<Object> list = cet4_majorMapper.selectObjs(Cet4_majorQW);
// System.out.println("所有符合的学号:"+list.size());//所有符合的学号
// LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
// Cet_4QW.select(Cet_4::getId);
// List<Object> list1 = cet4Mapper.selectObjs(Cet_4QW);
// System.out.println("所有参加过四级考试的学生:"+list1.size());//所有参加过四级考试的学生
// //删除所有参加过四级考试的学生中不符合的学号
// List<Object> 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;
// }
}

View File

@ -95,50 +95,47 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
@Override
public Result<JSONObject> 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<String> trueEntryDate = centerService.getEntryDateByBatch(batch);
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
JSONObject resultData = new JSONObject();
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
//构造查询条件
Map<String, List<Cet_4>> collect;
queryWrapper.eq(Cet_4::getBatch, batch).eq(!college.equals("全校"), Cet_4::getCollege, college);
List<Cet_4> allStudentList = list(queryWrapper);
//根据批次查人数
if (college.equals("全校")) {
queryWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425);
queryWrapper.ge(Cet_4::getResult, 425);
List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
collect = result.stream().collect(Collectors.groupingBy(Cet_4::getCollege));
//获取全校人数
long allStudent = getNumAll(batch);
//获取全校通过人数
LambdaQueryWrapper<Cet_4> 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("#.#");
// 过滤除去错误的数据
allStudentList = allStudentList.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.toList());
long allStudent = allStudentList.size();
//获取通过人数
LambdaQueryWrapper<Cet_4> passWrapper = new LambdaQueryWrapper<>();
passWrapper.eq(Cet_4::getBatch, batch).ge(Cet_4::getResult, 425).eq(!college.equals("全校"), Cet_4::getCollege, college);
List<Cet_4> 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);
} 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));
//获取学院人数
long allStudent = getNumCollege(college, batch);
//获取学院通过人数
LambdaQueryWrapper<Cet_4> 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);
}
// System.out.println(collect);
// List<Cet_4> result = cet4Mapper.selectList(queryWrapper);
//通过批次
@ -162,10 +159,9 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> 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<Map.Entry<String, Object>> list = new ArrayList<>(jsonObject.entrySet());
@ -174,7 +170,9 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
for (Map.Entry<String, Object> 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<Cet_4Mapper, Cet_4> implements
return Result.ok(result);
}
@Override
public JSONObject getGradeByBatch(Date batch,String college) {
//根据批次获取正确的年级
List<String> trueEntryDate = centerService.getEntryDateByBatch(batch);
LambdaQueryWrapper<Cet_4> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(!college.equals("全校"),Cet_4::getCollege,college)
.eq(Cet_4::getBatch, batch);
List<Cet_4> allStudent = list(wrapper);
wrapper.ge(Cet_4::getResult, 425);
List<Cet_4> allPassStudent = list(wrapper);
//所有参加该批次四级的学生根据年级分组
Map<String, Long> gradeStudentCount = allStudent.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.groupingBy(Cet_4::getEntrydate, Collectors.counting()));
//所有参加该批次四级且通过的学生根据年级分组
Map<String, Long> allPassStudentCount = allPassStudent.stream().filter(e -> trueEntryDate.contains(e.getEntrydate())).collect(Collectors.groupingBy(Cet_4::getEntrydate, Collectors.counting()));
Set<String> 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<Cet_4> getNumAll(Date batch) {
LambdaQueryWrapper<Cet_4> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Cet_4::getBatch, batch);
return cet4Mapper.selectCount(queryWrapper);
return list(queryWrapper);
}
//获取学院的人数