wangliang преди 1 година
родител
ревизия
ab87144673

+ 29 - 13
distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java

@@ -143,23 +143,39 @@ public class ObeReportController {
     @RequestMapping(value = "/requirements/detail/report", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度详情报表", response = ScoreResult.class)})
     public Result requirementsDetailReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
-        ObeCourseRequirementReport obeCourseRequirementReport = obeCourseRequirementReportService.findByCultureProgramId(cultureProgramId);
+        String lockKey = SystemConstant.REDIS_OBE_RADAR_DETAIL_DATA_PREFIX + cultureProgramId;
+        boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT);
+        if (!lock) {
+            throw ExceptionResultEnum.ERROR.exception("正在计算数据,请稍候再试!");
+        }
         List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
-        if (Objects.nonNull(obeCourseRequirementReport) && Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())) {
-            obeCourseRequirementDtoList = JSONArray.parseArray(obeCourseRequirementReport.getRequirementDetail(), ObeCourseRequirementDto.class);
-        } else {
-            List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = obeCourseRequirementMatrixService.getMatrix(cultureProgramId);
-            if (!CollectionUtils.isEmpty(courseRequirementMatrixDtoList)) {
-                log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
-                List<ObeCourseOutline> obeCourseOutlineList = obeCourseOutlineService.findByCultureProgramId(cultureProgramId);
-                if (!CollectionUtils.isEmpty(obeCourseOutlineList)) {
-                    Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
-                    for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
-                        obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
-                                null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
+        try {
+            ObeCourseRequirementReport obeCourseRequirementReport = obeCourseRequirementReportService.findByCultureProgramId(cultureProgramId);
+            if (Objects.nonNull(obeCourseRequirementReport) && Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())) {
+                obeCourseRequirementDtoList = JSONArray.parseArray(obeCourseRequirementReport.getRequirementDetail(), ObeCourseRequirementDto.class);
+            } else {
+                List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = obeCourseRequirementMatrixService.getMatrix(cultureProgramId);
+                if (!CollectionUtils.isEmpty(courseRequirementMatrixDtoList)) {
+                    log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
+                    List<ObeCourseOutline> obeCourseOutlineList = obeCourseOutlineService.findByCultureProgramId(cultureProgramId);
+                    if (!CollectionUtils.isEmpty(obeCourseOutlineList)) {
+                        Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
+                        for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
+                            obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
+                                    null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
+                        }
                     }
                 }
             }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            redisUtil.releaseLock(lockKey);
         }
         return ResultUtil.ok(obeCourseRequirementDtoList);
     }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -536,6 +536,7 @@ public class SystemConstant {
     public static final String REDIS_FINAL_SCORE_DATA_PREFIX = "redis:lock:final:score:data";//期末考试数据锁
     public static final String REDIS_PAPER_STRUCT_PREFIX = "redis:lock:final:score:paper:struct";//期末考试试卷结构锁
     public static final String REDIS_OBE_RADAR_DATA_PREFIX = "redis:lock:obe:radar:data";//obe雷达报表锁
+    public static final String REDIS_OBE_RADAR_DETAIL_DATA_PREFIX = "redis:lock:obe:radar:detail:data";//obe雷达详情报表锁
 
     public static final String REDIS_LOCK_IMPORT_EXAM_DATA = "redis:lock:import:exam:data:";//导入考务数据锁
     public static final long REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT = 60L * 10;