Explorar o código

考试明细列表导出

deason hai 10 meses
pai
achega
69bfc172df

+ 7 - 0
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/ExamRecordDetailService.java

@@ -5,6 +5,8 @@ import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordInf
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordQuery;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordQuery;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 
 
+import java.util.List;
+
 public interface ExamRecordDetailService {
 public interface ExamRecordDetailService {
 
 
     /**
     /**
@@ -12,4 +14,9 @@ public interface ExamRecordDetailService {
      */
      */
     Page<ExamRecordInfo> getExamRecordDetailList(ExamRecordQuery query, UserDataRule courseRule, UserDataRule orgRule);
     Page<ExamRecordInfo> getExamRecordDetailList(ExamRecordQuery query, UserDataRule courseRule, UserDataRule orgRule);
 
 
+    /**
+     * 查询“考试明细”列表(导出Excel)
+     */
+    List<ExamRecordInfo> getExamRecordDetailListForExport(ExamRecordQuery query, UserDataRule courseRule, UserDataRule orgRule);
+
 }
 }

+ 7 - 4
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/AsyncExportServiceImpl.java

@@ -83,6 +83,9 @@ public class AsyncExportServiceImpl implements AsyncExportService {
 	@Autowired
 	@Autowired
 	private ExamRecordAlreadyAuditService examRecordAlreadyAuditService;
 	private ExamRecordAlreadyAuditService examRecordAlreadyAuditService;
 
 
+	@Autowired
+	private ExamRecordDetailService examRecordDetailService;
+
 	@Autowired
 	@Autowired
 	private UserCloudService userCloudService;
 	private UserCloudService userCloudService;
 
 
@@ -213,16 +216,16 @@ public class AsyncExportServiceImpl implements AsyncExportService {
 		List<ExamRecordInfo> examRecords;
 		List<ExamRecordInfo> examRecords;
 		try {
 		try {
 			ExportTaskEntity task = exportTaskService.findById(taskId);
 			ExportTaskEntity task = exportTaskService.findById(taskId);
-			UserDataRules uds = new UserDataRules(getUserDataRule(task.getCreator(), DataRuleType.ORG),
-					getUserDataRule(task.getCreator(), DataRuleType.COURSE));
 			req.setTaskId(taskId);
 			req.setTaskId(taskId);
-			examRecords = examRecordService.getExamRecordDetailListForAsync(uds, req);
 
 
+			UserDataRule courseRule = this.getUserDataRule(task.getCreator(), DataRuleType.COURSE);
+			UserDataRule orgRule = this.getUserDataRule(task.getCreator(), DataRuleType.ORG);
+
+			examRecords = examRecordDetailService.getExamRecordDetailListForExport(req, courseRule, orgRule);
 			if (CollectionUtils.isEmpty(examRecords)) {
 			if (CollectionUtils.isEmpty(examRecords)) {
 				exportTaskService.updateExportTaskStatus(taskId, ExportTaskStatus.ERROR, "当前条件暂无数据,任务终止");
 				exportTaskService.updateExportTaskStatus(taskId, ExportTaskStatus.ERROR, "当前条件暂无数据,任务终止");
 				return;
 				return;
 			}
 			}
-
 		} catch (ExportTaskStopException e) {
 		} catch (ExportTaskStopException e) {
 			exportTaskService.updateExportTaskStatus(taskId, ExportTaskStatus.TERMINATE);
 			exportTaskService.updateExportTaskStatus(taskId, ExportTaskStatus.TERMINATE);
 			return;
 			return;

+ 41 - 0
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamRecordDetailServiceImpl.java

@@ -13,6 +13,7 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.enums.CourseLevel;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.IsSuccess;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.IsSuccess;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.TrueFalse;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.TrueFalse;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordDetailService;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordDetailService;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExportTaskService;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordFileAnswerInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordFileAnswerInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordQuery;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordQuery;
@@ -45,6 +46,9 @@ public class ExamRecordDetailServiceImpl implements ExamRecordDetailService {
     @Autowired
     @Autowired
     private ExamRecordFileAnswerRepo examRecordFileAnswerRepo;
     private ExamRecordFileAnswerRepo examRecordFileAnswerRepo;
 
 
+    @Autowired
+    private ExportTaskService exportTaskService;
+
     @Autowired
     @Autowired
     private JdbcTemplate jdbcTemplate;
     private JdbcTemplate jdbcTemplate;
 
 
@@ -80,6 +84,43 @@ public class ExamRecordDetailServiceImpl implements ExamRecordDetailService {
         return new PageImpl<>(list, pageable, totalElements);
         return new PageImpl<>(list, pageable, totalElements);
     }
     }
 
 
+    @Override
+    public List<ExamRecordInfo> getExamRecordDetailListForExport(ExamRecordQuery query, UserDataRule courseRule, UserDataRule orgRule) {
+        Check.isNull(query, "请求参数不能为空!");
+        Check.isNull(query.getExamId(), "请先选择考试!");
+
+        if (courseRule.assertEmptyQueryResult() || orgRule.assertEmptyQueryResult()) {
+            return new ArrayList<>();
+        }
+
+        query.setPageNo(1);
+        query.setPageSize(1000);
+
+        List<ExamRecordInfo> result = new ArrayList<>();
+        while (true) {
+            // 检查是否终止导出
+            exportTaskService.checkStopExportTaskById(query.getTaskId());
+
+            int offset = (query.getPageNo() - 1) * query.getPageSize();
+            String querySql = this.queryExamRecordDetailListSql(query, false, courseRule, orgRule);
+            String pageSql = querySql + " limit " + offset + "," + query.getPageSize();
+            log.warn("导出考试明细:{}", pageSql);
+
+            List<ExamRecordInfo> list = jdbcTemplate.query(pageSql, new BeanPropertyRowMapper(ExamRecordInfo.class));
+            if (CollectionUtils.isEmpty(list)) {
+                break;
+            }
+
+            result.addAll(list);
+            query.setPageNo(query.getPageNo() + 1);
+        }
+
+        // 填充其它信息
+        this.fillOtherInfo(result, query.getExamId());
+
+        return result;
+    }
+
     private void fillOtherInfo(List<ExamRecordInfo> list, Long examId) {
     private void fillOtherInfo(List<ExamRecordInfo> list, Long examId) {
         ExamSettingsCacheBean examCache = CacheHelper.getExamSettings(examId);
         ExamSettingsCacheBean examCache = CacheHelper.getExamSettings(examId);
         Map<Long, String> orgMaps = new HashMap<>();
         Map<Long, String> orgMaps = new HashMap<>();