新增为三个批次

This commit is contained in:
Xubx 2025-05-08 15:14:36 +08:00
parent c25fa2a9f0
commit 2d11a335d7
1 changed files with 57 additions and 37 deletions

View File

@ -38,9 +38,9 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements ICet_4Service { public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements ICet_4Service {
@Autowired @Resource
Cet_4Mapper cet4Mapper; Cet_4Mapper cet4Mapper;
@Autowired @Resource
Cet4_majorMapper cet4_MajorMapper; Cet4_majorMapper cet4_MajorMapper;
@Resource @Resource
private CenterService centerService; private CenterService centerService;
@ -675,31 +675,51 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
public Result<JSONObject> getAnalyze(JSONObject webData) { public Result<JSONObject> getAnalyze(JSONObject webData) {
String college = webData.getString("college"); String college = webData.getString("college");
String major = webData.getString("major"); String major = webData.getString("major");
//只返回最新批次的数据 // 检查是否有缓存
QueryWrapper<Cet_4> getMaxBatch = Wrappers.query(); if (redisTemplate.opsForValue().get("getAnalyze" + college + major) != null) {
getMaxBatch return Result.ok((JSONObject) redisTemplate.opsForValue().get("getAnalyze" + college + major));
.select("MAX(batch) as batch"); }
Cet_4 maxBatch = getOne(getMaxBatch);
Date batch = maxBatch.getBatch(); QueryWrapper<Cet_4> getMaxBatches = Wrappers.query();
LambdaQueryWrapper<Cet_4> queryWrapper = Wrappers.lambdaQuery(Cet_4.class) getMaxBatches.select("DISTINCT batch").orderByDesc("batch").last("LIMIT 3");
.eq(!Objects.equals(college, "全校"),Cet_4::getCollege, college) List<Date> latestBatches = listObjs(getMaxBatches, obj -> (Date) obj);
.eq(!major.isEmpty(), Cet_4::getMajorname, major)
.eq(Cet_4::getBatch, batch); JSONObject aggregatedResult = new JSONObject();
List<Cet_4> list = list(queryWrapper); JSONArray batchResults = new JSONArray();
//设置要查询的范围端
List<int[]> ranges = Arrays.asList( for (Date batch : latestBatches) {
new int[]{0, 400}, LambdaQueryWrapper<Cet_4> queryWrapper = Wrappers.lambdaQuery(Cet_4.class)
new int[]{400, 425}, .eq(!Objects.equals(college, "全校"), Cet_4::getCollege, college)
new int[]{425, 450}, .eq(!major.isEmpty(), Cet_4::getMajorname, major)
new int[]{450, 475}, .eq(Cet_4::getBatch, batch);
new int[]{475, 750} List<Cet_4> list = list(queryWrapper);
);
JSONObject rateByLastBatch = getRateByBatchRanges(list, ranges); // Define ranges for analysis
JSONObject scoreRateByLastBatch = getScoreRateByLastBatch(list); List<int[]> ranges = Arrays.asList(
JSONObject result = new JSONObject(); new int[]{0, 400},
result.put("rateByBatch", rateByLastBatch); new int[]{400, 425},
result.put("scoreByBatch", scoreRateByLastBatch); new int[]{425, 450},
return Result.ok(result); new int[]{450, 475},
new int[]{475, 750}
);
JSONObject rateByBatch = getRateByBatchRanges(list, ranges);
JSONObject scoreRateByBatch = getScoreRateByLastBatch(list);
JSONObject batchResult = new JSONObject();
batchResult.put("batch", batch);
batchResult.put("rateByBatch", rateByBatch);
batchResult.put("scoreByBatch", scoreRateByBatch);
batchResults.add(batchResult);
}
aggregatedResult.put("data", batchResults);
// 缓存
redisTemplate.opsForValue().set("getAnalyze" + college + major, aggregatedResult);
return Result.ok(aggregatedResult);
} }
@ -731,20 +751,20 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
//听力阅读等各个模块占比 //听力阅读等各个模块占比
public JSONObject getScoreRateByLastBatch(List<Cet_4> list) { public JSONObject getScoreRateByLastBatch(List<Cet_4> list) {
int total = list.size(); int total = list.size();
int listen=0; int listen = 0;
int read=0; int read = 0;
int write=0; int write = 0;
//求平均数 //求平均数
for (Cet_4 cet_4 : list) { for (Cet_4 cet_4 : list) {
listen+=cet_4.getListen(); listen += cet_4.getListen();
read+=cet_4.getReading(); read += cet_4.getReading();
write+=cet_4.getWriting(); write += cet_4.getWriting();
} }
DecimalFormat df = new DecimalFormat("#.##"); DecimalFormat df = new DecimalFormat("#.##");
JSONObject jsonObject=new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("listen",df.format(listen/(double)total)); jsonObject.put("listen", df.format(listen / (double) total));
jsonObject.put("read",df.format(read/(double)total)); jsonObject.put("read", df.format(read / (double) total));
jsonObject.put("write",df.format(write/(double)total)); jsonObject.put("write", df.format(write / (double) total));
return jsonObject; return jsonObject;
} }