Browse Source

考生导出改异步

xiatian 4 years ago
parent
commit
9c96ee88ee

+ 82 - 31
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamStudentController.java

@@ -1,5 +1,29 @@
 package com.qmth.themis.backend.api;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -10,29 +34,39 @@ import com.qmth.themis.business.config.SystemConfig;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.response.TEExamStudentDto;
-import com.qmth.themis.business.entity.*;
-import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.excel.ExportUtils;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.entity.TBAttachment;
+import com.qmth.themis.business.entity.TBExamInvigilateUser;
+import com.qmth.themis.business.entity.TBOrg;
+import com.qmth.themis.business.entity.TBTaskHistory;
+import com.qmth.themis.business.entity.TBUser;
+import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.entity.TEExamActivity;
+import com.qmth.themis.business.entity.TEExamStudent;
+import com.qmth.themis.business.entity.TEStudent;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
+import com.qmth.themis.business.enums.TaskStatusEnum;
+import com.qmth.themis.business.enums.TaskTypeEnum;
+import com.qmth.themis.business.enums.UploadFileEnum;
+import com.qmth.themis.business.service.MqDtoService;
+import com.qmth.themis.business.service.TBAttachmentService;
+import com.qmth.themis.business.service.TBExamInvigilateUserService;
+import com.qmth.themis.business.service.TBTaskHistoryService;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.TEExamService;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.service.TEStudentService;
 import com.qmth.themis.business.util.ServletUtil;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
-import io.swagger.annotations.*;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 
 /**
  * @Description: 考生库 前端控制器
@@ -76,7 +110,7 @@ public class TEExamStudentController {
 
     @ApiOperation(value = "考生导出")
     @RequestMapping(value = "/export", method = RequestMethod.POST)
-    public void export(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId,
+    public Result export(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId,
                        @ApiParam(value = "考试场次id", required = false) @RequestParam(required = false) Long activityId,
                        @ApiParam(value = "证件号", required = false) @RequestParam(required = false) String identity,
                        @ApiParam(value = "姓名", required = false) @RequestParam(required = false) String name,
@@ -87,19 +121,36 @@ public class TEExamStudentController {
                        @ApiParam(value = "教学班级", required = false) @RequestParam(required = false) String classNo,
                        @ApiParam(value = "底照是否上传", required = false) @RequestParam(required = false) Integer hasPhoto,
                        HttpServletResponse response) throws Exception {
-        if (Objects.isNull(examId) || Objects.equals(examId, "")) {
-            throw new BusinessException(ExceptionResultEnum.EXAM_ID_IS_NULL);
-        }
-        List<TEExamStudentDto> list = teExamStudentService.examStudentList(examId, activityId, identity, name, roomCode, courseCode, grade,
-                enable, classNo, hasPhoto);
-        if (list != null && list.size() > 0) {
-            for (TEExamStudentDto dto : list) {
-                if (StringUtils.isNotBlank(dto.getBasePhotoUrl())) {
-                    dto.setBasePhotoUrl(systemConfig.getProperty("aliyun.oss.url") + "/" + dto.getBasePhotoUrl());
-                }
-            }
-        }
-        ExportUtils.exportEXCEL("考生信息", TEExamStudentDto.class, list, response);
+    	TBTaskHistory tbTaskHistory = null;
+        Map<String, Object> transMap = new HashMap<String, Object>();
+        TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
+        //往任务表里插一条数据
+        tbTaskHistory = new TBTaskHistory(TaskTypeEnum.EXPORT_EXAM_STUDENT, TaskStatusEnum.INIT, SystemConstant.EXPORT_INIT, 0d, tbUser.getId());
+        taskHistoryService.save(tbTaskHistory);
+        transMap.put("tbTaskHistory", tbTaskHistory);
+        
+        transMap.put("examId", examId);
+        transMap.put("activityId", activityId);
+        transMap.put("identity", identity);
+        transMap.put("name", name);
+        transMap.put("roomCode", roomCode);
+        transMap.put("courseCode", courseCode);
+        transMap.put("grade", grade);
+        transMap.put("enable", enable);
+        transMap.put("classNo", classNo);
+        transMap.put("hasPhoto", hasPhoto);
+        
+        transMap.put("createId", tbUser.getId());
+
+        //mq发送消息start
+        MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_EXPORT.name(), transMap, MqTagEnum.EXAM_STUDENT_EXPORT, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
+        
+        mqDtoService.assembleSendOneWayMsg(mqDto);
+        //mq发送消息end
+        Map<String, Long> map = new HashMap<String, Long>();
+        map.put(SystemConstant.TASK_ID, tbTaskHistory.getId());
+        return ResultUtil.ok(map);
+
     }
 
     @ApiOperation(value = "考生查询接口")

+ 1 - 1
themis-backend/src/main/java/com/qmth/themis/backend/start/StartRunning.java

@@ -47,7 +47,7 @@ public class StartRunning implements CommandLineRunner {
         /**
          * task
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name() + "||" + MqTagEnum.EXAM_STUDENT_EXPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
          * log
          */

