Browse Source

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 years ago
parent
commit
88379c7f3e
19 changed files with 391 additions and 68 deletions
  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;
 
 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 org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
 
 /**
  * <p>
@@ -13,4 +19,16 @@ import com.qmth.distributed.print.business.entity.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;
 
+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.params.BasicMajorParams;
 import com.qmth.distributed.print.business.bean.result.BasicMajorResult;
 import com.qmth.distributed.print.business.entity.BasicMajor;
 import com.qmth.distributed.print.business.mapper.BasicMajorMapper;
 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.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * <p>
  * 专业字典表 服务实现类
@@ -20,21 +35,73 @@ import org.springframework.transaction.annotation.Transactional;
  */
 @Service
 public class BasicMajorServiceImpl extends ServiceImpl<BasicMajorMapper, BasicMajor> implements BasicMajorService {
+    @Resource
+    private BasicClazzService basicClazzService;
+    @Resource
+    private BasicStudentService basicStudentService;
 
     @Override
     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
     @Override
     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
     @Override
     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);
             ExamPrintPlan examPrintPlan = examPrintPlans.stream().max(Comparator.comparingLong(ExamPrintPlan::getExamEndTime)).get();
             String examTime = DateUtil.format(new Date(examPrintPlan.getExamEndTime()), DATE_FORMAT);
-            syncDataParam.setThirdRelateId(stmmsUtils.syncExam(time, syncDataParam.getThirdRelateName(), examTime));
+            syncDataParam.setThirdRelateId(stmmsUtils.syncExam(examPrintPlan.getSchoolId(), time, syncDataParam.getThirdRelateName(), examTime));
         }
 
         for (Long printPlanId : printPlans) {
@@ -178,14 +178,14 @@ public class DataSyncServiceImpl implements DataSyncService {
 
             // 同步试卷文件
             File paperFile = downFileFromFss(paper, paperType, SyncFileTypeEnum.PAPER);
-            boolean syncPaperFile = stmmsUtils.syncFile(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.PAPER, paperFile);
+            boolean syncPaperFile = stmmsUtils.syncFile(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.PAPER, paperFile);
             if (syncPaperFile) {
                 status = ExamPaperStructureStatusEnum.PAPER_FINISH;
             }
 
             // 同步标答文件
             File answerFile = downFileFromFss(paper, paperType, SyncFileTypeEnum.PAPER);
-            boolean syncAnswerFile = stmmsUtils.syncFile(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.ANSWER, answerFile);
+            boolean syncAnswerFile = stmmsUtils.syncFile(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), SyncFileTypeEnum.ANSWER, answerFile);
             if (syncAnswerFile) {
                 status = ExamPaperStructureStatusEnum.ANSWER_FINISH;
             }
@@ -213,7 +213,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 syncStructureData.setAnswer(m.getAnswer());
                 return syncStructureData;
             }).collect(Collectors.toList());
-            boolean syncObjectiveStructure = stmmsUtils.syncPaperStructure(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), true, objectivePaperType, syncObjectiveStructureDatas);
+            boolean syncObjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + objectivePaperType, true, objectivePaperType, syncObjectiveStructureDatas);
             if (syncObjectiveStructure) {
                 status = ExamPaperStructureStatusEnum.OBJECTIVE_FINISH;
             }
@@ -227,11 +227,11 @@ public class DataSyncServiceImpl implements DataSyncService {
                 throw ExceptionResultEnum.ERROR.exception("主观题文件未上传");
             }
             String subjectivePaperType = subjectiveJson.getString("paperType");
