浏览代码

导入导出和cache优化

wangliang 4 年之前
父节点
当前提交
20e4f22c8f

+ 32 - 5
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -7,7 +7,6 @@ import com.qmth.themis.business.bean.status.MonitorStatusBean;
 import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
@@ -49,7 +48,14 @@ public class ExamRecordCacheUtil {
     }
 
     public static void setStatus(Long recordId, ExamRecordStatusEnum status, Long timestamp) {
-        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.status.getCode(), new ExamStatusBean(status, timestamp));
+        ExamStatusBean examStatusBean = getStatusBean(recordId);
+        if (Objects.isNull(examStatusBean)) {
+            examStatusBean = new ExamStatusBean(status, timestamp);
+        } else {
+            examStatusBean.setExamRecordStatusEnum(status);
+            examStatusBean.setTimestamp(timestamp);
+        }
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.status.getCode(), examStatusBean);
     }
 
     public static Long getFirstStartTime(Long recordId) {
@@ -245,7 +251,14 @@ public class ExamRecordCacheUtil {
     }
 
     public static void setMonitorStatus(Long recordId, MonitorVideoSourceEnum source, MonitorStatusSourceEnum statusSourceEnum, Long timestamp) {
-        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name(), new MonitorStatusBean(statusSourceEnum, timestamp));
+        MonitorStatusBean monitorStatusBean = getMonitorStatusBean(recordId, source);
+        if (Objects.isNull(monitorStatusBean)) {
+            monitorStatusBean = new MonitorStatusBean(statusSourceEnum, timestamp);
+        } else {
+            monitorStatusBean.setMonitorStatusSourceEnum(statusSourceEnum);
+            monitorStatusBean.setTimestamp(timestamp);
+        }
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name(), monitorStatusBean);
     }
 
     public static MonitorCallStatusSourceEnum getMonitorCallStatus(Long recordId, MonitorVideoSourceEnum source) {
@@ -262,7 +275,14 @@ public class ExamRecordCacheUtil {
     }
 
     public static void setMonitorCallStatus(Long recordId, MonitorVideoSourceEnum source, MonitorCallStatusSourceEnum callStatusSourceEnum, Long timestamp) {
-        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_CALL_STATUS_ + source.name(), new MonitorCallStatusBean(callStatusSourceEnum, timestamp));
+        MonitorCallStatusBean monitorCallStatusBean = getMonitorCallStatusBean(recordId, source);
+        if (Objects.isNull(monitorCallStatusBean)) {
+            monitorCallStatusBean = new MonitorCallStatusBean(callStatusSourceEnum, timestamp);
+        } else {
+            monitorCallStatusBean.setMonitorCallStatusSourceEnum(callStatusSourceEnum);
+            monitorCallStatusBean.setTimestamp(timestamp);
+        }
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_CALL_STATUS_ + source.name(), monitorCallStatusBean);
     }
 
     public static ClientWebsocketStatusBean getClientWebsocketStatusBean(Long recordId) {
@@ -283,7 +303,14 @@ public class ExamRecordCacheUtil {
     }
 
     public static void setClientWebsocketStatus(Long recordId, WebsocketStatusEnum websocketStatusEnum, Long timestamp) {
-        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode(), new ClientWebsocketStatusBean(websocketStatusEnum, timestamp));
+        ClientWebsocketStatusBean clientWebsocketStatusBean = getClientWebsocketStatusBean(recordId);
+        if (Objects.isNull(clientWebsocketStatusBean)) {
+            clientWebsocketStatusBean = new ClientWebsocketStatusBean(websocketStatusEnum, timestamp);
+        } else {
+            clientWebsocketStatusBean.setWebsocketStatusEnum(websocketStatusEnum);
+            clientWebsocketStatusBean.setTimestamp(timestamp);
+        }
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode(), clientWebsocketStatusBean);
     }
 
     public static void setClientCurrentIp(Long recordId, String ip) {

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/templete/TaskExportCommon.java

@@ -185,14 +185,14 @@ public class TaskExportCommon {
     /**
      * 异常处理
      *
-     * @param min
+     * @param line
      * @param e
      * @param txtList
      * @return
      */
-    public List<String> exception(int min, Exception e, List<String> txtList) {
+    public List<String> exception(int line, Exception e, List<String> txtList) {
         this.exception = true;
-        String exceptionStr = "数据导出到第" + (min == 0 ? min + 1 : min) + "条时发生异常,请联系系统管理员处理!";
+        String exceptionStr = "数据导出到第" + (line == 0 ? line + 1 : line) + "条时发生异常,请联系系统管理员处理!";
         txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->" + exceptionStr + "错误信息:[" + e.getMessage() + "]");
         this.tbTaskHistory.setSummary(exceptionStr);
         this.tbTaskHistory.setStatus(TaskStatusEnum.FINISH);

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/templete/TaskImportCommon.java

@@ -172,14 +172,14 @@ public class TaskImportCommon {
     /**
      * 异常处理
      *
-     * @param min
+     * @param line
      * @param e
      * @param txtList
      * @return
      */
-    public List<String> exception(int min, Exception e, List<String> txtList) {
+    public List<String> exception(int line, Exception e, List<String> txtList) {
         this.exception = true;
-        String exceptionStr = "数据处理到第" + (min == 0 ? min + 1 : min) + "条时发生异常,请联系系统管理员处理!";
+        String exceptionStr = "数据处理到第" + (line == 0 ? line + 1 : line) + "条时发生异常,请联系系统管理员处理!";
         txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->" + exceptionStr + "错误信息:[" + e.getMessage() + "]");
         this.tbTaskHistory.setSummary(exceptionStr);
         this.tbTaskHistory.setStatus(TaskStatusEnum.FINISH);

+ 2 - 2
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamStudentImportTemplete.java

@@ -114,8 +114,8 @@ public class TaskExamStudentImportTemplete implements TaskImportTemplete {
             }
         } catch (Exception e) {
             log.error("导入报错", e);
-            int min = Objects.isNull(map.get("min")) ? 0 : Integer.parseInt(String.valueOf(map.get("min")));
-            taskImportCommon.exception(min, e, taskImportCommon.getTxtList());
+            int line = Objects.isNull(map.get("line")) ? 0 : Integer.parseInt(String.valueOf(map.get("line")));
+            taskImportCommon.exception(line, e, taskImportCommon.getTxtList());
         } finally {
             if (Objects.nonNull(inputStream)) {
                 inputStream.close();

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskMarkResultSimpleExportTemplete.java

@@ -72,7 +72,7 @@ public class TaskMarkResultSimpleExportTemplete implements TaskExportTemplete {
         String excelFilePath = null;
         InputStream inputStream = null;
         ByteArrayOutputStream out = null;
-        int min = 0;
+        int min = 0, line = 0;
         try {
             taskExportCommon.getTxtList().add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导出的成绩简版数据");
             Long examId = (Long) map.get("examId");
@@ -134,6 +134,7 @@ public class TaskMarkResultSimpleExportTemplete implements TaskExportTemplete {
                 List subList = markResultSimpleExportDtoList.subList(min, max);
                 //绘制数据
                 for (int y = 0; y < subList.size(); y++) {
+                    line++;
                     MarkResultSimpleExportDto markResultSimpleExportDto = (MarkResultSimpleExportDto) subList.get(y);
                     int firstRow = y + 1;
                     cellIndex = 0;
@@ -170,7 +171,7 @@ public class TaskMarkResultSimpleExportTemplete implements TaskExportTemplete {
             log.info("导出成绩简版数据结束,============耗时============:{}秒", (end - start) / 1000);
         } catch (Exception e) {
             log.error("导出报错", e);
-            taskExportCommon.exception(min, e, taskExportCommon.getTxtList());
+            taskExportCommon.exception(line, e, taskExportCommon.getTxtList());
         } finally {
             //这里写入txt文件
             taskExportCommon.writeExportResultTxt(stringJoiner.toString(), taskExportCommon.getTxtList().toString(), excelFilePath);

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskMarkResultStandardExportTemplete.java

@@ -84,7 +84,7 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
         String excelFilePath = null;
         InputStream inputStream = null;
         ByteArrayOutputStream out = null;
-        int min = 0;
+        int min = 0, line = 0;
         try {
             taskExportCommon.getTxtList().add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导出的成绩标准版数据");
             Long examId = (Long) map.get("examId");
@@ -232,6 +232,7 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
                 List subList = markResultStandardExportDtoList.subList(min, max);
                 //绘制数据
                 for (int y = 0; y < subList.size(); y++) {
+                    line++;
                     MarkResultStandardExportDto markResultStandardExportDto = (MarkResultStandardExportDto) subList.get(y);
                     int firstRow = y + 1;
                     cellIndex = 0;
@@ -281,7 +282,7 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
             log.info("导出成绩标准版数据结束,============耗时============:{}秒", (end - start) / 1000);
         } catch (Exception e) {
             log.error("导出报错", e);
-            taskExportCommon.exception(min, e, taskExportCommon.getTxtList());
+            taskExportCommon.exception(line, e, taskExportCommon.getTxtList());
         } finally {
             //这里写入txt文件
             taskExportCommon.writeExportResultTxt(stringJoiner.toString(), taskExportCommon.getTxtList().toString(), excelFilePath);

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskRoomCodeExportTemplete.java

@@ -58,7 +58,7 @@ public class TaskRoomCodeExportTemplete implements TaskExportTemplete {
         String excelFilePath = null;
         InputStream inputStream = null;
         ByteArrayOutputStream out = null;
-        int min = 0;
+        int min = 0, line = 0;
         try {
             taskExportCommon.getTxtList().add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导出的考场数据");
             Long examId = (Long) map.get("examId");
@@ -100,6 +100,7 @@ public class TaskRoomCodeExportTemplete implements TaskExportTemplete {
                 List subList = roomCodeExportDtoList.subList(min, max);
                 //绘制数据
                 for (int y = 0; y < subList.size(); y++) {
+                    line++;
                     RoomCodeExportDto roomCodeExportDto = (RoomCodeExportDto) subList.get(y);
                     int firstRow = y + 1;
                     cellIndex = 0;
@@ -133,7 +134,7 @@ public class TaskRoomCodeExportTemplete implements TaskExportTemplete {
             log.info("导出考场数据结束,============耗时============:{}秒", (end - start) / 1000);
         } catch (Exception e) {
             log.error("导出报错", e);
-            taskExportCommon.exception(min, e, taskExportCommon.getTxtList());
+            taskExportCommon.exception(line, e, taskExportCommon.getTxtList());
         } finally {
             //这里写入txt文件
             taskExportCommon.writeExportResultTxt(stringJoiner.toString(), taskExportCommon.getTxtList().toString(), excelFilePath);

+ 2 - 2
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskRoomCodeImportTemplete.java

@@ -94,8 +94,8 @@ public class TaskRoomCodeImportTemplete implements TaskImportTemplete {
             }
         } catch (Exception e) {
             log.error("导入报错", e);
-            int min = Objects.isNull(map.get("min")) ? 0 : Integer.parseInt(String.valueOf(map.get("min")));
-            taskImportCommon.exception(min, e, taskImportCommon.getTxtList());
+            int line = Objects.isNull(map.get("line")) ? 0 : Integer.parseInt(String.valueOf(map.get("line")));
+            taskImportCommon.exception(line, e, taskImportCommon.getTxtList());
         } finally {
             if (Objects.nonNull(inputStream)) {
                 inputStream.close();

+ 8 - 3
themis-business/src/main/java/com/qmth/themis/business/templete/service/impl/TempleteLogicServiceImpl.java

@@ -102,6 +102,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                 teExamActivity = gson.fromJson(gson.toJson(m), TEExamActivity.class);
             }
         }
+        int line = 0;
         //保存用户
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> finalMap = finalList.get(i);
@@ -114,6 +115,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             while (max <= size) {
                 List subList = examStudentImportDtoList.subList(min, max);
                 for (int y = 0; y < subList.size(); y++) {
+                    line++;
                     ExamStudentImportDto examStudentImportDto = (ExamStudentImportDto) subList.get(y);
                     if (Objects.equals(modeEnum, ExamModeEnum.TOGETHER)) {
                         Map m = (Map) teExamActivityMap.get(examStudentImportDto.getExamActivityCode());
@@ -169,7 +171,6 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     teExamStudentList.add(teExamStudent);
                 }
                 txtList = this.importProgress(max, min, size, txtList, tbTaskHistory);
-                map.put("min", min);
                 if (max == size) {
                     break;
                 }
@@ -179,9 +180,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     max = size;
                 }
             }
+            teStudentService.saveOrUpdateBatch(teStudentList);
+            teExamStudentService.saveOrUpdateBatch(teExamStudentList);
         }
-        teStudentService.saveOrUpdateBatch(teStudentList);
-        teExamStudentService.saveOrUpdateBatch(teExamStudentList);
+        map.put("line", line);
         //考场创建
         if (Objects.nonNull(roomCodeAndNameSet) && roomCodeAndNameSet.size() > 0) {
             Map<String, TBExamInvigilateUser> tbExamInvigilateUserMap = (Map<String, TBExamInvigilateUser>) map.get("tbExamInvigilateUserMap");
@@ -225,6 +227,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         List<TBExamInvigilateUser> tbExamInvigilateUserList = new ArrayList<>();
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         //保存用户
+        int line = 0;
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> finalMap = finalList.get(i);
             List<Object> examStudentDtoImportList = finalMap.get(i);
@@ -236,6 +239,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             while (max <= size) {
                 List subList = examStudentDtoImportList.subList(min, max);
                 for (int y = 0; y < subList.size(); y++) {
+                    line++;
                     RoomCodeImportDto roomCodeImportDto = (RoomCodeImportDto) subList.get(y);
                     dataVerify(examId, roomCodeImportDto.getTeacher1(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
                     dataVerify(examId, roomCodeImportDto.getTeacher2(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
@@ -255,6 +259,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             tbUserRoleService.saveOrUpdateBatch(tbUserRoleList);
             tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
         }
+        map.put("line", line);
         return map;
     }