Explorar o código

试卷结构上传-同步方法优化

xiaof %!s(int64=3) %!d(string=hai) anos
pai
achega
3c7ddc73f4

+ 17 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -145,7 +145,7 @@ public class DataSyncServiceImpl implements DataSyncService {
             List<ExamPrintPlan> examPrintPlans = examPrintPlanService.list(printPlanQueryWrapper);
             ExamPrintPlan examPrintPlan = examPrintPlans.stream().max(Comparator.comparingLong(ExamPrintPlan::getExamEndTime)).get();
             String examTime = DateUtil.format(new Date(examPrintPlan.getExamEndTime()), DATE_FORMAT);
-            syncDataParam.setThirdRelateId(stmmsUtils.syncExam(time, syncDataParam.getThirdRelateName(), examTime));
+            syncDataParam.setThirdRelateId(stmmsUtils.syncExam(examPrintPlan.getSchoolId(), time, syncDataParam.getThirdRelateName(), examTime));
         }
 
         for (Long printPlanId : printPlans) {
@@ -178,14 +178,14 @@ public class DataSyncServiceImpl implements DataSyncService {
 
             // 同步试卷文件
             File paperFile = downFileFromFss(paper, paperType, SyncFileTypeEnum.PAPER);
-            boolean syncPaperFile = stmmsUtils.syncFile(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.PAPER, paperFile);
+            boolean syncPaperFile = stmmsUtils.syncFile(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.PAPER, paperFile);
             if (syncPaperFile) {
                 status = ExamPaperStructureStatusEnum.PAPER_FINISH;
             }
 
             // 同步标答文件
             File answerFile = downFileFromFss(paper, paperType, SyncFileTypeEnum.PAPER);
-            boolean syncAnswerFile = stmmsUtils.syncFile(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.ANSWER, answerFile);
+            boolean syncAnswerFile = stmmsUtils.syncFile(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.ANSWER, answerFile);
             if (syncAnswerFile) {
                 status = ExamPaperStructureStatusEnum.ANSWER_FINISH;
             }
@@ -213,7 +213,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 syncStructureData.setAnswer(m.getAnswer());
                 return syncStructureData;
             }).collect(Collectors.toList());
-            boolean syncObjectiveStructure = stmmsUtils.syncPaperStructure(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), true, objectivePaperType, syncObjectiveStructureDatas);
+            boolean syncObjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + objectivePaperType, true, objectivePaperType, syncObjectiveStructureDatas);
             if (syncObjectiveStructure) {
                 status = ExamPaperStructureStatusEnum.OBJECTIVE_FINISH;
             }
@@ -227,11 +227,11 @@ public class DataSyncServiceImpl implements DataSyncService {
                 throw ExceptionResultEnum.ERROR.exception("主观题文件未上传");
             }
             String subjectivePaperType = subjectiveJson.getString("paperType");
-            String subjectieContent = subjectiveJson.getString("content");
-            if (StringUtils.isAnyBlank(subjectivePaperType, subjectieContent)) {
+            String subjectiveContent = subjectiveJson.getString("content");
+            if (StringUtils.isAnyBlank(subjectivePaperType, subjectiveContent)) {
                 throw ExceptionResultEnum.ERROR.exception("没有找到主观题数据");
             }
-            List<ExamPaperSubjectiveStructureDto> subjectiveStructureDtos = JSONObject.parseArray(subjectieContent, ExamPaperSubjectiveStructureDto.class);
+            List<ExamPaperSubjectiveStructureDto> subjectiveStructureDtos = JSONObject.parseArray(subjectiveContent, ExamPaperSubjectiveStructureDto.class);
             List<SyncStructureData> syncSubjectiveStructureDatas = subjectiveStructureDtos.stream().map(m -> {
                 SyncStructureData syncStructureData = new SyncStructureData();
                 syncStructureData.setMainNumber(Integer.valueOf(m.getMainNumber()));
@@ -240,7 +240,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 syncStructureData.setTotalScore(Double.valueOf(m.getScore()));
                 return syncStructureData;
             }).collect(Collectors.toList());
-            boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), true, subjectivePaperType, syncSubjectiveStructureDatas);
+            boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + subjectivePaperType, true, subjectivePaperType, syncSubjectiveStructureDatas);
             if (syncSubjectiveStructure) {
                 status = ExamPaperStructureStatusEnum.SUBJECTIVE_FINISH;
             }
