Browse Source

试卷结构上传-同步优化

xiaof 3 years ago
parent
commit
3a4b560bff
19 changed files with 239 additions and 129 deletions
  1. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java
  2. 0 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperStructure.java
  3. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java
  4. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java
  5. 45 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamPrintPlanSyncStatusEnum.java
  6. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamPaperStructureMapper.java
  7. 2 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/DataSyncService.java
  8. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/SsoService.java
  9. 68 65
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  10. 2 23
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  11. 2 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  12. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  13. 61 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SsoServiceImpl.java
  14. 0 1
      distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml
  15. 3 2
      distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml
  16. 14 3
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  17. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  18. 4 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/SsoController.java
  19. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/HttpKit.java

+ 4 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.DrawRuleEnum;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -86,7 +87,7 @@ public class PrintPlanResult {
     private String thirdRelateName;
 
     @ApiModelProperty("是否同步成功")
-    private Boolean syncStatus;
+    private ExamPrintPlanSyncStatusEnum syncStatus;
 
     public Long getId() {
         return id;
@@ -256,11 +257,11 @@ public class PrintPlanResult {
         this.thirdRelateName = thirdRelateName;
     }
 
-    public Boolean getSyncStatus() {
+    public ExamPrintPlanSyncStatusEnum getSyncStatus() {
         return syncStatus;
     }
 
-    public void setSyncStatus(Boolean syncStatus) {
+    public void setSyncStatus(ExamPrintPlanSyncStatusEnum syncStatus) {
         this.syncStatus = syncStatus;
     }
 }

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

@@ -103,9 +103,6 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
      */
     private Boolean enable;
 
-    @TableField(exist = false)
-    private List<Map<String, String>> previewList;
-
     public Long getSchoolId() {
         return schoolId;
     }
@@ -225,12 +222,4 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
     public void setEnable(Boolean enable) {
         this.enable = enable;
     }
-
-    public List<Map<String, String>> getPreviewList() {
-        return previewList;
-    }
-
-    public void setPreviewList(List<Map<String, String>> previewList) {
-        this.previewList = previewList;
-    }
 }

+ 4 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.DrawRuleEnum;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
@@ -106,7 +107,7 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
     private String thirdRelateName;
 
     @TableField("sync_status")
-    private Boolean syncStatus;
+    private ExamPrintPlanSyncStatusEnum syncStatus;
 
     @ApiModelProperty(value = "学期id")
     @JsonSerialize(using = ToStringSerializer.class)
@@ -236,11 +237,11 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
         this.thirdRelateName = thirdRelateName;
     }
 
-    public Boolean getSyncStatus() {
+    public ExamPrintPlanSyncStatusEnum getSyncStatus() {
         return syncStatus;
     }
 
-    public void setSyncStatus(Boolean syncStatus) {
+    public void setSyncStatus(ExamPrintPlanSyncStatusEnum syncStatus) {
         this.syncStatus = syncStatus;
     }
 }

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java

@@ -63,6 +63,9 @@ public class ExamStudent extends BaseEntity implements Serializable {
     @TableField("clazz_id")
     private String clazzId;
 
+    @TableField("clazz_name")
+    private String clazzName;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "附件id")
     @TableField(value = "attachment_id")
@@ -179,6 +182,14 @@ public class ExamStudent extends BaseEntity implements Serializable {
         this.clazzId = clazzId;
     }
 
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
     public Boolean getSyncStatus() {
         return syncStatus;
     }

+ 45 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamPrintPlanSyncStatusEnum.java

@@ -0,0 +1,45 @@
+package com.qmth.distributed.print.business.enums;
+
+import com.qmth.teachcloud.common.enums.EnumResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 考试试卷结构同步状态
+ */
+public enum ExamPrintPlanSyncStatusEnum {
+
+    INIT("未开始"),
+    START_SYNC("开始同步"),
+    EXAM_FINISH("考试同步成功"),
+    STUDENT_FINISH("考生同步成功"),
+    FINISH("题卡同步成功,已结束");
+
+    ExamPrintPlanSyncStatusEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * @return
+     */
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<EnumResult>();
+        for (ExamPrintPlanSyncStatusEnum value : ExamPrintPlanSyncStatusEnum.values()) {
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+
+}

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamPaperStructureMapper.java

@@ -14,5 +14,5 @@ import org.apache.ibatis.annotations.Param;
  * @author xf
  */
 public interface ExamPaperStructureMapper extends BaseMapper<ExamPaperStructure> {
-    IPage<ExamPaperStructure> listByPropositionTeacherId(@Param("page") Page<ExamPaperStructure> page, @Param("schoolId") Long schoolId, @Param("propositionTeacherId") Long propositionTeacherId);
+    IPage<ExamPaperStructure> listByPropositionTeacherId(@Param("page") Page<ExamPaperStructure> page, @Param("schoolId") Long schoolId, @Param("propositionTeacherId") Long propositionTeacherId, @Param("syncStatus") String syncStatus);
 }

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

@@ -3,10 +3,9 @@ package com.qmth.distributed.print.business.service;
 import com.qmth.distributed.print.business.bean.params.SyncDataParam;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 
-import java.util.Map;
-
 /**
  * 同步数据到云阅卷 服务类
+ *
  * @Date: 2021/5/20.
  */
 public interface DataSyncService {
@@ -16,9 +15,6 @@ public interface DataSyncService {
 
     void syncDataMerge(SyncDataParam syncDataParam);
 
-    void uploadStructure(ExamPaperStructure examPaperStructure);
-
-    Map<String, Object> markerLoginInfo();
+    void syncPaperStructure(ExamPaperStructure examPaperStructure);
 
-    Map<String, Object> markerLeaderLoginInfo();
 }

+ 14 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/SsoService.java

@@ -0,0 +1,14 @@
+package com.qmth.distributed.print.business.service;
+
+import java.util.Map;
+
+/**
+ * 单点登录 服务类
+ *
+ * @Date: 2021/5/20.
+ */
+public interface SsoService {
+    Map<String, Object> markerLoginInfo();
+
+    Map<String, Object> markerLeaderLoginInfo();
+}

+ 68 - 65
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -1,7 +1,6 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -13,24 +12,22 @@ import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
 import com.qmth.distributed.print.business.bean.params.SyncDataParam;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.dto.SyncStructureData;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysConfig;
-import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.SyncFileTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
-import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.SysConfigService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.sync.StmmsUtils;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,7 +83,7 @@ public class DataSyncServiceImpl implements DataSyncService {
     @Autowired
     StmmsUtils stmmsUtils;
 
-    private ExecutorService executors = Executors.newFixedThreadPool(5);
+    ExecutorService executorService = Executors.newFixedThreadPool(5);
 
     private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
 
@@ -102,7 +99,7 @@ public class DataSyncServiceImpl implements DataSyncService {
         List<ExamPrintPlan> examPrintPlans = examPrintPlanService.list(queryWrapper);
         if (!CollectionUtils.isEmpty(examPrintPlans)) {
             for (ExamPrintPlan examPrintPlan : examPrintPlans) {
-                executors.execute(syncData(examPrintPlan, null, examPrintPlan.getName()));
+                executorService.execute(syncBaseData(examPrintPlan, null, examPrintPlan.getName()));
             }
         }
     }
@@ -124,7 +121,7 @@ public class DataSyncServiceImpl implements DataSyncService {
         }
         Long relateId = Objects.isNull(thirdRelateId) ? examPrintPlan.getThirdRelateId() : thirdRelateId;
         String thirdRelateName = Objects.isNull(examPrintPlan.getThirdRelateId()) ? examPrintPlan.getName() : examPrintPlan.getThirdRelateName();
-        executors.execute(syncData(examPrintPlan, relateId, thirdRelateName));
+        executorService.execute(syncBaseData(examPrintPlan, relateId, thirdRelateName));
 
     }
 
@@ -152,12 +149,56 @@ public class DataSyncServiceImpl implements DataSyncService {
 
         for (Long printPlanId : printPlans) {
             ExamPrintPlan printPlan = examPrintPlanService.getById(printPlanId);
-            executors.execute(syncData(printPlan, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName()));
+            executorService.execute(syncBaseData(printPlan, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName()));
         }
     }
 
     @Override
-    public void uploadStructure(ExamPaperStructure examPaperStructure) {
+    public void syncPaperStructure(ExamPaperStructure examPaperStructure) {
+        executorService.execute(syncStructure(examPaperStructure));
+    }
+
+    /**
+     * 同步基础信息
+     *
+     * @param examPrintPlan
+     * @param thirdRelateId
+     * @param thirdRelateName
+     * @return
+     */
+    private TimerTask syncBaseData(ExamPrintPlan examPrintPlan, Long thirdRelateId, String thirdRelateName) {
+        return new TimerTask() {
+            @Override
+            public void run() {
+                SysConfig sysConfig = sysConfigService.getByKey("sys.sync.enable");
+                if (sysConfig != null && "true".equals(sysConfig.getConfigValue())) {
+                    TBSyncTask syncTask = tbSyncTaskService.saveTask(examPrintPlan);
+                    doSyncBaseData(examPrintPlan, thirdRelateId, thirdRelateName, syncTask);
+                }
+            }
+        };
+    }
+
+    /**
+     * 同步试卷结构信息
+     *
+     * @param examPaperStructure
+     * @return
+     */
+    private TimerTask syncStructure(ExamPaperStructure examPaperStructure) {
+        return new TimerTask() {
+            @Override
+            public void run() {
+                SysConfig sysConfig = sysConfigService.getByKey("sys.sync.enable");
+                if (sysConfig != null && "true".equals(sysConfig.getConfigValue())) {
+                    doSyncStructure(examPaperStructure);
+                }
+            }
+        };
+    }
+
+    public void doSyncStructure(ExamPaperStructure examPaperStructure) {
+
         // 开始同步
         examPaperStructureService.updateStatusById(examPaperStructure.getId(), ExamPaperStructureStatusEnum.START_SYNC);
         ExamPaperStructureStatusEnum status = ExamPaperStructureStatusEnum.UPLOAD_FINISH;
@@ -177,7 +218,7 @@ public class DataSyncServiceImpl implements DataSyncService {
             AtomicInteger atomicInteger = new AtomicInteger(0);
             // 同步试卷
             List<JSONObject> paperAnswerJsons = JSONObject.parseArray(paperAnswer, JSONObject.class);
-            /*for (JSONObject paperAnswerJson : paperAnswerJsons) {
+            for (JSONObject paperAnswerJson : paperAnswerJsons) {
                 if (!paperAnswerJson.containsKey("paperType") || !paperAnswerJson.containsKey("paper")) {
                     throw ExceptionResultEnum.ERROR.exception("没有找到试卷文件");
                 }
@@ -233,7 +274,7 @@ public class DataSyncServiceImpl implements DataSyncService {
             if (atomicInteger.intValue() - paperAnswerJsons.size() == 0) {
                 status = ExamPaperStructureStatusEnum.ANSWER_FINISH;
                 examPaperStructure.setPaperAnswer(JSONObject.toJSONString(paperAnswerJsons));
-            }*/
+            }
 
             // 同步客观题
             atomicInteger.set(0);
@@ -299,7 +340,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                     syncStructureData.setTotalScore(Double.valueOf(m.getScore()));
                     return syncStructureData;
                 }).collect(Collectors.toList());
-                boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + subjectivePaperType, true, null, syncSubjectiveStructureDatas);
+                boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + subjectivePaperType, false, null, syncSubjectiveStructureDatas);
                 if (syncSubjectiveStructure) {
                     atomicInteger.getAndIncrement();
                 }
@@ -316,27 +357,15 @@ public class DataSyncServiceImpl implements DataSyncService {
         }
     }
 
-    private TimerTask syncData(ExamPrintPlan examPrintPlan, Long thirdRelateId, String thirdRelateName) {
-        return new TimerTask() {
-            @Override
-            public void run() {
-                SysConfig sysConfig = sysConfigService.getByKey("sys.sync.enable");
-                if (sysConfig != null && "true".equals(sysConfig.getConfigValue())) {
-                    TBSyncTask syncTask = tbSyncTaskService.saveTask(examPrintPlan);
-                    doSyncCore(examPrintPlan, thirdRelateId, thirdRelateName, syncTask);
-                }
-            }
-        };
-    }
-
     /**
      * 同步核心方法
      *
      * @param thirdRelateName
      * @param syncTask
      */
-    public void doSyncCore(ExamPrintPlan examPrintPlan, Long thirdRelateId, String thirdRelateName, TBSyncTask syncTask) {
+    public void doSyncBaseData(ExamPrintPlan examPrintPlan, Long thirdRelateId, String thirdRelateName, TBSyncTask syncTask) {
         UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
+        ExamPrintPlanSyncStatusEnum syncStatus = ExamPrintPlanSyncStatusEnum.INIT;
         try {
             if (!PrintPlanStatusEnum.END.equals(examPrintPlan.getStatus()) && !PrintPlanStatusEnum.PRINT_FINISH.equals(examPrintPlan.getStatus())) {
                 throw ExceptionResultEnum.ERROR.exception("印刷计划未打印完成或者未结束,不能同步数据");
@@ -347,30 +376,29 @@ public class DataSyncServiceImpl implements DataSyncService {
 
             // 同步计划 -> 对应云阅卷考试
             thirdRelateId = saveExam(examPrintPlan, thirdRelateId);
+            syncStatus = ExamPrintPlanSyncStatusEnum.EXAM_FINISH;
             syncTask.setThirdRelateId(thirdRelateId);
             // 考试同步成功,才能同步考生和题卡
             if (Objects.nonNull(thirdRelateId)) {
                 updateWrapper.lambda().set(ExamPrintPlan::getThirdRelateId, thirdRelateId).set(ExamPrintPlan::getThirdRelateName, thirdRelateName);
                 saveStudent(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
+                syncStatus = ExamPrintPlanSyncStatusEnum.STUDENT_FINISH;
                 cardUpload(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
+                syncStatus = ExamPrintPlanSyncStatusEnum.FINISH;
             } else {
                 throw ExceptionResultEnum.ERROR.exception("无法获取云阅卷考试,同步数据失败");
             }
 
-            // 更新计划状态
-            updateWrapper.lambda().set(ExamPrintPlan::getSyncStatus, true);
-
             // 更新日志表
             syncTask.setResult(TaskResultEnum.SUCCESS);
             syncTask.setErrorMessage(null);
         } catch (Exception e) {
             syncTask.setResult(TaskResultEnum.ERROR);
             syncTask.setErrorMessage(e.getMessage());
-            updateWrapper.lambda().set(ExamPrintPlan::getSyncStatus, false);
         } finally {
             syncTask.setStatus(TaskStatusEnum.FINISH);
             tbSyncTaskService.saveOrUpdate(syncTask);
-            updateWrapper.lambda().eq(ExamPrintPlan::getId, examPrintPlan.getId());
+            updateWrapper.lambda().set(ExamPrintPlan::getSyncStatus, syncStatus).eq(ExamPrintPlan::getId, examPrintPlan.getId());
             examPrintPlanService.update(updateWrapper);
         }
 
@@ -411,7 +439,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String studentCode = examStudent.getStudentCode();
                 String name = examStudent.getStudentName();
                 String college = "无";
-                String className = getClassName(examStudent.getExtendFields());
+                String className = StringUtils.isBlank(examStudent.getClazzName()) ? getClassName(examStudent.getExtendFields()) : examStudent.getClazzName();
                 String teacher = "无";
                 String subjectCode = examStudent.getPaperNumber() + examStudent.getPaperType(); // 取试卷编号
                 String subjectName = examStudent.getCourseName();
@@ -481,38 +509,6 @@ public class DataSyncServiceImpl implements DataSyncService {
                     }
                 }
             }
-
-
-        }
-    }
-
-    @Override
-    public Map<String, Object> markerLoginInfo() {
-        try {
-            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
-            if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
-                    || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(userSpecialPrivilege)) {
-                throw ExceptionResultEnum.ERROR.exception("该用户没有评卷员角色,无法登录");
-            }
-            return stmmsUtils.markLogin(sysUser);
-        } catch (Exception e) {
-            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
-        }
-    }
-
-    @Override
-    public Map<String, Object> markerLeaderLoginInfo() {
-        try {
-            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
-            if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
-                    || SpecialPrivilegeEnum.MARKER.equals(userSpecialPrivilege)) {
-                throw ExceptionResultEnum.ERROR.exception("该用户没有科组长角色,无法登录");
-            }
-            return stmmsUtils.markLeaderLogin(sysUser);
-        } catch (Exception e) {
-            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
     }
 
@@ -526,10 +522,17 @@ public class DataSyncServiceImpl implements DataSyncService {
         return SystemConstant.TEMP_FILES_DIR + File.separator + "upload-temp" + File.separator + type.name().toLowerCase() + File.separator + System.currentTimeMillis();
     }
 
+    /**
+     * 通过扩展字段,获取班级名称
+     *
+     * @param extendCloumn
+     * @return
+     */
     private String getClassName(String extendCloumn) {
         List<Map> mapList = JSONObject.parseArray(extendCloumn, Map.class);
         for (Map map : mapList) {
-            if (Objects.equals("className", map.get("code").toString())) {
+            if (Objects.equals("className", map.get("code").toString())
+                    || Objects.equals("clazzName", map.get("code").toString())) {
                 return map.get("value").toString();
             }
         }

+ 2 - 23
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java

@@ -15,6 +15,7 @@ import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
+import com.qmth.distributed.print.business.enums.ExamPrintPlanSyncStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamPaperStructureMapper;
 import com.qmth.distributed.print.business.service.ExamPaperStructureService;
 import com.qmth.distributed.print.business.service.ExamTaskDetailService;
@@ -67,9 +68,6 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
     @Resource
     BasicAttachmentService basicAttachmentService;
 
-    @Autowired
-    TeachcloudCommonService teachcloudCommonService;
-
     @Autowired
     StmmsUtils stmmsUtils;
 
@@ -78,26 +76,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Page<ExamPaperStructure> page = new Page<>(pageNumber, pageSize);
-        IPage<ExamPaperStructure> examPaperStructureIPage = this.baseMapper.listByPropositionTeacherId(page, schoolId, sysUser.getId());
-        for (ExamPaperStructure record : examPaperStructureIPage.getRecords()) {
-            String paperAnswer = record.getPaperAnswer();
-            if (!StringUtils.isBlank(paperAnswer)) {
-                List<JSONObject> paperAnswerJsons = JSONObject.parseArray(paperAnswer, JSONObject.class);
-                List<Map<String, String>> mapList = new ArrayList<>();
-                for (JSONObject paperAnswerJson : paperAnswerJsons) {
-                    if (paperAnswerJson.containsKey("paperType") && paperAnswerJson.containsKey("answer")) {
-                        String paperType = paperAnswerJson.getString("paperType");
-                        String answer = paperAnswerJson.getString("answer");
-
-                        Map<String, String> stringMap = teachcloudCommonService.filePreviewByAttachmentId(Long.valueOf(answer), false);
-                        stringMap.put("paperType", paperType);
-                        mapList.add(stringMap);
-                    }
-                    record.setPreviewList(mapList);
-                }
-            }
-
-        }
+        IPage<ExamPaperStructure> examPaperStructureIPage = this.baseMapper.listByPropositionTeacherId(page, schoolId, sysUser.getId(), ExamPrintPlanSyncStatusEnum.FINISH.name());
         return examPaperStructureIPage;
     }
 

+ 2 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -16,10 +16,7 @@ import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ClientPrintData;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
-import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
-import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
-import com.qmth.distributed.print.business.enums.TemplateTypeEnum;
+import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamPrintPlanMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -233,7 +230,6 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
     @Override
     public Boolean savePrintPlan(PrintPlanParams printPlanParams) {
         boolean result;
-        System.out.println("JSON = " + printPlanParams.getOrdinaryContent());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long id = printPlanParams.getId();
         Long schoolId = printPlanParams.getSchoolId();
@@ -273,6 +269,7 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
             }
             examPrintPlan.setId(SystemConstant.getDbUuid());
             examPrintPlan.setStatus(PrintPlanStatusEnum.NEW);
+            examPrintPlan.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
             result = this.save(examPrintPlan);
         } else {
             // 包含印刷计划id -> 编辑印刷计划

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1653,6 +1653,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             // 课程+试卷编号
             examPrintPlan.setName(examTask.getCourseName() + examTask.getPaperNumber());
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+            examPrintPlan.setSyncStatus(ExamPrintPlanSyncStatusEnum.INIT);
             examPrintPlan.setCreateId(sysUser.getId());
             examPrintPlanService.save(examPrintPlan);
 

+ 61 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SsoServiceImpl.java

@@ -0,0 +1,61 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.qmth.distributed.print.business.service.SsoService;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.sync.StmmsUtils;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * @Date: 2021/5/20.
+ */
+@Service
+public class SsoServiceImpl implements SsoService {
+
+    private final static Logger log = LoggerFactory.getLogger(SsoServiceImpl.class);
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    StmmsUtils stmmsUtils;
+
+    @Override
+    public Map<String, Object> markerLoginInfo() {
+        try {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
+            if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
+                    || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(userSpecialPrivilege)) {
+                throw ExceptionResultEnum.ERROR.exception("该用户没有评卷员角色,无法登录");
+            }
+            return stmmsUtils.markLogin(sysUser);
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
+    @Override
+    public Map<String, Object> markerLeaderLoginInfo() {
+        try {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
+            if (SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)
+                    || SpecialPrivilegeEnum.MARKER.equals(userSpecialPrivilege)) {
+                throw ExceptionResultEnum.ERROR.exception("该用户没有科组长角色,无法登录");
+            }
+            return stmmsUtils.markLeaderLogin(sysUser);
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
+}

+ 0 - 1
distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml

@@ -177,6 +177,5 @@
                 AND a.course_code = #{courseCode}
                 AND a.paper_number = #{paperNumber}
                 AND c.status = 'SUBMIT'
-                AND c.make_method != 'SELECT'
     </select>
 </mapper>

+ 3 - 2
distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml

@@ -14,7 +14,8 @@
             edc.course_code courseCode,
             edc.course_name courseName,
             edc.paper_type paperType,
-            'INIT' status,
+            ifnull(eps.status, 'INIT') status,
+            eps.paper_answer paperAnswer,
             et.user_id propositionTeacherId
         FROM
             exam_print_plan epp
@@ -35,6 +36,6 @@
         WHERE
             epp.school_id = #{schoolId}
             and et.user_id = #{propositionTeacherId}
-            and epp.sync_status = TRUE
+            and epp.sync_status = #{syncStatus}
     </select>
 </mapper>

+ 14 - 3
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -23,9 +23,9 @@
         school_id, exam_detail_course_id, student_name, student_code, ticket_number, site_number, print_paper, print_card, extend_fields, paper_type
     </sql>
     <insert id="insertBatch">
-        insert into exam_student (id, school_id, org_id, exam_detail_course_id, student_name, student_code, ticket_number, site_number, extend_fields, clazz_id, create_id) values
+        insert into exam_student (id, school_id, org_id, exam_detail_course_id, student_name, student_code, ticket_number, site_number, extend_fields, clazz_id, clazz_name, create_id) values
         <foreach collection="examStudents" separator="," item="item">
-            (#{item.id}, #{item.schoolId}, #{item.orgId}, #{item.examDetailCourseId}, #{item.studentName}, #{item.studentCode}, #{item.ticketNumber}, #{item.siteNumber}, #{item.extendFields}, #{item.clazzId}, #{item.createId})
+            (#{item.id}, #{item.schoolId}, #{item.orgId}, #{item.examDetailCourseId}, #{item.studentName}, #{item.studentCode}, #{item.ticketNumber}, #{item.siteNumber}, #{item.extendFields}, #{item.clazzId}, #{item.clazzName}, #{item.createId})
         </foreach>
     </insert>
     <select id="getStudentDetail" resultType="java.util.Map">
@@ -102,6 +102,7 @@
             a.student_name studentName,
             a.student_code studentCode,
             a.ticket_number ticketNumber,
+            a.clazz_name clazzName,
             a.extend_fields extendFields,
             a.paper_type paperType
         FROM
@@ -115,7 +116,17 @@
     </select>
     <select id="listExamStudentBySchoolIdAndClazzId"
             resultType="com.qmth.distributed.print.business.entity.ExamStudent">
-        select student_name studentName, student_code studentCode, clazz_id clazzId from basic_student where school_id = #{schoolId} and clazz_id = #{classId}
+        SELECT
+            bs.student_name studentName,
+            bs.student_code studentCode,
+            bs.clazz_id clazzId,
+            bc.clazz_name clazzName
+        FROM
+            basic_student bs
+                LEFT JOIN
+            basic_clazz bc ON bs.school_id = bc.school_id and bs.clazz_id = bc.id
+        where bs.school_id = #{schoolId}
+            and bs.clazz_id = #{classId}
     </select>
 
 </mapper>

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

@@ -69,8 +69,8 @@ public class ExamPaperStructureController {
                          @RequestParam("files") MultipartFile[] files) {
         ExamPaperStructure examPaper = examPaperStructureService.upload(examPaperStructure, md5, files);
         // 推送云阅卷
-        dataSyncService.uploadStructure(examPaper);
-        return ResultUtil.ok(String.valueOf(examPaper.getId()));
+        dataSyncService.syncPaperStructure(examPaper);
+        return ResultUtil.ok(String.valueOf(examPaper.getId()), null);
     }
 
     /**

+ 4 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/SsoController.java

@@ -2,7 +2,7 @@ package com.qmth.distributed.print.api;
 
 
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.service.DataSyncService;
+import com.qmth.distributed.print.business.service.SsoService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.Api;
@@ -27,7 +27,7 @@ import java.util.Map;
 public class SsoController {
 
     @Autowired
-    DataSyncService dataSyncService;
+    SsoService ssoService;
 
     /**
      * 评卷员单点登录
@@ -37,7 +37,7 @@ public class SsoController {
     @ApiOperation(value = "评卷员单点登录")
     @RequestMapping(value = "/marker_login", method = RequestMethod.POST)
     public Result markerLogin() {
-        Map<String, Object> map = dataSyncService.markerLoginInfo();
+        Map<String, Object> map = ssoService.markerLoginInfo();
         return ResultUtil.ok(map);
     }
 
@@ -49,7 +49,7 @@ public class SsoController {
     @ApiOperation(value = "评卷员单点登录")
     @RequestMapping(value = "/marker_leader_login", method = RequestMethod.POST)
     public Result markerLeaderLogin() {
-        Map<String, Object> map = dataSyncService.markerLeaderLoginInfo();
+        Map<String, Object> map = ssoService.markerLeaderLoginInfo();
         return ResultUtil.ok(map);
     }
 }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/HttpKit.java

@@ -263,4 +263,5 @@ public class HttpKit {
         }
         return result;
     }
+
 }