瀏覽代碼

Merge remote-tracking branch 'origin/dev_v2.2.1' into dev_v2.2.1

# Conflicts:
#	teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java
wangliang 3 年之前
父節點
當前提交
88379c7f3e
共有 19 個文件被更改,包括 391 次插入68 次删除
  1. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicMajorMapper.java
  2. 70 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicMajorServiceImpl.java
  3. 17 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  4. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java
  5. 3 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PushLogicServiceImpl.java
  6. 31 0
      distributed-print-business/src/main/resources/mapper/BasicMajorMapper.xml
  7. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java
  8. 46 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicMajorController.java
  9. 48 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSemesterController.java
  10. 20 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicClazzParams.java
  11. 40 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicStudentParams.java
  12. 44 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/BasicStudentResult.java
  13. 1 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java
  14. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java
  15. 9 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java
  16. 0 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java
  17. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/OrgCenterDataDisposeServiceImpl.java
  18. 27 22
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java
  19. 10 3
      teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicMajorMapper.java

@@ -1,7 +1,13 @@
 package com.qmth.distributed.print.business.mapper;
 package com.qmth.distributed.print.business.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 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.result.BasicMajorResult;
 import com.qmth.distributed.print.business.entity.BasicMajor;
 import com.qmth.distributed.print.business.entity.BasicMajor;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -13,4 +19,16 @@ import com.qmth.distributed.print.business.entity.BasicMajor;
  */
  */
 public interface BasicMajorMapper extends BaseMapper<BasicMajor> {
 public interface BasicMajorMapper extends BaseMapper<BasicMajor> {
 
 
+    /**
+     * 分页查询基础专业信息
+     * @param iPage 分页参数
+     * @param schoolId 学校id
+     * @param majorName 专业名称
+     * @param orgIds 数据权限集合
+     * @return 基础专业分页参数
+     */
+    IPage<BasicMajorResult> findBasicMajorPage(@Param("iPage") Page<BasicMajorResult> iPage,
+                                               @Param("schoolId") Long schoolId,
+                                               @Param("majorName") String majorName,
+                                               @Param("orgIds") Set<Long> orgIds);
 }
 }

+ 70 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicMajorServiceImpl.java

@@ -1,15 +1,30 @@
 package com.qmth.distributed.print.business.service.impl;
 package com.qmth.distributed.print.business.service.impl;
 
 
+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.core.metadata.IPage;
+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.qmth.distributed.print.business.bean.params.BasicMajorParams;
 import com.qmth.distributed.print.business.bean.params.BasicMajorParams;
 import com.qmth.distributed.print.business.bean.result.BasicMajorResult;
 import com.qmth.distributed.print.business.bean.result.BasicMajorResult;
 import com.qmth.distributed.print.business.entity.BasicMajor;
 import com.qmth.distributed.print.business.entity.BasicMajor;
 import com.qmth.distributed.print.business.mapper.BasicMajorMapper;
 import com.qmth.distributed.print.business.mapper.BasicMajorMapper;
 import com.qmth.distributed.print.business.service.BasicMajorService;
 import com.qmth.distributed.print.business.service.BasicMajorService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import com.qmth.teachcloud.common.entity.BasicStudent;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.BasicClazzService;