@@ -286,8 +286,8 @@ public class DataSyncServiceImpl implements DataSyncService {
             // 考试同步成功,才能同步考生和题卡
             if (Objects.nonNull(thirdRelateId)) {
                 updateWrapper.lambda().set(ExamPrintPlan::getThirdRelateId, thirdRelateId).set(ExamPrintPlan::getThirdRelateName, thirdRelateName);
-                saveStudent(examPrintPlan.getId(), thirdRelateId);
-                cardUpload(examPrintPlan.getId(), thirdRelateId);
+                saveStudent(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
+                cardUpload(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
             } else {
                 throw ExceptionResultEnum.ERROR.exception("无法获取云阅卷考试,同步数据失败");
             }
@@ -323,7 +323,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String code = String.valueOf(examPrintPlan.getId());
                 String name = examPrintPlan.getName();
                 String examTime = DateUtil.format(new Date(examPrintPlan.getExamEndTime()), DATE_FORMAT);
-                thirdRelateId = stmmsUtils.syncExam(code, name, examTime);
+                thirdRelateId = stmmsUtils.syncExam(examPrintPlan.getSchoolId(), code, name, examTime);
             }
             return thirdRelateId;
         } catch (Exception e) {
@@ -336,7 +336,7 @@ public class DataSyncServiceImpl implements DataSyncService {
      *
      * @return
      */
-    public void saveStudent(Long examPrintPlanId, Long thirdRelateId) {
+    public void saveStudent(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
         List<SyncExamStudentDto> examStudents = examStudentService.listStudentByPrintPlanIdAndSyncStatus(examPrintPlanId);
         for (SyncExamStudentDto examStudent : examStudents) {
             try {
@@ -348,9 +348,9 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String college = "无";
                 String className = getClassName(examStudent.getExtendFields());
                 String teacher = "无";
-                String subjectCode = examStudent.getPaperNumber(); // 取试卷编号
+                String subjectCode = examStudent.getPaperNumber() + examStudent.getPaperType(); // 取试卷编号
                 String subjectName = examStudent.getCourseName();
-                boolean syncStudent = stmmsUtils.syncStudent(examId, examNumber, studentCode, name, college, className, teacher, subjectCode, subjectName, null, null, null, null);
+                boolean syncStudent = stmmsUtils.syncStudent(schoolId, examId, examNumber, studentCode, name, college, className, teacher, subjectCode, subjectName, null, null, null, null);
 
                 if (syncStudent) {
                     UpdateWrapper<ExamStudent> updateWrapper = new UpdateWrapper<>();
@@ -368,7 +368,7 @@ public class DataSyncServiceImpl implements DataSyncService {
      *
      * @return
      */
-    public void cardUpload(Long examPrintPlanId, Long thirdRelateId) {
+    public void cardUpload(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
         List<ExamDetailCourse> examDetailCourses = examDetailService.listSyncPaperNumberByPrintPlanId(examPrintPlanId);
         if (CollectionUtils.isEmpty(examDetailCourses)) {
             return;
@@ -393,7 +393,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                     String filePath = getTempDir(SyncFileTypeEnum.CARD);
                     file = createJsonFile(filePath, syncExamCardDto.getContent());
                     if (file.exists()) {
-                        boolean uploadCard = stmmsUtils.syncFile(String.valueOf(thirdRelateId), syncExamCardDto.getPaperNumber(), SyncFileTypeEnum.CARD, file);
+                        boolean uploadCard = stmmsUtils.syncFile(schoolId, String.valueOf(thirdRelateId), syncExamCardDto.getPaperNumber(), SyncFileTypeEnum.CARD, file);
                         if (uploadCard) {
                             UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
                             updateWrapper.lambda().set(ExamCard::getSyncStatus, true).eq(ExamCard::getId, syncExamCardDto.getId());
@@ -444,6 +444,7 @@ public class DataSyncServiceImpl implements DataSyncService {
 
     /**
      * 上传文件临时目录
+     *
      * @param type
      * @return
      */

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

@@ -29,6 +29,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TBSyncTask::getSchoolId, examPrintPlan.getSchoolId())
                 .eq(TBSyncTask::getPrintPlanId, examPrintPlan.getId())
+                .eq(TBSyncTask::getType, PushTypeEnum.ADMIN_PUSH)
                 .ne(TBSyncTask::getStatus, TaskStatusEnum.FINISH);
         TBSyncTask tbSyncTask = this.getOne(queryWrapper);
         if (tbSyncTask != null) {
@@ -39,6 +40,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
             tbSyncTask.setSchoolId(examPrintPlan.getSchoolId());
             tbSyncTask.setPrintPlanId(examPrintPlan.getId());
             tbSyncTask.setPrintPlanName(examPrintPlan.getName());
+            tbSyncTask.setType(PushTypeEnum.ADMIN_PUSH);
             tbSyncTask.setStatus(TaskStatusEnum.INIT);
             tbSyncTask.setCreateTime(System.currentTimeMillis());
         }

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

@@ -81,10 +81,11 @@ public class PushLogicServiceImpl implements PushLogicService {
      */
     @Override
     public Map<String, Object> executeScorePushLogic(Map<String, Object> map) throws Exception {
+        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
         Integer examId = (Integer) map.get("examId");
         String examCode = (String) map.get("examCode");
         try {
-            int totalCount = stmmsUtils.getStudentCount(examId, examCode, null, null, null, null, null, null);
+            int totalCount = stmmsUtils.getStudentCount(sysUser.getSchoolId(), examId, examCode, null, null, null, null, null, null);
             log.info("云阅卷:考试成绩考生数量查询接口调用,返回数量:{}", totalCount);
 //            List<Map> paramList = new ArrayList<>();
             if (totalCount > 0) {
@@ -92,7 +93,7 @@ public class PushLogicServiceImpl implements PushLogicService {
                 int mod = totalCount % pageSize;
                 int pageNos = mod == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
                 for (int i = 1; i <= pageNos; i++) {
-                    List<Map> students = stmmsUtils.getStudentScore(examId, examCode, null, null, null, null, null, null, i, pageSize);
+                    List<Map> students = stmmsUtils.getStudentScore(sysUser.getSchoolId(), examId, examCode, null, null, null, null, null, null, i, pageSize);
                     for (Map student : students) {
                         String jxbId = String.valueOf(student.get("className"));
                         String xhId = String.valueOf(student.get("studentCode"));

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

@@ -8,8 +8,8 @@ import java.util.Objects;
  * @Date: 2021-11-01
  */
 public enum PushTypeEnum {
-    USER_PUSH("用户推送")
-    ;
+    USER_PUSH("用户推送"),
+    ADMIN_PUSH("考试推送");
 
     PushTypeEnum(String title) {
         this.title = title;

+ 27 - 22
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java

@@ -12,7 +12,6 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.SyncFileTypeEnum;
 import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.util.HttpKit;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -57,7 +56,7 @@ public class StmmsUtils {
      * @param examTime 考试时间
      * @return
      */
-    public Long syncExam(String code, String name, String examTime) {
+    public Long syncExam(Long schoolId, String code, String name, String examTime) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String examSaveUrl = dictionaryConfig.syncDataDomain().getExamSaveUrl();
         validUrl(hostUrl, examSaveUrl);
@@ -69,7 +68,7 @@ public class StmmsUtils {
         map.put("examTime", validParam(examTime, null, true, "考试时间"));
         map.put("type", SAVE_EXAM_TYPE);
 
-        String result = HttpKit.sendPost(postUrl, getHeaders(examSaveUrl), map, null, null, null);
+        String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSaveUrl), map, null, null, null);
         JSONObject jsonObject = JSONObject.parseObject(result);
         if (jsonObject.containsKey("id")) {
             return Long.valueOf(jsonObject.get("id").toString());
@@ -81,6 +80,7 @@ public class StmmsUtils {
     /**
      * 考生创建/更新接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param examNumber  准考证号
      * @param studentCode 学号
@@ -95,7 +95,7 @@ public class StmmsUtils {
      * @param examSite    考点
      * @param examRoom    考场
      */
-    public boolean syncStudent(String examId, String examNumber, String studentCode, String name, String college,
+    public boolean syncStudent(Long schoolId, String examId, String examNumber, String studentCode, String name, String college,
                                String className, String teacher, String subjectCode, String subjectName,
                                String packageCode, String paperType, String examSite, String examRoom) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
@@ -119,7 +119,7 @@ public class StmmsUtils {
             map.put("examSite", validParam(examSite, null, false, "考点"));
             map.put("examRoom", validParam(examRoom, null, false, "考场"));
 
-            String result = HttpKit.sendPost(postUrl, getHeaders(studentSaveUrl), map, null, null, null);
+            String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentSaveUrl), map, null, null, null);
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("updateTime")) {
                 return true;
@@ -134,12 +134,13 @@ public class StmmsUtils {
     /**
      * 文件公共上传接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param subjectCode 科目代码
      * @param type        文件类型  SyncFileTypeEnum枚举
      * @param file        文件
      */
-    public boolean syncFile(String examId, String subjectCode, SyncFileTypeEnum type, File file) {
+    public boolean syncFile(Long schoolId, String examId, String subjectCode, SyncFileTypeEnum type, File file) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String fileUploadUrl = dictionaryConfig.syncDataDomain().getFileUploadUrl();
         validUrl(hostUrl, fileUploadUrl);
@@ -170,7 +171,7 @@ public class StmmsUtils {
             formText.put("format", suffix);
             formText.put("md5", DigestUtils.md5Hex(new FileInputStream(file)));
 
-            String result = HttpKit.sendPost(postUrl, getHeaders(fileUploadUrl), formText, files, null, null);
+            String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, fileUploadUrl), formText, files, null, null);
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("success")) {
                 String success = jsonObject.get("success").toString();
@@ -189,13 +190,14 @@ public class StmmsUtils {
     /**
      * 试卷结构创建/更新接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param subjectCode 科目代码
      * @param objective   是否客观题
      * @param paperType   试卷类型
      * @param questions   试卷结构JSON
      */
-    public boolean syncPaperStructure(String examId, String subjectCode, Boolean objective,
+    public boolean syncPaperStructure(Long schoolId, String examId, String subjectCode, Boolean objective,
                                       String paperType, List<SyncStructureData> questions) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String structureUrl = dictionaryConfig.syncDataDomain().getStructureUrl();
@@ -212,7 +214,7 @@ public class StmmsUtils {
 
             String jsonData = JSONObject.toJSONString(map);
 
-            String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(structureUrl));
+            String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(schoolId, structureUrl));
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("updateTime")) {
                 return true;
@@ -267,7 +269,7 @@ public class StmmsUtils {
             map.put("account", prefix + sysUser.getLoginName());
             map.put("name", sysUser.getLoginName());
             map.put("time", time);
-            map.put("authorization", createSign(time, loginUrl));
+            map.put("authorization", createSign(sysUser.getSchoolId(), time, loginUrl));
             return map;
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception("登录信息获取失败");
@@ -279,10 +281,10 @@ public class StmmsUtils {
      *
      * @param url 请求URL
      */
-    private Map<String, String> getHeaders(String url) {
+    private Map<String, String> getHeaders(Long schoolId, String url) {
         long time = System.currentTimeMillis();
         Map<String, String> header = new HashMap<>();
-        header.put(SystemConstant.HEADER_AUTHORIZATION, createSign(time, url));
+        header.put(SystemConstant.HEADER_AUTHORIZATION, createSign(schoolId, time, url));
         header.put(SystemConstant.HEADER_TIME, String.valueOf(time));
         return header;
     }
@@ -293,8 +295,7 @@ public class StmmsUtils {
      * @param time 时间戳
      * @param url  请求URL
      */
-    private String createSign(long time, String url) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+    private String createSign(Long schoolId, long time, String url) {
         BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
         if (basicSchool == null) {
             throw ExceptionResultEnum.ERROR.exception("学校不存在");
@@ -310,15 +311,15 @@ public class StmmsUtils {
      * 校验参数值并返回(字符型)
      *
      * @param value       参数值
-     * @param defaulValue 默认值
+     * @param defaultValue 默认值
      * @param require     是否必填(true:是,false:否)
      * @param name        参数名称
      */
-    private String validParam(String value, String defaulValue, boolean require, String name) {
-        if (require && StringUtils.isAnyBlank(value, defaulValue)) {
+    private String validParam(String value, String defaultValue, boolean require, String name) {
+        if (require && StringUtils.isAllBlank(value, defaultValue)) {
             throw ExceptionResultEnum.ERROR.exception((StringUtils.isBlank(name) ? "" : name) + "值必填");
         }
-        return StringUtils.isBlank(value) ? defaulValue : value;
+        return StringUtils.isBlank(value) ? defaultValue : value;
 
     }
 
@@ -371,6 +372,8 @@ public class StmmsUtils {
     /**
      * 考试成绩考生数量查询接口
      *
+     *
+     * @param schoolId
      * @param examId
      * @param examCode
      * @param examNumber
@@ -381,7 +384,7 @@ public class StmmsUtils {
      * @param teacher
      * @return
      */
-    public int getStudentCount(Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
+    public int getStudentCount(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
         Map<String, String> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
         map.put("examCode", validParam(examCode, null, false, "考试编码"));
@@ -400,7 +403,7 @@ public class StmmsUtils {
         //请求
         String res;
         try {
-            res = HttpKit.sendPost(postUrl, getHeaders(studentCountUrl), map, null, null, null);
+            res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentCountUrl), map, null, null, null);
         } catch (Exception e) {
             log.info("云阅卷:调用考试成绩考生数量查询接口请求异常,{}", e.getMessage());
             throw new RuntimeException("云阅卷:调用考试成绩考生数量查询接口请求异常," + e.getMessage());
@@ -416,6 +419,8 @@ public class StmmsUtils {
     /**
      * 考试成绩考生查询接口
      *
+     *
+     * @param schoolId
      * @param examId
      * @param examCode
      * @param examNumber
@@ -428,7 +433,7 @@ public class StmmsUtils {
      * @param pageSize
      * @return
      */
-    public List<Map> getStudentScore(Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, int pageNo, int pageSize) {
+    public List<Map> getStudentScore(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, int pageNo, int pageSize) {
         Map<String, String> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
         map.put("examCode", validParam(examCode, null, false, "考试编码"));
@@ -448,7 +453,7 @@ public class StmmsUtils {
         //请求
         String res;
         try {
-            res = HttpKit.sendPost(postUrl, getHeaders(studentScoreUrl), map, null, null, null);
+            res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentScoreUrl), map, null, null, null);
         } catch (Exception e) {
             log.info("云阅卷:调用考试成绩考生查询接口请求异常,{}", e.getMessage());
             throw new RuntimeException("云阅卷:调用考试成绩考生查询接口请求异常," + e.getMessage());