+ 2 - 1
themis-business/src/main/java/com/qmth/themis/business/enums/MqTagEnum.java

@@ -44,7 +44,8 @@ public enum MqTagEnum {
     EXAM_BREAK("考试断点标签", "考试断点", "normal", 32),
     EXAM_STOP("考试移动端监控退出标签", "考试移动端退出暂停", "normal", 33),
     EXAM_RECORD_UPDATE_COLUMNS("考试记录多字段数据更新标签", "考试记录多字段数据更新", "normal", 34),
-    EXAM_STUDENT("考生一次性延时任务标签", "考生一次性延时任务", "normal", 35);
+    EXAM_STUDENT("考生一次性延时任务标签", "考生一次性延时任务", "normal", 35),
+    EXAM_STUDENT_EXPORT("考生导出任务标签", "考生导出任务", "normal", 36);
 
     private MqTagEnum(String desc, String code, String type, int id) {
         this.desc = desc;

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/enums/TaskTypeEnum.java

@@ -1,7 +1,5 @@
 package com.qmth.themis.business.enums;
 
-import java.util.Objects;
-
 /**
  * @Description: 任务类型
  * @Param:
@@ -19,7 +17,9 @@ public enum TaskTypeEnum {
 
     IMPORT_INVIGILATE_USER("导入监考员"),
 
-    EXPORT_INVIGILATE_USER("导出监考员");
+    EXPORT_INVIGILATE_USER("导出监考员"),
+    
+    EXPORT_EXAM_STUDENT("导出考生");
 
     private String code;
 

+ 4 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TBAttachmentService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.themis.business.entity.TBAttachment;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -57,4 +58,7 @@ public interface TBAttachmentService extends IService<TBAttachment> {
      * @param list
      */
     void batchDeleteAttachment(Map<String, Object> map, List<Map> list);
+
+	TBAttachment saveAttachment(File file, String md5, String path, Map<String, Object> map, Long orgId, Long userId)
+			throws IOException;
 }

+ 90 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TBAttachmentServiceImpl.java

@@ -151,6 +151,96 @@ public class TBAttachmentServiceImpl extends ServiceImpl<TBAttachmentMapper, TBA
         }
         return tbAttachment;
     }