+import com.qmth.teachcloud.common.service.BasicStudentService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
 /**
 /**
  * <p>
  * <p>
  * 专业字典表 服务实现类
  * 专业字典表 服务实现类
@@ -20,21 +35,73 @@ import org.springframework.transaction.annotation.Transactional;
  */
  */
 @Service
 @Service
 public class BasicMajorServiceImpl extends ServiceImpl<BasicMajorMapper, BasicMajor> implements BasicMajorService {
 public class BasicMajorServiceImpl extends ServiceImpl<BasicMajorMapper, BasicMajor> implements BasicMajorService {
+    @Resource
+    private BasicClazzService basicClazzService;
+    @Resource
+    private BasicStudentService basicStudentService;
 
 
     @Override
     @Override
     public IPage<BasicMajorResult> basicMajorPage(Long schoolId, String majorName, int pageNumber, int pageSize) {
     public IPage<BasicMajorResult> basicMajorPage(Long schoolId, String majorName, int pageNumber, int pageSize) {
-        return null;
+        majorName = SystemConstant.translateSpecificSign(majorName);
+        return this.baseMapper.findBasicMajorPage(new Page<>(pageNumber, pageSize),schoolId,majorName,null);
     }
     }
 
 
     @Transactional
     @Transactional
     @Override
     @Override
     public Long saveBasicMajor(BasicMajorParams basicMajorParams) throws IllegalAccessException {
     public Long saveBasicMajor(BasicMajorParams basicMajorParams) throws IllegalAccessException {
-        return null;
+        SystemConstant.verifyDBFields(basicMajorParams,basicMajorParams.getClass());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long id = basicMajorParams.getId();
+        Long schoolId = sysUser.getSchoolId();
+        String majorName = basicMajorParams.getMajorName();
+        Long collegeId = basicMajorParams.getCollegeId();
+
+        // 校验专业唯一性(名称在学院下)
+        BasicMajor checkName = this.getOne(new QueryWrapper<BasicMajor>().lambda()
+                .eq(BasicMajor::getEnable,true)
+                .eq(BasicMajor::getSchoolId,schoolId)
+                .eq(BasicMajor::getBelongOrgId,collegeId)
+                .eq(BasicMajor::getName,majorName));
+        if (Objects.nonNull(checkName) && !checkName.getId().equals(id)){
+            throw ExceptionResultEnum.ERROR.exception("专业名称【" + majorName + "】重复");
+        }
+        if (SystemConstant.longNotNull(id)){
+            // 编辑
+            BasicMajor old = this.getById(id);
+            if (Objects.isNull(old) || old.getEnable().equals(false)){
+                throw ExceptionResultEnum.ERROR.exception("所选专业不存在或被禁用");
+            }
+            this.update(new UpdateWrapper<BasicMajor>().lambda()
+                    .eq(BasicMajor::getId,id)
+                    .set(BasicMajor::getName,majorName)
+                    .set(BasicMajor::getBelongOrgId,collegeId));
+        }else {
+            // 新增
+            id = SystemConstant.getDbUuid();
+            BasicMajor basicMajor = new BasicMajor();
+            basicMajor.setId(id);
+            basicMajor.setEnable(true);
+            basicMajor.setName(majorName);
+            basicMajor.setSchoolId(schoolId);
+            basicMajor.setCode(null);
+            basicMajor.setBelongOrgId(collegeId);
+            basicMajor.setOrgId(sysUser.getOrgId());
+            this.save(basicMajor);
+        }
+        return id;
     }
     }
 
 
     @Transactional
     @Transactional
     @Override
     @Override
     public boolean deleteBasicMajorById(Long id) {
     public boolean deleteBasicMajorById(Long id) {
-        return false;
+        List<BasicClazz> basicClazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getMajorId,id));
+        if (basicClazzList.size() > 0){
+            throw ExceptionResultEnum.ERROR.exception("该专业被班级绑定,无法优先删除");
+        }
+        List<BasicStudent> basicStudentList = basicStudentService.list(new QueryWrapper<BasicStudent>().lambda().eq(BasicStudent::getMajorId,id));
+        if (basicStudentList.size() > 0){
+            throw ExceptionResultEnum.ERROR.exception("该专业被学生绑定,无法优先删除");
+        }
+        return this.removeById(id);
     }
     }
 }
 }

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

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

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

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

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

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

+ 31 - 0
distributed-print-business/src/main/resources/mapper/BasicMajorMapper.xml

