瀏覽代碼

加入锁

wangliang 1 年之前
父節點
當前提交
a5d5e21a7b

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java

@@ -381,7 +381,7 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
 
 
     @Override
     @Override
     public void getFinalScoreSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
     public void getFinalScoreSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在同步期末成绩数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在同步期末成绩数据,请稍候再试!");
@@ -390,7 +390,7 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
 
 
     @Override
     @Override
     public void getFinalScoreImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
     public void getFinalScoreImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在导入期末成绩数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在导入期末成绩数据,请稍候再试!");

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCPaperStructServiceImpl.java

@@ -307,7 +307,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
      */
      */
     @Override
     @Override
     public void getPaperStructSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
     public void getPaperStructSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在同步试卷蓝图数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在同步试卷蓝图数据,请稍候再试!");
@@ -323,7 +323,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
      */
      */
     @Override
     @Override
     public void getPaperStructImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
     public void getPaperStructImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在导入试卷蓝图数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在导入试卷蓝图数据,请稍候再试!");

+ 52 - 31
distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.api;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
 import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
 import com.qmth.distributed.print.business.bean.dto.report.ObeCourseRequirementDto;
 import com.qmth.distributed.print.business.bean.dto.report.ObeCourseRequirementDto;
 import com.qmth.distributed.print.business.bean.dto.report.ObeRequirementDto;
 import com.qmth.distributed.print.business.bean.dto.report.ObeRequirementDto;
@@ -16,13 +17,14 @@ import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixSer
 import com.qmth.distributed.print.business.service.ObeCourseRequirementReportService;
 import com.qmth.distributed.print.business.service.ObeCourseRequirementReportService;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.JacksonUtil;
+import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -62,6 +64,9 @@ public class ObeReportController {
     @Resource
     @Resource
     ObeCourseOutlineService obeCourseOutlineService;
     ObeCourseOutlineService obeCourseOutlineService;
 
 
+    @Resource
+    RedisUtil redisUtil;
+
     @ApiOperation(value = "毕业要求达成度报表列表")
     @ApiOperation(value = "毕业要求达成度报表列表")
     @RequestMapping(value = "/requirements/list", method = RequestMethod.POST)
     @RequestMapping(value = "/requirements/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
@@ -77,43 +82,59 @@ public class ObeReportController {
     @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度雷达报表", response = ScoreResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度雷达报表", response = ScoreResult.class)})
     @Transactional
     @Transactional
     public Result requirementsRadarReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
     public Result requirementsRadarReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
-        List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = obeCourseRequirementMatrixService.getMatrix(cultureProgramId);
+        String lockKey = SystemConstant.REDIS_OBE_RADAR_DATA_PREFIX + cultureProgramId;
+        boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT);
+        if (!lock) {
+            throw ExceptionResultEnum.ERROR.exception("正在计算数据,请稍候再试!");
+        }
         ObeCourseRequirementDto obeCourseRequirementResultDto = null;
         ObeCourseRequirementDto obeCourseRequirementResultDto = null;
