|
@@ -4,6 +4,7 @@ import cn.com.qmth.examcloud.tool.config.SysProperty;
|
|
|
import cn.com.qmth.examcloud.tool.entity.TaskEntity;
|
|
|
import cn.com.qmth.examcloud.tool.service.CommonService;
|
|
|
import cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detail.vo.CourseVO;
|
|
|
+import cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detail.vo.ExamStudentScoreVO;
|
|
|
import cn.com.qmth.examcloud.tool.utils.*;
|
|
|
import cn.com.qmth.examcloud.tool.vo.Pager;
|
|
|
import cn.com.qmth.examcloud.tool.vo.User;
|
|
@@ -11,7 +12,9 @@ import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.excel.write.handler.SheetWriteHandler;
|
|
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
|
|
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
|
import org.slf4j.Logger;
|
|
@@ -80,25 +83,65 @@ public class ExportStudentAnswerAndScoreDetailTask {
|
|
|
|
|
|
for (CourseVO course : todoCourses) {
|
|
|
// 按考试课程逐个导出
|
|
|
- this.export(examId, course, tempDir);
|
|
|
+ this.export(examId, course, user, tempDir);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void export(Long examId, CourseVO course, String tempDir) {
|
|
|
+ private void export(Long examId, CourseVO course, User user, String tempDir) {
|
|
|
+ List<ExamStudentScoreVO> examStudentScoreList = this.getExamStudentScoreList(user.getKey(), user.getToken(), examId, course.getCourseId());
|
|
|
+
|
|
|
//todo
|
|
|
|
|
|
final String dataFilePath = tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
|
|
|
File dataFile = new File(sysProperty.getDataDir() + "/" + dataFilePath);
|
|
|
|
|
|
- EasyExcel.write(dataFile, User.class).registerWriteHandler(new SheetWriteHandler() {
|
|
|
+ EasyExcel.write(dataFile, ExamStudentScoreVO.class).registerWriteHandler(new SheetWriteHandler() {
|
|
|
@Override
|
|
|
public void afterSheetCreate(WriteWorkbookHolder workbookHolder, WriteSheetHolder sheetHolder) {
|
|
|
Sheet sheet = sheetHolder.getSheet();
|
|
|
sheet.createFreezePane(1, 1);
|
|
|
}
|
|
|
- }).sheet().doWrite(new ArrayList<>());
|
|
|
+ }).sheet().doWrite(examStudentScoreList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取考生成绩明细列表
|
|
|
+ */
|
|
|
+ private List<ExamStudentScoreVO> getExamStudentScoreList(String key, String token, Long examId, Long courseId) {
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("examId", examId);
|
|
|
+ params.put("courseId", courseId);
|
|
|
+ params.put("pageSize", 2);
|
|
|
+
|
|
|
+ Map<String, String> headers = new HashMap<>();
|
|
|
+ headers.put("key", key);
|
|
|
+ headers.put("token", token);
|
|
|
+
|
|
|
+ String url = sysProperty.getServerUrl() + "/api/ecs_oe_admin/exam/score/statistic/list";
|
|
|
+ List<ExamStudentScoreVO> all = new ArrayList<>();
|
|
|
+ JsonMapper jsonMapper = new JsonMapper();
|
|
|
+
|
|
|
+ int sum = 0, pageNo = 0;
|
|
|
+ while (true) {
|
|
|
+ params.put("pageNo", ++pageNo);
|
|
|
+ String json = HttpHelper.post(url, headers, params);
|
|
|
+
|
|
|
+ Pager<ExamStudentScoreVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<ExamStudentScoreVO>>() {
|
|
|
+ });
|
|
|
+ if (page == null || CollectionUtils.isEmpty(page.getContent())) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ all.addAll(page.getContent());
|
|
|
+
|
|
|
+ sum += page.getContent().size();
|
|
|
+ float rate = sum * 100f / page.getTotalElements();
|
|
|
+ log.info("已获取考生成绩明细数:{} 进度:{}%", sum, rate);
|
|
|
+ }
|
|
|
+
|
|
|
+ return all;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 获取考试相关的课程列表
|
|
|
*/
|
|
@@ -115,7 +158,10 @@ public class ExportStudentAnswerAndScoreDetailTask {
|
|
|
String url = sysProperty.getServerUrl() + "/api/ecs_exam_work/exam/course/list";
|
|
|
String json = HttpHelper.post(url, headers, params);
|
|
|
|
|
|
- Pager<CourseVO> page = new JsonMapper().parseJson(json, Pager.class);
|
|
|
+ JsonMapper jsonMapper = new JsonMapper();
|
|
|
+ Pager<CourseVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<CourseVO>>() {
|
|
|
+ });
|
|
|
+
|
|
|
if (page != null && page.getContent() != null) {
|
|
|
return page.getContent();
|
|
|
}
|