-            String subjectieContent = subjectiveJson.getString("content");
-            if (StringUtils.isAnyBlank(subjectivePaperType, subjectieContent)) {
+            String subjectiveContent = subjectiveJson.getString("content");
+            if (StringUtils.isAnyBlank(subjectivePaperType, subjectiveContent)) {
                 throw ExceptionResultEnum.ERROR.exception("没有找到主观题数据");
             }
-            List<ExamPaperSubjectiveStructureDto> subjectiveStructureDtos = JSONObject.parseArray(subjectieContent, ExamPaperSubjectiveStructureDto.class);
+            List<ExamPaperSubjectiveStructureDto> subjectiveStructureDtos = JSONObject.parseArray(subjectiveContent, ExamPaperSubjectiveStructureDto.class);
             List<SyncStructureData> syncSubjectiveStructureDatas = subjectiveStructureDtos.stream().map(m -> {
                 SyncStructureData syncStructureData = new SyncStructureData();
                 syncStructureData.setMainNumber(Integer.valueOf(m.getMainNumber()));
@@ -240,7 +240,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 syncStructureData.setTotalScore(Double.valueOf(m.getScore()));
                 return syncStructureData;
             }).collect(Collectors.toList());
-            boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber(), true, subjectivePaperType, syncSubjectiveStructureDatas);
+            boolean syncSubjectiveStructure = stmmsUtils.syncPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examPaperStructure.getPaperNumber() + subjectivePaperType, true, subjectivePaperType, syncSubjectiveStructureDatas);
             if (syncSubjectiveStructure) {
                 status = ExamPaperStructureStatusEnum.SUBJECTIVE_FINISH;
             }
