deason 2 жил өмнө
parent
commit
59d193818c

+ 61 - 16
src/main/java/cn/com/qmth/examcloud/tool/service/export_student_answer_and_score_detail/ExportStudentAnswerAndScoreDetailTask.java

@@ -3,10 +3,9 @@ package cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detai
 import cn.com.qmth.examcloud.tool.config.SysProperty;
 import cn.com.qmth.examcloud.tool.config.SysProperty;
 import cn.com.qmth.examcloud.tool.entity.TaskEntity;
 import cn.com.qmth.examcloud.tool.entity.TaskEntity;
 import cn.com.qmth.examcloud.tool.service.CommonService;
 import cn.com.qmth.examcloud.tool.service.CommonService;
-import cn.com.qmth.examcloud.tool.utils.DateHelper;
-import cn.com.qmth.examcloud.tool.utils.FileHelper;
-import cn.com.qmth.examcloud.tool.utils.JsonMapper;
-import cn.com.qmth.examcloud.tool.utils.StatusException;
+import cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detail.vo.CourseVO;
+import cn.com.qmth.examcloud.tool.utils.*;
+import cn.com.qmth.examcloud.tool.vo.Pager;
 import cn.com.qmth.examcloud.tool.vo.User;
 import cn.com.qmth.examcloud.tool.vo.User;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.write.handler.SheetWriteHandler;
 import com.alibaba.excel.write.handler.SheetWriteHandler;
@@ -22,6 +21,9 @@ import org.springframework.stereotype.Component;
 
 
 import java.io.File;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 @Component
 @Component
 public class ExportStudentAnswerAndScoreDetailTask {
 public class ExportStudentAnswerAndScoreDetailTask {
@@ -41,6 +43,7 @@ public class ExportStudentAnswerAndScoreDetailTask {
         }
         }
 
 
         final String tempDir = "export_" + DateHelper.currentTimeMillis() + "_" + task.getId();
         final String tempDir = "export_" + DateHelper.currentTimeMillis() + "_" + task.getId();
+        FileHelper.makeDirs(sysProperty.getDataDir() + "/" + tempDir);
 
 
         User user = commonService.login(sysProperty.getServerDomain(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
         User user = commonService.login(sysProperty.getServerDomain(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
         this.execute(jsonParams, user, tempDir);
         this.execute(jsonParams, user, tempDir);
@@ -57,25 +60,67 @@ public class ExportStudentAnswerAndScoreDetailTask {
         Boolean needSubjective = jsonParams.get("needSubjective").asBoolean(false);
         Boolean needSubjective = jsonParams.get("needSubjective").asBoolean(false);
         log.info("examId = {}, courseCodes = {}, needSubjective = {}", examId, courseCodes, needSubjective);
         log.info("examId = {}, courseCodes = {}, needSubjective = {}", examId, courseCodes, needSubjective);
 
 
+        // 待导出的课程列表(未指定课程则按考试的全部课程)
+        List<CourseVO> todoCourses;
+        List<CourseVO> courses = this.getExamCourseList(user.getKey(), user.getToken(), examId);
         if (StringUtils.isNotBlank(courseCodes)) {
         if (StringUtils.isNotBlank(courseCodes)) {
+            todoCourses = new ArrayList<>();
             String[] courseCodeList = StringUtils.split(courseCodes, ",");
             String[] courseCodeList = StringUtils.split(courseCodes, ",");
-
             for (String courseCode : courseCodeList) {
             for (String courseCode : courseCodeList) {
-                //todo
+                for (CourseVO vo : courses) {
+                    if (vo.getCourseCode().equals(courseCode)) {
+                        todoCourses.add(vo);
+                    }
+                }
+            }
+        } else {
+            todoCourses = courses;
+        }
+        log.info("待导出的课程列表数为:{}", todoCourses.size());
+
+        for (CourseVO course : todoCourses) {
+            // 按考试课程逐个导出
+            this.export(examId, course, tempDir);
+        }
+    }
 
 
-                final String dataFilePath = tempDir + "/" + examId + "_" + courseCode + ".xlsx";
-                File dataFile = new File(sysProperty.getDataDir() + "/" + dataFilePath);
-                FileHelper.makeDirs(dataFile.getParent());
+    private void export(Long examId, CourseVO course, String tempDir) {
+        //todo
 
 
-                EasyExcel.write(dataFile, User.class).registerWriteHandler(new SheetWriteHandler() {
-                    @Override
-                    public void afterSheetCreate(WriteWorkbookHolder workbookHolder, WriteSheetHolder sheetHolder) {
-                        Sheet sheet = sheetHolder.getSheet();
-                        sheet.createFreezePane(1, 1);
-                    }
-                }).sheet().doWrite(new ArrayList<>());
+        final String dataFilePath = tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
+        File dataFile = new File(sysProperty.getDataDir() + "/" + dataFilePath);
+
+        EasyExcel.write(dataFile, User.class).registerWriteHandler(new SheetWriteHandler() {
+            @Override
+            public void afterSheetCreate(WriteWorkbookHolder workbookHolder, WriteSheetHolder sheetHolder) {
+                Sheet sheet = sheetHolder.getSheet();
+                sheet.createFreezePane(1, 1);
             }
             }
+        }).sheet().doWrite(new ArrayList<>());
+    }
+
+    /**
+     * 获取考试相关的课程列表
+     */
+    private List<CourseVO> getExamCourseList(String key, String token, Long examId) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("examId", examId);
+        params.put("pageNo", 1);
+        params.put("pageSize", 1000);
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", key);
+        headers.put("token", token);
+
+        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);
+        if (page != null && page.getContent() != null) {
+            return page.getContent();
         }
         }
+
+        return new ArrayList<>();
     }
     }
 
 
 }
 }

