forked from Big-Data-Lab/CET-cmd-2.0
根据批次获得年级数据
This commit is contained in:
parent
73b1c89ecd
commit
d09c8e13d8
|
@ -79,7 +79,7 @@ public class CenterController {
|
|||
@PostMapping("/getAllRate")
|
||||
@Cacheable(value = "getAllRate", key = "'getAllRate' + #webData")
|
||||
public Result<JSONObject> 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<JSONObject> getRateByCollege(@RequestBody JSONObject webData){
|
||||
public Result<JSONObject> getRateByCollege(@RequestBody JSONObject webData) {
|
||||
return cet4Service.getRateByCollege(webData);
|
||||
}
|
||||
|
||||
@GetMapping("/getRateByAllBatch")
|
||||
// @Cacheable(value = "getRateByAllBatch", key = "'getRateByAllBatch' + #college+#major+#level")
|
||||
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) {
|
||||
// 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<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;
|
||||
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;
|
||||
}
|
||||
|
||||
@PostMapping("/getRateByMajor")
|
||||
public Result<JSONObject> getRateByMajor(@RequestBody JSONObject webData){
|
||||
return cet4Service.getRateByMajor(webData);
|
||||
public Result<JSONObject> getRateByMajor(@RequestBody JSONObject webData) {
|
||||
return cet4Service.getRateByMajor(webData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param getRateByMajorAndLastestBatchParam
|
||||
* @return {@link Result }<{@link JSONObject }>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计四级表和六级表中存在的批次
|
||||
*/
|
||||
|
@ -186,7 +202,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
|
|||
@Override
|
||||
public Result<JSONObject> 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<Cet_4Mapper, Cet_4> 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<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
|
||||
|
@ -329,7 +345,7 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> 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<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;
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
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("#.#");
|
||||
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);
|
||||
}
|
||||
|
||||
queryWrapper.ge(Cet_4::getResult, 425);
|
||||
List<Cet_4> 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<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);
|
||||
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
//获取学院的人数
|
||||
|
|
Loading…
Reference in New Issue