@@ -286,8 +286,8 @@ public class DataSyncServiceImpl implements DataSyncService {
             // 考试同步成功,才能同步考生和题卡
             if (Objects.nonNull(thirdRelateId)) {
                 updateWrapper.lambda().set(ExamPrintPlan::getThirdRelateId, thirdRelateId).set(ExamPrintPlan::getThirdRelateName, thirdRelateName);
-                saveStudent(examPrintPlan.getId(), thirdRelateId);
-                cardUpload(examPrintPlan.getId(), thirdRelateId);
+                saveStudent(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
+                cardUpload(examPrintPlan.getSchoolId(), examPrintPlan.getId(), thirdRelateId);
             } else {
                 throw ExceptionResultEnum.ERROR.exception("无法获取云阅卷考试,同步数据失败");
             }
@@ -323,7 +323,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String code = String.valueOf(examPrintPlan.getId());
                 String name = examPrintPlan.getName();
                 String examTime = DateUtil.format(new Date(examPrintPlan.getExamEndTime()), DATE_FORMAT);
-                thirdRelateId = stmmsUtils.syncExam(code, name, examTime);
+                thirdRelateId = stmmsUtils.syncExam(examPrintPlan.getSchoolId(), code, name, examTime);
             }
             return thirdRelateId;
         } catch (Exception e) {
@@ -336,7 +336,7 @@ public class DataSyncServiceImpl implements DataSyncService {
      *
      * @return
      */
-    public void saveStudent(Long examPrintPlanId, Long thirdRelateId) {
+    public void saveStudent(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
         List<SyncExamStudentDto> examStudents = examStudentService.listStudentByPrintPlanIdAndSyncStatus(examPrintPlanId);
         for (SyncExamStudentDto examStudent : examStudents) {
             try {
@@ -348,9 +348,9 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String college = "无";
                 String className = getClassName(examStudent.getExtendFields());
                 String teacher = "无";
-                String subjectCode = examStudent.getPaperNumber(); // 取试卷编号
+                String subjectCode = examStudent.getPaperNumber() + examStudent.getPaperType(); // 取试卷编号
                 String subjectName = examStudent.getCourseName();
-                boolean syncStudent = stmmsUtils.syncStudent(examId, examNumber, studentCode, name, college, className, teacher, subjectCode, subjectName, null, null, null, null);
+                boolean syncStudent = stmmsUtils.syncStudent(schoolId, examId, examNumber, studentCode, name, college, className, teacher, subjectCode, subjectName, null, null, null, null);
 
                 if (syncStudent) {
                     UpdateWrapper<ExamStudent> updateWrapper = new UpdateWrapper<>();
@@ -368,7 +368,7 @@ public class DataSyncServiceImpl implements DataSyncService {
      *
      * @return
      */
-    public void cardUpload(Long examPrintPlanId, Long thirdRelateId) {
+    public void cardUpload(Long schoolId, Long examPrintPlanId, Long thirdRelateId) {
         List<ExamDetailCourse> examDetailCourses = examDetailService.listSyncPaperNumberByPrintPlanId(examPrintPlanId);
         if (CollectionUtils.isEmpty(examDetailCourses)) {
             return;
@@ -393,7 +393,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                     String filePath = getTempDir(SyncFileTypeEnum.CARD);
                     file = createJsonFile(filePath, syncExamCardDto.getContent());
                     if (file.exists()) {
-                        boolean uploadCard = stmmsUtils.syncFile(String.valueOf(thirdRelateId), syncExamCardDto.getPaperNumber(), SyncFileTypeEnum.CARD, file);
+                        boolean uploadCard = stmmsUtils.syncFile(schoolId, String.valueOf(thirdRelateId), syncExamCardDto.getPaperNumber(), SyncFileTypeEnum.CARD, file);
                         if (uploadCard) {
                             UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
                             updateWrapper.lambda().set(ExamCard::getSyncStatus, true).eq(ExamCard::getId, syncExamCardDto.getId());
@@ -444,6 +444,7 @@ public class DataSyncServiceImpl implements DataSyncService {
 
     /**
      * 上传文件临时目录
+     *
      * @param type
      * @return
      */

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

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

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

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

+ 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">
 <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>

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

@@ -57,7 +57,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @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()) {
             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;
 
 
-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>
@@ -12,8 +26,37 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2021-10-28
  */
+@Api(tags = "专业管理controller")
 @RestController
-@RequestMapping("/basic-major")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/major")
 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;
 
 
-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>
@@ -12,8 +29,36 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2021-10-28
  */
+@Api(tags = "学期管理controller")
 @RestController
-@RequestMapping("/basic-semester")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/semester")
 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.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
@@ -17,20 +18,31 @@ public class BasicClazzParams {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "班级id(修改时必填)")
+    @DBVerify(value = "班级id")
     private Long id;
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "校区主键")
     @NotNull(message = "请选择校区")
     @Range(min = 1L, message = "请选择校区")
+    @DBVerify(value = "校区",required = true)
     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 = "班级编号")
+    @DBVerify(value = "班级编号",required = true)
     private String clazzCode;
 
     @ApiModelProperty(value = "班级名称")
     @NotNull(message = "请输入班级名称")
     @Length(min = 1,message = "请输入班级名称")
+    @DBVerify(value = "班级名称",required = true)
     private String clazzName;
 
     public Long getId() {
@@ -64,4 +76,12 @@ public class BasicClazzParams {
     public void setClazzName(String 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.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
@@ -17,25 +18,38 @@ public class BasicStudentParams {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "学生id(修改时必填)")
+    @DBVerify(value = "学生id(修改时必填)")
     private Long id;
 
     @ApiModelProperty(value = "学生名称")
     @NotNull(message = "请输入学生名称")
     @Length(min = 1,message = "请输入学生名称")
+    @DBVerify(value = "学生名称",required = true)
     private String studentName;
 
     @ApiModelProperty(value = "学生学号")
     @NotNull(message = "请输入学生学号")
     @Length(min = 1,message = "请输入学生学号")
+    @DBVerify(value = "学生学号",required = true)
     private String studentCode;
 
     @ApiModelProperty(value = "手机号码")
     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)
     @ApiModelProperty(value = "班级信息")
-    @NotNull(message = "请选择班级")
-    @Range(min = 1L, message = "请选择班级")
     private Long clazzId;
 
     public Long getId() {
@@ -70,6 +84,30 @@ public class BasicStudentParams {
         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() {
         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 = "校区名称")
     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 = "班级信息")
     private String clazz;
 
@@ -95,6 +107,38 @@ public class BasicStudentResult {
         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() {
         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 {
     USER_PUSH("用户推送"),
-
-    SCORE_PUSH("成绩推送");
+    ADMIN_PUSH("考试推送");
 
     PushTypeEnum(String 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 创建人信息
      * @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       参数
      * @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)
     @Override
-    public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) {
+    public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) throws IllegalAccessException {
         List<BasicClazzParams> basicClazzParamsList = new ArrayList<>();
         basicClazzParamsList.add(basicClazzParams);
         BasicClazz basicClazz = this.editEntityHelp(basicClazzParamsList, sysUser).get(0);
@@ -119,7 +119,8 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
 
     @Transactional(rollbackFor = Exception.class)
     @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);
         Long schoolId = sysUser.getSchoolId();
 
@@ -247,23 +248,27 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
      * @param sysUser              操作人
      * @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();
         List<BasicClazz> editEntityList = new ArrayList<>();
         for (BasicClazzParams basicClazzParams : basicClazzParamsList) {
+            SystemConstant.verifyDBFields(basicClazzParams,basicClazzParams.getClass());
             // 普通参数
             Long id = basicClazzParams.getId();
             Long campusId = basicClazzParams.getCampusId();
             String clazzCode = basicClazzParams.getClazzCode();
             String clazzName = basicClazzParams.getClazzName();
+            Long majorId = basicClazzParams.getMajorId();
 
             // 校验校区不存在
             if (Objects.isNull(basicCampusService.getById(campusId))) {
                 throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
             }
+            // TODO: 2021/11/2 校验专业不存在
             // 检验班级名称在学校的唯一性
             BasicClazz checkName = this.getOne(new QueryWrapper<BasicClazz>().lambda()
                     .eq(BasicClazz::getSchoolId, schoolId)
+                    .eq(BasicClazz::getMajorId,majorId)
                     .eq(BasicClazz::getEnable, true)
                     .eq(BasicClazz::getClazzName, clazzName));
             if (Objects.nonNull(checkName)) {
@@ -277,6 +282,7 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
             BasicClazz basicClazz = new BasicClazz();
             basicClazz.setCampusId(campusId);
             basicClazz.setSchoolId(schoolId);
+            basicClazz.setMajorId(majorId);
             if (SystemConstant.strNotNull(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
     private BasicStudentMapper basicStudentMapper;
     @Resource
-    private TeachcloudCommonService teachcloudCommonService;
-    @Resource
-    private BasicCampusService basicCampusService;
-    @Resource
     private BasicClazzService basicClazzService;
 
     @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);
 
         // 权限表未匹配到的学校权限新增
-        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.service.CommonCacheService;
 import com.qmth.teachcloud.common.util.HttpKit;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -57,7 +56,7 @@ public class StmmsUtils {
      * @param examTime 考试时间
      * @return
      */
-    public Long syncExam(String code, String name, String examTime) {
+    public Long syncExam(Long schoolId, String code, String name, String examTime) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String examSaveUrl = dictionaryConfig.syncDataDomain().getExamSaveUrl();
         validUrl(hostUrl, examSaveUrl);
@@ -69,7 +68,7 @@ public class StmmsUtils {
         map.put("examTime", validParam(examTime, null, true, "考试时间"));
         map.put("type", SAVE_EXAM_TYPE);
 
-        String result = HttpKit.sendPost(postUrl, getHeaders(examSaveUrl), map, null, null, null);
+        String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSaveUrl), map, null, null, null);
         JSONObject jsonObject = JSONObject.parseObject(result);
         if (jsonObject.containsKey("id")) {
             return Long.valueOf(jsonObject.get("id").toString());
@@ -81,6 +80,7 @@ public class StmmsUtils {
     /**
      * 考生创建/更新接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param examNumber  准考证号
      * @param studentCode 学号
@@ -95,7 +95,7 @@ public class StmmsUtils {
      * @param examSite    考点
      * @param examRoom    考场
      */
-    public boolean syncStudent(String examId, String examNumber, String studentCode, String name, String college,
+    public boolean syncStudent(Long schoolId, String examId, String examNumber, String studentCode, String name, String college,
                                String className, String teacher, String subjectCode, String subjectName,
                                String packageCode, String paperType, String examSite, String examRoom) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
@@ -119,7 +119,7 @@ public class StmmsUtils {
             map.put("examSite", validParam(examSite, null, false, "考点"));
             map.put("examRoom", validParam(examRoom, null, false, "考场"));
 
-            String result = HttpKit.sendPost(postUrl, getHeaders(studentSaveUrl), map, null, null, null);
+            String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentSaveUrl), map, null, null, null);
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("updateTime")) {
                 return true;
@@ -134,12 +134,13 @@ public class StmmsUtils {
     /**
      * 文件公共上传接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param subjectCode 科目代码
      * @param type        文件类型  SyncFileTypeEnum枚举
      * @param file        文件
      */
-    public boolean syncFile(String examId, String subjectCode, SyncFileTypeEnum type, File file) {
+    public boolean syncFile(Long schoolId, String examId, String subjectCode, SyncFileTypeEnum type, File file) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String fileUploadUrl = dictionaryConfig.syncDataDomain().getFileUploadUrl();
         validUrl(hostUrl, fileUploadUrl);
@@ -170,7 +171,7 @@ public class StmmsUtils {
             formText.put("format", suffix);
             formText.put("md5", DigestUtils.md5Hex(new FileInputStream(file)));
 
-            String result = HttpKit.sendPost(postUrl, getHeaders(fileUploadUrl), formText, files, null, null);
+            String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, fileUploadUrl), formText, files, null, null);
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("success")) {
                 String success = jsonObject.get("success").toString();
@@ -189,13 +190,14 @@ public class StmmsUtils {
     /**
      * 试卷结构创建/更新接口
      *
+     * @param schoolId
      * @param examId      考试ID
      * @param subjectCode 科目代码
      * @param objective   是否客观题
      * @param paperType   试卷类型
      * @param questions   试卷结构JSON
      */
-    public boolean syncPaperStructure(String examId, String subjectCode, Boolean objective,
+    public boolean syncPaperStructure(Long schoolId, String examId, String subjectCode, Boolean objective,
                                       String paperType, List<SyncStructureData> questions) {
         String hostUrl = dictionaryConfig.syncDataDomain().getHostUrl();
         String structureUrl = dictionaryConfig.syncDataDomain().getStructureUrl();
@@ -212,7 +214,7 @@ public class StmmsUtils {
 
             String jsonData = JSONObject.toJSONString(map);
 
-            String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(structureUrl));
+            String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(schoolId, structureUrl));
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("updateTime")) {
                 return true;
@@ -267,7 +269,7 @@ public class StmmsUtils {
             map.put("account", prefix + sysUser.getLoginName());
             map.put("name", sysUser.getLoginName());
             map.put("time", time);
-            map.put("authorization", createSign(time, loginUrl));
+            map.put("authorization", createSign(sysUser.getSchoolId(), time, loginUrl));
             return map;
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception("登录信息获取失败");
@@ -279,10 +281,10 @@ public class StmmsUtils {
      *
      * @param url 请求URL
      */
-    private Map<String, String> getHeaders(String url) {
+    private Map<String, String> getHeaders(Long schoolId, String url) {
         long time = System.currentTimeMillis();
         Map<String, String> header = new HashMap<>();
-        header.put(SystemConstant.HEADER_AUTHORIZATION, createSign(time, url));
+        header.put(SystemConstant.HEADER_AUTHORIZATION, createSign(schoolId, time, url));
         header.put(SystemConstant.HEADER_TIME, String.valueOf(time));
         return header;
     }
@@ -293,8 +295,7 @@ public class StmmsUtils {
      * @param time 时间戳
      * @param url  请求URL
      */
-    private String createSign(long time, String url) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+    private String createSign(Long schoolId, long time, String url) {
         BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
         if (basicSchool == null) {
             throw ExceptionResultEnum.ERROR.exception("学校不存在");
@@ -310,15 +311,15 @@ public class StmmsUtils {
      * 校验参数值并返回(字符型)
      *
      * @param value       参数值
-     * @param defaulValue 默认值
+     * @param defaultValue 默认值
      * @param require     是否必填(true:是,false:否)
      * @param name        参数名称
      */
-    private String validParam(String value, String defaulValue, boolean require, String name) {
-        if (require && StringUtils.isAnyBlank(value, defaulValue)) {
+    private String validParam(String value, String defaultValue, boolean require, String name) {
+        if (require && StringUtils.isAllBlank(value, defaultValue)) {
             throw ExceptionResultEnum.ERROR.exception((StringUtils.isBlank(name) ? "" : name) + "值必填");
         }
-        return StringUtils.isBlank(value) ? defaulValue : value;
+        return StringUtils.isBlank(value) ? defaultValue : value;
 
     }
 
@@ -371,6 +372,8 @@ public class StmmsUtils {
     /**
      * 考试成绩考生数量查询接口
      *
+     *
+     * @param schoolId
      * @param examId
      * @param examCode
      * @param examNumber
@@ -381,7 +384,7 @@ public class StmmsUtils {
      * @param teacher
      * @return
      */
-    public int getStudentCount(Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
+    public int getStudentCount(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
         Map<String, String> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
         map.put("examCode", validParam(examCode, null, false, "考试编码"));
@@ -400,7 +403,7 @@ public class StmmsUtils {
         //请求
         String res;
         try {
-            res = HttpKit.sendPost(postUrl, getHeaders(studentCountUrl), map, null, null, null);
+            res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentCountUrl), map, null, null, null);
         } catch (Exception e) {
             log.info("云阅卷:调用考试成绩考生数量查询接口请求异常,{}", e.getMessage());
             throw new RuntimeException("云阅卷:调用考试成绩考生数量查询接口请求异常," + e.getMessage());
@@ -416,6 +419,8 @@ public class StmmsUtils {
     /**
      * 考试成绩考生查询接口
      *
+     *
+     * @param schoolId
      * @param examId
      * @param examCode
      * @param examNumber
@@ -428,7 +433,7 @@ public class StmmsUtils {
      * @param pageSize
      * @return
      */
-    public List<Map> getStudentScore(Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, int pageNo, int pageSize) {
+    public List<Map> getStudentScore(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, int pageNo, int pageSize) {
         Map<String, String> map = new HashMap<>();
         map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
         map.put("examCode", validParam(examCode, null, false, "考试编码"));
@@ -448,7 +453,7 @@ public class StmmsUtils {
         //请求
         String res;
         try {
-            res = HttpKit.sendPost(postUrl, getHeaders(studentScoreUrl), map, null, null, null);
+            res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentScoreUrl), map, null, null, null);
         } catch (Exception e) {
             log.info("云阅卷:调用考试成绩考生查询接口请求异常,{}", e.getMessage());
             throw new RuntimeException("云阅卷:调用考试成绩考生查询接口请求异常," + e.getMessage());

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

@@ -37,6 +37,10 @@
             phone_number AS phoneNumber,
             stu.campus_id AS campusId,
             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,
             clz.clazz_name AS clazz,
             stu.enable,
@@ -45,10 +49,13 @@
         FROM
             basic_student stu
                 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
-            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>
             and stu.enable = true
             <if test="queryParams != null and queryParams != ''">