Selaa lähdekoodia

3.2.3 同步云阅卷

xiaofei 2 vuotta sitten
vanhempi
commit
bfcd802b41
28 muutettua tiedostoa jossa 287 lisäystä ja 90 poistoa
  1. 31 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamCardPageDto.java
  2. 3 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java
  3. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java
  4. 1 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskSync.java
  5. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardMapper.java
  6. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java
  7. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  8. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSyncStmmsExamService.java
  9. 7 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  10. 18 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  11. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  12. 24 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  13. 22 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SsoServiceImpl.java
  14. 18 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncStmmsExamServiceImpl.java
  15. 5 0
      distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql
  16. 24 2
      distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml
  17. 2 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  18. 0 9
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  19. 19 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java
  20. 0 15
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  21. 16 7
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysAdminSetController.java
  22. 5 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/TSyncStmmsExamController.java
  23. 12 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysConfigResult.java
  24. 30 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysConfigResultOption.java
  25. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  26. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java
  27. 15 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  28. 22 7
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

+ 31 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamCardPageDto.java

@@ -0,0 +1,31 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.qmth.distributed.print.business.entity.ExamCard;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 题卡管理-题卡分页查询对象
+ */
+public class ExamCardPageDto extends ExamCard implements Serializable {
+
+    private String jpgAttachmentInfo;
+    private List<String> imageUrls;
+
+    public String getJpgAttachmentInfo() {
+        return jpgAttachmentInfo;
+    }
+
+    public void setJpgAttachmentInfo(String jpgAttachmentInfo) {
+        this.jpgAttachmentInfo = jpgAttachmentInfo;
+    }
+
+    public List<String> getImageUrls() {
+        return imageUrls;
+    }
+
+    public void setImageUrls(List<String> imageUrls) {
+        this.imageUrls = imageUrls;
+    }
+}

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java

@@ -14,7 +14,7 @@ import java.util.Map;
  */
  */
 public class SyncExamTaskDto {
 public class SyncExamTaskDto {
 
 
-    private Long examTaskId;
+    private String examTaskId;
     private String courseCode;
     private String courseCode;
     private String courseName;
     private String courseName;
     private String paperNumber;
     private String paperNumber;
@@ -39,11 +39,11 @@ public class SyncExamTaskDto {
     private String collegeCode;
     private String collegeCode;
     private String collegeName;
     private String collegeName;
 
 
-    public Long getExamTaskId() {
+    public String getExamTaskId() {
         return examTaskId;
         return examTaskId;
     }
     }
 
 
-    public void setExamTaskId(Long examTaskId) {
+    public void setExamTaskId(String examTaskId) {
         this.examTaskId = examTaskId;
         this.examTaskId = examTaskId;
     }
     }
 
 

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java

@@ -225,4 +225,5 @@ public class ExamCard extends BaseEntity implements Serializable {
     public void setOrgs(List<SysOrg> orgs) {
     public void setOrgs(List<SysOrg> orgs) {
         this.orgs = orgs;
         this.orgs = orgs;
     }
     }
+
 }
 }

+ 1 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskSync.java

@@ -25,7 +25,7 @@ import java.util.Map;
  *
  *
  */
  */
 @TableName("exam_task_sync")
 @TableName("exam_task_sync")
-public class ExamTaskSync extends BaseEntity implements Serializable {
+public class ExamTaskSync implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
@@ -101,12 +101,10 @@ public class ExamTaskSync extends BaseEntity implements Serializable {
         this.syncEndTime = syncEndTime;
         this.syncEndTime = syncEndTime;
     }
     }
 
 
-    @Override
     public Long getId() {
     public Long getId() {
         return id;
         return id;
     }
     }
 
 
-    @Override
     public void setId(Long id) {
     public void setId(Long id) {
         this.id = id;
         this.id = id;
     }
     }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
+import com.qmth.distributed.print.business.bean.dto.ExamCardPageDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
@@ -34,7 +35,7 @@ public interface ExamCardMapper extends BaseMapper<ExamCard> {
 
 
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
 
-    IPage<ExamCard> listPage(@Param("page") Page<ExamCard> page, @Param("schoolId") Long schoolId, @Param("type") String type, @Param("title") String title, @Param("createMethod") String createMethod, @Param("enable") Boolean enable, @Param("createStartTime") Long createStartTime, @Param("createEndTime") Long createEndTime,@Param("dpr") DataPermissionRule dpr);
+    IPage<ExamCardPageDto> listPage(@Param("page") Page<ExamCardPageDto> page, @Param("schoolId") Long schoolId, @Param("type") String type, @Param("title") String title, @Param("createMethod") String createMethod, @Param("enable") Boolean enable, @Param("createStartTime") Long createStartTime, @Param("createEndTime") Long createEndTime, @Param("dpr") DataPermissionRule dpr);
 
 
     List<ExamCard> listCustomByExamStage(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("type") String type);
     List<ExamCard> listCustomByExamStage(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("type") String type);
 }
 }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
+import com.qmth.distributed.print.business.bean.dto.ExamCardPageDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
@@ -39,7 +40,7 @@ public interface ExamCardService extends IService<ExamCard> {
 
 
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
     List<SyncExamCardDto> listSyncCardByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 
 
-    IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize);
+    IPage<ExamCardPageDto> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize);
 
 
     Long saveGeneric(GenericExamCardParams params) throws Exception;
     Long saveGeneric(GenericExamCardParams params) throws Exception;
 
 

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

@@ -115,4 +115,6 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
     List<ExamPrintPlan> listBySchoolId(Long schoolId);
     List<ExamPrintPlan> listBySchoolId(Long schoolId);
 
 
     IPage<SyncExamTaskDto> listSyncExamTask(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
     IPage<SyncExamTaskDto> listSyncExamTask(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
+
+    String checkSyncMode(SyncDataParam syncDataParam);
 }
 }

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