+    
+    @Override
+    @Transactional
+    public TBAttachment saveAttachment(File file, String md5, String path, Map<String, Object> map, Long orgId, Long userId) throws IOException {
+        log.info("ossMap:{}", JacksonUtil.parseJson(map));
+        TBAttachment tbAttachment = null;
+        try {
+            int temp = file.getName().indexOf(".");
+            String fileName = file.getName().substring(0, temp);
+            String format = file.getName().substring(temp, file.getName().length());
+            List<String> attachmentTypeList = (List<String>) map.get(SystemConstant.ATTACHMENT_TYPE);
+            if (Objects.nonNull(format)) {
+                long count = attachmentTypeList.stream().filter(s -> format.equalsIgnoreCase(s)).count();
+                if (count == 0) {
+                    throw new BusinessException("文件格式只能为" + attachmentTypeList.toString());
+                }
+            }
+            long size = file.length();
+            BigDecimal b = new BigDecimal(size);
+            BigDecimal num = new BigDecimal(1024);
+            b = b.divide(num).divide(num).setScale(2, BigDecimal.ROUND_HALF_UP);
+            if (b.doubleValue() > 200) {
+                throw new BusinessException("文件大小不能超过200MB");
+            }
+            log.info("fileName:{}", fileName);
+            log.info("format:{}", format);
+            log.info("size:{}", b);
+            log.info("md5:{}", md5);
+            tbAttachment = new TBAttachment();
+            tbAttachment.setId(Constants.idGen.next());
+            tbAttachment.setPath(path);
+            tbAttachment.setName(fileName);
+            tbAttachment.setType(format);
+            tbAttachment.setSize(b);
+            tbAttachment.setMd5(md5);
+
+            boolean oss = (boolean) map.get(SystemConstant.OSS);
+            LocalDateTime nowTime = LocalDateTime.now();
+            StringJoiner stringJoiner = new StringJoiner("");
+            if (!oss) {
+                stringJoiner.add(SystemConstant.FILES_DIR).add(File.separator);
+            }
+
+            String uploadType = String.valueOf(map.get(SystemConstant.UPLOAD_TYPE));
+            if (Objects.isNull(uploadType)) {
+                throw new BusinessException(ExceptionResultEnum.ATTACHMENT_TYPE_IS_NULL);
+            } else if (Objects.equals(uploadType, UploadFileEnum.base_photo.name())) {
+                stringJoiner.add(uploadType)
+                        .add(File.separator).add(String.valueOf(orgId));
+            } else {
+                stringJoiner.add(uploadType);
+            }
+            stringJoiner.add(File.separator).add(String.valueOf(nowTime.getYear()))
+                    .add(File.separator).add(String.valueOf(nowTime.getMonthValue()))
+                    .add(File.separator).add(String.valueOf(nowTime.getDayOfMonth()));
+            if (oss) {//上传至oss
+                stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                        .add(tbAttachment.getType());
+                OssUtil.ossUpload(map, stringJoiner.toString(), file);
+            } else {//上传至服务器
+                File finalFile = new File(stringJoiner.add(File.separator).add(String.valueOf(UUID.randomUUID()).replaceAll("-", ""))
+                        .add(tbAttachment.getType()).toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyFile(file, finalFile);
+            }
+            JSONObject jsonObject = new JSONObject();
+            if (oss) {
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+            } else {
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+            }
+            jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
+            jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.valueOf(uploadType).ordinal());
+            tbAttachment.setRemark(jsonObject.toJSONString());
+            tbAttachment.setCreateId(userId);
+            this.save(tbAttachment);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            deleteAttachment(map, tbAttachment);
+            if (e instanceof BusinessException) {
+                throw new BusinessException(e.getMessage());
+            } else {
+                throw new RuntimeException(e);
+            }
+        }
+        return tbAttachment;
+    }
 
     @Override
     public TBAttachment saveAttachment(String path, Map<String, Object> map, Long orgId, Long userId) throws IOException {

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

@@ -99,7 +99,7 @@ public class TaskExportCommon {
     public void ossUpload(File file) throws FileNotFoundException {
         boolean oss = (boolean) this.getOssEnv().get(SystemConstant.OSS);
         if (oss) {//上传至oss
-            this.ossUtil.ossUpload(this.ossEnv, file.getPath(), new FileInputStream(file));
+            this.ossUtil.ossUpload(this.ossEnv, file.getPath().replaceAll("\\\\", "/"), new FileInputStream(file));
             file.delete();
         }
     }
@@ -137,17 +137,26 @@ public class TaskExportCommon {
             fileWriter = new FileWriter(file);
             fileWriter.write(txtStr);
             JSONObject json = new JSONObject();
-            json.put("path", file.getPath());
+            if (Objects.equals(this.type, SystemConstant.OSS)) {
+            	json.put("path", file.getPath().replaceAll("\\\\", "/"));
+            }else {
+            	json.put("path", file.getPath());
+            }
             json.put("type", this.type);
             this.tbTaskHistory.setReportFilePath(json.toJSONString());
             if (Objects.nonNull(excelFile)) {
                 JSONObject excelJson = new JSONObject();
-                excelJson.put("path", excelFile.getPath());
+                if (Objects.equals(this.type, SystemConstant.OSS)) {
+                	excelJson.put("path", excelFile.getPath().replaceAll("\\\\", "/"));
+                }else {
+                	excelJson.put("path", excelFile.getPath());
+                }
+                
                 excelJson.put("type", this.type);
                 this.tbTaskHistory.setResultFilePath(excelJson.toJSONString());
             }
             if (Objects.equals(this.type, SystemConstant.OSS)) {
-                this.ossUtil.ossUpload(this.ossEnv, file.getPath(), txtStr);
+                this.ossUtil.ossUpload(this.ossEnv, file.getPath().replaceAll("\\\\", "/"), txtStr);
                 file.delete();
             }
             tbTaskHistoryService.updateById(this.tbTaskHistory);

+ 123 - 0
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamStudentExportTemplete.java

@@ -0,0 +1,123 @@
+package com.qmth.themis.business.templete.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.StringJoiner;
+import java.util.UUID;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.qmth.themis.business.config.SystemConfig;
+import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.dto.response.TEExamStudentDto;
+import com.qmth.themis.business.enums.TaskStatusEnum;
+import com.qmth.themis.business.excel.ExportUtils;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.templete.TaskExportCommon;
+import com.qmth.themis.business.templete.TaskExportTemplete;
+import com.qmth.themis.common.util.Result;
+import com.qmth.themis.common.util.ResultUtil;
+
+/**
+ * @Description: 考场导出任务
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/7/20
+ */
+@Service
+public class TaskExamStudentExportTemplete implements TaskExportTemplete {
+    private final static Logger log = LoggerFactory.getLogger(TaskExamStudentExportTemplete.class);
+
+    @Resource
+    SystemConfig systemConfig;
+
+    @Resource
+    TEExamStudentService teExamStudentService;
+
+    /**
+     * 考生导出模版
+     *
+     * @param map
+     * @return
+     */
+    @Override
+    public Result exportTask(Map<String, Object> transMap) throws IOException {
+        log.info("开始导出考场数据");
+        long start = System.currentTimeMillis();
+        TaskExportCommon taskExportCommon = new TaskExportCommon(transMap);
+        taskExportCommon.init();
+        FileOutputStream fos = null;
+        File mkdir=null;
+        File file = null;
+        
+        boolean oss = (boolean) taskExportCommon.getOssEnv().get(SystemConstant.OSS);
+        try {
+            StringJoiner stringJoiner = new StringJoiner("");
+            if (!oss) {
+                stringJoiner.add(SystemConstant.FILES_DIR).add(File.separator);
+            }
+            LocalDateTime nowTime = LocalDateTime.now();
+            String uploadType = String.valueOf(taskExportCommon.getOssEnv().get(SystemConstant.UPLOAD_TYPE));
+            stringJoiner.add(uploadType).add(File.separator).add(String.valueOf(nowTime.getYear()))
+                    .add(File.separator).add(String.valueOf(nowTime.getMonthValue()))
+                    .add(File.separator).add(String.valueOf(nowTime.getDayOfMonth()));
+            mkdir = new File(stringJoiner.toString());
+            if (!mkdir.exists()) {
+                mkdir.mkdirs();
+            }
+            file=new File(mkdir.getPath()+"/"+uuid()+SystemConstant.EXCEL_PREFIX);
+            file.createNewFile();
+        	fos = new FileOutputStream(file);
+            Long examId=(Long)transMap.get("examId");
+            Long activityId=(Long)transMap.get("activityId");
+            String identity=(String)transMap.get("identity");
+            String name=(String)transMap.get("name");
+            String roomCode=(String)transMap.get("roomCode");
+            String courseCode=(String)transMap.get("courseCode");
+            String grade=(String)transMap.get("grade");
+            Integer enable=(Integer)transMap.get("enable");
+            String classNo=(String)transMap.get("classNo");
+            Integer hasPhoto=(Integer)transMap.get("hasPhoto");
+    		List<TEExamStudentDto> list = teExamStudentService.examStudentList(examId, activityId, identity, name, roomCode, courseCode, grade,
+    				enable, classNo,hasPhoto);
+    		ExportUtils.makeExcel(TEExamStudentDto.class, list, fos);
+            taskExportCommon.ossUpload(file);
+            taskExportCommon.getTbTaskHistory().setSummary("处理成功");
+            long end = System.currentTimeMillis();
+            log.info("导出考场数据结束,============耗时============:{}秒", (end - start) / 1000);
+        } catch (Exception e) {
+            log.error("导出报错", e);
+            taskExportCommon.setException(true);
+			taskExportCommon.getTbTaskHistory().setSummary("处理出错");
+        } finally {
+            if (Objects.nonNull(fos)) {
+                fos.flush();
+                fos.close();
+            }
+            if (oss&&file != null) {
+				file.delete();
+			}
+            taskExportCommon.getTbTaskHistory().setFinishTime(System.currentTimeMillis());
+            taskExportCommon.getTbTaskHistory().setStatus(TaskStatusEnum.FINISH);
+            taskExportCommon.getTbTaskHistory().setProgress(100.0d);
+            //这里写入txt文件
+            taskExportCommon.writeExportResultTxt(mkdir.getPath(), "", file);
+        }
+        return ResultUtil.ok(Collections.singletonMap("success", true));
+    }
+    
+	private String uuid() {
+		return UUID.randomUUID().toString().replaceAll("-", "");
+	}
+}

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java

@@ -49,7 +49,7 @@ public class StartRunning implements CommandLineRunner {
         /**
          * task
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name() + "||" + MqTagEnum.EXAM_STUDENT_EXPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
          * log
          */

+ 57 - 17
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -1,5 +1,21 @@
 package com.qmth.themis.mq.service.impl;
 
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import javax.annotation.Resource;
+
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -13,12 +29,48 @@ import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.WarningDto;
-import com.qmth.themis.business.entity.*;
-import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.entity.TBSession;
+import com.qmth.themis.business.entity.TEExamStudentLog;
+import com.qmth.themis.business.entity.TEUserLog;
+import com.qmth.themis.business.entity.TIeExamInvigilateCall;
+import com.qmth.themis.business.entity.TIeExamInvigilateCallLog;
+import com.qmth.themis.business.entity.TIeInvigilateExceptionInfo;
+import com.qmth.themis.business.entity.TMRocketMessage;
+import com.qmth.themis.business.entity.TOeExamBreakHistory;
+import com.qmth.themis.business.entity.TOeExamRecord;
+import com.qmth.themis.business.enums.ExamRecordFieldEnum;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
+import com.qmth.themis.business.enums.ExamTypeEnum;
+import com.qmth.themis.business.enums.ExceptionEnum;
+import com.qmth.themis.business.enums.FinishTypeEnum;
+import com.qmth.themis.business.enums.LivenessTypeEnum;
+import com.qmth.themis.business.enums.MqExecTypeEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
+import com.qmth.themis.business.enums.PhotoTypeEnum;
+import com.qmth.themis.business.enums.SystemOperationEnum;
+import com.qmth.themis.business.enums.VerifyExceptionEnum;
+import com.qmth.themis.business.enums.WebsocketStatusEnum;
+import com.qmth.themis.business.service.CommonService;
+import com.qmth.themis.business.service.MqDtoService;
+import com.qmth.themis.business.service.TBSessionService;
+import com.qmth.themis.business.service.TEExamService;
+import com.qmth.themis.business.service.TEExamStudentLogService;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.service.TEUserLogService;
+import com.qmth.themis.business.service.TIeExamInvigilateCallLogService;
+import com.qmth.themis.business.service.TIeExamInvigilateCallService;
+import com.qmth.themis.business.service.TIeInvigilateExceptionInfoService;
+import com.qmth.themis.business.service.TMRocketMessageService;
+import com.qmth.themis.business.service.TOeExamBreakHistoryService;
+import com.qmth.themis.business.service.TOeExamRecordService;
+import com.qmth.themis.business.service.TOeFaceVerifyHistoryService;
+import com.qmth.themis.business.service.TOeLivenessVerifyHistoryService;
+import com.qmth.themis.business.service.WarningService;
 import com.qmth.themis.business.templete.TaskExportTemplete;
 import com.qmth.themis.business.templete.TaskImportTemplete;
 import com.qmth.themis.business.templete.impl.TaskExamPaperImportTemplete;
+import com.qmth.themis.business.templete.impl.TaskExamStudentExportTemplete;
 import com.qmth.themis.business.templete.impl.TaskExamStudentImportTemplete;
 import com.qmth.themis.business.templete.impl.TaskRoomCodeExportTemplete;
 import com.qmth.themis.business.templete.impl.TaskRoomCodeImportTemplete;
@@ -28,20 +80,6 @@ import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.util.SimpleBeanUtil;
 import com.qmth.themis.mq.service.MqLogicService;
-import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
-import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
-import org.apache.rocketmq.common.message.MessageExt;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 
 /**
  * @Description: mq执行逻辑 impl
@@ -205,6 +243,8 @@ public class MqLogicServiceImpl implements MqLogicService {
                 TaskExportTemplete taskExportTemplete = null;
                 if (Objects.equals(MqTagEnum.ROOM_CODE_EXPORT.name(), tag)) {
                     taskExportTemplete = SpringContextHolder.getBean(TaskRoomCodeExportTemplete.class);
+                }else if (Objects.equals(MqTagEnum.EXAM_STUDENT_EXPORT.name(), tag)) {
+                    taskExportTemplete = SpringContextHolder.getBean(TaskExamStudentExportTemplete.class);
                 }
                 try {
                     taskExportTemplete.exportTask(map);

+ 1 - 1
themis-task/src/main/java/com/qmth/themis/task/start/StartRunning.java

@@ -71,7 +71,7 @@ public class StartRunning implements CommandLineRunner {
         /**
          * task
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, MqGroupEnum.TASK_GROUP.getCode(), MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STUDENT_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_IMPORT.name() + "||" + MqTagEnum.ROOM_CODE_EXPORT.name() + "||" + MqTagEnum.EXAM_PAPER_IMPORT.name() + "||" + MqTagEnum.EXAM_STUDENT_EXPORT.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(TaskConcurrentlyImpl.class));
         /**
          * log
          */