新增根据专业查询接口

This commit is contained in:
xbx 2024-04-22 19:54:54 +08:00
parent 324cb24be3
commit 8483abbd0b
1 changed files with 115 additions and 49 deletions

View File

@ -318,8 +318,7 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
@Override @Override
public Result<JSONObject> getRateByMajor(JSONObject webData) { public Result<JSONObject> getRateByMajor(JSONObject webData) {
//通过学院和专业获取数据 //通过学院和专业获取数据
JSONArray colleges = webData.getJSONArray("college"); JSONArray collegeMajors = webData.getJSONArray("college");
JSONArray majors = webData.getJSONArray("major");
JSONArray entryDateArray = webData.getJSONArray("entrydate"); JSONArray entryDateArray = webData.getJSONArray("entrydate");
//获取所有batch //获取所有batch
JSONObject batch = centerService.getBatch(); JSONObject batch = centerService.getBatch();
@ -331,62 +330,129 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
} }
JSONObject ans = new JSONObject(); JSONObject ans = new JSONObject();
//遍历每个学院的专业 //遍历每个学院的专业
for (int j = 0; j < colleges.size(); j++) { for (int j = 0; j < collegeMajors.size(); j++) {
//获取该学院专业的所有在籍学生 //获取该学院专业的所有在籍学生
long allStudent = 0; long allStudent;
JSONArray majorAns = new JSONArray(); JSONArray colleges = collegeMajors.getJSONArray(j);
//遍历每个年级 //若数组长度为1则为学院
for (Object entryDate : entryDateArray) { if (colleges.size() == 1) {
//根据entrydate转换为入学年份之后的八次list //只有学院则查询所有专业
List<String> batchList = new ArrayList<>(); LambdaQueryWrapper<Cet4_major> collegeQueryWrapper = new LambdaQueryWrapper<>();
for (String s : batchs) { collegeQueryWrapper.eq(Cet4_major::getCollege, colleges.get(0)).select(Cet4_major::getMajorname).groupBy(Cet4_major::getMajorname);
if (batchList.size() >= 8) { List<Object> majorList = cet4_MajorMapper.selectObjs(collegeQueryWrapper);
break; //遍历该学院所有专业
for (Object major : majorList) {
JSONArray ansArray = new JSONArray();
//遍历每个年级
for (Object entryDate : entryDateArray) {
//根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>();
for (String s : batchs) {
if (batchList.size() >= 8) {
break;
}
String value = s;
//获取入学年份之后的批次
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);
}
}
}
//每个批次获取数据
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
//获取全部在籍学生
LambdaQueryWrapper<Cet4_major> Cet4_majorQW = new LambdaQueryWrapper<>();
Cet4_majorQW.eq(Cet4_major::getCollege, colleges.get(0)).eq(Cet4_major::getMajorname, major).eq(Cet4_major::getEntrydate, entryDate);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
//所有参加过四级考试的学生
Map<String, Integer> attendMap4 = new HashMap<>();
//一次性获取所有批次的数据
Cet_4QW.eq(Cet_4::getCollege, colleges.get(0)).eq(Cet_4::getMajorname, major).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) {
String str = (String) map.get("id");
if ((int) map.get("result") >= 425) {
attendMap4.put(str, 1);
} else {
if (!attendMap4.containsKey(str)) {//排除已经通过的人
attendMap4.put(str, 0);
}
}
}
//累计通过的人数
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent;
passRate = passRate * 100;
//保留三位小数
DecimalFormat df = new DecimalFormat("#.#");
JSONObject json = new JSONObject();
json.put("entryDate", entryDate);
json.put("passRate", df.format(passRate));
ansArray.add(json);
} }
String value = s; ans.put((String) major, ansArray);
//获取入学年份之后的批次 }
if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt((String) entryDate)) { } else {
batchList.add(value); //若数组长度为2则为学院+专业
} else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt((String) entryDate)) { Object major = colleges.get(1);
if (Integer.parseInt(value.substring(5, 7)) > 9) { JSONArray ansArray = new JSONArray();
//遍历每个年级
for (Object entryDate : entryDateArray) {
//根据entrydate转换为入学年份之后的八次list
List<String> batchList = new ArrayList<>();
for (String s : batchs) {
if (batchList.size() >= 8) {
break;
}
String value = s;
//获取入学年份之后的批次
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);
}
} }
} }
} //每个批次获取数据
//每个批次获取数据 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<>(); Cet4_majorQW.eq(Cet4_major::getCollege, colleges.get(0)).eq(Cet4_major::getMajorname, major).eq(Cet4_major::getEntrydate, entryDate);
Cet4_majorQW.eq(Cet4_major::getCollege, colleges.get(j)).eq(Cet4_major::getMajorname, majors.get(j)).eq(Cet4_major::getEntrydate, entryDate); allStudent = cet4_majorMapper.selectCount(Cet4_majorQW);
allStudent = cet4_majorMapper.selectCount(Cet4_majorQW); //所有参加过四级考试的学生
//所有参加过四级考试的学生 Map<String, Integer> attendMap4 = new HashMap<>();
Map<String, Integer> attendMap4 = new HashMap<>(); //一次性获取所有批次的数据
//一次性获取所有批次的数据 Cet_4QW.eq(Cet_4::getCollege, colleges.get(0)).eq(Cet_4::getMajorname, major).eq(Cet_4::getEntrydate, entryDate).in(Cet_4::getBatch, batchList);
Cet_4QW.eq(Cet_4::getCollege, colleges.get(j)).eq(Cet_4::getMajorname, majors.get(j)).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();
//每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent;
passRate = passRate * 100;
//保留三位小数
DecimalFormat df = new DecimalFormat("#.#");
JSONObject json = new JSONObject();
json.put("entryDate", entryDate);
json.put("passRate", df.format(passRate));
ansArray.add(json);
} }
//累计通过的人数 ans.put((String) major, ansArray);
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个年级的累计通过率保留三位小数
double passRate = passNumber / (double) allStudent;
passRate = passRate * 100;
//保留三位小数
DecimalFormat df = new DecimalFormat("#.#");
JSONObject json = new JSONObject();
json.put("entryDate", entryDate);
json.put("passRate", df.format(passRate));
majorAns.add(json);
} }
ans.put((String) majors.get(j), majorAns);
} }
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("data", ans); result.put("data", ans);