-        if (!CollectionUtils.isEmpty(courseRequirementMatrixDtoList)) {
-            log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
-            List<ObeCourseOutline> obeCourseOutlineList = obeCourseOutlineService.findByCultureProgramId(cultureProgramId);
-            if (!CollectionUtils.isEmpty(obeCourseOutlineList)) {
-                List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
-                Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
-                for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
-                    obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
-                            null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
-                }
-                obeCourseRequirementResultDto = obeCourseRequirementReportService.matrixCourseReport(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
+        try {
+            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)) {
+                    List<ObeCourseRequirementDto> obeCourseRequirementDtoList = new ArrayList<>();
+                    Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = new LinkedHashMap<>();
+                    for (ObeCourseOutline obeCourseOutline : obeCourseOutlineList) {
+                        obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutline.getId(),
+                                null, obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
+                    }
+                    obeCourseRequirementResultDto = obeCourseRequirementReportService.matrixCourseReport(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
 
 
-                ObeCourseRequirementDto finalObeCourseRequirementResultDto = obeCourseRequirementResultDto;
-                obeSubRequirementsDtoMap.forEach((k, v) -> {
-                    List<ObeRequirementDto> obeRequirementDtoList = finalObeCourseRequirementResultDto.getObeRequirements();
-                    for (ObeRequirementDto obeRequirementDto : obeRequirementDtoList) {
-                        List<ObeSubRequirementsDto> obeSubRequirementsDtoList = obeRequirementDto.getObeSubRequirements();
-                        for (ObeSubRequirementsDto obeSubRequirementsDto : obeSubRequirementsDtoList) {
-                            if (obeSubRequirementsDto.getSubRequirementId().longValue() == k.longValue()) {
-                                Double degree = v.stream().mapToDouble(x -> x.getMatrixDegree().doubleValue()).sum();
-                                obeSubRequirementsDto.setMatrixDegree(new BigDecimal(degree).setScale(2, BigDecimal.ROUND_HALF_UP));
+                    ObeCourseRequirementDto finalObeCourseRequirementResultDto = obeCourseRequirementResultDto;
+                    obeSubRequirementsDtoMap.forEach((k, v) -> {
+                        List<ObeRequirementDto> obeRequirementDtoList = finalObeCourseRequirementResultDto.getObeRequirements();
+                        for (ObeRequirementDto obeRequirementDto : obeRequirementDtoList) {
+                            List<ObeSubRequirementsDto> obeSubRequirementsDtoList = obeRequirementDto.getObeSubRequirements();
+                            for (ObeSubRequirementsDto obeSubRequirementsDto : obeSubRequirementsDtoList) {
+                                if (obeSubRequirementsDto.getSubRequirementId().longValue() == k.longValue()) {
+                                    Double degree = v.stream().mapToDouble(x -> x.getMatrixDegree().doubleValue()).sum();
+                                    obeSubRequirementsDto.setMatrixDegree(new BigDecimal(degree).setScale(2, BigDecimal.ROUND_HALF_UP));
+                                }
                             }
                             }
                         }
                         }
+                    });
+                    ObeCourseRequirementReport obeCourseRequirementReport = new ObeCourseRequirementReport(
+                            cultureProgramId, Objects.nonNull(obeCourseRequirementResultDto) ? JacksonUtil.parseJson(obeCourseRequirementResultDto) : null,
+                            !CollectionUtils.isEmpty(obeCourseRequirementDtoList) ? JacksonUtil.parseJson(obeCourseRequirementDtoList) : null, Objects.nonNull(obeCourseRequirementResultDto) && Objects.nonNull(obeCourseRequirementResultDto.getMatrixDegree()) ? obeCourseRequirementResultDto.getMatrixDegree().doubleValue() : null);
+                    obeCourseRequirementReportService.removeReport(cultureProgramId);
+                    if (Objects.nonNull(obeCourseRequirementReport.getRequirementRadar()) &&
+                            Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())
+                            && Objects.nonNull(obeCourseRequirementReport.getRequirementDegree())) {
+                        obeCourseRequirementReportService.save(obeCourseRequirementReport);
                     }
                     }
-                });
-                ObeCourseRequirementReport obeCourseRequirementReport = new ObeCourseRequirementReport(
-                        cultureProgramId, Objects.nonNull(obeCourseRequirementResultDto) ? JacksonUtil.parseJson(obeCourseRequirementResultDto) : null,
-                        !CollectionUtils.isEmpty(obeCourseRequirementDtoList) ? JacksonUtil.parseJson(obeCourseRequirementDtoList) : null, Objects.nonNull(obeCourseRequirementResultDto) && Objects.nonNull(obeCourseRequirementResultDto.getMatrixDegree()) ? obeCourseRequirementResultDto.getMatrixDegree().doubleValue() : null);
-                obeCourseRequirementReportService.removeReport(cultureProgramId);
-                if (Objects.nonNull(obeCourseRequirementReport.getRequirementRadar()) &&
-                        Objects.nonNull(obeCourseRequirementReport.getRequirementDetail())
-                        && Objects.nonNull(obeCourseRequirementReport.getRequirementDegree())) {
-                    obeCourseRequirementReportService.save(obeCourseRequirementReport);
                 }
                 }
             }
             }
+        } 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(obeCourseRequirementResultDto);
         return ResultUtil.ok(obeCourseRequirementResultDto);
     }
     }

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java

@@ -129,7 +129,7 @@ public class TCFinalScoreController {
                                    @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
                                    @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
                                    @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
                                    @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         if (!lock) {
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
@@ -173,7 +173,7 @@ public class TCFinalScoreController {
                                  @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
                                  @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
                                  @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
                                  @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         if (!lock) {
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java

@@ -87,7 +87,7 @@ public class TCPaperStructController {
                                               @ApiParam(value = "科目编码", required = true) @RequestParam Long courseId,
                                               @ApiParam(value = "科目编码", required = true) @RequestParam Long courseId,
                                               @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
                                               @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         if (!lock) {
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
@@ -120,7 +120,7 @@ public class TCPaperStructController {
                                                      @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
                                                      @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
         Objects.requireNonNull(paperNumber, "未查询到题和知识点对应关系请手动关联");
         Objects.requireNonNull(paperNumber, "未查询到题和知识点对应关系请手动关联");
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
         printCommonService.getLock(cultureProgramId, courseId, paperNumber);
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         if (!lock) {
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");

+ 4 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -533,12 +533,14 @@ public class SystemConstant {
     public static final String REDIS_LOCK_CALCULATE_PREFIX = "redis:lock:calculate:";//计算锁
     public static final String REDIS_LOCK_CALCULATE_PREFIX = "redis:lock:calculate:";//计算锁
     public static final long REDIS_LOCK_CALCULATE_TIME_OUT = 60L * 60;
     public static final long REDIS_LOCK_CALCULATE_TIME_OUT = 60L * 60;
     public static final long REDIS_LOCK_PAPER_NUMBER_TIME_OUT = 60L * 2;
     public static final long REDIS_LOCK_PAPER_NUMBER_TIME_OUT = 60L * 2;
-    public static final String REDIS_FINAL_SCORE_DATA_FLOW_PREFIX = "redis:lock:final:score:data";//期末考试数据锁
-    public static final String REDIS_PAPER_STRUCT_FLOW_PREFIX = "redis:lock:final:score:paper:struct";//期末考试试卷结构锁
+    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_LOCK_IMPORT_EXAM_DATA = "redis:lock:import:exam:data:";//导入考务数据锁
     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;
     public static final long REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT = 60L * 10;
     public static final long REDIS_PAPER_STRUCT_TIME_OUT = 60L * 10;
     public static final long REDIS_PAPER_STRUCT_TIME_OUT = 60L * 10;
+    public static final long REDIS_LOCK_OBE_RADAR_DATA_TIME_OUT = 60L * 10;
     /**
     /**
      * 机器心跳
      * 机器心跳
      */
      */