@@ -2,4 +2,35 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.distributed.print.business.mapper.BasicMajorMapper">
 <mapper namespace="com.qmth.distributed.print.business.mapper.BasicMajorMapper">
 
 
+    <select id="findBasicMajorPage"
+            resultType="com.qmth.distributed.print.business.bean.result.BasicMajorResult">
+        SELECT
+            bm.id,
+            bm.name AS majorName,
+            bm.code AS majorCode,
+            bm.create_id AS createId,
+            bm.create_time AS createTime,
+            so.id AS collegeId,
+            so.name AS collegeName
+        FROM
+            basic_major bm
+                LEFT JOIN
+            sys_org so ON bm.belong_org_id = so.id
+        <where>
+            AND bm.enable = true
+            <if test="schoolId != null and schoolId != ''">
+                AND bm.school_id = #{schoolId}
+            </if>
+            <if test="majorName != null and majorName != ''">
+                AND bm.name LIKE CONCAT('%',#{majorName},'%')
+            </if>
+            <if test="orgIds != null">
+                AND bm.org_id IN
+                <foreach collection="orgIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY bm.create_time DESC;
+    </select>
 </mapper>
 </mapper>

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

@@ -57,7 +57,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-新增/编辑")
     @ApiOperation(value = "班级基本信息管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
-    public Result saveBasicClazz(@Valid @RequestBody BasicClazzParams basicClazzParams, BindingResult bindingResult) {
+    public Result saveBasicClazz(@Valid @RequestBody BasicClazzParams basicClazzParams, BindingResult bindingResult) throws IllegalAccessException {
         if (bindingResult.hasErrors()) {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         }

+ 46 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicMajorController.java

@@ -1,8 +1,22 @@
 package com.qmth.distributed.print.api;
 package com.qmth.distributed.print.api;
 
 
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.BasicMajorParams;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.BasicMajorService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+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.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -12,8 +26,37 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @author wangliang
  * @since 2021-10-28
  * @since 2021-10-28
  */
  */
+@Api(tags = "专业管理controller")
 @RestController
 @RestController
-@RequestMapping("/basic-major")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/major")
 public class BasicMajorController {
 public class BasicMajorController {
+    @Resource
+    private BasicMajorService basicMajorService;
+
+    @ApiOperation(value = "专业管理-查询")
+    @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findBasicMajorList(@ApiParam(value = "专业名称") @RequestParam(required = false) String majorName,
+                                     @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) {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        return ResultUtil.ok(basicMajorService.basicMajorPage(schoolId, majorName, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "专业管理-新增/编辑")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    public Result saveBasicMajor(@Valid @RequestBody BasicMajorParams basicMajorParams, BindingResult bindingResult) throws IllegalAccessException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(basicMajorService.saveBasicMajor(basicMajorParams));
+    }
 
 
+    @ApiOperation(value = "专业管理-删除(逻辑)")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteBasicMajor(@ApiParam(value = "专业id", required = true) @RequestParam String id) {
+        return ResultUtil.ok(basicMajorService.deleteBasicMajorById(SystemConstant.convertIdToLong(id)));
+    }
 }
 }

+ 48 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSemesterController.java

@@ -1,8 +1,25 @@
 package com.qmth.distributed.print.api;
 package com.qmth.distributed.print.api;
 
 
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.entity.BasicSemester;
+import com.qmth.distributed.print.business.service.BasicSemesterService;
+import com.qmth.teachcloud.common.bean.params.BasicCampusParams;
+import com.qmth.teachcloud.common.bean.params.BasicSemesterParams;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.service.BasicCampusService;
+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.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -12,8 +29,36 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @author wangliang
  * @since 2021-10-28
  * @since 2021-10-28
  */
  */
+@Api(tags = "学期管理controller")
 @RestController
 @RestController
-@RequestMapping("/basic-semester")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/semester")
 public class BasicSemesterController {
 public class BasicSemesterController {
+    @Resource
+    private BasicSemesterService basicSemesterService;
+
+    @ApiOperation(value = "学期管理-查询")
+    @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findBasicSemesterList(@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) {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        return ResultUtil.ok(basicSemesterService.basicSemesterPage(schoolId,pageNumber,pageSize));
+    }
+
+    @ApiOperation(value = "学期管理-新增/编辑")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    public Result saveBasicSemester(@Valid @RequestBody BasicSemesterParams basicSemesterParams, BindingResult bindingResult) throws IllegalAccessException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(basicSemesterService.saveBasicSemester(basicSemesterParams));
+    }
 
 
+    @ApiOperation(value = "学期管理-删除(逻辑)")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteBasicSemester(@ApiParam(value = "学期id", required = true) @RequestParam String id) {
+        return ResultUtil.ok(basicSemesterService.deleteBasicSemesterById(SystemConstant.convertIdToLong(id)));
+    }
 }
 }

+ 20 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicClazzParams.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.bean.params;
 
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
 import org.hibernate.validator.constraints.Range;
@@ -17,20 +18,31 @@ public class BasicClazzParams {
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "班级id(修改时必填)")
     @ApiModelProperty(value = "班级id(修改时必填)")
+    @DBVerify(value = "班级id")
     private Long id;
     private Long id;
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "校区主键")
     @ApiModelProperty(value = "校区主键")
     @NotNull(message = "请选择校区")
     @NotNull(message = "请选择校区")
     @Range(min = 1L, message = "请选择校区")
     @Range(min = 1L, message = "请选择校区")
+    @DBVerify(value = "校区",required = true)
     private Long campusId;
     private Long campusId;
 
 
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "专业id")
+    @NotNull(message = "请选择专业")
+    @Range(min = 1L, message = "请选择专业")
+    @DBVerify(value = "专业",required = true)
+    private Long majorId;
+
     @ApiModelProperty(value = "班级编号")
     @ApiModelProperty(value = "班级编号")
+    @DBVerify(value = "班级编号",required = true)
     private String clazzCode;
     private String clazzCode;
 
 
     @ApiModelProperty(value = "班级名称")
     @ApiModelProperty(value = "班级名称")
     @NotNull(message = "请输入班级名称")
     @NotNull(message = "请输入班级名称")
     @Length(min = 1,message = "请输入班级名称")
     @Length(min = 1,message = "请输入班级名称")
+    @DBVerify(value = "班级名称",required = true)
     private String clazzName;
     private String clazzName;
 
 
     public Long getId() {
     public Long getId() {
@@ -64,4 +76,12 @@ public class BasicClazzParams {
     public void setClazzName(String clazzName) {
     public void setClazzName(String clazzName) {
         this.clazzName = clazzName;
         this.clazzName = clazzName;
     }
     }
+
+    public Long getMajorId() {
+        return majorId;
+    }
+
+    public void setMajorId(Long majorId) {
+        this.majorId = majorId;
+    }
 }
 }

+ 40 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicStudentParams.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.bean.params;
 
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
 import org.hibernate.validator.constraints.Range;
@@ -17,25 +18,38 @@ public class BasicStudentParams {
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "学生id(修改时必填)")
     @ApiModelProperty(value = "学生id(修改时必填)")
+    @DBVerify(value = "学生id(修改时必填)")
     private Long id;
     private Long id;
 
 
     @ApiModelProperty(value = "学生名称")
     @ApiModelProperty(value = "学生名称")
     @NotNull(message = "请输入学生名称")
     @NotNull(message = "请输入学生名称")
     @Length(min = 1,message = "请输入学生名称")
     @Length(min = 1,message = "请输入学生名称")
+    @DBVerify(value = "学生名称",required = true)
     private String studentName;
     private String studentName;
 
 
     @ApiModelProperty(value = "学生学号")
     @ApiModelProperty(value = "学生学号")
     @NotNull(message = "请输入学生学号")
     @NotNull(message = "请输入学生学号")
     @Length(min = 1,message = "请输入学生学号")
     @Length(min = 1,message = "请输入学生学号")
+    @DBVerify(value = "学生学号",required = true)
     private String studentCode;
     private String studentCode;
 
 
     @ApiModelProperty(value = "手机号码")
     @ApiModelProperty(value = "手机号码")
     private String phoneNumber;
     private String phoneNumber;
 
 
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "校区主键")
+    private Long campusId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学院主键")
+    private Long collegeId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "专业主键")
+    private Long majorId;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "班级信息")
     @ApiModelProperty(value = "班级信息")
