deason 1 жил өмнө
parent
commit
d36216f572

+ 14 - 0
src/main/java/cn/com/qmth/examcloud/tool/cache/CacheHelper.java

@@ -0,0 +1,14 @@
+package cn.com.qmth.examcloud.tool.cache;
+
+import cn.com.qmth.examcloud.tool.vo.user.User;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+public class CacheHelper {
+
+    public static final Cache<String, User> LOGIN_SESSION = CacheBuilder.newBuilder()
+            .expireAfterWrite(60, TimeUnit.MINUTES).build();
+
+}

+ 28 - 0
src/main/java/cn/com/qmth/examcloud/tool/cache/LoginSessionManager.java

@@ -0,0 +1,28 @@
+package cn.com.qmth.examcloud.tool.cache;
+
+import cn.com.qmth.examcloud.tool.vo.user.User;
+
+import java.util.Map;
+
+/**
+ * 在线登录用户会话管理
+ */
+public class LoginSessionManager {
+
+    public static Map<String, User> getLoginSessions() {
+        return CacheHelper.LOGIN_SESSION.asMap();
+    }
+
+    public static User getLoginSession(String sessionKey) {
+        return getLoginSessions().get(sessionKey);
+    }
+
+    public static void addLoginSession(User session) {
+        CacheHelper.LOGIN_SESSION.put(session.getToken(), session);
+    }
+
+    public static void removeLoginSession(String sessionKey) {
+        CacheHelper.LOGIN_SESSION.invalidate(sessionKey);
+    }
+
+}

+ 0 - 22
src/main/java/cn/com/qmth/examcloud/tool/config/SysProperty.java

