首页四级查询2.0

This commit is contained in:
xbx 2024-03-27 19:51:14 +08:00
parent e21811d501
commit a970d04f90
1 changed files with 72 additions and 47 deletions

View File

@ -29,7 +29,6 @@ public class CenterServiceImpl implements CenterService {
private Cet_4Mapper cet4Mapper; private Cet_4Mapper cet4Mapper;
@Resource @Resource
private Cet_6Mapper cet6Mapper; private Cet_6Mapper cet6Mapper;
@Resource @Resource
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@ -87,7 +86,7 @@ public class CenterServiceImpl implements CenterService {
List<Map<String, Object>> Cet_4Batch = cet4Mapper.selectMaps(Cet_4BatchQW); List<Map<String, Object>> Cet_4Batch = cet4Mapper.selectMaps(Cet_4BatchQW);
// 收集不重复的批次 // 收集不重复的批次
Set<String> batchSet = new TreeSet<>(Comparator.naturalOrder()); Set<String> batchSet = new TreeSet<>(Comparator.naturalOrder());
for (Map<String, Object> map : Cet_4Batch) { for (Map<String, Object> map : Cet_4Batch) {
batchSet.add(String.valueOf(map.get("batch"))); batchSet.add(String.valueOf(map.get("batch")));
} }
@ -121,7 +120,7 @@ public class CenterServiceImpl implements CenterService {
.groupBy(Cet_4::getEntrydate); .groupBy(Cet_4::getEntrydate);
List<Map<String, Object>> Cet_4Entrydate = cet4Mapper.selectMaps(Cet_4EntrydateQW); List<Map<String, Object>> Cet_4Entrydate = cet4Mapper.selectMaps(Cet_4EntrydateQW);
// 收集不重复的年级 // 收集不重复的年级
Set<String> entrydateSet = new TreeSet<>(Comparator.naturalOrder()); Set<String> entrydateSet = new TreeSet<>(Comparator.naturalOrder());
for (Map<String, Object> map : Cet_4Entrydate) { for (Map<String, Object> map : Cet_4Entrydate) {
entrydateSet.add(String.valueOf(map.get("entrydate"))); entrydateSet.add(String.valueOf(map.get("entrydate")));
} }
@ -140,24 +139,43 @@ public class CenterServiceImpl implements CenterService {
@Override @Override
public Result<JSONObject> getData(String college, String entryDate) { public Result<JSONObject> getData(String college, String entryDate) {
String[] batchs = {"2019-12-01", "2020-09-01", "2020-12-01", "2021-06-01", "2021-12-01", "2022-09-01", "2023-03-01", "2023-06-01", "2023-12-01", "2024-06-01"}; //获取所有batch
JSONObject result = new JSONObject(); String[] batchs = {"2017-12-01", "2018-06-01", "2018-12-01", "2019-06-01", "2019-12-01", "2020-09-01", "2020-12-01", "2021-06-01", "2021-12-01", "2022-09-01", "2023-03-01", "2023-06-01", "2023-12-01", "2024-06-01"};
LambdaQueryWrapper<Cet_4> Cet_4CollegeQW = new LambdaQueryWrapper<>(); //根据entrydate转换为入学年份之后的八次list
double[] passNumber4 = new double[10]; //四级新通过人数 List<String> batchList = new ArrayList<>();
double[] attendNumber4 = new double[10]; for (int i = 0; i < batchs.length; i++) {
Map<String, Integer> entryDataMap = new HashMap<>(); if (batchList.size() >= 8) {
entryDataMap.put("2019", 0); break;
entryDataMap.put("2020", 2); }
entryDataMap.put("2021", 4); String value = batchs[i];
entryDataMap.put("2022", 6); //获取入学年份之后的批次
entryDataMap.put("2023", 8); if (Integer.parseInt(value.substring(0, 4)) > Integer.parseInt(entryDate)) {
batchList.add(value);
} else if (Integer.parseInt(value.substring(0, 4)) == Integer.parseInt(entryDate)) {
if (Integer.parseInt(value.substring(5, 7)) > 9) {
batchList.add(value);
}
}
}
int n = batchList.size();//批次数
//所有参加过四级考试的学生
Map<String, Integer> attendMap4 = new HashMap<>(); Map<String, Integer> attendMap4 = new HashMap<>();
long[] mapSize4 = new long[10]; //累计通过的人数
int index4 = 0; int[] passNumber = new int[n];
for (int i = entryDataMap.get(entryDate); i < batchs.length; i++) { //每个批次参加四级考试的学生
Cet_4CollegeQW.clear(); // 清空查询条件以便重新设置 int[] attendNumber4 = new int[n];
Cet_4CollegeQW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchs[i]); //每年新通过的人数
List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4CollegeQW); int[] passNew4 = new int[n];
//每个批次获取数据
LambdaQueryWrapper<Cet_4> Cet_4QW = new LambdaQueryWrapper<>();
for (int i = 0; i < n; i++) {
Cet_4QW.clear(); // 清空查询条件以便重新设置
if (college.equals("全校")) {
Cet_4QW.eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
} else {
Cet_4QW.eq(Cet_4::getCollege, college).eq(Cet_4::getEntrydate, entryDate).eq(Cet_4::getBatch, batchList.get(i));
}
List<Map<String, Object>> Cet_4eEntrydate = cet4Mapper.selectMaps(Cet_4QW);
if (!Cet_4eEntrydate.isEmpty()) { if (!Cet_4eEntrydate.isEmpty()) {
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");
@ -169,40 +187,47 @@ public class CenterServiceImpl implements CenterService {
} }
} }
} }
mapSize4[index4] = attendMap4.values().stream().filter(value -> value == 1).count(); //累计通过的人数
passNumber[i] = (int) attendMap4.values().stream().filter(value -> value == 1).count();
//每个批次参加四级考试的学生
attendNumber4[i] = Cet_4eEntrydate.size(); attendNumber4[i] = Cet_4eEntrydate.size();
passNumber4[i] = i == entryDataMap.get(entryDate) ? mapSize4[index4] : mapSize4[index4] - mapSize4[index4 - 1]; //每批次新通过的人数注意索引超出
System.out.println("四级参加人数:" + attendMap4.size() + ",总通过人数:" + mapSize4[index4] + ",新通过人数:" + passNumber4[i]); if (i == 0) {
index4++; passNew4[i] = passNumber[i];
} else {
passNew4[i] = passNumber[i] - passNumber[i - 1];
}
} else { } else {
// 数据为空设置为0 passNumber[i] = (int) attendMap4.values().stream().filter(value -> value == 1).count();
attendNumber4[i] = 0; attendNumber4[i] = 0;
passNumber4[i] = 0; passNew4[i] = 0;
} }
//打印
System.out.println("每个批次参加四级:" + attendNumber4[i] + ", 每个批次新通过:" + passNew4[i] + ", 累计通过:" + passNumber[i] + ", 参加四级:" + attendMap4.size());
} }
JSONArray list4 = new JSONArray(); //保留三位小数
JSONObject ans = new JSONObject();
String[] grade = {"大一", "大二", "大三", "大四"};
int temp = 0;
double passSum4 = 0;
DecimalFormat df = new DecimalFormat("#.###"); DecimalFormat df = new DecimalFormat("#.###");
for (int i = entryDataMap.get(entryDate); i < batchs.length - 1; i += 2) { String[] grade = {"大一", "大二", "大三", "大四"};
if ((attendNumber4[i] != 0 || attendNumber4[i + 1] != 0) && temp < 4) { JSONArray list = new JSONArray();
JSONObject json = new JSONObject(); //遍历批次分年级
double attendNumbers = attendNumber4[i] + attendNumber4[i + 1]; for (int i = 0; i < n; i += 2) {
double passNumbers = passNumber4[i] + passNumber4[i + 1]; JSONObject json = new JSONObject();
passSum4 += passNumbers; //每个年级的参加人数
json.put("grade", grade[temp]); double attendNumber = attendNumber4[i] + attendNumber4[i + 1];
json.put("attendNumber", attendNumbers); //每个年级的新通过人数
json.put("passNumber", passNumbers); double passNew = passNew4[i] + passNew4[i + 1];
json.put("passRate", df.format(passSum4 / (double) attendMap4.size()));//累计通过人数/四年参加人数 //每个年级的累计通过率保留三位小数
list4.add(json); double passRate = passNumber[i + 1] / (double) attendMap4.size();
} //写入json
temp++; json.put("grade", grade[i / 2]);
json.put("attendNumber", attendNumber);
json.put("passNumber", passNew);
json.put("passRate", df.format(passRate));
list.add(json);
} }
ans.put("cet4", list4); JSONObject result = new JSONObject();
ans.put("total",(double) attendMap4.size()); result.put("cet4", list);
result.put("data", ans); result.put("total", attendMap4.size());
return Result.ok(result); return Result.ok(result);
} }