Selaa lähdekoodia

武大考务数据对接-武大考务数据获取修改

xiaof 3 vuotta sitten
vanhempi
commit
7ff939baa6

+ 4 - 1
src/main/java/com/qmth/eds/api/ExamSyncTotalController.java

@@ -1,5 +1,7 @@
 package com.qmth.eds.api;
 
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.eds.contant.SystemConstant;
 import com.qmth.eds.job.service.JobService;
@@ -61,8 +63,9 @@ public class ExamSyncTotalController {
      */
     @ApiOperation(value = "人工同步")
     @PostMapping("/manual_sync")
+    @Aac(auth = BOOL.FALSE)
     public Result manualSync() {
-        jobService.getExamData();
+        jobService.getExamData(false);
         return ResultUtil.success(true);
     }
 

+ 4 - 6
src/main/java/com/qmth/eds/job/service/JobService.java

@@ -3,11 +3,7 @@ package com.qmth.eds.job.service;
 import java.io.IOException;
 
 /**
- * @Description: job service
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2021/3/31
+ * 定时任务 服务类
  */
 public interface JobService {
 
@@ -18,6 +14,8 @@ public interface JobService {
 
     /**
      * 同步武大考务数据
+     *
+     * @param isAuto 是否定时任务触发
      */
-    void getExamData();
+    void getExamData(boolean isAuto);
 }

+ 1 - 1
src/main/java/com/qmth/eds/job/service/TimedSyncTaskJob.java

@@ -19,6 +19,6 @@ public class TimedSyncTaskJob extends QuartzJobBean {
 
     @Override
     protected void executeInternal(@NotNull JobExecutionContext jobExecutionContext) {
-        jobService.getExamData();
+        jobService.getExamData(true);
     }
 }

+ 2 - 2
src/main/java/com/qmth/eds/job/service/impl/JobServiceImpl.java

@@ -30,11 +30,11 @@ public class JobServiceImpl implements JobService {
     }
 
     @Override
-    public void getExamData() {
+    public void getExamData(boolean isAuto) {
         List<ExamScheduleTask> examScheduleTaskList = examScheduleTaskService.listByCurrentDate();
         if (!examScheduleTaskList.isEmpty()) {
             for (ExamScheduleTask scheduleTask : examScheduleTaskList) {
-                asyncTaskService.syncExamData(scheduleTask);
+                asyncTaskService.syncExamData(scheduleTask, isAuto);
             }
         }
     }

+ 2 - 2
src/main/java/com/qmth/eds/service/AsyncTaskService.java

@@ -21,9 +21,9 @@ public class AsyncTaskService {
     /**
      * 同步试卷结构、分组信息、评卷员绑定关系
      */
-    public void syncExamData(ExamScheduleTask examScheduleTask) {
+    public void syncExamData(ExamScheduleTask examScheduleTask,boolean isAuto) {
         // 记录日志
         TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examScheduleTask);
-        dataSyncService.syncWuhanUniversityExamData(examScheduleTask, tbSyncTask);
+        dataSyncService.syncWuhanUniversityExamData(examScheduleTask, tbSyncTask, isAuto);
     }
 }

+ 3 - 3
src/main/java/com/qmth/eds/service/DataSyncService.java

@@ -10,9 +10,9 @@ public interface DataSyncService {
 
     /**
      * 武汉大学考务数据同步
-     *
-     * @param examScheduleTask examScheduleTask
+     *  @param examScheduleTask examScheduleTask
      * @param tbSyncTask       tbSyncTask
+     * @param isAuto 是否定时任务
      */
-    void syncWuhanUniversityExamData(ExamScheduleTask examScheduleTask, TBSyncTask tbSyncTask);
+    void syncWuhanUniversityExamData(ExamScheduleTask examScheduleTask, TBSyncTask tbSyncTask, boolean isAuto);
 }

+ 16 - 10
src/main/java/com/qmth/eds/service/impl/DataSyncServiceImpl.java

@@ -57,7 +57,7 @@ public class DataSyncServiceImpl implements DataSyncService {
 
     @Async
     @Override
-    public void syncWuhanUniversityExamData(ExamScheduleTask examScheduleTask, TBSyncTask tbSyncTask) {
+    public void syncWuhanUniversityExamData(ExamScheduleTask examScheduleTask, TBSyncTask tbSyncTask, boolean isAuto) {
         // 同步初始参数
         TaskResultEnum result = null;
         String errorMessage = "";
@@ -69,6 +69,8 @@ public class DataSyncServiceImpl implements DataSyncService {
         String examTypeName = examScheduleTask.getExamTypeName();
         File txtFile = null;
         FileInputStream fis = null;
+        // 汇总表ID
+        Long examSyncTotalId = SystemConstant.getDbUuid();
         try {
             // 同步中
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), TaskStatusEnum.RUNNING, null, null);
@@ -79,8 +81,7 @@ public class DataSyncServiceImpl implements DataSyncService {
             }
             // 调用接口
             List<ExamSyncStudentTemp> examSyncStudentTemps = wuhanUniversityUtils.getKwData(token);
-            // 汇总表ID
-            Long examSyncTotalId = SystemConstant.getDbUuid();
+
             examSyncStudentTemps.forEach(m -> {
                 m.setId(SystemConstant.getDbUuid());
                 m.setSchoolId(schoolId);
@@ -112,10 +113,15 @@ public class DataSyncServiceImpl implements DataSyncService {
                 examSyncTotalService.updateDownloadStatusBySchoolIdAndSemesterIdAndExamTypeId(schoolId, semesterId, examTypeId);
 
                 // 生成汇总数据
-                ZoneId zone = ZoneId.systemDefault();
-                Instant instant = LocalDate.now().atStartOfDay().atZone(zone).toInstant();
-                Date date = Date.from(instant);
-                Long syncDate = date.getTime();
+                long syncDate;
+                if (isAuto) {
+                    ZoneId zone = ZoneId.systemDefault();
+                    Instant instant = LocalDate.now().atStartOfDay().atZone(zone).toInstant();
+                    Date date = Date.from(instant);
+                    syncDate = date.getTime();
+                } else {
+                    syncDate = System.currentTimeMillis();
+                }
                 int colleges = Integer.parseInt(String.valueOf(examSyncStudentTemps.stream().map(ExamSyncStudentTemp::getJgmc).filter(StringUtils::isNotBlank).distinct().count()));
                 int subjects = Integer.parseInt(String.valueOf(examSyncStudentTemps.stream().map(ExamSyncStudentTemp::getKch).filter(StringUtils::isNotBlank).distinct().count()));
                 int students = examSyncStudentTemps.size();
@@ -129,14 +135,14 @@ public class DataSyncServiceImpl implements DataSyncService {
                 examSyncTotal.setFilePath(excelFile.getPath());
                 examSyncTotalService.updateById(examSyncTotal);
             }
-            // 删除临时表数据
-            examSyncStudentTempService.deleteByExamSyncTotalId(examSyncTotalId);
-
             result = TaskResultEnum.SUCCESS;
         } catch (ApiException | IOException e) {
             result = TaskResultEnum.ERROR;
             errorMessage = errorMessage + e.getMessage();
         } finally {
+            // 删除临时表数据
+            examSyncStudentTempService.deleteByExamSyncTotalId(examSyncTotalId);
+            // 更新任务状态
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), TaskStatusEnum.FINISH, result, errorMessage);
 
             // 关闭fis流

+ 4 - 0
src/main/java/com/qmth/eds/util/FileUtil.java

@@ -551,6 +551,10 @@ public class FileUtil {
      */
     public static File writeTxt(String fileName, List<String> list) throws IOException {
         File file = new File(fileName);
+        File parentFile = file.getParentFile();
+        if(!parentFile.exists()){
+            parentFile.mkdirs();
+        }
         if (!file.exists()) {
             file.createNewFile();
         }

+ 26 - 6
src/main/java/com/qmth/eds/util/WuhanUniversityUtils.java

@@ -13,6 +13,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 武汉大学工具类
@@ -63,13 +64,32 @@ public class WuhanUniversityUtils {
             Map<String, String> headerMap = new HashMap<>();
             headerMap.put("Authorization", "Bearer " + token);
 
-            String result = HttpKit.sendGet(kwUrl, null, headerMap);
-            List<ExamSyncStudentTemp> examSyncStudentTemps = null;
-            JSONObject jsonObject = JSON.parseObject(result);
-            if (jsonObject.containsKey("status") && jsonObject.getBoolean("status")) {
-                String data = jsonObject.getString("data");
-                examSyncStudentTemps = JSONObject.parseArray(data, ExamSyncStudentTemp.class);
+            // 循环查
+            AtomicInteger offset = new AtomicInteger(0);
+            int limit = 1000;
+            int totalCount = 0;
+            List<ExamSyncStudentTemp> subExamSyncStudentTemps;
+            List<ExamSyncStudentTemp> examSyncStudentTemps = new ArrayList<>();
+            do {
+                Map<String, String> paramMap;
+                paramMap = new HashMap<>();
+                paramMap.putIfAbsent("limit", String.valueOf(limit));
+                paramMap.put("offset", String.valueOf(offset.getAndIncrement() * limit));
+
+                String result = HttpKit.sendGet(kwUrl, paramMap, headerMap);
+                JSONObject jsonResult = JSON.parseObject(result);
+                String rows = jsonResult.getString("rows");
+                totalCount = totalCount == 0 ? jsonResult.getInteger("totalCount") : totalCount;
+                subExamSyncStudentTemps = JSON.parseArray(rows, ExamSyncStudentTemp.class);
+                if (!subExamSyncStudentTemps.isEmpty()) {
+                    examSyncStudentTemps.addAll(subExamSyncStudentTemps);
+                }
+            } while (!subExamSyncStudentTemps.isEmpty());
+
+            if (totalCount != examSyncStudentTemps.size()) {
+                throw ExceptionResultEnum.ERROR.exception("获取考务数据数量与总数不一致");
             }
+
             return examSyncStudentTemps;
 //            return listTemps();
         } catch (Exception e) {

+ 1 - 1
src/test/java/com/qmth/eds/WhuTest.java

@@ -38,7 +38,7 @@ public class WhuTest {
 
     @Test
     public void testKw(){
-        jobService.getExamData();
+        jobService.getExamData(false);
     }
 
 }