@@ -21,12 +21,6 @@ public class SysProperty {
     @Value("${examcloud.server.rootOrgId}")
     public Long serverRootOrgId;
 
-    @Value("${examcloud.server.loginName}")
-    public String serverLoginName;
-
-    @Value("${examcloud.server.password}")
-    public String serverPassword;
-
     @Value("${examcloud.server.appId}")
     public String serverAppId;
 
@@ -57,22 +51,6 @@ public class SysProperty {
         this.serverRootOrgId = serverRootOrgId;
     }
 
-    public String getServerLoginName() {
-        return serverLoginName;
-    }
-
-    public void setServerLoginName(String serverLoginName) {
-        this.serverLoginName = serverLoginName;
-    }
-
-    public String getServerPassword() {
-        return serverPassword;
-    }
-
-    public void setServerPassword(String serverPassword) {
-        this.serverPassword = serverPassword;
-    }
-
     public String getServerAppId() {
         return serverAppId;
     }

+ 6 - 1
src/main/java/cn/com/qmth/examcloud/tool/controller/IndexController.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.tool.controller;
 
+import cn.com.qmth.examcloud.tool.cache.LoginSessionManager;
 import cn.com.qmth.examcloud.tool.config.Constants;
 import cn.com.qmth.examcloud.tool.service.CommonService;
 import cn.com.qmth.examcloud.tool.vo.user.User;
@@ -23,7 +24,11 @@ public class IndexController extends BaseController {
 
     @GetMapping(value = "/logout")
     public String logout() {
-        currentSession().removeAttribute(Constants.LOGIN_USER);
+        User user = currentLoginUser();
+        if (user != null) {
+            LoginSessionManager.removeLoginSession(user.getToken());
+            currentSession().removeAttribute(Constants.LOGIN_USER);
+        }
         return "redirect:/login";
     }
 

+ 10 - 14
src/main/java/cn/com/qmth/examcloud/tool/service/CommonService.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.tool.service;
 
+import cn.com.qmth.examcloud.tool.cache.LoginSessionManager;
 import cn.com.qmth.examcloud.tool.config.SysProperty;
 import cn.com.qmth.examcloud.tool.service.export_student_answer_and_score_detail.vo.CourseVO;
 import cn.com.qmth.examcloud.tool.utils.HttpHelper;
@@ -26,15 +27,6 @@ public class CommonService {
     @Autowired
     private SysProperty sysProperty;
 
-    public User login(Long rootOrgId, String loginName, String password) {
-        Map<String, Object> params = new HashMap<>();
-        params.put("rootOrgId", rootOrgId);
-        params.put("accountType", "COMMON_LOGIN_NAME");
-        params.put("accountValue", loginName);
-        params.put("password", password);
-        return this.doLogin(sysProperty.getServerUrl(), params);
-    }
-
     public User login(String serverUrl, String loginName, String password, String smsCode) {
         // serverUrl 示例:abc.exam-cloud.cn
         String[] values = serverUrl.split("\\.");
@@ -59,23 +51,27 @@ public class CommonService {
         String result = HttpHelper.post(url, null, params);
         log.info("LOGIN_IN {}", result);
 
-        return new JsonMapper().parseJson(result, User.class);
+        User user = new JsonMapper().parseJson(result, User.class);
+        user.setServerUrl(serverUrl);
+
+        LoginSessionManager.addLoginSession(user);
+        return user;
     }
 
     /**
      * 获取考试相关的课程列表
      */
-    public List<CourseVO> getExamCourseList(String key, String token, Long examId) {
+    public List<CourseVO> getExamCourseList(User user, 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);
+        headers.put("key", user.getKey());
+        headers.put("token", user.getToken());
 
-        String url = sysProperty.getServerUrl() + "/api/ecs_exam_work/exam/course/list";
+        String url = user.getServerUrl() + "/api/ecs_exam_work/exam/course/list";
         String json = HttpHelper.post(url, headers, params);
 
         JsonMapper jsonMapper = new JsonMapper();

+ 2 - 2
src/main/java/cn/com/qmth/examcloud/tool/service/config_exam_paper/ConfigExamPaperTask.java

@@ -37,7 +37,7 @@ public class ConfigExamPaperTask {
             throw new StatusException("任务参数解析错误!");
         }
 
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
+        User user = null;//todo
         this.execute(jsonParams, user);
     }
 
@@ -48,7 +48,7 @@ public class ConfigExamPaperTask {
 
         // 待处理的课程列表(未指定课程则按考试的全部课程)
         List<CourseVO> todoCourses;
-        List<CourseVO> courses = commonService.getExamCourseList(user.getKey(), user.getToken(), examId);
+        List<CourseVO> courses = commonService.getExamCourseList(user, examId);
         if (StringUtils.isNotBlank(courseCodes)) {
             todoCourses = new ArrayList<>();
             String[] courseCodeList = StringUtils.split(courseCodes, ",");

+ 45 - 25
src/main/java/cn/com/qmth/examcloud/tool/service/export_student_answer_and_score_detail/ExportStudentAnswerAndScoreDetailTask.java

@@ -44,11 +44,12 @@ public class ExportStudentAnswerAndScoreDetailTask {
         final String tempDir = "export_" + DateHelper.currentTimeMillis() + "_" + task.getId();
         FileHelper.makeDirs(sysProperty.getDataDir() + "/" + tempDir);
 
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
+        User user = null;//todo
         this.execute(jsonParams, user, tempDir);
 
         // 压缩文件
-        FileHelper.zip(new File(sysProperty.getDataDir() + "/" + tempDir), new File(sysProperty.getDataDir() + "/" + tempDir + ".zip"));
+        FileHelper.zip(new File(sysProperty.getDataDir() + "/" + tempDir),
+                new File(sysProperty.getDataDir() + "/" + tempDir + ".zip"));
         task.setFilePath(tempDir + ".zip");
     }
 
@@ -57,11 +58,12 @@ public class ExportStudentAnswerAndScoreDetailTask {
         String courseCodes = jsonParams.get("courseCodes").asText("");
         Boolean needSubjective = jsonParams.get("needSubjective").asBoolean(false);
         Boolean needQuestionId = jsonParams.get("needQuestionId").asBoolean(false);
-        log.info("examId = {}, courseCodes = {}, needSubjective = {}, needQuestionId = {}", examId, courseCodes, needSubjective, needQuestionId);
+        log.info("examId = {}, courseCodes = {}, needSubjective = {}, needQuestionId = {}", examId, courseCodes,
+                needSubjective, needQuestionId);
 
         // 待处理的课程列表(未指定课程则按考试的全部课程)
         List<CourseVO> todoCourses;
-        List<CourseVO> courses = commonService.getExamCourseList(user.getKey(), user.getToken(), examId);
+        List<CourseVO> courses = commonService.getExamCourseList(user, examId);
         if (StringUtils.isNotBlank(courseCodes)) {
             todoCourses = new ArrayList<>();
             String[] courseCodeList = StringUtils.split(courseCodes, ",");
@@ -86,8 +88,10 @@ public class ExportStudentAnswerAndScoreDetailTask {
         }
     }
 
-    private void export(Long examId, CourseVO course, Boolean needSubjective, Boolean needQuestionId, User user, String tempDir) {
-        List<ExamStudentScoreVO> examStudentScoreList = this.getExamStudentScoreList(user.getKey(), user.getToken(), examId, course.getCourseId());
+    private void export(Long examId, CourseVO course, Boolean needSubjective, Boolean needQuestionId, User user,
+            String tempDir) {
+        List<ExamStudentScoreVO> examStudentScoreList = this.getExamStudentScoreList(user.getKey(), user.getToken(),
+                examId, course.getCourseId());
 
         // Excel动态列
         List<String> dynamicExcelHeaders = new ArrayList<>();
@@ -98,15 +102,14 @@ public class ExportStudentAnswerAndScoreDetailTask {
             index++;
             if (index % 500 == 0) {
                 float rate = index * 100f / examStudentScoreList.size();
-                log.info("examId:{} courseId:{} 已获取考生作答明细数:{} 进度:{}%", examId, course.getCourseId(), index, rate);
+                log.info("examId:{} courseId:{} 已获取考生作答明细数:{} 进度:{}%", examId, course.getCourseId(), index,
+                        rate);
             }
 
             List<String> rowValues = Lists.newArrayList(vo.getOrgName(), vo.getCourseCode(), vo.getCourseName(),
                     vo.getCourseLevel(), vo.getIdentityNumber(), vo.getStudentCode(), vo.getStudentName(),
-                    vo.getGrade(), vo.getSpecialtyName(), vo.getIsAbsent(),
-                    vo.getObjectiveScore().replace("--", "0"),
-                    vo.getSubjectiveScore().replace("--", "0"),
-                    vo.getFinalExamScore().replace("--", "0"),
+                    vo.getGrade(), vo.getSpecialtyName(), vo.getIsAbsent(), vo.getObjectiveScore().replace("--", "0"),
+                    vo.getSubjectiveScore().replace("--", "0"), vo.getFinalExamScore().replace("--", "0"),
                     vo.getBasePaperId());
             excelRows.add(rowValues);
 
@@ -118,7 +121,8 @@ public class ExportStudentAnswerAndScoreDetailTask {
             }
 
             // 获取考试试题作答记录
-            List<ExamQuestionVO> examQuestions = this.getExamRecordQuestions(user.getKey(), user.getToken(), vo.getExamRecordDataId());
+            List<ExamQuestionVO> examQuestions = this.getExamRecordQuestions(user.getKey(), user.getToken(),
+                    vo.getExamRecordDataId());
 
             if (dynamicExcelHeaders.isEmpty()) {
                 for (ExamQuestionVO question : examQuestions) {
@@ -128,11 +132,18 @@ public class ExportStudentAnswerAndScoreDetailTask {
                     }
 
                     if (needQuestionId) {
-                        dynamicExcelHeaders.add(String.format("%s%s-%s-ID", question.getQuestionType().getDesc(), question.getMainNumber(), question.getOrder()));
+                        dynamicExcelHeaders.add(String.format("%s%s-%s-ID", question.getQuestionType().getDesc(),
+                                question.getMainNumber(), question.getOrder()));
                     }
-                    dynamicExcelHeaders.add(String.format("%s%s-%s答案", question.getQuestionType().getDesc(), question.getMainNumber(), question.getOrder()));
-                    dynamicExcelHeaders.add(String.format("%s%s-%s作答", question.getQuestionType().getDesc(), question.getMainNumber(), question.getOrder()));
-                    dynamicExcelHeaders.add(String.format("%s%s-%s得分", question.getQuestionType().getDesc(), question.getMainNumber(), question.getOrder()));
+                    dynamicExcelHeaders.add(
+                            String.format("%s%s-%s答案", question.getQuestionType().getDesc(), question.getMainNumber(),
+                                    question.getOrder()));
+                    dynamicExcelHeaders.add(
+                            String.format("%s%s-%s作答", question.getQuestionType().getDesc(), question.getMainNumber(),
+                                    question.getOrder()));
+                    dynamicExcelHeaders.add(
+                            String.format("%s%s-%s得分", question.getQuestionType().getDesc(), question.getMainNumber(),
+                                    question.getOrder()));
                 }
             }
 
@@ -147,7 +158,8 @@ public class ExportStudentAnswerAndScoreDetailTask {
             Map<String, Double> subjectiveQuestionScores = null;
             if (existSubjectiveQuestion && needSubjective) {
                 // 获取阅卷端考生考试记录中主观题的得分明细
-                subjectiveQuestionScores = this.getSubjectiveQuestionScores(user.getKey(), user.getToken(), vo.getExamRecordDataId());
+                subjectiveQuestionScores = this.getSubjectiveQuestionScores(user.getKey(), user.getToken(),
+                        vo.getExamRecordDataId());
             }
 
             // Excel动态列值
@@ -169,7 +181,9 @@ public class ExportStudentAnswerAndScoreDetailTask {
                     dynamicColumnValues.add(correctAnswer);
                     dynamicColumnValues.add(studentAnswer);
                     if (correctAnswer.equals(studentAnswer)) {
-                        dynamicColumnValues.add(question.getQuestionScore() != null ? String.valueOf(question.getQuestionScore()) : "0");
+                        dynamicColumnValues.add(question.getQuestionScore() != null ?
+                                String.valueOf(question.getQuestionScore()) :
+                                "0");
                     } else {
                         dynamicColumnValues.add("0");
                     }
@@ -183,7 +197,8 @@ public class ExportStudentAnswerAndScoreDetailTask {
                         String studentAnswer = question.getStudentAnswer() != null ? question.getStudentAnswer() : "";
                         dynamicColumnValues.add(Jsoup.clean(studentAnswer, Safelist.simpleText()));
 
-                        Double studentScore = subjectiveQuestionScores.get(question.getMainNumber() + "-" + question.getOrder());
+                        Double studentScore = subjectiveQuestionScores.get(
+                                question.getMainNumber() + "-" + question.getOrder());
                         dynamicColumnValues.add(studentScore != null ? String.valueOf(studentScore) : "0");
                     }
                 }
@@ -195,12 +210,14 @@ public class ExportStudentAnswerAndScoreDetailTask {
                 "学号", "姓名", "年级", "专业", "是否缺考", "客观总分", "主观总分", "总分", "试卷ID");
         excelHeaders.addAll(dynamicExcelHeaders);
 
-        final String filePath = sysProperty.getDataDir() + "/" + tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
+        final String filePath =
+                sysProperty.getDataDir() + "/" + tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
         EasyExcel.write(filePath).head(ExcelHelper.buildHeaders(excelHeaders))
-                .registerWriteHandler(ExcelHelper.sheetStrategy())
-                .registerWriteHandler(ExcelHelper.styleStrategy()).sheet().doWrite(excelRows);
+                .registerWriteHandler(ExcelHelper.sheetStrategy()).registerWriteHandler(ExcelHelper.styleStrategy())
+                .sheet().doWrite(excelRows);
 
-        log.info("examId:{} courseId:{} courseCode:{} totalRows:{} 已处理!", examId, course.getCourseId(), course.getCourseCode(), excelRows.size());
+        log.info("examId:{} courseId:{} courseCode:{} totalRows:{} 已处理!", examId, course.getCourseId(),
+                course.getCourseCode(), excelRows.size());
 
         excelRows.clear();
         excelHeaders.clear();
@@ -211,7 +228,8 @@ public class ExportStudentAnswerAndScoreDetailTask {
      * 是否为客观题
      */
     private boolean isObjectiveQuestion(QuestionType type) {
-        return QuestionType.SINGLE_CHOICE == type || QuestionType.MULTIPLE_CHOICE == type || QuestionType.TRUE_OR_FALSE == type;
+        return QuestionType.SINGLE_CHOICE == type || QuestionType.MULTIPLE_CHOICE == type
+                || QuestionType.TRUE_OR_FALSE == type;
     }
 
     /**
@@ -222,7 +240,8 @@ public class ExportStudentAnswerAndScoreDetailTask {
         headers.put("key", key);
         headers.put("token", token);
 
-        String url = sysProperty.getServerUrl() + "/api/ecs_marking/student/paper/getSubjectiveQuestionScores/" + examRecordDataId;
+        String url = sysProperty.getServerUrl() + "/api/ecs_marking/student/paper/getSubjectiveQuestionScores/"
+                + examRecordDataId;
         String json = HttpHelper.post(url, headers, null);
 
         JsonMapper jsonMapper = new JsonMapper();
@@ -283,6 +302,7 @@ public class ExportStudentAnswerAndScoreDetailTask {
             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;

+ 13 - 9
src/main/java/cn/com/qmth/examcloud/tool/service/query_paper_struct/QueryPaperStructTask.java

@@ -36,9 +36,8 @@ public class QueryPaperStructTask {
     @Autowired
     private CommonService commonService;
 
-    public void start(Long examId) {
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
-        this.execute(user, examId);
+    public void start(User user, Long examId) {
+        // this.execute(user, examId);
     }
 
     private void execute(User user, Long examId) {
@@ -46,24 +45,28 @@ public class QueryPaperStructTask {
         headers.put("key", user.getKey());
         headers.put("token", user.getToken());
 
-        List<CourseVO> courses = commonService.getExamCourseList(user.getKey(), user.getToken(), examId);
+        List<CourseVO> courses = commonService.getExamCourseList(user, examId);
         log.info("examId:{}, 课程数为:{}", examId, courses.size());
 
         for (CourseVO course : courses) {
             List<ExtractConfigVO> extractConfigs = this.getExtractConfig(user, examId, course.getCourseCode());
             if (CollectionUtils.isEmpty(extractConfigs)) {
                 // 若当前账号未配相关数据权限,则会取不到调卷规则数据,请更换账号!!
-                log.info("examId:{}, courseId:{}, courseCode:{}, 未配置调卷规则!", examId, course.getCourseId(), course.getCourseCode());
+                log.info("examId:{}, courseId:{}, courseCode:{}, 未配置调卷规则!", examId, course.getCourseId(),
+                        course.getCourseCode());
                 continue;
             }
 
             for (ExtractConfigVO extractConfig : extractConfigs) {
                 for (ExamPaperVO examPaper : extractConfig.getExamPaperList()) {
                     String basePaperId = examPaper.getPaper().getId();
-                    GetPaperStructResp resp = this.getPaperStruct(examId, course.getCourseCode(), examPaper.getGroupCode(), basePaperId);
+                    GetPaperStructResp resp = this.getPaperStruct(examId, course.getCourseCode(),
+                            examPaper.getGroupCode(), basePaperId);
                     System.out.println("\n========== ========== ==========");
-                    System.out.println(String.format("examId:%s courseId:%s courseCode:%s paperType:%s basePaperId:%s 试卷名称:%s",
-                            examId, course.getCourseId(), course.getCourseCode(), examPaper.getGroupCode(), basePaperId, resp.getDefaultPaper().getName()));
+                    System.out.println(
+                            String.format("examId:%s courseId:%s courseCode:%s paperType:%s basePaperId:%s 试卷名称:%s",
+                                    examId, course.getCourseId(), course.getCourseCode(), examPaper.getGroupCode(),
+                                    basePaperId, resp.getDefaultPaper().getName()));
                     System.out.println("========== ========== ==========");
                     List<DefaultQuestionGroup> questionGroupList = resp.getDefaultPaper().getQuestionGroupList();
 
@@ -101,10 +104,11 @@ public class QueryPaperStructTask {
         params.put("examId", String.valueOf(examId));
         params.put("courseNo", courseCode);
 
-        String url = sysProperty.getServerUrl() + "/api/ecs_ques/findPageExtractConfig/1/10";
+        String url = user.getServerUrl() + "/api/ecs_ques/findPageExtractConfig/1/10";
         String json = HttpHelper.get(url, headers, params);
 
         Pager<ExtractConfigVO> page = new JsonMapper().parseJson(json, new TypeReference<Pager<ExtractConfigVO>>() {
+
         });
         return page.getContent();
     }

+ 6 - 4
src/main/java/cn/com/qmth/examcloud/tool/service/reset_student_password/ResetStudentPasswordTask.java

@@ -28,8 +28,7 @@ public class ResetStudentPasswordTask {
     @Autowired
     private CommonService commonService;
 
-    public void start(Long rootOrgId) {
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
+    public void start(User user, Long rootOrgId) {
         // this.execute(user, rootOrgId);
     }
 
@@ -44,18 +43,21 @@ public class ResetStudentPasswordTask {
         JsonMapper jsonMapper = new JsonMapper();
         int sum = 0, pageNo = 0, pageSize = 100;
 
-        String url = sysProperty.getServerUrl() + "/api/ecs_core/student/studentPage/%s/%s?rootOrgId=%s&identityNumber=&studentCode=&name=";
+        String url = user.getServerUrl()
+                + "/api/ecs_core/student/studentPage/%s/%s?rootOrgId=%s&identityNumber=&studentCode=&name=";
         while (true) {
             String json = HttpHelper.get(String.format(url, pageNo, pageSize, rootOrgId), headers, null);
 
             PageInfo<StudentVO> page = jsonMapper.parseJson(json, new TypeReference<PageInfo<StudentVO>>() {
+
             });
             if (page == null || CollectionUtils.isEmpty(page.getList())) {
                 break;
             }
 
             for (StudentVO student : page.getList()) {
-                HttpHelper.put(sysProperty.getServerUrl() + "/api/ecs_core/student/resetPass/" + student.getId(), headers, null);
+                HttpHelper.put(user.getServerUrl() + "/api/ecs_core/student/resetPass/" + student.getId(), headers,
+                        null);
             }
 
             pageNo++;

+ 9 - 6
src/main/java/cn/com/qmth/examcloud/tool/service/update_correct_answer_and_re_fix_score/UpdateCorrectAnswerAndReFixScoreTask.java

@@ -41,7 +41,7 @@ public class UpdateCorrectAnswerAndReFixScoreTask {
             throw new StatusException("任务参数解析错误!");
         }
 
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
+        User user = null;//todo
         this.execute(jsonParams, user);
     }
 
@@ -52,7 +52,7 @@ public class UpdateCorrectAnswerAndReFixScoreTask {
 
         // 待处理的课程列表(未指定课程则按考试的全部课程)
         List<CourseVO> todoCourses;
-        List<CourseVO> courses = commonService.getExamCourseList(user.getKey(), user.getToken(), examId);
+        List<CourseVO> courses = commonService.getExamCourseList(user, examId);
         if (StringUtils.isNotBlank(courseCodes)) {
             todoCourses = new ArrayList<>();
             String[] courseCodeList = StringUtils.split(courseCodes, ",");
@@ -75,7 +75,8 @@ public class UpdateCorrectAnswerAndReFixScoreTask {
     }
 
     public void process(Long examId, CourseVO course, User user) {
-        List<ExamStudentVO> examStudents = this.getExamStudentList(user.getKey(), user.getToken(), examId, course.getCourseId());
+        List<ExamStudentVO> examStudents = this.getExamStudentList(user.getKey(), user.getToken(), examId,
+                course.getCourseId());
 
         int index = 0, total = examStudents.size();
         for (ExamStudentVO examStudent : examStudents) {
@@ -85,12 +86,13 @@ public class UpdateCorrectAnswerAndReFixScoreTask {
             index++;
             if (index % 100 == 0) {
                 float rate = index * 100f / total;
-                log.info("examId:{} courseId:{} courseCode:{} total:{} index:{} 进度:{}%",
-                        examId, course.getCourseId(), course.getCourseCode(), total, index, rate);
+                log.info("examId:{} courseId:{} courseCode:{} total:{} index:{} 进度:{}%", examId, course.getCourseId(),
+                        course.getCourseCode(), total, index, rate);
             }
         }
 
-        log.info("examId:{} courseId:{} courseCode:{} total:{} 已处理!", examId, course.getCourseId(), course.getCourseCode(), total);
+        log.info("examId:{} courseId:{} courseCode:{} total:{} 已处理!", examId, course.getCourseId(),
+                course.getCourseCode(), total);
 
         examStudents.clear();
     }
@@ -132,6 +134,7 @@ public class UpdateCorrectAnswerAndReFixScoreTask {
             String json = HttpHelper.post(url, headers, params);
 
             Pager<ExamStudentVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<ExamStudentVO>>() {
+
             });
             if (page == null || CollectionUtils.isEmpty(page.getContent())) {
                 break;

+ 10 - 0
src/main/java/cn/com/qmth/examcloud/tool/vo/user/User.java

@@ -13,6 +13,8 @@ public class User implements Serializable {
 
     private static final long serialVersionUID = 8766713125414955078L;
 
+    private String serverUrl;
+
     /**
      * 全局唯一用户标识符
      */
@@ -95,6 +97,14 @@ public class User implements Serializable {
         return this.key;
     }
 
+    public String getServerUrl() {
+        return serverUrl;
+    }
+
+    public void setServerUrl(String serverUrl) {
+        this.serverUrl = serverUrl;
+    }
+
     public String getKey() {
         return key;
     }

+ 3 - 6
src/main/resources/application.properties

@@ -19,11 +19,8 @@ spring.jpa.hibernate.ddl-auto=update
 # examcloud config
 examcloud.tool.dataDir=files
 examcloud.server.rootOrgId=0
-examcloud.server.loginName=devops
-examcloud.server.password=Qmth$5220
 examcloud.server.appId=sbApp
 examcloud.server.secretKey=14689456f1as89r423wa
-examcloud.server.url=https://www.exam-cloud.cn
-#examcloud.server.url=https://www.ea100.com.cn
-#examcloud.server.url=https://192.168.10.41
-#examcloud.server.url=https://192.168.10.39
+examcloud.server.url=www.exam-cloud.cn
+#examcloud.server.url=www.ea100.com.cn
+#examcloud.server.url=org0.dev39.qmth.com.cn

+ 12 - 5
src/test/java/cn/com/qmth/examcloud/tool/ToolTest.java

@@ -29,14 +29,21 @@ public class ToolTest {
 
     @Test
     public void demo() throws Exception {
-        // testLogin();
-        // resetStudentPasswordTask.start(0L);
-        // queryPaperStructTask.start(0L);
+        User user = doLogin();
+
+        // resetStudentPasswordTask.start(user, 0L);
+        // queryPaperStructTask.start(user, 0L);
     }
 
-    private void testLogin() {
-        User user = commonService.login(sysProperty.getServerRootOrgId(), sysProperty.getServerLoginName(), sysProperty.getServerPassword());
+    private User doLogin() {
+        String serverUrl = "org0.dev39.qmth.com.cn";
+        String loginName = "admin9";
+        String password = "0";
+        String smsCode = "5220";
+
+        User user = commonService.login(serverUrl, loginName, password, smsCode);
         System.out.println(user.getKey() + " " + user.getToken());
+        return user;
     }
 
 }