فهرست منبع

3.2.3 同步云阅卷

xiaofei 2 سال پیش
والد
کامیت
4cf1de4c00
22فایلهای تغییر یافته به همراه301 افزوده شده و 119 حذف شده
  1. 38 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java
  2. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  3. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  5. 9 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  6. 19 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  7. 36 29
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  8. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java
  9. 17 34
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java
  10. 2 0
      distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql
  11. 10 5
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  12. 11 7
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSemesterController.java
  13. 13 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  14. 18 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  15. 30 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  16. 38 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/SyncModeEnum.java
  17. 4 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicSemesterService.java
  18. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  19. 11 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicSemesterServiceImpl.java
  20. 8 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  21. 27 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java
  22. 1 1
      teachcloud-common/src/main/resources/mapper/SysOrgMapper.xml

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

@@ -30,10 +30,15 @@ public class SyncExamTaskDto {
     private ExamTaskSyncStatusEnum syncStatus;
     private String syncStatusDisplay;
     private String errorMsg;
-    private List<Map> syncStatusDetailDisplay;
     private String syncUserName;
     private String printPlanIds;
 
+    private Long teachingRoomId;
+
+    private Long collegeId;
+    private String collegeCode;
+    private String collegeName;
+
     public Long getExamTaskId() {
         return examTaskId;
     }
@@ -170,14 +175,6 @@ public class SyncExamTaskDto {
         this.errorMsg = errorMsg;
     }
 
-    public List<Map> getSyncStatusDetailDisplay() {
-        return syncStatusDetailDisplay;
-    }
-
-    public void setSyncStatusDetailDisplay(List<Map> syncStatusDetailDisplay) {
-        this.syncStatusDetailDisplay = syncStatusDetailDisplay;
-    }
-
     public String getSyncUserName() {
         return syncUserName;
     }
@@ -193,4 +190,36 @@ public class SyncExamTaskDto {
     public void setPrintPlanIds(String printPlanIds) {
         this.printPlanIds = printPlanIds;
     }
+
+    public Long getTeachingRoomId() {
+        return teachingRoomId;
+    }
+
+    public void setTeachingRoomId(Long teachingRoomId) {
+        this.teachingRoomId = teachingRoomId;
+    }
+
+    public Long getCollegeId() {
+        return collegeId;
+    }
+
+    public void setCollegeId(Long collegeId) {
+        this.collegeId = collegeId;
+    }
+
+    public String getCollegeCode() {
+        return collegeCode;
+    }
+
+    public void setCollegeCode(String collegeCode) {
+        this.collegeCode = collegeCode;
+    }
+
+    public String getCollegeName() {
+        return collegeName;
+    }
+
+    public void setCollegeName(String collegeName) {
+        this.collegeName = collegeName;
+    }
 }

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

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
@@ -39,5 +40,5 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
 
     List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(@Param("printPlanIds") List<Long> printPlanIds, @Param("examTaskId") Long examTaskId);
 
-    List<SyncExamTaskDto> listSyncCourseByPrintPlanId(@Param("ipage") Page<SyncExamTaskDto> ipage, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("orgIds") Set<Long> orgIds, @Param("cardType") SyncCardTypeEnum cardType, @Param("syncStatus") ExamTaskSyncStatusEnum syncStatus, @Param("courseName") String courseName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
+    IPage<SyncExamTaskDto> listSyncCourseByPrintPlanId(@Param("ipage") Page<SyncExamTaskDto> ipage, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("orgIds") Set<Long> orgIds, @Param("cardType") SyncCardTypeEnum cardType, @Param("syncStatus") ExamTaskSyncStatusEnum syncStatus, @Param("courseName") String courseName, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
 }

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
@@ -36,7 +37,7 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 
-    List<SyncExamTaskDto> listSyncCourseByPrintPlanId(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
+    IPage<SyncExamTaskDto> listSyncCourseByPrintPlanId(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
 
     List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(List<Long> printPlanIds, Long examTaskId);
 }

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

@@ -114,5 +114,5 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
 
     List<ExamPrintPlan> listBySchoolId(Long schoolId);
 
-    List<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);
 }

+ 9 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -22,10 +22,7 @@ import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicCollege;
 import com.qmth.teachcloud.common.entity.SysOrg;
 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.*;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
@@ -108,12 +105,8 @@ public class DataSyncServiceImpl implements DataSyncService {
         String errorMessage = null;
         Long schoolId = tbSyncTask.getSchoolId();
         Long objectId = tbSyncTask.getObjectId();
-        JSONObject object = JSONObject.parseObject(tbSyncTask.getRemark());
-        SysOrg sysOrg = object.getObject("sysOrg", SysOrg.class);
-        Integer thirdRelateOrgId = sysOrg.getThirdRelateId();
-        String orgCode = sysOrg.getCode();
-        String orgName = sysOrg.getName();
-        List<SyncExamTaskDto> params = JSONObject.parseArray(object.getString("param"), SyncExamTaskDto.class);
+        List<SyncExamTaskDto> params = JSONObject.parseArray(tbSyncTask.getRemark(), SyncExamTaskDto.class);
+        Integer thirdRelateOrgId = null;
 
         // 各步骤状态
         try {
@@ -121,12 +114,14 @@ public class DataSyncServiceImpl implements DataSyncService {
             status = TaskStatusEnum.RUNNING;
             tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
 
-            // 同步机构
-            thirdRelateOrgId = saveSchool(schoolId, thirdRelateOrgId, orgCode, orgName);
-            // 同步考试
-            thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
             //按课程做同步
             for (SyncExamTaskDto param : params) {
+                String orgCode = cloudMarkingTaskUtils.isCollegeMode(schoolId) ? param.getCollegeCode() : null;
+                // 同步机构
+                thirdRelateOrgId = saveSchool(schoolId, thirdRelateOrgId, orgCode, param.getCollegeName());
+                // 同步考试
+                thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
+
                 Long examTaskId = param.getExamTaskId();
                 ExamTask examTask = examTaskService.getById(examTaskId);
                 ExamTaskSync examTaskSync = examTaskSyncService.getBySchoolIdAndOrgCodeAndPaperNumber(schoolId, orgCode, examTask.getPaperNumber());

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

@@ -4,6 +4,7 @@ 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;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
@@ -18,8 +19,10 @@ import com.qmth.distributed.print.business.service.ExamDetailCourseService;
 import com.qmth.distributed.print.business.service.ExamTaskDetailService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
+import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
@@ -88,13 +91,15 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     }
 
     @Override
-    public List<SyncExamTaskDto> listSyncCourseByPrintPlanId(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+    public IPage<SyncExamTaskDto> listSyncCourseByPrintPlanId(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseName, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Page<SyncExamTaskDto> ipage = new Page<>(pageNumber, pageSize);
+        // 顶级机构
+        SysOrg rootOrg = sysOrgService.findRootOrg(sysUser.getSchoolId());
         // 查询用户所在机构及以下机构
         Set<Long> orgIds = sysOrgService.findDeepOrgIdListByUserId(sysUser.getId());
-        List<SyncExamTaskDto> examTaskDtos = this.baseMapper.listSyncCourseByPrintPlanId(ipage, semesterId, examId, orgIds, cardType, syncStatus, courseName, startTime, endTime);
-        for (SyncExamTaskDto examTaskDto : examTaskDtos) {
+        IPage<SyncExamTaskDto> examTaskDtos = this.baseMapper.listSyncCourseByPrintPlanId(ipage, semesterId, examId, orgIds, cardType, syncStatus, courseName, startTime, endTime);
+        for (SyncExamTaskDto examTaskDto : examTaskDtos.getRecords()) {
             String paperType = examTaskDto.getPaperType();
             List<String> paperTypes = Arrays.asList(paperType.split(","));
             ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTaskDto.getExamTaskId());
@@ -115,9 +120,17 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
             if (stringSet.size() > 0) {
                 examTaskDto.setSyncCardType(String.join(",", stringSet));
             }
-        }
-        if (cardType != null) {
-            examTaskDtos = examTaskDtos.stream().filter(m -> m.getSyncCardType().contains(cardType.getDesc())).collect(Collectors.toList());
+
+            List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(examTaskDto.getTeachingRoomId(), false, false);
+            if(sysOrgList.isEmpty()){
+                throw ExceptionResultEnum.ERROR.exception(String.format("未找到课程[%s(%s)]所属机构及上级机构", examTaskDto.getCourseName(), examTaskDto.getCourseCode()));
+            }
+            SysOrg collegeOrg = sysOrgList.stream().filter(m->m.getParentId().equals(rootOrg.getId())).findFirst().orElseGet(null);
+            if(collegeOrg != null){
+                examTaskDto.setCollegeId(collegeOrg.getId());
+                examTaskDto.setCollegeCode(collegeOrg.getCode());
+                examTaskDto.setCollegeName(collegeOrg.getName());
+            }
         }
         return examTaskDtos;
     }

+ 36 - 29
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -27,6 +27,7 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ClassifyEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.SyncModeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -85,14 +86,11 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
     TeachcloudCommonService teachcloudCommonService;
 
     @Resource
-    BasicClazzService basicClazzService;
+    BasicCourseService basicCourseService;
 
     @Resource
     ExamDetailCourseService examDetailCourseService;
 
-    @Resource
-    ExamStudentService examStudentService;
-
     @Resource
     AsyncCloudMarkingTaskService asyncCloudMarkingTaskService;
 
@@ -435,34 +433,37 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
     public void syncDataCloud(SyncDataParam syncDataParam) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
 
-        // 是否开启了同步功能
-        if (asyncCloudMarkingTaskService.isSync()) {
-            // 是否设置同步规则 todo
+        List<SyncExamTaskDto> params = syncDataParam.getList();
+        if (CollectionUtils.isEmpty(params)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择需要推送的数据");
+        }
 
-            List<SyncExamTaskDto> params = syncDataParam.getList();
-            if (CollectionUtils.isEmpty(params)) {
-                throw ExceptionResultEnum.ERROR.exception("请选择需要推送的数据");
-            }
+        if (Objects.isNull(syncDataParam.getThirdRelateId())
+                && StringUtils.isBlank(syncDataParam.getThirdRelateName())) {
+            throw ExceptionResultEnum.ERROR.exception("考试ID、考试名称至少选择一个");
+        } else if (StringUtils.isNotBlank(syncDataParam.getThirdRelateName())
+                && Objects.isNull(syncDataParam.getExamTime())) {
+            throw ExceptionResultEnum.ERROR.exception("考试时间必填");
+        }
 
-            if (Objects.isNull(syncDataParam.getThirdRelateId())
-                    && StringUtils.isBlank(syncDataParam.getThirdRelateName())) {
-                throw ExceptionResultEnum.ERROR.exception("考试ID、考试名称至少选择一个");
-            } else if (StringUtils.isNotBlank(syncDataParam.getThirdRelateName())
-                    && Objects.isNull(syncDataParam.getExamTime())) {
-                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("所选课程存在不同的学院,无法一起推送");
             }
-            // 查询科目所属学院是否一致 todo
-
-            Long objectId = SystemConstant.getDbUuid();
-            String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
-            // 新增一个参数对象,加入学校信息(学院代码, 学院名称,云阅卷机构ID),加入参数(任务ID集合),加入同步规则参数
-            JSONObject object = new JSONObject();
-            object.put("sysOrg", null);
-            object.put("syncMode", null);
-            // examTaskIds中包含printPlanIds和examTaskId
-            object.put("param", params);
-            asyncCloudMarkingTaskService.syncExamAndStudentAndCard(schoolId, objectId, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName(), examTime, object);
         }
+
+        Long objectId = SystemConstant.getDbUuid();
+        String examTime = DateUtil.format(new Date(syncDataParam.getExamTime()), CloudMarkingTaskUtils.DATE_FORMAT);
+        asyncCloudMarkingTaskService.syncExamAndStudentAndCard(schoolId, objectId, syncDataParam.getThirdRelateId(), syncDataParam.getThirdRelateName(), examTime, params);
+
     }
 
     @Override
@@ -522,7 +523,13 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
     }
 
     @Override
-    public List<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);
     }
 

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.mapper.TBSyncTaskMapper;
 import com.qmth.distributed.print.business.service.*;
@@ -239,7 +240,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         }
         switch (tbSyncTask.getType()) {
             case EXAM_PUSH:
-                asyncCloudMarkingTaskService.syncExamAndStudentAndCard(tbSyncTask.getSchoolId(), tbSyncTask.getObjectId(), tbSyncTask.getThirdRelateId(), null, null, JSON.parseObject(tbSyncTask.getRemark()));
+                asyncCloudMarkingTaskService.syncExamAndStudentAndCard(tbSyncTask.getSchoolId(), tbSyncTask.getObjectId(), tbSyncTask.getThirdRelateId(), null, null, JSON.parseArray(tbSyncTask.getRemark(), SyncExamTaskDto.class));
                 break;
             case STRUCTURE_GROUP_PUSH:
                 asyncCloudMarkingTaskService.syncPaperStructureAndGroup(examPaperStructureService.getById(tbSyncTask.getObjectId()));

+ 17 - 34
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCloudMarkingTaskService.java

@@ -1,16 +1,21 @@
 package com.qmth.distributed.print.business.templete.execute;
 
 import com.alibaba.fastjson.JSONObject;
+import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.service.DataSyncService;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 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.PushTypeEnum;
+import com.qmth.teachcloud.common.enums.SyncModeEnum;
+import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysConfigService;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Lazy;
@@ -27,9 +32,6 @@ public class AsyncCloudMarkingTaskService {
 
     private final static Logger log = LoggerFactory.getLogger(AsyncCloudMarkingTaskService.class);
 
-    @Resource
-    private SysConfigService sysConfigService;
-
     @Lazy
     @Resource
     private DataSyncService dataSyncService;
@@ -37,15 +39,6 @@ public class AsyncCloudMarkingTaskService {
     @Resource
     private TBSyncTaskService tbSyncTaskService;
 
-    public boolean isSync() {
-        SysConfig sysConfig = sysConfigService.getByKey("sys.sync.enable");
-        boolean isSync = sysConfig != null && "true".equals(sysConfig.getConfigValue());
-        if (!isSync) {
-            throw ExceptionResultEnum.ERROR.exception("未开启同步开关");
-        }
-        return true;
-    }
-
     /**
      * 同步考试、考生、科目、题卡
      *
@@ -53,12 +46,10 @@ public class AsyncCloudMarkingTaskService {
      * @param objectId      同步对象ID(命题任务Id)
      * @param thirdRelateId 云阅卷考试ID
      */
-    public void syncExamAndStudentAndCard(Long schoolId, Long objectId, Long thirdRelateId, String thirdRelateName, String examTime, JSONObject object) {
-        if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(schoolId, objectId, PushTypeEnum.EXAM_PUSH, JSONObject.toJSONString(object));
-            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            dataSyncService.syncExamAndStudentAndCard(thirdRelateId, thirdRelateName, examTime, tbSyncTask, sysUser);
-        }
+    public void syncExamAndStudentAndCard(Long schoolId, Long objectId, Long thirdRelateId, String thirdRelateName, String examTime, List<SyncExamTaskDto> params) {
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(schoolId, objectId, PushTypeEnum.EXAM_PUSH, JSONObject.toJSONString(params));
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        dataSyncService.syncExamAndStudentAndCard(thirdRelateId, thirdRelateName, examTime, tbSyncTask, sysUser);
     }
 
     /**
@@ -70,10 +61,8 @@ public class AsyncCloudMarkingTaskService {
         if (examPaperStructure == null) {
             throw ExceptionResultEnum.ERROR.exception("未找到同步数据");
         }
-        if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.STRUCTURE_GROUP_PUSH, null);
-            dataSyncService.syncPaperStructureAndGroup(examPaperStructure, tbSyncTask);
-        }
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.STRUCTURE_GROUP_PUSH, null);
+        dataSyncService.syncPaperStructureAndGroup(examPaperStructure, tbSyncTask);
     }
 
     /**
@@ -85,10 +74,8 @@ public class AsyncCloudMarkingTaskService {
         if (examPaperStructure == null) {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
-        if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.PAPER_ANSWER_FILE_PUSH, null);
-            dataSyncService.syncPaperAndAnswer(examPaperStructure, tbSyncTask);
-        }
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.PAPER_ANSWER_FILE_PUSH, null);
+        dataSyncService.syncPaperAndAnswer(examPaperStructure, tbSyncTask);
     }
 
     /**
@@ -100,10 +87,8 @@ public class AsyncCloudMarkingTaskService {
         if (examPaperStructure == null) {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
-        if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.OBJECTIVE_ANSWER_PUSH, null);
-            dataSyncService.syncObjectiveStructure(examPaperStructure, tbSyncTask);
-        }
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.OBJECTIVE_ANSWER_PUSH, null);
+        dataSyncService.syncObjectiveStructure(examPaperStructure, tbSyncTask);
     }
 
     /**
@@ -115,9 +100,7 @@ public class AsyncCloudMarkingTaskService {
         if (examPaperStructure == null) {
             throw ExceptionResultEnum.ERROR.exception("请先设置评卷参数");
         }
-        if (isSync()) {
-            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.MARK_LEADER_PUSH, null);
-            dataSyncService.syncMarkLeader(examPaperStructure, tbSyncTask);
-        }
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(examPaperStructure.getSchoolId(), examPaperStructure.getId(), PushTypeEnum.MARK_LEADER_PUSH, null);
+        dataSyncService.syncMarkLeader(examPaperStructure, tbSyncTask);
     }
 }

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

@@ -23,6 +23,8 @@ UPDATE `sys_privilege` SET `related` = '435,792,793' WHERE (`id` = '394');
 UPDATE `sys_privilege` SET `related` = '435,792,793' WHERE (`id` = '397');
 ALTER TABLE `t_sync_stmms_exam` ADD COLUMN `org_code` VARCHAR(45) NULL COMMENT '机构代码' AFTER `school_id`;
 
+UPDATE `sys_privilege` SET `name` = '启用/禁用' WHERE (`id` = '559');
+UPDATE `sys_privilege` SET `name` = '启用/禁用',`url` = '/api/admin/basic/semester/enable' WHERE (`id` = '560');
 
 
 /*王亮新增*/

+ 10 - 5
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -157,10 +157,12 @@
             t.print_plan_ids printPlanIds,
             ets.third_relate_id thirdRelateId,
             ets.sync_status syncStatus,
-            ets.sync_status_detail syncStatusDetail,
-            su.real_name syncUserName
+            su.real_name syncUserName,
+            bc.teaching_room_id teachingRoomId
         FROM
-            (SELECT
+            exam_task et
+                 JOIN
+                (SELECT
                  b.school_id,
                  b.paper_number,
                  b.paper_type,
@@ -172,6 +174,7 @@
                      LEFT JOIN exam_print_plan epp ON c.print_plan_id = epp.id
                      LEFT JOIN basic_exam be ON epp.exam_id = be.id
             <where>
+                and c.status = 'FINISH'
                 <if test="semesterId != null">
                     and be.semester_id = #{semesterId}
                 </if>
@@ -183,14 +186,16 @@
                 </if>
             </where>
              GROUP BY b.school_id , b.paper_number , b.paper_type) t
-                LEFT JOIN
-            exam_task et ON t.school_id = et.school_id
+                ON t.school_id = et.school_id
                 AND t.paper_number = et.paper_number
                 LEFT JOIN
             exam_task_sync ets ON et.school_id = ets.school_id
                 AND et.paper_number = ets.paper_number
                 LEFT JOIN
             sys_user su ON ets.sync_user_id = su.id
+                LEFT JOIN
+            basic_course bc ON et.school_id = bc.school_id
+                AND et.course_code = bc.code
             <where>
                 <if test="orgIds != null">
                     and et.org_id in

+ 11 - 7
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSemesterController.java

@@ -12,10 +12,12 @@ import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
+import org.apache.xmlbeans.impl.jam.xml.TunnelledException;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.swing.border.EmptyBorder;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
@@ -54,9 +56,10 @@ public class BasicSemesterController {
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result list(@RequestParam(value = "inUsed", required = false) Boolean inUsed) {
+    public Result list(@RequestParam(value = "inUsed", required = false) Boolean inUsed,
+                       @RequestParam(value = "enable", required = false, defaultValue = "1") Boolean enable) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
-        return ResultUtil.ok(basicSemesterService.list(schoolId, inUsed));
+        return ResultUtil.ok(basicSemesterService.list(schoolId, inUsed, enable));
     }
 
     @ApiOperation(value = "学期管理-新增/编辑")
@@ -79,15 +82,16 @@ public class BasicSemesterController {
     }
 
     /**
-     * 设置为当前使用学期
+     * 启用/禁用
      * @param id
      * @return
      */
-    @ApiOperation(value = "学期管理-设置为当前使用学期")
-    @RequestMapping(value = "/set_in_used", method = RequestMethod.POST)
+    @ApiOperation(value = "学期管理-启用/禁用")
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
-    public Result saveBasicSemester(@RequestParam("id") Long id) {
-        return ResultUtil.ok(basicSemesterService.setInUsed(id));
+    public Result enable(@ApiParam(value = "学期ID", required = true) @RequestParam Long id,
+                                    @ApiParam(value = "启用/禁用", required = true) @RequestParam Boolean enable) {
+        return ResultUtil.ok(basicSemesterService.enable(id, enable));
     }
 }

+ 13 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
@@ -93,6 +94,12 @@ public class ExamDetailController {
                                        @ApiParam(value = "考试日期-终止") @RequestParam(required = false) Long endDate,
                                        @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) {
+        if (semesterId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
+        if (examId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择考试");
+        }
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
@@ -146,6 +153,12 @@ public class ExamDetailController {
                                         @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) {
 
+        if (semesterId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
+        if (examId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择考试");
+        }
         if (Objects.isNull(printPlanIdList)) {
             printPlanIdList = new ArrayList<>();
         }

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

@@ -83,6 +83,12 @@ public class ExamPrintPlanController {
                                     @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) {
 
+        if (semesterId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
+        if (examId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择考试");
+        }
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         if (Objects.isNull(printPlanIdList)) {
             printPlanIdList = new ArrayList<>();
@@ -156,6 +162,12 @@ public class ExamPrintPlanController {
                              @RequestParam(value = "paperNumber", required = false) String paperNumber,
                              @RequestParam(value = "userName", required = false) String userName,
                              @RequestParam(value = "cardRuleId", required = false) Long cardRuleId) {
+        if (semesterId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
+        if (examId == null) {
+            throw ExceptionResultEnum.ERROR.exception("请选择考试");
+        }
         if (Objects.isNull(printPlanIdList)) {
             printPlanIdList = new ArrayList<>();
         }
@@ -313,6 +325,12 @@ public class ExamPrintPlanController {
                            @RequestParam(value = "printHouseId", required = false) String printHouseId,
                            @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                            @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            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);
         return ResultUtil.ok(examTasks);
     }

+ 30 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -135,7 +135,12 @@ public class ExamTaskController {
                        @RequestParam(required = false) String createName,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-
+        if (semesterId == null) {
+            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));
     }
 
@@ -283,6 +288,12 @@ public class ExamTaskController {
                                 @RequestParam(value = "userName", required = false) String userName,
                                 @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                 @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            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));
     }
 
@@ -424,6 +435,12 @@ public class ExamTaskController {
                                           @RequestParam(value = "createName", required = false) String createName,
                                           @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                           @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            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));
     }
 
@@ -460,6 +477,12 @@ public class ExamTaskController {
                                         @RequestParam(value = "createName", required = false) String createName,
                                         @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                         @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            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));
     }
 
@@ -582,6 +605,12 @@ public class ExamTaskController {
                                 @RequestParam(value = "cardRuleId", required = false) String cardRuleId,
                                 @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                 @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        if (semesterId == null) {
+            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));
     }
 

+ 38 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/SyncModeEnum.java

@@ -0,0 +1,38 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * 云阅卷同步方式
+ */
+public enum SyncModeEnum {
+
+    BY_SCHOOL("按学校同步"),
+
+    BY_COLLEGE("按学院同步");
+
+    SyncModeEnum(String title) {
+        this.title = title;
+    }
+
+    private String title;
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        for (SyncModeEnum e : SyncModeEnum.values()) {
+            if (Objects.equals(value.trim(), e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 4 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicSemesterService.java

@@ -63,9 +63,10 @@ public interface BasicSemesterService extends IService<BasicSemester> {
      *
      * @param schoolId
      * @param inUsed
+     * @param enable
      * @return
      */
-    List<BasicSemester> list(Long schoolId, Boolean inUsed);
+    List<BasicSemester> list(Long schoolId, Boolean inUsed, Boolean enable);
 
     /**
      * 设置当前使用学期
@@ -76,4 +77,6 @@ public interface BasicSemesterService extends IService<BasicSemester> {
     boolean setInUsed(Long id);
 
     BasicSemester selectByExamId(Long examId);
+
+    boolean enable(Long id, Boolean enable);
 }

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

@@ -169,4 +169,6 @@ public interface SysOrgService extends IService<SysOrg> {
      * @throws Exception e
      */
     void executeImportSysOrgLogic(MultipartFile file) throws Exception;
+
+    SysOrg findRootOrg(Long schoolId);
 }

+ 11 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicSemesterServiceImpl.java

@@ -132,21 +132,17 @@ public class BasicSemesterServiceImpl extends ServiceImpl<BasicSemesterMapper, B
     }
 
     @Override
-    public List<BasicSemester> list(Long schoolId, Boolean inUsed) {
+    public List<BasicSemester> list(Long schoolId, Boolean inUsed, Boolean enable) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
 
         QueryWrapper<BasicSemester> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicSemester::getSchoolId, schoolId).eq(BasicSemester::getEnable, true);
-        if (SystemConstant.longNotNull(dpr.getRequestUserId())) {
-            queryWrapper.lambda().eq(BasicSemester::getCreateId, dpr.getRequestUserId());
-        }
-        if (dpr.getOrgIdSet() != null && dpr.getOrgIdSet().size() > 0) {
-            queryWrapper.lambda().in(BasicSemester::getOrgId, dpr.getOrgIdSet());
-        }
         if (Objects.nonNull(inUsed)) {
             queryWrapper.lambda().eq(BasicSemester::getInUsed, inUsed);
         }
+        if (Objects.nonNull(enable)) {
+            queryWrapper.lambda().eq(BasicSemester::getEnable, true);
+        }
         return this.list(queryWrapper);
     }
 
@@ -172,4 +168,11 @@ public class BasicSemesterServiceImpl extends ServiceImpl<BasicSemesterMapper, B
     public BasicSemester selectByExamId(Long examId) {
         return this.baseMapper.selectByExamId(examId);
     }
+
+    @Override
+    public boolean enable(Long id, Boolean enable) {
+        UpdateWrapper<BasicSemester> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(BasicSemester::getEnable, enable).eq(BasicSemester::getId, id);
+        return this.update(updateWrapper);
+    }
 }

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -549,6 +549,14 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         }
     }
 
+    @Override
+    public SysOrg findRootOrg(Long schoolId) {
+        QueryWrapper<SysOrg> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(SysOrg::getSchoolId, schoolId)
+                .eq(SysOrg::getType, OrgTypeEnum.SCHOOL);
+        return this.getOne(queryWrapper);
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *

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

@@ -14,6 +14,7 @@ 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.SyncModeEnum;
 import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.util.HttpKit;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -60,6 +61,32 @@ public class CloudMarkingTaskUtils {
     @Resource
     private DictionaryConfig dictionaryConfig;
 
+    /**
+     * 获取同步规则
+     *
+     * @param schoolId 学校ID
+     */
+    public SyncModeEnum getSyncMode(Long schoolId) {
+        SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_SYNC_MODE);
+        if (sysConfig == null || StringUtils.isBlank(sysConfig.getConfigValue())) {
+            return SyncModeEnum.BY_SCHOOL;
+        }
+        return SyncModeEnum.valueOf(sysConfig.getConfigValue());
+    }
+
+    /**
+     * 同步规则是否为按学院同步
+     *
+     * @param schoolId 学校ID
+     */
+    public boolean isCollegeMode(Long schoolId) {
+        SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_SYNC_MODE);
+        if (sysConfig == null || StringUtils.isBlank(sysConfig.getConfigValue())) {
+            return false;
+        }
+        return SyncModeEnum.BY_COLLEGE.name().equals(sysConfig.getConfigValue());
+    }
+
     /**
      * 考试创建/更新接口
      *

+ 1 - 1
teachcloud-common/src/main/resources/mapper/SysOrgMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.qmth.teachcloud.common.mapper.SysOrgMapper">
 
     <select id="findByConnectByParentId" resultType="com.qmth.teachcloud.common.entity.SysOrg">
-        SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := so.parent_id FROM sys_org so WHERE so.id = _id) AS parent_id FROM (SELECT @a := #{orgId}) vars, sys_org h WHERE @a <![CDATA[ <> ]]> 0) temp JOIN sys_org su ON temp._id = su.id
+        SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := so.parent_id FROM sys_org so WHERE so.id = _id) AS parent_id FROM (SELECT @a := #{orgId}) vars, sys_org h) temp JOIN sys_org su ON temp._id = su.id
         <where>
             <if test="school != null and school != '' and school == 1">
                 and su.type <![CDATA[ <> ]]> 'SCHOOL'