+ 18 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/export_student_answer_and_score_detail/vo/CourseVO.java

@@ -0,0 +1,18 @@
+package cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detail.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CourseVO {
+
+    private Long courseId;
+
+    private String courseCode;
+
+    private String courseName;
+
+    private String courseLevel;
+
+}

+ 1 - 1
src/main/java/cn/com/qmth/examcloud/tool/utils/HttpHelper.java

@@ -41,7 +41,7 @@ public class HttpHelper {
     private static String call(String url, Map<String, String> headers, Request.Builder builder) {
     private static String call(String url, Map<String, String> headers, Request.Builder builder) {
         if (MapUtils.isNotEmpty(headers)) {
         if (MapUtils.isNotEmpty(headers)) {
             for (Map.Entry<String, String> entry : headers.entrySet()) {
             for (Map.Entry<String, String> entry : headers.entrySet()) {
-                builder = builder.addHeader(entry.getKey(), entry.getValue());
+                builder.addHeader(entry.getKey(), entry.getValue());
             }
             }
         }
         }
 
 

+ 0 - 2
src/main/java/cn/com/qmth/examcloud/tool/utils/JsonMapper.java

@@ -257,8 +257,6 @@ public class JsonMapper {
 
 
         try {
         try {
             mapper.readerForUpdating(object).readValue(jsonStr);
             mapper.readerForUpdating(object).readValue(jsonStr);
-        } catch (JsonProcessingException e) {
-            LOG.error("updateJson error!" + e.getMessage(), e);
         } catch (IOException e) {
         } catch (IOException e) {
             LOG.error("updateJson error!" + e.getMessage(), e);
             LOG.error("updateJson error!" + e.getMessage(), e);
         }
         }

+ 27 - 0
src/main/java/cn/com/qmth/examcloud/tool/vo/Pager.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.examcloud.tool.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Setter
+@Getter
+public class Pager<T> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private List<T> content;
+
+    private int size;//每页条数
+
+    private int number;//当前第几页
+
+    private long totalElements;//总条数
+
+    private int totalPages;//总页数
+
+    private int numberOfElements;//当前页条数
+
+}

+ 2 - 2
src/main/resources/templates/admin/taskList.ftlh

@@ -44,9 +44,9 @@
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <span v-if="scope.row.status!='ERROR'">{{ taskStatusTitle(scope.row.status) }}</span>
                             <span v-if="scope.row.status!='ERROR'">{{ taskStatusTitle(scope.row.status) }}</span>
                             <el-popover trigger="hover" placement="right" v-if="scope.row.status=='ERROR'">
                             <el-popover trigger="hover" placement="right" v-if="scope.row.status=='ERROR'">
-                                <p>{{ scope.row.description }}&nbsp;</p>
+                                <p style="color: red">{{ scope.row.description }}&nbsp;</p>
                                 <div slot="reference">
                                 <div slot="reference">
-                                    <span style="color: red">{{ taskStatusTitle(scope.row.status) }}</span>
+                                    <span style="color: red;cursor: pointer">{{ taskStatusTitle(scope.row.status) }}</span>
                                 </div>
                                 </div>
                             </el-popover>
                             </el-popover>
                         </template>
                         </template>