添加学院/专业对比年级多选功能
This commit is contained in:
parent
c965397ebf
commit
9047390717
|
@ -152,7 +152,8 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
|
||||||
public Result<JSONObject> getRateByCollege(JSONObject webData) {
|
public Result<JSONObject> getRateByCollege(JSONObject webData) {
|
||||||
JSONArray colleges = webData.getJSONArray("college");
|
JSONArray colleges = webData.getJSONArray("college");
|
||||||
|
|
||||||
String entryDate = webData.getString("entrydate");
|
JSONArray entryDateArray = webData.getJSONArray("entrydate");
|
||||||
|
|
||||||
//获取所有batch
|
//获取所有batch
|
||||||
JSONObject batch = centerService.getBatch();
|
JSONObject batch = centerService.getBatch();
|
||||||
JSONArray batchsArray = batch.getJSONArray("batches");
|
JSONArray batchsArray = batch.getJSONArray("batches");
|
||||||
|
@ -161,147 +162,152 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
|
||||||
for (int i = 0; i < batchsArray.size(); i++) {
|
for (int i = 0; i < batchsArray.size(); i++) {
|
||||||
batchs[i] = batchsArray.getJSONObject(i).getString("value");
|
batchs[i] = batchsArray.getJSONObject(i).getString("value");
|
||||||
}
|
}
|
||||||
//根据entrydate转换为入学年份之后的八次list
|
JSONObject result = new JSONObject();
|
||||||
List<String> batchList = new ArrayList<>();
|
JSONObject oneEntryDate = new JSONObject();
|
||||||
for (int i = 0; i < batchs.length; i++) {
|
|
||||||
if (batchList.size() >= 8) {
|
for (Object entryDate : entryDateArray) {
|
||||||
break;
|
|
||||||
}
|
//根据entrydate转换为入学年份之后的八次list
|
||||||
String value = batchs[i];
|
List<String> batchList = new ArrayList<>();
|
||||||
//获取入学年份之后的批次
|
for (int i = 0; i < batchs.length; i++) {
|
||||||
if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt(entryDate)) {
|
if (batchList.size() >= 8) {
|
||||||
batchList.add(value);
|
break;
|
||||||
} else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt(entryDate)) {
|
}
|
||||||
if (Integer.parseInt(value.substring(5, 7)) > 9) {
|
String value = batchs[i];
|
||||||
|
//获取入学年份之后的批次
|
||||||
|
if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt((String) entryDate)) {
|
||||||
batchList.add(value);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
int n = batchList.size();//批次数
|
||||||
int n = batchList.size();//批次数
|
//每个批次获取数据
|
||||||
//每个批次获取数据
|
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
|
||||||
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
|
//获取全部在籍学生
|
||||||
//获取全部在籍学生
|
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
|
||||||
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
|
///学院/专业的全部在籍学生
|
||||||
///学院/专业的全部在籍学生
|
long allStudent = 0;
|
||||||
long allStudent = 0;
|
JSONArray ans = new JSONArray();
|
||||||
JSONObject result = new JSONObject();
|
//如果是全校,获取每个学院的数据
|
||||||
JSONArray ans = new JSONArray();
|
if (colleges.size() > 1 || colleges.get(0).equals("全校")) {
|
||||||
//如果是全校,获取每个学院的数据
|
//获取所有学院列表
|
||||||
if (colleges.size() > 1 || colleges.get(0).equals("全校")) {
|
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
//获取所有学院列表
|
collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
|
||||||
LambdaQueryWrapper<Cet_4> collegeQueryWrapper = new LambdaQueryWrapper<>();
|
List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper);
|
||||||
collegeQueryWrapper.select(Cet_4::getCollege).groupBy(Cet_4::getCollege);
|
if (colleges.size() > 1) {
|
||||||
List<Object> collegeList = cet4Mapper.selectObjs(collegeQueryWrapper);
|
collegeList = colleges;
|
||||||
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);
|
||||||
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);
|
List<Object> collegeSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
|
||||||
|
|
||||||
// 在循环开始之前,获取所有学院的在籍学生数量
|
// 在循环开始之前,获取所有学院的在籍学生数量
|
||||||
LambdaQueryWrapper<Cet4_major> allStudentQW = new LambdaQueryWrapper<>();
|
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);
|
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()));
|
Map<String, Long> allStudentMap = allStudentList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college"), Collectors.counting()));
|
||||||
|
|
||||||
// 在循环开始之前,获取所有批次的数据
|
// 在循环开始之前,获取所有批次的数据
|
||||||
LambdaQueryWrapper<Cet_4> allBatchQW = new LambdaQueryWrapper<>();
|
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);
|
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")));
|
Map<String, List<Map<String, Object>>> allBatchMap = allBatchList.stream().collect(Collectors.groupingBy(map -> (String) map.get("college")));
|
||||||
|
|
||||||
//对于每个学院,获取数据
|
//对于每个学院,获取数据
|
||||||
for (Object collegeName : collegeList) {
|
for (Object collegeName : collegeList) {
|
||||||
if (collegeSet.contains(collegeName)) {
|
if (collegeSet.contains(collegeName)) {
|
||||||
//所有参加过四级考试的学生
|
//所有参加过四级考试的学生
|
||||||
Map<String, Integer> attendMap4 = new HashMap<>();
|
Map<String, Integer> attendMap4 = new HashMap<>();
|
||||||
//获取该学院在籍学生数量
|
//获取该学院在籍学生数量
|
||||||
allStudent = allStudentMap.getOrDefault(collegeName, 0L);
|
allStudent = allStudentMap.getOrDefault(collegeName, 0L);
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
//一次性获取所有批次的数据
|
//一次性获取所有批次的数据
|
||||||
List<Map<String, Object>> Cet_4eEntrydate = allBatchMap.get(collegeName);
|
List<Map<String, Object>> Cet_4eEntrydate = allBatchMap.get(collegeName);
|
||||||
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) {
|
||||||
attendMap4.put(str, 1);
|
attendMap4.put(str, 1);
|
||||||
} else {
|
} else {
|
||||||
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
||||||
attendMap4.put(str, 0);
|
attendMap4.put(str, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//累计通过的人数
|
||||||
//累计通过的人数
|
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
||||||
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
//每个年级的累计通过率保留三位小数
|
||||||
//每个年级的累计通过率保留三位小数
|
double passRate = passNumber / (double) allStudent;
|
||||||
double passRate = passNumber / (double) allStudent;
|
passRate = passRate * 100;
|
||||||
passRate = passRate * 100;
|
//保留三位小数
|
||||||
//保留三位小数
|
DecimalFormat df = new DecimalFormat("#.#");
|
||||||
DecimalFormat df = new DecimalFormat("#.#");
|
json.put("college", collegeName);
|
||||||
json.put("college", collegeName);
|
json.put("passRate", df.format(passRate));
|
||||||
json.put("passRate", df.format(passRate));
|
|
||||||
// System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate);
|
// System.out.println("学院:" + collegeName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ", 通过率" + passRate);
|
||||||
ans.add(json);
|
ans.add(json);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
|
||||||
|
|
||||||
//获取该学院的所有专业
|
//获取该学院的所有专业
|
||||||
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.eq(Cet_4::getCollege, colleges.get(0)).select(Cet_4::getMajorname).groupBy(Cet_4::getMajorname);
|
||||||
List<Object> majorList = cet4Mapper.selectObjs(collegeQueryWrapper);
|
List<Object> majorList = cet4Mapper.selectObjs(collegeQueryWrapper);
|
||||||
//查某个学院的所有专业
|
//查某个学院的所有专业
|
||||||
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::getMajorname).eq(Cet4_major::getCollege, colleges.get(0)).eq(Cet4_major::getEntrydate, entryDate).groupBy(Cet4_major::getMajorname);
|
||||||
//若为转专业的则剔除
|
//若为转专业的则剔除
|
||||||
List<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
|
List<Object> majorSet = cet4_MajorMapper.selectObjs(cet4MajorQW);
|
||||||
// System.out.println("专业:" + majorList);
|
// System.out.println("专业:" + majorList);
|
||||||
|
|
||||||
//对于每个专业,获取数据
|
//对于每个专业,获取数据
|
||||||
for (Object majorName : majorList) {
|
for (Object majorName : majorList) {
|
||||||
if (majorSet.contains(majorName)) {
|
if (majorSet.contains(majorName)) {
|
||||||
//所有参加过四级考试的学生
|
//所有参加过四级考试的学生
|
||||||
Map<String, Integer> attendMap4 = new HashMap<>();
|
Map<String, Integer> attendMap4 = new HashMap<>();
|
||||||
//获取该专业的在籍学生
|
//获取该专业的在籍学生
|
||||||
Cet4_majorQW.clear();
|
Cet4_majorQW.clear();
|
||||||
Cet4_majorQW.select(Cet4_major::getId).eq(Cet4_major::getCollege, colleges.get(0)).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);
|
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
//一次性获取所有批次的数据
|
//一次性获取所有批次的数据
|
||||||
Cet_4QW.clear(); // 清空查询条件,以便重新设置
|
Cet_4QW.clear(); // 清空查询条件,以便重新设置
|
||||||
Cet_4QW.eq(Cet_4::getCollege, colleges.get(0)).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);
|
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) {
|
||||||
attendMap4.put(str, 1);
|
attendMap4.put(str, 1);
|
||||||
} else {
|
} else {
|
||||||
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
||||||
attendMap4.put(str, 0);
|
attendMap4.put(str, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//累计通过的人数
|
||||||
//累计通过的人数
|
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
||||||
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
//每个年级的累计通过率保留三位小数
|
||||||
//每个年级的累计通过率保留三位小数
|
double passRate = passNumber / (double) allStudent;
|
||||||
double passRate = passNumber / (double) allStudent;
|
passRate = passRate * 100;
|
||||||
passRate = passRate * 100;
|
//保留三位小数
|
||||||
//保留三位小数
|
DecimalFormat df = new DecimalFormat("#.#");
|
||||||
DecimalFormat df = new DecimalFormat("#.#");
|
json.put("college", majorName);
|
||||||
json.put("college", majorName);
|
json.put("passRate", df.format(passRate));
|
||||||
json.put("passRate", df.format(passRate));
|
|
||||||
// System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率:" + df.format(passRate));
|
// System.out.println("专业:" + majorName + ",累计通过人数:" + passNumber + ",总人数:" + allStudent + ",通过率:" + df.format(passRate));
|
||||||
ans.add(json);
|
ans.add(json);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
oneEntryDate.put((String) entryDate, ans);
|
||||||
}
|
}
|
||||||
result.put("data", ans);
|
result.put("data", oneEntryDate);
|
||||||
|
|
||||||
return Result.ok(result);
|
return Result.ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue