Ver código fonte

Merge remote-tracking branch 'origin/dev_v3.1.0' into dev_v3.1.0

caozixuan 3 anos atrás
pai
commit
991f97c593
15 arquivos alterados com 142 adições e 2 exclusões
  1. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperStructure.java
  2. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncService.java
  3. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java
  4. 27 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  5. 19 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  6. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java
  7. 4 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  8. 17 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  9. 1 0
      distributed-print/src/main/resources/application-dev.properties
  10. 1 0
      distributed-print/src/main/resources/application-offline.properties
  11. 1 0
      distributed-print/src/main/resources/application-release.properties
  12. 1 0
      distributed-print/src/main/resources/application-test.properties
  13. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/domain/SyncDataDomain.java
  14. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java
  15. 26 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperStructure.java

@@ -119,6 +119,8 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
      */
     private Boolean enable;
 
+    private String markLeader;
+
     @TableField(exist = false)
     private String paperNumberId;
 
@@ -292,4 +294,12 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
     public void setTaskStatus(String taskStatus) {
         this.taskStatus = taskStatus;
     }
+
+    public String getMarkLeader() {
+        return markLeader;
+    }
+
+    public void setMarkLeader(String markLeader) {
+        this.markLeader = markLeader;
+    }
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncService.java

@@ -17,4 +17,6 @@ public interface DataSyncService {
     void syncPaperAndAnswer(ExamPaperStructure examPaperStructure, TBSyncTask tbSyncTask);
 
     void syncObjectiveStructure(ExamPaperStructure examPaperStructure, TBSyncTask tbSyncTask);
+
+    void syncMarkLeader(ExamPaperStructure examPaperStructure, TBSyncTask tbSyncTask);
 }

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java

@@ -68,4 +68,11 @@ public interface ExamPaperStructureService extends IService<ExamPaperStructure>
      * @return 题卡jpg文件结果
      */
     List<CardJpgResult> findCardJpgFileByPaperNumber(Long examId, String courseCode, String paperNumber);
+
+    /**
+     * 绑定科组长
+     * @param id id
+     * @param markLeader 科组长
+     */
+    ExamPaperStructure bindMarkLeader(String id, String markLeader);
 }

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -415,6 +415,33 @@ public class DataSyncServiceImpl implements DataSyncService {
         }
     }
 
+    @Async
+    @Override
+    public void syncMarkLeader(ExamPaperStructure examPaperStructure, TBSyncTask tbSyncTask) {
+        // 同步初始参数
+        TaskResultEnum result = null;
+        String errorMessage = null;
+        try {
+            Long schoolId = examPaperStructure.getSchoolId();
+            // 科目代码(课程代码+卷型+课程序号)
+            String subjectCode = examPaperStructure.getCourseCode().concat(examPaperStructure.getPaperType()).concat(examPaperStructure.getSequence());
+            // 同步客观题
+            String markLeader = examPaperStructure.getMarkLeader();
+            if (StringUtils.isNotBlank(markLeader)) {
+                List<JSONObject> objectiveJsons = JSONObject.parseArray(markLeader, JSONObject.class);
+                for (JSONObject object : objectiveJsons) {
+                    cloudMarkingTaskUtils.saveMarkLeader(schoolId, subjectCode, object.getString("loginName"));
+                }
+            }
+            result = TaskResultEnum.SUCCESS;
+        } catch (ApiException e) {
+            result = TaskResultEnum.ERROR;
+            errorMessage = e.getMessage();
+        } finally {
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), examPaperStructure.getThirdRelateId(), TaskStatusEnum.FINISH, result, errorMessage);
+        }
+    }
+
     /**
      * 创建考试
      *

+ 19 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java

@@ -386,6 +386,25 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         }).collect(Collectors.toList());
     }
 
+    @Override
+    public ExamPaperStructure bindMarkLeader(String id, String markLeader) {
+        ExamPaperStructure examPaperStructure = this.getById(id);
+        if (examPaperStructure == null) {
+            throw ExceptionResultEnum.ERROR.exception("请先设置试卷结构");
+        }
+        if (StringUtils.isBlank(markLeader)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择科组长");
+        }
+        List<JSONObject> objectList = JSON.parseArray(markLeader, JSONObject.class);
+        if (objectList.isEmpty()) {
+            throw ExceptionResultEnum.ERROR.exception("请选择科组长");
+        }
+
+        examPaperStructure.setMarkLeader(markLeader);
+        this.updateById(examPaperStructure);
+        return examPaperStructure;
+    }
+
     /**
      * 保存试卷结构
      *

+ 14 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java

@@ -103,4 +103,18 @@ public class AsyncCloudMarkingTaskService {
             dataSyncService.syncObjectiveStructure(examPaperStructure, tbSyncTask);
         }
     }
+
+    /**
+     * 绑定科组长
+     * @param examPaperStructure 试卷结构对象
+     */
+    public void syncMarkLeader(ExamPaperStructure examPaperStructure) {
+        if (examPaperStructure == null) {
+            throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
+        }
+        if (isSync()) {
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.MARK_LEADER_PUSH);
+            dataSyncService.syncMarkLeader(examPaperStructure, tbSyncTask);
+        }
+    }
 }

+ 4 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1926,7 +1926,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         }
         ZipUtil.zip(zipLocalRootPath, zipFile.getPath(), false);
 
-        boolean oss = (boolean) map.get(SystemConstant.OSS);
+        boolean oss = dictionaryConfig.sysDomain().isOss();
         JSONObject jsonObject = new JSONObject();
         if (oss) {//上传至oss
             fileStoreUtil.ossUpload(dirNameTmp, zipFile, BinaryUtil.toBase64String(HexUtils.decodeHex(DigestUtils.md5Hex(new FileInputStream(zipFile)))), fileStoreUtil.getUploadEnumByPath(dirNameTmp).getFssType());
@@ -1939,7 +1939,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
         tbTask.setResultFilePath(jsonObject.toJSONString());
         ConvertUtil.delFolder(zipLocalRootPath);
-        zipFile.delete();
+        if(oss) {
+            zipFile.delete();
+        }
         map.put("count", count);
         map.put("specialSuccessMessage", specialSuccessMessage);
         return map;

+ 17 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java

@@ -103,6 +103,23 @@ public class ExamPaperStructureController {
         return ResultUtil.ok(true);
     }
 
+    /**
+     * 绑定科组长
+     *
+     * @param id  id
+     * @param markLeader 文件数组(样例:[{markerId:1, loginName:"mt01"}])
+     * @return Result
+     */
+    @ApiOperation(value = "绑定科组长")
+    @RequestMapping(value = "/bind_mark_leader", method = RequestMethod.POST)
+    public Result uploadAnswer(@RequestParam("id") String id,
+                               @RequestParam("markLeader") String markLeader) {
+        ExamPaperStructure examPaperStructure = examPaperStructureService.bindMarkLeader(id, markLeader);
+        // 异步同步到云阅卷
+        asyncCloudMarkingTaskService.syncMarkLeader(examPaperStructure);
+        return ResultUtil.ok(true);
+    }
+
     /**
      * 保存客观题答案
      *

+ 1 - 0
distributed-print/src/main/resources/application-dev.properties

@@ -159,6 +159,7 @@ sync.config.groupSaveUrl=/api/exam/mark_group/save
 sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
+sync.config.markLeaderSaveUrl=/api/exam/subject_header/save
 
 com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr

+ 1 - 0
distributed-print/src/main/resources/application-offline.properties

@@ -155,6 +155,7 @@ sync.config.groupSaveUrl=/api/exam/mark_group/save
 sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
+sync.config.markLeaderSaveUrl=/api/exam/subject_header/save
 
 #com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 #com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr

+ 1 - 0
distributed-print/src/main/resources/application-release.properties

@@ -165,6 +165,7 @@ sync.config.groupSaveUrl=/api/exam/mark_group/save
 sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
+sync.config.markLeaderSaveUrl=/api/exam/subject_header/save
 
 sms.config.smsNormalCode=8635
 sms.config.codeExpiredTime=2

+ 1 - 0
distributed-print/src/main/resources/application-test.properties

@@ -155,6 +155,7 @@ sync.config.groupSaveUrl=/api/exam/mark_group/save
 sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
+sync.config.markLeaderSaveUrl=/api/exam/subject_header/save
 
 com.qmth.solar.access-key=918d0878ee7944beb448980b011ff804
 com.qmth.solar.access-secret=IY3NB9FXtd7OQHWH5YHl6mbrU9ch33QC

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/domain/SyncDataDomain.java

@@ -35,6 +35,8 @@ public class SyncDataDomain {
 
     String markerSaveUrl;
 
+    String markLeaderSaveUrl;
+
     public String getHostUrl() {
         return hostUrl;
     }
@@ -154,4 +156,12 @@ public class SyncDataDomain {
     public void setMarkerSaveUrl(String markerSaveUrl) {
         this.markerSaveUrl = markerSaveUrl;
     }
+
+    public String getMarkLeaderSaveUrl() {
+        return markLeaderSaveUrl;
+    }
+
+    public void setMarkLeaderSaveUrl(String markLeaderSaveUrl) {
+        this.markLeaderSaveUrl = markLeaderSaveUrl;
+    }
 }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java

@@ -16,6 +16,8 @@ public enum PushTypeEnum {
 
     STRUCTURE_GROUP_PUSH("试卷结构、分组、评卷员绑定关系数据推送"),
 
+    MARK_LEADER_PUSH("科组长数据推送"),
+
     PAPER_ANSWER_FILE_PUSH("试卷、标答文件推送"),
 
     OBJECTIVE_ANSWER_PUSH("客观题答案推送"),

+ 26 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

@@ -424,6 +424,32 @@ public class CloudMarkingTaskUtils {
         }
     }
 
+    /**
+     * 绑定科组长接口
+     *
+     * @param schoolId    学校ID
+     * @param subjectCode 科目代码
+     * @param loginName   用户名
+     */
+    public boolean saveMarkLeader(Long schoolId, String subjectCode, String loginName) {
+        String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
+        String markLeaderSaveUrl = dictionaryConfig.syncDataDomain().getMarkLeaderSaveUrl();
+        validUrl(hostUrl, markLeaderSaveUrl);
+        String postUrl = hostUrl.concat(markLeaderSaveUrl);
+        try {
+            //参数
+            Map<String, Object> map = new HashMap<>();
+            map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
+            map.put("account", MARKER_LEADER_PREFIX + validParam(loginName, null, true, "用户名"));
+
+            String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, markLeaderSaveUrl), map, null, null, null);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            return jsonObject.containsKey("updateTime");
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
     /**
      * 评卷员登录
      */