@@ -10,9 +10,9 @@ import java.util.List;
  */
  */
 public interface TSyncStmmsExamService extends IService<TSyncStmmsExam> {
 public interface TSyncStmmsExamService extends IService<TSyncStmmsExam> {
 
 
-    List<TSyncStmmsExam> listExam();
+    List<TSyncStmmsExam> listExam(String orgCode);
 
 
-    List<TSyncStmmsExam> syncExam();
+    List<TSyncStmmsExam> syncExam(String orgCode);
 
 
     TSyncStmmsExam getBySchoolIdAndExamId(Long schoolId, String orgCode, Long thirdRelateId);
     TSyncStmmsExam getBySchoolIdAndExamId(Long schoolId, String orgCode, Long thirdRelateId);
 }
 }

+ 7 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -116,13 +116,15 @@ public class DataSyncServiceImpl implements DataSyncService {
 
 
             //按课程做同步
             //按课程做同步
             for (SyncExamTaskDto param : params) {
             for (SyncExamTaskDto param : params) {
+                // 前置方法已经校验过各课程下是否有学院代码
+                // 本行为,若为按学校同步,则后续方法都传null,方便校验
                 String orgCode = cloudMarkingTaskUtils.isCollegeMode(schoolId) ? param.getCollegeCode() : null;
                 String orgCode = cloudMarkingTaskUtils.isCollegeMode(schoolId) ? param.getCollegeCode() : null;
                 // 同步机构
                 // 同步机构
                 thirdRelateOrgId = saveSchool(schoolId, thirdRelateOrgId, orgCode, param.getCollegeName());
                 thirdRelateOrgId = saveSchool(schoolId, thirdRelateOrgId, orgCode, param.getCollegeName());
                 // 同步考试
                 // 同步考试
                 thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
                 thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
 
 
-                Long examTaskId = param.getExamTaskId();
+                Long examTaskId = Long.valueOf(param.getExamTaskId());
                 ExamTask examTask = examTaskService.getById(examTaskId);
                 ExamTask examTask = examTaskService.getById(examTaskId);
                 ExamTaskSync examTaskSync = examTaskSyncService.getBySchoolIdAndOrgCodeAndPaperNumber(schoolId, orgCode, examTask.getPaperNumber());
                 ExamTaskSync examTaskSync = examTaskSyncService.getBySchoolIdAndOrgCodeAndPaperNumber(schoolId, orgCode, examTask.getPaperNumber());
                 if (examTaskSync != null && ExamTaskSyncStatusEnum.STARTING.equals(examTaskSync.getSyncStatus())) {
                 if (examTaskSync != null && ExamTaskSyncStatusEnum.STARTING.equals(examTaskSync.getSyncStatus())) {
@@ -480,6 +482,9 @@ public class DataSyncServiceImpl implements DataSyncService {
      * @param orgName       学院名称
      * @param orgName       学院名称
      */
      */
     public Integer saveSchool(Long schoolId, Integer thirdRelateId, String orgCode, String orgName) {
     public Integer saveSchool(Long schoolId, Integer thirdRelateId, String orgCode, String orgName) {
+        if (StringUtils.isBlank(orgCode)) {
+            return null;
+        }
         try {
         try {
             if (Objects.isNull(thirdRelateId)) {
             if (Objects.isNull(thirdRelateId)) {
                 thirdRelateId = cloudMarkingTaskUtils.syncSchool(schoolId, orgCode, orgName);
                 thirdRelateId = cloudMarkingTaskUtils.syncSchool(schoolId, orgCode, orgName);
@@ -513,7 +518,7 @@ public class DataSyncServiceImpl implements DataSyncService {
         try {
         try {
             if (Objects.isNull(thirdRelateId)) {
             if (Objects.isNull(thirdRelateId)) {
                 String code = String.valueOf(objectId);
                 String code = String.valueOf(objectId);
-                thirdRelateId = cloudMarkingTaskUtils.syncExam(schoolId, code, thirdRelateName, examTime);
+                thirdRelateId = cloudMarkingTaskUtils.syncExam(schoolId, code, thirdRelateName, examTime, orgCode);
             }
             }
 
 
         } catch (Exception e) {
         } catch (Exception e) {

+ 18 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -1,13 +1,16 @@
 package com.qmth.distributed.print.business.service.impl;
 package com.qmth.distributed.print.business.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.JsonObject;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
+import com.qmth.distributed.print.business.bean.dto.ExamCardPageDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
 import com.qmth.distributed.print.business.bean.marking.ConvertJpgStorage;
 import com.qmth.distributed.print.business.bean.marking.ConvertJpgStorage;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
@@ -340,16 +343,27 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
 
 
 
 
     @Override
     @Override
-    public IPage<ExamCard> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamCardPageDto> listPage(String type, String title, String createMethod, Boolean enable, Long createStartTime, Long createEndTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
-        return this.baseMapper.listPage(new Page<>(pageNumber, pageSize), schoolId, type, title, createMethod, enable, createStartTime, createEndTime, dpr);
+        IPage<ExamCardPageDto> cardPageDtoIPage = this.baseMapper.listPage(new Page<>(pageNumber, pageSize), schoolId, type, title, createMethod, enable, createStartTime, createEndTime, dpr);
+        for (ExamCardPageDto record : cardPageDtoIPage.getRecords()) {
+            if (StringUtils.isNotBlank(record.getJpgAttachmentInfo())) {
+                List<JSONObject> mapList = JSON.parseArray(record.getJpgAttachmentInfo(), JSONObject.class);
+                List<String> imageUrls = new ArrayList<>();
+                for (JSONObject object : mapList) {
+                    imageUrls.add(teachcloudCommonService.filePreview(object.getLong("attachmentId")));
+                }
+                record.setImageUrls(imageUrls);
+            }
+        }
+        return cardPageDtoIPage;
     }
     }
 
 
     @Transactional
     @Transactional
     @Override
     @Override
-    public Long saveGeneric(GenericExamCardParams params) throws Exception {
+    public Long saveGeneric(GenericExamCardParams params) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
 
@@ -535,7 +549,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     public void convertImage(Long id) {
     public void convertImage(Long id) {
         ExamCard examCard = this.getById(id);
         ExamCard examCard = this.getById(id);
         ExamCardDetail examCardDetail = examCardDetailService.getByCardId(id);
         ExamCardDetail examCardDetail = examCardDetailService.getByCardId(id);
-        if(examCardDetail == null){
+        if (examCardDetail == null) {
             throw ExceptionResultEnum.ERROR.exception("题卡不存在");
             throw ExceptionResultEnum.ERROR.exception("题卡不存在");
         }
         }
 
 

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

@@ -102,7 +102,7 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
         for (SyncExamTaskDto examTaskDto : examTaskDtos.getRecords()) {
         for (SyncExamTaskDto examTaskDto : examTaskDtos.getRecords()) {
             String paperType = examTaskDto.getPaperType();
             String paperType = examTaskDto.getPaperType();
             List<String> paperTypes = Arrays.asList(paperType.split(","));
             List<String> paperTypes = Arrays.asList(paperType.split(","));
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTaskDto.getExamTaskId());
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(Long.valueOf(examTaskDto.getExamTaskId()));
             List<JSONObject> paperAttachments = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
             List<JSONObject> paperAttachments = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
             List<Long> cardIds = paperAttachments.stream().filter(m -> paperTypes.contains(m.getString("name"))).map(m -> m.getLong("cardId")).collect(Collectors.toList());
             List<Long> cardIds = paperAttachments.stream().filter(m -> paperTypes.contains(m.getString("name"))).map(m -> m.getLong("cardId")).collect(Collectors.toList());
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();

+ 24 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -446,24 +446,14 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
             throw ExceptionResultEnum.ERROR.exception("考试时间必填");
             throw ExceptionResultEnum.ERROR.exception("考试时间必填");
         }
         }
 
 
-        if (cloudMarkingTaskUtils.isCollegeMode(schoolId)) {
-            // 查询科目所属学院是否一致
-            Set<Long> collegeSet = new HashSet<>();
-            for (SyncExamTaskDto param : params) {
-                if (param.getCollegeId() == null) {
-                    throw ExceptionResultEnum.ERROR.exception(String.format("未找到课程[%s(%s)]所属学院", param.getCourseName(), param.getCourseCode()));
-                }
-                collegeSet.add(param.getCollegeId());
-            }
-            if (collegeSet.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception("所选课程存在不同的学院,无法一起推送");
-            }
-        }
+        // 校验同步数据的所属学院(机构)是否唯一
+        checkSyncMode(syncDataParam);
+
+        syncDataParam.setThirdRelateId(136l);
 
 
         Long objectId = SystemConstant.getDbUuid();
         Long objectId = SystemConstant.getDbUuid();
         String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
         String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
         asyncCloudMarkingTaskService.syncExamAndStudentAndCard(schoolId, objectId, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName(), examTime, params);
         asyncCloudMarkingTaskService.syncExamAndStudentAndCard(schoolId, objectId, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName(), examTime, params);
-
     }
     }
 
 
     @Override
     @Override
@@ -524,15 +514,29 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
 
 
     @Override
     @Override
     public IPage<SyncExamTaskDto> listSyncExamTask(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
     public IPage<SyncExamTaskDto> listSyncExamTask(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
-        if (semesterId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择学期");
-        }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return examDetailCourseService.listSyncCourseByPrintPlanId(semesterId, examId, orgId, cardType, syncStatus, courseName, startTime, endTime, pageNumber, pageSize);
         return examDetailCourseService.listSyncCourseByPrintPlanId(semesterId, examId, orgId, cardType, syncStatus, courseName, startTime, endTime, pageNumber, pageSize);
     }
     }
 
 
+    @Override
+    public String checkSyncMode(SyncDataParam syncDataParam) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        if (cloudMarkingTaskUtils.isCollegeMode(schoolId)) {
+            // 查询科目所属学院是否一致
+            Set<Long> collegeSet = new HashSet<>();
+            for (SyncExamTaskDto param : syncDataParam.getList()) {
+                if (param.getCollegeId() == null) {
+                    throw ExceptionResultEnum.ERROR.exception(String.format("未找到课程[%s(%s)]所属学院", param.getCourseName(), param.getCourseCode()));
+                }
+                collegeSet.add(param.getCollegeId());
+            }
+            if (collegeSet.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("所选课程存在不同的学院,无法一起推送");
+            }
+            return String.valueOf(collegeSet.toArray()[0]);
+        }
+        return null;
+    }
+
 
 
     /**
     /**
      * 查找子机构
      * 查找子机构

+ 22 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SsoServiceImpl.java

@@ -60,7 +60,17 @@ public class SsoServiceImpl implements SsoService {
                     || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(userSpecialPrivilege)) {
                     || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(userSpecialPrivilege)) {
                 throw ExceptionResultEnum.ERROR.exception("该用户没有评卷员角色,无法登录");
                 throw ExceptionResultEnum.ERROR.exception("该用户没有评卷员角色,无法登录");
             }
             }
-            return stmmsUtils.markLogin(sysUser);
+            // 顶级机构
+            SysOrg rootOrg = sysOrgService.findRootOrg(sysUser.getSchoolId());
+            List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(sysUser.getOrgId(), false, false);
+            if(sysOrgList.isEmpty()){
+                throw ExceptionResultEnum.ERROR.exception(String.format("未找到用户账号[%s]所属机构及上级机构", sysUser.getLoginName()));
+            }
+            SysOrg collegeOrg = sysOrgList.stream().filter(m->m.getParentId().equals(rootOrg.getId())).findFirst().orElseGet(null);
+            if(collegeOrg == null){
+                throw ExceptionResultEnum.ERROR.exception(String.format("未找到用户账号[%s]所属学院", sysUser.getLoginName()));
+            }
+            return stmmsUtils.markLogin(sysUser, collegeOrg.getCode());
         } catch (Exception e) {
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
         }
@@ -75,7 +85,17 @@ public class SsoServiceImpl implements SsoService {
                     || SpecialPrivilegeEnum.MARKER.equals(userSpecialPrivilege)) {
                     || SpecialPrivilegeEnum.MARKER.equals(userSpecialPrivilege)) {
                 throw ExceptionResultEnum.ERROR.exception("该用户没有科组长角色,无法登录");
                 throw ExceptionResultEnum.ERROR.exception("该用户没有科组长角色,无法登录");
             }
             }
-            return stmmsUtils.markLeaderLogin(sysUser);
+            // 顶级机构
+            SysOrg rootOrg = sysOrgService.findRootOrg(sysUser.getSchoolId());
+            List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(sysUser.getOrgId(), false, false);
+            if(sysOrgList.isEmpty()){
+                throw ExceptionResultEnum.ERROR.exception(String.format("未找到用户账号[%s]所属机构及上级机构", sysUser.getLoginName()));
+            }
+            SysOrg collegeOrg = sysOrgList.stream().filter(m->m.getParentId().equals(rootOrg.getId())).findFirst().orElseGet(null);
+            if(collegeOrg == null){
+                throw ExceptionResultEnum.ERROR.exception(String.format("未找到用户账号[%s]所属学院", sysUser.getLoginName()));
+            }
+            return stmmsUtils.markLeaderLogin(sysUser, collegeOrg.getCode());
         } catch (Exception e) {
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
         }

+ 18 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncStmmsExamServiceImpl.java

@@ -26,30 +26,43 @@ public class TSyncStmmsExamServiceImpl extends ServiceImpl<TSyncStmmsExamMapper,
     CloudMarkingTaskUtils cloudMarkingTaskUtils;
     CloudMarkingTaskUtils cloudMarkingTaskUtils;
 
 
     @Override
     @Override
-    public List<TSyncStmmsExam> listExam() {
+    public List<TSyncStmmsExam> listExam(String orgCode) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        if (cloudMarkingTaskUtils.isCollegeMode(schoolId) && StringUtils.isBlank(orgCode)) {
+            throw ExceptionResultEnum.ERROR.exception("当前学校配置为按学院推送,请传入学院代码。若无法解决,请联系管理员。");
+        }
         QueryWrapper<TSyncStmmsExam> queryWrapper = new QueryWrapper<>();
         QueryWrapper<TSyncStmmsExam> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId)
         queryWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId)
                 .orderByDesc(TSyncStmmsExam::getExamId);
                 .orderByDesc(TSyncStmmsExam::getExamId);
+        if (StringUtils.isNotBlank(orgCode)) {
+            queryWrapper.lambda().eq(TSyncStmmsExam::getOrgCode, orgCode);
+        } else {
+            queryWrapper.lambda().isNull(TSyncStmmsExam::getOrgCode);
+        }
         return this.list(queryWrapper);
         return this.list(queryWrapper);
     }
     }
 
 
     @Transactional
     @Transactional
     @Override
     @Override
-    public List<TSyncStmmsExam> syncExam() {
+    public List<TSyncStmmsExam> syncExam(String orgCode) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        if (cloudMarkingTaskUtils.isCollegeMode(schoolId) && StringUtils.isBlank(orgCode)) {
+            throw ExceptionResultEnum.ERROR.exception("当前学校配置为按学院推送,请传入学院代码。若无法解决,请联系管理员。");
+        }
         UpdateWrapper<TSyncStmmsExam> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<TSyncStmmsExam> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId);
         updateWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId);
         this.remove(updateWrapper);
         this.remove(updateWrapper);
 
 
-        List<JSONObject> objectList = cloudMarkingTaskUtils.getExam(schoolId, SystemConstant.PAGE_NUMBER_MIN, SystemConstant.PAGE_SIZE);
+        String orgCodeTrim = "".equals(orgCode.trim()) ? null : orgCode.trim();
+        List<JSONObject> objectList = cloudMarkingTaskUtils.getExam(schoolId, orgCodeTrim, SystemConstant.PAGE_NUMBER_MIN, SystemConstant.PAGE_SIZE);
         if (objectList.isEmpty()) {
         if (objectList.isEmpty()) {
-            throw ExceptionResultEnum.ERROR.exception("未查询到考试");
+            throw ExceptionResultEnum.ERROR.exception("未查询到云阅卷考试");
         }
         }
         List<TSyncStmmsExam> markingExams = objectList.stream().map(m -> {
         List<TSyncStmmsExam> markingExams = objectList.stream().map(m -> {
             TSyncStmmsExam cloudMarkingExam = new TSyncStmmsExam();
             TSyncStmmsExam cloudMarkingExam = new TSyncStmmsExam();
             cloudMarkingExam.setId(SystemConstant.getDbUuid());
             cloudMarkingExam.setId(SystemConstant.getDbUuid());
             cloudMarkingExam.setSchoolId(schoolId);
             cloudMarkingExam.setSchoolId(schoolId);
+            cloudMarkingExam.setOrgCode(orgCodeTrim);
             cloudMarkingExam.setExamId(m.getInteger("id"));
             cloudMarkingExam.setExamId(m.getInteger("id"));
             cloudMarkingExam.setExamName(m.getString("name"));
             cloudMarkingExam.setExamName(m.getString("name"));
             return cloudMarkingExam;
             return cloudMarkingExam;
@@ -65,7 +78,7 @@ public class TSyncStmmsExamServiceImpl extends ServiceImpl<TSyncStmmsExamMapper,
         QueryWrapper<TSyncStmmsExam> queryWrapper = new QueryWrapper<>();
         QueryWrapper<TSyncStmmsExam> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId)
         queryWrapper.lambda().eq(TSyncStmmsExam::getSchoolId, schoolId)
                 .eq(TSyncStmmsExam::getExamId, thirdRelateId);
                 .eq(TSyncStmmsExam::getExamId, thirdRelateId);
-        if(StringUtils.isNotBlank(orgCode)){
+        if (StringUtils.isNotBlank(orgCode)) {
             queryWrapper.lambda().eq(TSyncStmmsExam::getOrgCode, orgCode);
             queryWrapper.lambda().eq(TSyncStmmsExam::getOrgCode, orgCode);
         }
         }
         return this.getOne(queryWrapper);
         return this.getOne(queryWrapper);

+ 5 - 0
distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql

@@ -26,6 +26,11 @@ ALTER TABLE `t_sync_stmms_exam` ADD COLUMN `org_code` VARCHAR(45) NULL COMMENT '
 UPDATE `sys_privilege` SET `name` = '启用/禁用' WHERE (`id` = '559');
 UPDATE `sys_privilege` SET `name` = '启用/禁用' WHERE (`id` = '559');
 UPDATE `sys_privilege` SET `name` = '启用/禁用',`url` = '/api/admin/basic/semester/enable' WHERE (`id` = '560');
 UPDATE `sys_privilege` SET `name` = '启用/禁用',`url` = '/api/admin/basic/semester/enable' WHERE (`id` = '560');
 
 
+DELETE FROM `sys_config` WHERE (`id` = '6');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('395', '校验同步规则', '/api/admin/exam/print_sync/check_sync_mode', 'URL', '392', '10', 'AUTH', '1', '1', '1');
+UPDATE `sys_privilege` SET `related` = '395,435,792,793' WHERE (`id` = '394');
+UPDATE `sys_privilege` SET `related` = '395,435,792,793' WHERE (`id` = '397');
+
 
 
 /*王亮新增*/
 /*王亮新增*/
 INSERT INTO sys_role
 INSERT INTO sys_role

+ 24 - 2
distributed-print-business/src/main/resources/mapper/ExamCardMapper.xml

@@ -183,8 +183,30 @@
                 AND (c.make_method != 'SELECT'
                 AND (c.make_method != 'SELECT'
                     or (c.make_method != 'SELECT' and c.type = 'GENERIC' and c.create_method != 'UPLOAD'))
                     or (c.make_method != 'SELECT' and c.type = 'GENERIC' and c.create_method != 'UPLOAD'))
     </select>
     </select>
-    <select id="listPage" resultMap="BaseResultMap">
-        select * from exam_card
+    <select id="listPage" resultType="com.qmth.distributed.print.business.bean.dto.ExamCardPageDto">
+        select
+        ec.id id,
+        ec.school_id schoolId,
+        ec.org_id orgId,
+        ec.course_code courseCode,
+        ec.course_name courseName,
+        ec.title title,
+        ec.make_method makeMethod,
+        ec.status status,
+        ec.create_id createId,
+        ec.create_time createTime,
+        ec.update_id updateId,
+        ec.update_time updateTime,
+        ec.type type,
+        ec.create_method createMethod,
+        ec.attachment_id attachmentId,
+        ec.sync_status syncStatus,
+        ec.enable enable,
+        ec.used used,
+        ec.remark remark,
+        ec.card_rule_id cardRuleId,
+        ecd.jpg_attachment_info jpgAttachmentInfo
+            from exam_card ec left join exam_card_detail ecd on ec.id = ecd.card_id
         <where>
         <where>
             school_id = #{schoolId}
             school_id = #{schoolId}
             <if test="type != null and type != ''">
             <if test="type != null and type != ''">

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardCustDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
+import com.qmth.distributed.print.business.bean.dto.ExamCardPageDto;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.ExamCardParams;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCard;
@@ -75,7 +76,7 @@ public class ExamCardController {
                        @RequestParam(value = "createEndTime", required = false) Long createEndTime,
                        @RequestParam(value = "createEndTime", required = false) Long createEndTime,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<ExamCard> examCardIPage = examCardService.listPage(type, title, createMethod, enable, createStartTime, createEndTime, pageNumber, pageSize);
+        IPage<ExamCardPageDto> examCardIPage = examCardService.listPage(type, title, createMethod, enable, createStartTime, createEndTime, pageNumber, pageSize);
         return ResultUtil.ok(examCardIPage);
         return ResultUtil.ok(examCardIPage);
     }
     }
 
 

+ 0 - 9
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -86,9 +86,6 @@ public class ExamPrintPlanController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         if (Objects.isNull(printPlanIdList)) {
         if (Objects.isNull(printPlanIdList)) {
             printPlanIdList = new ArrayList<>();
             printPlanIdList = new ArrayList<>();
@@ -165,9 +162,6 @@ public class ExamPrintPlanController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         if (Objects.isNull(printPlanIdList)) {
         if (Objects.isNull(printPlanIdList)) {
             printPlanIdList = new ArrayList<>();
             printPlanIdList = new ArrayList<>();
         }
         }
@@ -328,9 +322,6 @@ public class ExamPrintPlanController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         IPage<PrintTaskDto> examTasks = examDetailService.listPrintTask(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, SystemConstant.convertIdToLong(printHouseId), pageNumber, pageSize);
         IPage<PrintTaskDto> examTasks = examDetailService.listPrintTask(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, SystemConstant.convertIdToLong(printHouseId), pageNumber, pageSize);
         return ResultUtil.ok(examTasks);
         return ResultUtil.ok(examTasks);
     }
     }

+ 19 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java

@@ -8,6 +8,7 @@ import com.qmth.distributed.print.business.enums.SyncCardTypeEnum;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -53,9 +54,27 @@ public class ExamPrintPlanSyncController {
                                    @ApiParam(value = "计划创建时间段结束时间") @RequestParam(required = false) Long endTime,
                                    @ApiParam(value = "计划创建时间段结束时间") @RequestParam(required = false) Long endTime,
                                    @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                    @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                    @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                                    @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
         return ResultUtil.ok(examPrintPlanService.listSyncExamTask(semesterId, examId, orgId, cardType,syncStatus, courseName, startTime, endTime, pageNumber, pageSize));
         return ResultUtil.ok(examPrintPlanService.listSyncExamTask(semesterId, examId, orgId, cardType,syncStatus, courseName, startTime, endTime, pageNumber, pageSize));
     }
     }
 
 
+    /**
+     * 推送、批量推送-检验同步规则,并返回学院代码
+     *
+     * @param syncDataParam
+     * @return
+     * @throws Exception
+     */
+    @ApiOperation(value = "印刷计划推送管理-检验同步规则,并返回学院代码")
+    @RequestMapping(value = "/check_sync_mode", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.PUSH)
+    public Result checkSyncMode(@RequestBody SyncDataParam syncDataParam) {
+        examPrintPlanService.checkSyncMode(syncDataParam);
+        return ResultUtil.ok(true);
+    }
 
 
     /**
     /**
      * 多计划合并同步
      * 多计划合并同步

+ 0 - 15
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -138,9 +138,6 @@ public class ExamTaskController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return ResultUtil.ok(examTaskService.list(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), enable, status, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, createName, pageNumber, pageSize));
         return ResultUtil.ok(examTaskService.list(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), enable, status, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, createName, pageNumber, pageSize));
     }
     }
 
 
@@ -291,9 +288,6 @@ public class ExamTaskController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return ResultUtil.ok(examTaskService.listTaskApply(semesterId, examId, auditStatus, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, pageNumber, pageSize));
         return ResultUtil.ok(examTaskService.listTaskApply(semesterId, examId, auditStatus, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, pageNumber, pageSize));
     }
     }
 
 
@@ -438,9 +432,6 @@ public class ExamTaskController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return ResultUtil.ok(examTaskService.listTaskReviewUnaudited(semesterId, examId, courseCode, paperNumber, userId, SystemConstant.convertIdToLong(cardRuleId), startTime, endTime, startCreateTime, endCreateTime, createName, pageNumber, pageSize));
         return ResultUtil.ok(examTaskService.listTaskReviewUnaudited(semesterId, examId, courseCode, paperNumber, userId, SystemConstant.convertIdToLong(cardRuleId), startTime, endTime, startCreateTime, endCreateTime, createName, pageNumber, pageSize));
     }
     }
 
 
@@ -480,9 +471,6 @@ public class ExamTaskController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return ResultUtil.ok(examTaskService.listTaskReviewAudited(semesterId, examId, reviewStatus, courseCode, paperNumber, userId, SystemConstant.convertIdToLong(cardRuleId), startTime, endTime, startCreateTime, endCreateTime, createName, pageNumber, pageSize));
         return ResultUtil.ok(examTaskService.listTaskReviewAudited(semesterId, examId, reviewStatus, courseCode, paperNumber, userId, SystemConstant.convertIdToLong(cardRuleId), startTime, endTime, startCreateTime, endCreateTime, createName, pageNumber, pageSize));
     }
     }
 
 
@@ -608,9 +596,6 @@ public class ExamTaskController {
         if (semesterId == null) {
         if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
         }
-        if (examId == null) {
-            throw ExceptionResultEnum.ERROR.exception("请选择考试");
-        }
         return ResultUtil.ok(examTaskService.listTaskPaper(semesterId, examId, courseCode, paperNumber, startTime, endTime, makeMethod, SystemConstant.convertIdToLong(cardRuleId), pageNumber, pageSize));
         return ResultUtil.ok(examTaskService.listTaskPaper(semesterId, examId, courseCode, paperNumber, startTime, endTime, makeMethod, SystemConstant.convertIdToLong(cardRuleId), pageNumber, pageSize));
     }
     }
 
 

+ 16 - 7
distributed-print/src/main/java/com/qmth/distributed/print/api/SysAdminSetController.java

@@ -9,9 +9,11 @@ import com.qmth.distributed.print.business.bean.result.SysAdminSetResult;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
 import com.qmth.teachcloud.common.bean.result.SysConfigResult;
 import com.qmth.teachcloud.common.bean.result.SysConfigResult;
+import com.qmth.teachcloud.common.bean.result.SysConfigResultOption;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.SyncModeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
@@ -92,22 +94,29 @@ public class SysAdminSetController {
         SysConfig sysConfigTeachcloudReportHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_REPORT_HOST_URL);
         SysConfig sysConfigTeachcloudReportHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_REPORT_HOST_URL);
 
 
         List<SysConfigResult> sysConfigResultList = new ArrayList<>();
         List<SysConfigResult> sysConfigResultList = new ArrayList<>();
-        if (Objects.nonNull(sysConfigCloudMarkSyncMode)) {
-            sysConfigResultList.add(new SysConfigResult(sysConfigCloudMarkSyncMode));
-        } else {
-            sysConfigResultList.add(new SysConfigResult(null, SystemConstant.CLOUDMARK_SYNC_MODE, "同步规则", "", 1));
-        }
         if (Objects.nonNull(sysConfigQuestionHostUrl)) {
         if (Objects.nonNull(sysConfigQuestionHostUrl)) {
             sysConfigResultList.add(new SysConfigResult(sysConfigQuestionHostUrl));
             sysConfigResultList.add(new SysConfigResult(sysConfigQuestionHostUrl));
         } else {
         } else {
-            sysConfigResultList.add(new SysConfigResult(null, SystemConstant.QUESTION_HOST_URL, "题库地址", "", 2));
+            sysConfigResultList.add(new SysConfigResult(null, SystemConstant.QUESTION_HOST_URL, "题库地址", "", 1));
         }
         }
 
 
         if (Objects.nonNull(sysConfigCloudmarkHostUrl)) {
         if (Objects.nonNull(sysConfigCloudmarkHostUrl)) {
             sysConfigResultList.add(new SysConfigResult(sysConfigCloudmarkHostUrl));
             sysConfigResultList.add(new SysConfigResult(sysConfigCloudmarkHostUrl));
         } else {
         } else {
-            sysConfigResultList.add(new SysConfigResult(null, SystemConstant.CLOUDMARK_HOST_URL, "云阅卷地址", "", 3));
+            sysConfigResultList.add(new SysConfigResult(null, SystemConstant.CLOUDMARK_HOST_URL, "云阅卷地址", "", 2));
+        }
+
+        SysConfigResult sysConfigResult;
+        if (Objects.nonNull(sysConfigCloudMarkSyncMode)) {
+            sysConfigResult = new SysConfigResult(sysConfigCloudMarkSyncMode);
+        } else {
+            sysConfigResult = new SysConfigResult(null, SystemConstant.CLOUDMARK_SYNC_MODE, "云阅卷同步规则", SyncModeEnum.BY_SCHOOL.name(), 3);
         }
         }
+        List<SysConfigResultOption> options = new ArrayList<>();
+        options.add(new SysConfigResultOption(SyncModeEnum.BY_SCHOOL.getTitle(), SyncModeEnum.BY_SCHOOL.name()));
+        options.add(new SysConfigResultOption(SyncModeEnum.BY_COLLEGE.getTitle(), SyncModeEnum.BY_COLLEGE.name()));
+        sysConfigResult.setOptions(options);
+        sysConfigResultList.add(sysConfigResult);
 
 
         if (Objects.nonNull(sysConfigTeachcloudReportHostUrl)) {
         if (Objects.nonNull(sysConfigTeachcloudReportHostUrl)) {
             sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudReportHostUrl));
             sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudReportHostUrl));

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

@@ -10,6 +10,7 @@ import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -32,8 +33,8 @@ public class TSyncStmmsExamController {
     @ApiOperation(value = "查询云阅卷考试")
     @ApiOperation(value = "查询云阅卷考试")
     @PostMapping("/list")
     @PostMapping("/list")
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result listExam() {
-        return ResultUtil.ok(tSyncStmmsExamService.listExam());
+    public Result listExam(@RequestParam(value = "orgCode", required = false) String orgCode) {
+        return ResultUtil.ok(tSyncStmmsExamService.listExam(orgCode));
     }
     }
 
 
     /**
     /**
@@ -42,7 +43,7 @@ public class TSyncStmmsExamController {
     @ApiOperation(value = "同步云阅卷考试")
     @ApiOperation(value = "同步云阅卷考试")
     @PostMapping("/sync")
     @PostMapping("/sync")
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result syncExam() {
-        return ResultUtil.ok(tSyncStmmsExamService.syncExam());
+    public Result syncExam(@RequestParam(value = "orgCode", required = false) String orgCode) {
+        return ResultUtil.ok(tSyncStmmsExamService.syncExam(orgCode));
     }
     }
 }
 }

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysConfigResult.java

@@ -6,6 +6,7 @@ import com.qmth.teachcloud.common.entity.SysConfig;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
 /**
  * @Description: 系统参数result
  * @Description: 系统参数result
@@ -37,6 +38,8 @@ public class SysConfigResult implements Serializable {
     @ApiModelProperty(value = "排序")
     @ApiModelProperty(value = "排序")
     private Integer sort = 1;
     private Integer sort = 1;
 
 
+    private List<SysConfigResultOption> options;
+
     public SysConfigResult() {
     public SysConfigResult() {
 
 
     }
     }
@@ -105,4 +108,13 @@ public class SysConfigResult implements Serializable {
     public void setSort(Integer sort) {
     public void setSort(Integer sort) {
         this.sort = sort;
         this.sort = sort;
     }
     }
+
+    public List<SysConfigResultOption> getOptions() {
+        return options;
+    }
+
+    public void setOptions(List<SysConfigResultOption> options) {
+        this.options = options;
+    }
+
 }
 }

+ 30 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysConfigResultOption.java

@@ -0,0 +1,30 @@
+package com.qmth.teachcloud.common.bean.result;
+
+public class SysConfigResultOption {
+    private String label;
+    private String value;
+
+    public SysConfigResultOption() {
+    }
+
+    public SysConfigResultOption(String label, String value) {
+        this.label = label;
+        this.value = value;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -79,7 +79,7 @@ public class SystemConstant {
     /**
     /**
      * 云阅卷api
      * 云阅卷api
      */
      */
-    public static final String CLOUD_MARK_SCHOOL_SAVE_API = "/api/school/save";
+    public static final String CLOUD_MARK_SCHOOL_SAVE_API = "/api/school/sub/save";
     public static final String CLOUD_MARK_EXAM_SAVE_API = "/api/exam/save";
     public static final String CLOUD_MARK_EXAM_SAVE_API = "/api/exam/save";
     public static final String CLOUD_MARK_EXAM_LIST_API = "/api/exams";
     public static final String CLOUD_MARK_EXAM_LIST_API = "/api/exams";
     public static final String CLOUD_MARK_EXAM_STUDENT_SAVE_API = "/api/exam/student/save";
     public static final String CLOUD_MARK_EXAM_STUDENT_SAVE_API = "/api/exam/student/save";

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -125,6 +125,8 @@ public interface TeachcloudCommonService {
      */
      */
     public String filePreview(String path);
     public String filePreview(String path);
 
 
+    public String filePreview(Long attachmentId);
+
     /**
     /**
      * 文件预览
      * 文件预览
      *
      *

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -464,6 +464,21 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         return url;
         return url;
     }
     }
 
 
+    /**
+     * 文件预览
+     *
+     * @param attachmentId
+     * @return
+     */
+    @Override
+    public String filePreview(Long attachmentId) {
+        BasicAttachment basicAttachment = basicAttachmentService.getById(attachmentId);
+        if(basicAttachment == null){
+            return null;
+        }
+        return filePreview(basicAttachment.getPath());
+    }
+
     /**
     /**
      * 文件预览
      * 文件预览
      *
      *

+ 22 - 7
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

@@ -123,7 +123,7 @@ public class CloudMarkingTaskUtils {
      * @param examTime 考试时间
      * @param examTime 考试时间
      * @return 考试ID
      * @return 考试ID
      */
      */
-    public Long syncExam(Long schoolId, String code, String name, String examTime) {
+    public Long syncExam(Long schoolId, String code, String name, String examTime, String orgCode) {
         SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
         SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
         Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
         Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
         String hostUrl = sysConfig.getConfigValue();
         String hostUrl = sysConfig.getConfigValue();
@@ -136,6 +136,9 @@ public class CloudMarkingTaskUtils {
         map.put("name", validParam(name, null, true, "考试名称"));
         map.put("name", validParam(name, null, true, "考试名称"));
         map.put("examTime", validParam(examTime, null, true, "考试时间"));
         map.put("examTime", validParam(examTime, null, true, "考试时间"));
         map.put("type", SAVE_EXAM_TYPE);
         map.put("type", SAVE_EXAM_TYPE);
+        if (StringUtils.isNotBlank(orgCode)) {
+            map.put("schoolCode", orgCode);
+        }
 
 
         String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSaveUrl), map, null, null, null);
         String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSaveUrl), map, null, null, null);
         JSONObject jsonObject = JSONObject.parseObject(result);
         JSONObject jsonObject = JSONObject.parseObject(result);
@@ -152,8 +155,11 @@ public class CloudMarkingTaskUtils {
      * @param pageNo   分页参数
      * @param pageNo   分页参数
      * @param pageSize 分页参数
      * @param pageSize 分页参数
      */
      */
-    public List<JSONObject> getExam(Long schoolId, int pageNo, int pageSize) {
+    public List<JSONObject> getExam(Long schoolId, String orgCode, int pageNo, int pageSize) {
         Map<String, String> paramMap = new HashMap<>();
         Map<String, String> paramMap = new HashMap<>();
+        if (StringUtils.isNotBlank(orgCode)) {
+            paramMap.put("schoolCode", orgCode);
+        }
         paramMap.put("pageNumber", String.valueOf(pageNo));
         paramMap.put("pageNumber", String.valueOf(pageNo));
         paramMap.put("pageSize", String.valueOf(pageSize));
         paramMap.put("pageSize", String.valueOf(pageSize));
 
 
@@ -557,11 +563,14 @@ public class CloudMarkingTaskUtils {
     /**
     /**
      * 评卷员登录
      * 评卷员登录
      */
      */
-    public Map<String, Object> markLogin(SysUser sysUser) {
+    public Map<String, Object> markLogin(SysUser sysUser, String orgCode) {
+        if (this.isCollegeMode(sysUser.getSchoolId()) && StringUtils.isBlank(orgCode)) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("用户账号[%s]所属学院代码为空,请联系管理员", sysUser.getLoginName()));
+        }
         String markLoginUrl = SystemConstant.CLOUD_MARK_OPEN_MARK_LOGIN_API;
         String markLoginUrl = SystemConstant.CLOUD_MARK_OPEN_MARK_LOGIN_API;
         try {
         try {
             //参数
             //参数
-            return openLogin(sysUser, markLoginUrl, MARKER_PREFIX);
+            return openLogin(sysUser, orgCode, markLoginUrl, MARKER_PREFIX);
         } catch (Exception e) {
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
         }
@@ -570,11 +579,14 @@ public class CloudMarkingTaskUtils {
     /**
     /**
      * 科组长登录
      * 科组长登录
      */
      */
-    public Map<String, Object> markLeaderLogin(SysUser sysUser) {
+    public Map<String, Object> markLeaderLogin(SysUser sysUser, String orgCode) {
+        if (this.isCollegeMode(sysUser.getSchoolId()) && StringUtils.isBlank(orgCode)) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("用户账号[%s]所属学院代码为空,请联系管理员", sysUser.getLoginName()));
+        }
         String markLeaderLoginUrl = SystemConstant.CLOUD_MARK_OPEN_SUBJECT_HEADER_LOGIN_API;
         String markLeaderLoginUrl = SystemConstant.CLOUD_MARK_OPEN_SUBJECT_HEADER_LOGIN_API;
         try {
         try {
             //参数
             //参数
-            return openLogin(sysUser, markLeaderLoginUrl, MARKER_LEADER_PREFIX);
+            return openLogin(sysUser, orgCode, markLeaderLoginUrl, MARKER_LEADER_PREFIX);
         } catch (Exception e) {
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
         }
@@ -586,7 +598,7 @@ public class CloudMarkingTaskUtils {
      * @param loginUrl 登录url
      * @param loginUrl 登录url
      * @param prefix   账号前缀
      * @param prefix   账号前缀
      */
      */
-    private Map<String, Object> openLogin(SysUser sysUser, String loginUrl, String prefix) {
+    private Map<String, Object> openLogin(SysUser sysUser, String orgCode, String loginUrl, String prefix) {
         SysConfig sysConfig = commonCacheService.addSysConfigCache(sysUser.getSchoolId(), SystemConstant.CLOUDMARK_HOST_URL);
         SysConfig sysConfig = commonCacheService.addSysConfigCache(sysUser.getSchoolId(), SystemConstant.CLOUDMARK_HOST_URL);
         Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
         Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
         String hostUrl = sysConfig.getConfigValue();
         String hostUrl = sysConfig.getConfigValue();
@@ -600,6 +612,9 @@ public class CloudMarkingTaskUtils {
             map.put("account", prefix + sysUser.getLoginName());
             map.put("account", prefix + sysUser.getLoginName());
             map.put("name", sysUser.getLoginName());
             map.put("name", sysUser.getLoginName());
             map.put("time", time);
             map.put("time", time);
+            if (this.isCollegeMode(sysUser.getSchoolId())) {
+                map.put("schoolCode", orgCode);
+            }
             map.put("authorization", createSign(sysUser.getSchoolId(), time, loginUrl));
             map.put("authorization", createSign(sysUser.getSchoolId(), time, loginUrl));
             return map;
             return map;
         } catch (Exception e) {
         } catch (Exception e) {