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