Explorar el Código

优化首页大屏抽问抽答接口性能:批量调用时统一初始化部门缓存,避免重复查询数据库

simonlll hace 1 mes
padre
commit
81dc507b2d

+ 23 - 17
airport-admin/src/main/java/com/sundot/airport/web/controller/system/SysHomePageController.java

@@ -285,23 +285,29 @@ public class SysHomePageController extends BaseController {
285 285
      */
286 286
     private List<SysHomePageDetailDto> getSysHomePageDetailDtoList(List<SysHomePageDetailQueryParamDto> dtoList) {
287 287
         List<SysHomePageDetailDto> result = new ArrayList<>();
288
-        for (SysHomePageDetailQueryParamDto item : dtoList) {
289
-            SysHomePageDetailDto resultItem = new SysHomePageDetailDto();
290
-            resultItem.setId(item.getId());
291
-            resultItem.setName(item.getName());
292
-            resultItem.setType(item.getType());
293
-            resultItem.setLearningGrowthScore(getLearningGrowthScore(item));
294
-            resultItem.setLearningGrowthScoreGraph(resultItem.getLearningGrowthScore().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
295
-            resultItem.setCheckPassRate(getCheckPassRate(item));
296
-            resultItem.setCheckPassRateGraph(resultItem.getCheckPassRate());
297
-            resultItem.setSeizureCount(getSeizureCount(item));
298
-            resultItem.setSeizureCountGraph(getSeizureCountGraph(item));
299
-            resultItem.setWorkingHours(getWorkingHours(item));
300
-            resultItem.setWorkingHoursGraph(getWorkingHoursGraph(item));
301
-            // 抽问抽答正确率
302
-            resultItem.setAnswersAccuracy(getAnswersAccuracy(item));
303
-            resultItem.setAnswersAccuracyGraph(resultItem.getAnswersAccuracy());
304
-            result.add(resultItem);
288
+        // 批量调用前统一初始化部门缓存,避免每次 getAnswersAccuracy 都重复查询数据库
289
+        accuracyStatisticsService.initDeptCache();
290
+        try {
291
+            for (SysHomePageDetailQueryParamDto item : dtoList) {
292
+                SysHomePageDetailDto resultItem = new SysHomePageDetailDto();
293
+                resultItem.setId(item.getId());
294
+                resultItem.setName(item.getName());
295
+                resultItem.setType(item.getType());
296
+                resultItem.setLearningGrowthScore(getLearningGrowthScore(item));
297
+                resultItem.setLearningGrowthScoreGraph(resultItem.getLearningGrowthScore().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
298
+                resultItem.setCheckPassRate(getCheckPassRate(item));
299
+                resultItem.setCheckPassRateGraph(resultItem.getCheckPassRate());
300
+                resultItem.setSeizureCount(getSeizureCount(item));
301
+                resultItem.setSeizureCountGraph(getSeizureCountGraph(item));
302
+                resultItem.setWorkingHours(getWorkingHours(item));
303
+                resultItem.setWorkingHoursGraph(getWorkingHoursGraph(item));
304
+                // 抽问抽答正确率
305
+                resultItem.setAnswersAccuracy(getAnswersAccuracy(item));
306
+                resultItem.setAnswersAccuracyGraph(resultItem.getAnswersAccuracy());
307
+                result.add(resultItem);
308
+            }
309
+        } finally {
310
+            accuracyStatisticsService.clearDeptCache();
305 311
         }
306 312
         return result;
307 313
     }

+ 1 - 1
airport-exam/src/main/java/com/sundot/airport/exam/service/impl/AccuracyStatisticsServiceImpl.java

@@ -1218,7 +1218,7 @@ public class AccuracyStatisticsServiceImpl implements IAccuracyStatisticsService
1218 1218
             }
1219 1219
         } else if (deptId != null) {
1220 1220
             // 部门维度
1221
-            DeptHierarchy hierarchy = getDeptHierarchy(deptId);
1221
+            DeptHierarchy hierarchy = getDeptHierarchyCached(deptId);
1222 1222
             List<Long> teamIds = getTeamIdsUnderDept(deptId, hierarchy);
1223 1223
             long[] counts = calculateAccuracyCountsForTeams(teamIds, startDate, endDate);
1224 1224
             if (counts[1] > 0) {