forked from Big-Data-Lab/CET-cmd-2.0
根据批次获得年级数据
This commit is contained in:
parent
73b1c89ecd
commit
d09c8e13d8
|
@ -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 }>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计四级表和六级表中存在的批次
|
||||
*/
|
||||
|
@ -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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
//获取学院的人数
|
||||
|
|
Loading…
Reference in New Issue