-    @NotNull(message = "请选择班级")
-    @Range(min = 1L, message = "请选择班级")
     private Long clazzId;
     private Long clazzId;
 
 
     public Long getId() {
     public Long getId() {
@@ -70,6 +84,30 @@ public class BasicStudentParams {
         this.phoneNumber = phoneNumber;
         this.phoneNumber = phoneNumber;
     }
     }
 
 
+    public Long getCampusId() {
+        return campusId;
+    }
+
+    public void setCampusId(Long campusId) {
+        this.campusId = campusId;
+    }
+
+    public Long getCollegeId() {
+        return collegeId;
+    }
+
+    public void setCollegeId(Long collegeId) {
+        this.collegeId = collegeId;
+    }
+
+    public Long getMajorId() {
+        return majorId;
+    }
+
+    public void setMajorId(Long majorId) {
+        this.majorId = majorId;
+    }
+
     public Long getClazzId() {
     public Long getClazzId() {
         return clazzId;
         return clazzId;
     }
     }

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/BasicStudentResult.java

@@ -31,6 +31,18 @@ public class BasicStudentResult {
     @ApiModelProperty(value = "校区名称")
     @ApiModelProperty(value = "校区名称")
     private String campusName;
     private String campusName;
 
 
+    @ApiModelProperty(value = "学院id")
+    private Long collegeId;
+
+    @ApiModelProperty(value = "学院名称")
+    private String collegeName;
+
+    @ApiModelProperty(value = "专业id")
+    private Long majorId;
+
+    @ApiModelProperty(value = "专业名称")
+    private String majorName;
+
     @ApiModelProperty(value = "班级信息")
     @ApiModelProperty(value = "班级信息")
     private String clazz;
     private String clazz;
 
 
@@ -95,6 +107,38 @@ public class BasicStudentResult {
         this.campusName = campusName;
         this.campusName = campusName;
     }
     }
 
 
+    public Long getCollegeId() {
+        return collegeId;
+    }
+
+    public void setCollegeId(Long collegeId) {
+        this.collegeId = collegeId;
+    }
+
+    public String getCollegeName() {
+        return collegeName;
+    }
+
+    public void setCollegeName(String collegeName) {
+        this.collegeName = collegeName;
+    }
+
+    public Long getMajorId() {
+        return majorId;
+    }
+
+    public void setMajorId(Long majorId) {
+        this.majorId = majorId;
+    }
+
+    public String getMajorName() {
+        return majorName;
+    }
+
+    public void setMajorName(String majorName) {
+        this.majorName = majorName;
+    }
+
     public String getClazz() {
     public String getClazz() {
         return clazz;
         return clazz;
     }
     }

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

@@ -9,8 +9,7 @@ import java.util.Objects;
  */
  */
 public enum PushTypeEnum {
 public enum PushTypeEnum {
     USER_PUSH("用户推送"),
     USER_PUSH("用户推送"),
-
-    SCORE_PUSH("成绩推送");
+    ADMIN_PUSH("考试推送");
 
 
     PushTypeEnum(String title) {
     PushTypeEnum(String title) {
         this.title = title;
         this.title = title;

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

@@ -33,7 +33,7 @@ public interface BasicClazzService extends IService<BasicClazz> {
      * @param sysUser 创建人信息
      * @param sysUser 创建人信息
      * @return 新增或编辑的班级id
      * @return 新增或编辑的班级id
      */
      */
-    Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser);
+    Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) throws IllegalAccessException;
 
 
     /**
     /**
      * 批量删除班级基本信息(逻辑)
      * 批量删除班级基本信息(逻辑)
@@ -49,7 +49,7 @@ public interface BasicClazzService extends IService<BasicClazz> {
      * @param map       参数
      * @param map       参数
      * @return 结果
      * @return 结果
      */
      */
-    Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);
+    Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws IllegalAccessException;
 
 
     /**
     /**
      * 查询班级下拉数据源
      * 查询班级下拉数据源

+ 9 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java

@@ -55,7 +55,7 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
-    public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) {
+    public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) throws IllegalAccessException {
         List<BasicClazzParams> basicClazzParamsList = new ArrayList<>();
         List<BasicClazzParams> basicClazzParamsList = new ArrayList<>();
         basicClazzParamsList.add(basicClazzParams);
         basicClazzParamsList.add(basicClazzParams);
         BasicClazz basicClazz = this.editEntityHelp(basicClazzParamsList, sysUser).get(0);
         BasicClazz basicClazz = this.editEntityHelp(basicClazzParamsList, sysUser).get(0);
@@ -119,7 +119,8 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
-    public Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
+    @Deprecated
+    public Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws IllegalAccessException {
         SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
         SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
         Long schoolId = sysUser.getSchoolId();
         Long schoolId = sysUser.getSchoolId();
 
 
@@ -247,23 +248,27 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
      * @param sysUser              操作人
      * @param sysUser              操作人
      * @return 结果
      * @return 结果
      */
      */
-    private List<BasicClazz> editEntityHelp(List<BasicClazzParams> basicClazzParamsList, SysUser sysUser) {
+    private List<BasicClazz> editEntityHelp(List<BasicClazzParams> basicClazzParamsList, SysUser sysUser) throws IllegalAccessException {
         Long schoolId = sysUser.getSchoolId();
         Long schoolId = sysUser.getSchoolId();
         List<BasicClazz> editEntityList = new ArrayList<>();
         List<BasicClazz> editEntityList = new ArrayList<>();
         for (BasicClazzParams basicClazzParams : basicClazzParamsList) {
         for (BasicClazzParams basicClazzParams : basicClazzParamsList) {
+            SystemConstant.verifyDBFields(basicClazzParams,basicClazzParams.getClass());
             // 普通参数
             // 普通参数
             Long id = basicClazzParams.getId();
             Long id = basicClazzParams.getId();
             Long campusId = basicClazzParams.getCampusId();
             Long campusId = basicClazzParams.getCampusId();
             String clazzCode = basicClazzParams.getClazzCode();
             String clazzCode = basicClazzParams.getClazzCode();
             String clazzName = basicClazzParams.getClazzName();
             String clazzName = basicClazzParams.getClazzName();
+            Long majorId = basicClazzParams.getMajorId();
 
 
             // 校验校区不存在
             // 校验校区不存在
             if (Objects.isNull(basicCampusService.getById(campusId))) {
             if (Objects.isNull(basicCampusService.getById(campusId))) {
                 throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
                 throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
             }
             }
+            // TODO: 2021/11/2 校验专业不存在
             // 检验班级名称在学校的唯一性
             // 检验班级名称在学校的唯一性
             BasicClazz checkName = this.getOne(new QueryWrapper<BasicClazz>().lambda()
             BasicClazz checkName = this.getOne(new QueryWrapper<BasicClazz>().lambda()
                     .eq(BasicClazz::getSchoolId, schoolId)
                     .eq(BasicClazz::getSchoolId, schoolId)
+                    .eq(BasicClazz::getMajorId,majorId)
                     .eq(BasicClazz::getEnable, true)
                     .eq(BasicClazz::getEnable, true)
                     .eq(BasicClazz::getClazzName, clazzName));
                     .eq(BasicClazz::getClazzName, clazzName));
             if (Objects.nonNull(checkName)) {
             if (Objects.nonNull(checkName)) {
@@ -277,6 +282,7 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
             BasicClazz basicClazz = new BasicClazz();
             BasicClazz basicClazz = new BasicClazz();
             basicClazz.setCampusId(campusId);
             basicClazz.setCampusId(campusId);
             basicClazz.setSchoolId(schoolId);
             basicClazz.setSchoolId(schoolId);
+            basicClazz.setMajorId(majorId);
             if (SystemConstant.strNotNull(clazzCode)) {
             if (SystemConstant.strNotNull(clazzCode)) {
                 basicClazz.setClazzCode(clazzCode);
                 basicClazz.setClazzCode(clazzCode);
             }
             }

+ 0 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -43,10 +43,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     @Resource
     @Resource
     private BasicStudentMapper basicStudentMapper;
     private BasicStudentMapper basicStudentMapper;
     @Resource
     @Resource
-    private TeachcloudCommonService teachcloudCommonService;
-    @Resource
-    private BasicCampusService basicCampusService;
-    @Resource
     private BasicClazzService basicClazzService;
     private BasicClazzService basicClazzService;
 
 
     @Override
     @Override

+ 2 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/OrgCenterDataDisposeServiceImpl.java

@@ -129,7 +129,7 @@ public class OrgCenterDataDisposeServiceImpl implements OrgCenterDataDisposeServ
         sysOrgService.saveOrUpdateBatch(updateSysOrgList);
         sysOrgService.saveOrUpdateBatch(updateSysOrgList);
 
 
         // 权限表未匹配到的学校权限新增
         // 权限表未匹配到的学校权限新增
-        Set<Long> schoolIdSet = basicSchoolService.list().stream().map(BaseEntity::getId).collect(Collectors.toSet());
-        teachcloudCommonService.addSchoolPrivilege(schoolIdSet);
+//        Set<Long> schoolIdSet = basicSchoolService.list().stream().map(BaseEntity::getId).collect(Collectors.toSet());
+//        teachcloudCommonService.addSchoolPrivilege(schoolIdSet);
     }
     }
 }
 }

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

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

+ 10 - 3
teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml

@@ -37,6 +37,10 @@
             phone_number AS phoneNumber,
             phone_number AS phoneNumber,
             stu.campus_id AS campusId,
             stu.campus_id AS campusId,
             cam.campus_name AS campusName,
             cam.campus_name AS campusName,
+            so.id AS collegeId,
+            so.name AS collegeName,
+            bm.id AS majorId,
+            bm.name AS majorName,
             clazz_id AS clazzId,
             clazz_id AS clazzId,
             clz.clazz_name AS clazz,
             clz.clazz_name AS clazz,
             stu.enable,
             stu.enable,
@@ -45,10 +49,13 @@
         FROM
         FROM
             basic_student stu
             basic_student stu
                 LEFT JOIN
                 LEFT JOIN
-            basic_campus cam ON stu.campus_id = cam.id
-                AND cam.enable = TRUE
+            basic_campus cam ON stu.campus_id = cam.id AND cam.enable = TRUE
                 LEFT JOIN
                 LEFT JOIN
-            basic_clazz clz ON stu.clazz_id = clz.id AND clz.enable = true
+            basic_clazz clz ON stu.clazz_id = clz.id AND clz.enable = TRUE
+                LEFT JOIN
+            basic_major bm ON stu.major_id = bm.id AND bm.enable = TRUE
+                LEFT JOIN
+            sys_org so ON stu.belong_org_id = so.id AND so.enable = TRUE
         <where>
         <where>
             and stu.enable = true
             and stu.enable = true
             <if test="queryParams != null and queryParams != ''">
             <if test="queryParams != null and queryParams != ''">