瀏覽代碼

数据处理

caozixuan 4 年之前
父節點
當前提交
27cef51938
共有 13 個文件被更改,包括 340 次插入21 次删除
  1. 4 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  2. 9 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  3. 26 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  4. 36 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBExamCourse.java
  5. 124 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBExaminationRelation.java
  6. 10 4
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/enums/QuantileEnum.java
  7. 12 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/mapper/TBExaminationRelationMapper.java
  8. 3 1
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExamCourseService.java
  9. 12 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExaminationRelationService.java
  10. 27 3
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseServiceImpl.java
  11. 16 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExaminationRelationServiceImpl.java
  12. 5 0
      teachcloud-report-business/src/main/resources/mapper/TBExaminationRelationMapper.xml
  13. 56 13
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

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

@@ -242,4 +242,8 @@ public class SystemConstant {
             throw ExceptionResultEnum.ERROR.exception("[" + name + ":" + str + "]' 超过长度限制 : " + length);
         }
     }
+
+    public static boolean strNotNull(String str){
+        return str != null && str.length() > 0 && !str.equals("null");
+    }
 }

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

@@ -37,4 +37,13 @@ public interface SysOrgService extends IService<SysOrg> {
      * @return
      */
     List<Long> findCollegeIds(Long orgId);
+
+    /**
+     * 查询或新建学院
+     * 根据学院名称查询数据库是否有该开课学院,有则查询id,没有则新增并取出id
+     * @param schoolId 学校id
+     * @param collegeName 学院名称
+     * @return 查询或新增的开课学院id
+     */
+    Long searchOrInsert(Long schoolId, String collegeName);
 }

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

@@ -13,6 +13,7 @@ import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -124,4 +125,29 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         List<SysOrg> sysOrgList = this.list(sysOrgQueryWrapper);
         return Objects.nonNull(sysOrgList) ? sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toList()) : null;
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Long searchOrInsert(Long schoolId,String collegeName) {
+        Long orgId;
+        List<SysOrg> sysOrgList = this.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId,schoolId));
+        // TODO: 2021/6/23 第一次开课学院进入漏掉了主 武大教务处 
+        SysOrg parentOrg = sysOrgList.stream().filter(e -> e.getParentId() == null || e.getParentId() == 0).collect(Collectors.toList()).get(0);
+
+        SysOrg sysOrg = this.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId,schoolId).eq(SysOrg::getName,collegeName));
+        if (Objects.isNull(sysOrg)){
+            orgId = SystemConstant.getDbUuid();
+            SysOrg temp = new SysOrg();
+            temp.setId(orgId);
+            temp.setName(collegeName);
+            temp.setCode(collegeName);
+            temp.setSchoolId(schoolId);
+            temp.setEnable(true);
+            temp.setParentId(parentOrg.getId());
+            this.save(temp);
+        }else {
+            orgId = sysOrg.getId();
+        }
+        return orgId;
+    }
 }

+ 36 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBExamCourse.java

@@ -46,6 +46,18 @@ public class TBExamCourse extends BaseEntity implements Serializable {
     @TableField(value = "publish_status")
     private PublishStatusEnum publishStatus;
 
+    @ApiModelProperty(value = "教务课程编号")
+    @TableField(value = "examination_course_code")
+    private String examinationCourseCode;
+
+    @ApiModelProperty(value = "开课学院id")
+    @TableField(value = "teach_college_id")
+    private Long teachCollegeId;
+
+    @ApiModelProperty(value = "开课学院名称")
+    @TableField(value = "teach_college_name")
+    private String teachCollegeName;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -97,4 +109,28 @@ public class TBExamCourse extends BaseEntity implements Serializable {
     public void setPublishStatus(PublishStatusEnum publishStatus) {
         this.publishStatus = publishStatus;
     }
+
+    public String getExaminationCourseCode() {
+        return examinationCourseCode;
+    }
+
+    public void setExaminationCourseCode(String examinationCourseCode) {
+        this.examinationCourseCode = examinationCourseCode;
+    }
+
+    public Long getTeachCollegeId() {
+        return teachCollegeId;
+    }
+
+    public void setTeachCollegeId(Long teachCollegeId) {
+        this.teachCollegeId = teachCollegeId;
+    }
+
+    public String getTeachCollegeName() {
+        return teachCollegeName;
+    }
+
+    public void setTeachCollegeName(String teachCollegeName) {
+        this.teachCollegeName = teachCollegeName;
+    }
 }

+ 124 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBExaminationRelation.java

@@ -0,0 +1,124 @@
+package com.qmth.teachcloud.report.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 考务-关系表
+ * @Author: CaoZixuan
+ * @Date: 2021-06-23
+ */
+@ApiModel(value = "TBExaminationRelation对象", description = "考务关系表(学校-考试-课程-开课学院-教师)")
+public class TBExaminationRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableId(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(value = "school_id")
+    private Long schoolId;
+
+    @ApiModelProperty(value = "考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(value = "exam_id")
+    private Long examId;
+
+    @ApiModelProperty(value = "教务课程号")
+    @TableField(value = "examination_course_code")
+    private String examinationCourseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    @TableField(value = "course_name")
+    private String courseName;
+
+    @ApiModelProperty(value = "开课学院名称")
+    @TableField(value = "teach_college_name")
+    private String teachCollegeName;
+
+    @ApiModelProperty(value = "教师编号")
+    @TableField(value = "teacher_code")
+    private String teacherCode;
+
+    @ApiModelProperty(value = "教师名称")
+    @TableField(value = "teacher_name")
+    private String teacherName;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getExaminationCourseCode() {
+        return examinationCourseCode;
+    }
+
+    public void setExaminationCourseCode(String examinationCourseCode) {
+        this.examinationCourseCode = examinationCourseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getTeachCollegeName() {
+        return teachCollegeName;
+    }
+
+    public void setTeachCollegeName(String teachCollegeName) {
+        this.teachCollegeName = teachCollegeName;
+    }
+
+    public String getTeacherCode() {
+        return teacherCode;
+    }
+
+    public void setTeacherCode(String teacherCode) {
+        this.teacherCode = teacherCode;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 10 - 4
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/enums/QuantileEnum.java

@@ -2,16 +2,18 @@ package com.qmth.teachcloud.report.business.enums;
 
 
 public enum QuantileEnum {
-    UPPER_QUARTILE(0.25,"上四分位数"),
-    MEDIAN(0.5,"中位数"),
-    LOWER_QUARTILE(0.75,"下四分位数"),
+    UPPER_QUARTILE(0.75,"上四分位数", "Q3"),
+    MEDIAN(0.5,"中位数", "Q2"),
+    LOWER_QUARTILE(0.25,"下四分位数", "Q1"),
     ;
-    QuantileEnum(double value, String desc) {
+    QuantileEnum(double value, String desc, String remark) {
         this.value = value;
         this.desc = desc;
+        this.remark = remark;
     }
     private final double value;
     private final String desc;
+    private final String remark;
 
     public double getValue() {
         return value;
@@ -20,4 +22,8 @@ public enum QuantileEnum {
     public String getDesc() {
         return desc;
     }
+
+    public String getRemark() {
+        return remark;
+    }
 }

+ 12 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/mapper/TBExaminationRelationMapper.java

@@ -0,0 +1,12 @@
+package com.qmth.teachcloud.report.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.report.business.entity.TBExaminationRelation;
+
+/**
+ * @Description: 考务-关系mapper
+ * @Author: CaoZixuan
+ * @Date: 2021-06-23
+ */
+public interface TBExaminationRelationMapper extends BaseMapper<TBExaminationRelation> {
+}

+ 3 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExamCourseService.java

@@ -53,6 +53,8 @@ public interface TBExamCourseService extends IService<TBExamCourse> {
      * @param examId 考试id
      * @param courseCode 课程编号
      * @param courseName 课程名称
+     * @param examinationCourseCode 考务课程编号
+     * @param teachCollegeName 开课学院名称
      */
-    void createCourse(Long schoolId,Long examId,String courseCode,String courseName);
+    void createCourse(Long schoolId,Long examId,String courseCode,String courseName,String examinationCourseCode,String teachCollegeName);
 }

+ 12 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExaminationRelationService.java

@@ -0,0 +1,12 @@
+package com.qmth.teachcloud.report.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.report.business.entity.TBExaminationRelation;
+
+/**
+ * @Description: 考务-关系服务接口
+ * @Author: CaoZixuan
+ * @Date: 2021-06-23
+ */
+public interface TBExaminationRelationService extends IService<TBExaminationRelation> {
+}

+ 27 - 3
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseServiceImpl.java

@@ -12,10 +12,12 @@ import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.report.business.bean.result.TBExamCourseResult;
 import com.qmth.teachcloud.report.business.entity.TBExamCourse;
+import com.qmth.teachcloud.report.business.entity.TBExaminationRelation;
 import com.qmth.teachcloud.report.business.enums.PublishStatusEnum;
 import com.qmth.teachcloud.report.business.enums.TestStatusEnum;
 import com.qmth.teachcloud.report.business.mapper.TBExamCourseMapper;
 import com.qmth.teachcloud.report.business.service.TBExamCourseService;
+import com.qmth.teachcloud.report.business.service.TBExaminationRelationService;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -39,11 +41,14 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
     TBExamCourseMapper tbExamCourseMapper;
 
     @Resource
-    private BasicCourseService basicCourseService;
+    BasicCourseService basicCourseService;
 
     @Resource
     SysOrgService sysOrgService;
 
+    @Resource
+    TBExaminationRelationService tbExaminationRelationService;
+
     @Override
     public boolean verifyExamCourseCantRun(Long examId, Long schoolId, String courseCode, String courseName) {
         QueryWrapper<BasicCourse> schoolCourseQuery = new QueryWrapper<>();
@@ -134,15 +139,31 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
 
     @Transactional
     @Override
-    public void createCourse(Long schoolId, Long examId, String courseCode, String courseName) {
+    public void createCourse(Long schoolId, Long examId, String courseCode, String courseName , String examinationCourseCode,String teachCollegeName) {
         List<TBExamCourse> tbExamCourseList = this.list(new QueryWrapper<TBExamCourse>().lambda()
                 .eq(TBExamCourse::getExamId,examId)
                 .eq(TBExamCourse::getSchoolId,schoolId)
                 .eq(TBExamCourse::getCourseCode,courseCode)
-                .eq(TBExamCourse::getCourseName,courseName));
+                .eq(TBExamCourse::getCourseName,courseName)
+                .eq(TBExamCourse::getExaminationCourseCode,examinationCourseCode));
         if (tbExamCourseList.size() > 0){
             throw ExceptionResultEnum.ERROR.exception("考试课程已存在");
         }
+        if (!SystemConstant.strNotNull(teachCollegeName)) {
+            List<TBExaminationRelation> tbExaminationRelationList = tbExaminationRelationService.list(new QueryWrapper<TBExaminationRelation>().lambda()
+                    .eq(TBExaminationRelation::getSchoolId, schoolId)
+                    .eq(TBExaminationRelation::getExamId, examId)
+                    .eq(TBExaminationRelation::getExaminationCourseCode, examinationCourseCode)
+                    .eq(TBExaminationRelation::getCourseName, courseName));
+            List<String> teachCollegeNameList = tbExaminationRelationList.stream().map(TBExaminationRelation::getTeachCollegeName).distinct().collect(Collectors.toList());
+            if (teachCollegeNameList.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("开课学院名称异常");
+            }
+            // 开课学院名称
+            teachCollegeName = teachCollegeNameList.get(0);
+        }
+        Long teachCollegeId = sysOrgService.searchOrInsert(schoolId,teachCollegeName);
+
         TBExamCourse tbExamCourse = new TBExamCourse();
         tbExamCourse.setId(SystemConstant.getDbUuid());
         tbExamCourse.setSchoolId(schoolId);
@@ -151,6 +172,9 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
         tbExamCourse.setCourseName(courseName);
         tbExamCourse.setTestStatus(TestStatusEnum.UN_TEST);
         tbExamCourse.setPublishStatus(PublishStatusEnum.UN_COMPUTE);
+        tbExamCourse.setExaminationCourseCode(examinationCourseCode);
+        tbExamCourse.setTeachCollegeId(teachCollegeId);
+        tbExamCourse.setTeachCollegeName(teachCollegeName);
         this.save(tbExamCourse);
     }
 }

+ 16 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExaminationRelationServiceImpl.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.report.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.report.business.entity.TBExaminationRelation;
+import com.qmth.teachcloud.report.business.mapper.TBExaminationRelationMapper;
+import com.qmth.teachcloud.report.business.service.TBExaminationRelationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 考务-关系服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2021-06-23
+ */
+@Service
+public class TBExaminationRelationServiceImpl extends ServiceImpl<TBExaminationRelationMapper, TBExaminationRelation> implements TBExaminationRelationService {
+}

+ 5 - 0
teachcloud-report-business/src/main/resources/mapper/TBExaminationRelationMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.teachcloud.report.business.mapper.TBExaminationRelationMapper">
+
+</mapper>

+ 56 - 13
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.bean.dto.ExaminationImportDto;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
@@ -19,6 +18,7 @@ import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.report.business.bean.dto.excel.*;
 import com.qmth.teachcloud.report.business.bean.dto.query.*;
@@ -27,10 +27,7 @@ import com.qmth.teachcloud.report.business.enums.AssignEnum;
 import com.qmth.teachcloud.report.business.enums.ExamCloudDataEnum;
 import com.qmth.teachcloud.report.business.enums.NumberTypeEnum;
 import com.qmth.teachcloud.report.business.service.*;
-import com.qmth.teachcloud.common.util.Result;
-import io.netty.handler.codec.http.HttpRequest;
 import io.swagger.annotations.*;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -38,16 +35,13 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.util.WebUtils;
 
 import javax.annotation.Resource;
-import javax.crypto.ExemptionMechanism;
-import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 基础数据导入系统基础表控制类
@@ -104,6 +98,8 @@ public class BasicDatasourceController {
     private AnalyzeForReportService analyzeForReportService;
     @Resource
     private TBExaminationService tbExaminationService;
+    @Resource
+    private TBExaminationRelationService tbExaminationRelationService;
 
     @ApiOperation(value = "试卷数据导入")
     @RequestMapping(value = "/paper/import", method = RequestMethod.POST)
@@ -454,7 +450,8 @@ public class BasicDatasourceController {
         TBExam tbExam = tbExamService.findByCloudExamId(id);
         Long examId = tbExam.getId();
         Long schoolId = tbExamService.getById(examId).getSchoolId();
-        if (schoolId != pSchoolId){
+
+        if (!schoolId.equals(pSchoolId)){
             throw ExceptionResultEnum.ERROR.exception("学校id不匹配");
         }
 
@@ -492,14 +489,26 @@ public class BasicDatasourceController {
         }
         this.saveCollegeInfo(tbSchoolCollegeDtoList);
         // TODO: 2021/6/2 筛选并创建学校教师表
+        // 查询考务关系
+        List<TBExaminationRelation> tbExaminationRelationList = tbExaminationRelationService.list(new QueryWrapper<TBExaminationRelation>().lambda()
+                .eq(TBExaminationRelation::getExamId,examId));
+
         List<TBSchoolTeacherDto> tbSchoolTeacherDtoList = new ArrayList<>();
         List<String> teacherList = finalList.stream()
                 .map(e -> String.valueOf(e.get(ExamCloudDataEnum.TEACHER.getName())))
                 .distinct().collect(Collectors.toList());
         for (String teacherInfo : teacherList) {
+            List<String> teacherCodeList = tbExaminationRelationList.stream()
+                    .filter(e -> teacherInfo.equals(e.getTeacherName()))
+                    .map(TBExaminationRelation::getTeacherCode)
+                    .distinct().collect(Collectors.toList());
+            if (teacherCodeList.size() != 1){
+                throw ExceptionResultEnum.ERROR.exception("不能通过云阅卷中教师名称找到对应考务数据的教师");
+            }
+
             TBSchoolTeacherDto tbSchoolTeacherDto = new TBSchoolTeacherDto();
             tbSchoolTeacherDto.setSchoolId(schoolId);
-            tbSchoolTeacherDto.setTeacherCode(teacherInfo);
+            tbSchoolTeacherDto.setTeacherCode(teacherCodeList.get(0));
             tbSchoolTeacherDto.setTeacherName(teacherInfo);
             tbSchoolTeacherDtoList.add(tbSchoolTeacherDto);
         }
@@ -579,6 +588,8 @@ public class BasicDatasourceController {
                 TBExamCourse tbExamCourse = needDisposeList.get(0);
                 String courseCode = tbExamCourse.getCourseCode();
                 String courseName = tbExamCourse.getCourseName();
+                // 开课学院id
+                Long teachCollegeId = tbExamCourse.getTeachCollegeId();
                 if (tbExamCourseService.verifyExamCourseCantRun(examId, schoolId, courseCode, courseName)) {
                     continue;
                 }
@@ -599,7 +610,7 @@ public class BasicDatasourceController {
                 tbExamStudent.setStudentCode(studentCode);
                 tbExamStudent.setCourseCode(courseCode);
                 tbExamStudent.setCourseName(courseName);
-                tbExamStudent.setTeachCollegeId(0L);
+                tbExamStudent.setTeachCollegeId(teachCollegeId);
                 tbExamStudent.setInspectCollegeId(tbSchoolCollege.getId());
                 tbExamStudent.setClazzId(tbSchoolClazz.getId());
                 tbExamStudent.setMajorId(0L);
@@ -842,9 +853,12 @@ public class BasicDatasourceController {
     @RequestMapping(value = "/course/create", method = RequestMethod.POST)
     @Transactional(rollbackFor = Exception.class)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
-    public Result courseCreate(@RequestParam Long schoolId, @RequestParam String examId, @RequestParam String courseCode,@RequestParam String courseName) {
+    public Result courseCreate(@RequestParam Long schoolId, @RequestParam String examId, @RequestParam String courseCode,@RequestParam String courseName,@RequestParam(required = false) String examinationCourseCode,@RequestParam(required = false) String teachCollegeName) {
+        if ((!SystemConstant.strNotNull(examinationCourseCode) && !SystemConstant.strNotNull(teachCollegeName)) || (SystemConstant.strNotNull(examinationCourseCode) && SystemConstant.strNotNull(teachCollegeName))){
+            throw ExceptionResultEnum.ERROR.exception("参数异常 : 考务课程编号和课程授课学院不能全不传或全传");
+        }
         basicCourseService.createCourse(schoolId,courseCode,courseName);
-        tbExamCourseService.createCourse(schoolId,SystemConstant.convertIdToLong(examId),courseCode,courseName);
+        tbExamCourseService.createCourse(schoolId,SystemConstant.convertIdToLong(examId),courseCode,courseName,examinationCourseCode,teachCollegeName);
 
         return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
     }
@@ -912,8 +926,37 @@ public class BasicDatasourceController {
                 }
             }
         }
+        List<Map<String,Object>> tbExaminationRelationMapList = tbExaminationList.stream().flatMap(e -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("schoolId",e.getSchoolId());
+            map.put("examId",e.getExamId());
+            map.put("examinationCourseCode",e.getExaminationCourseCode());
+            map.put("courseName",e.getCourseName());
+            map.put("teachCollegeName",e.getTeachCollegeName());
+            map.put("teacherCode",e.getTeacherCode());
+            map.put("teacherName",e.getTeacherName());
+            return Stream.of(map);
+        }).distinct().collect(Collectors.toList());
+
+        List<TBExaminationRelation> tbExaminationRelationList = new ArrayList<>();
+        for (Map<String, Object> map : tbExaminationRelationMapList) {
+            TBExaminationRelation tbExaminationRelation = new TBExaminationRelation();
+            tbExaminationRelation.setId(SystemConstant.getDbUuid());
+            tbExaminationRelation.setSchoolId(SystemConstant.convertIdToLong(String.valueOf(map.get("schoolId"))));
+            tbExaminationRelation.setExamId(SystemConstant.convertIdToLong(String.valueOf(map.get("examId"))));
+            tbExaminationRelation.setExaminationCourseCode(String.valueOf(map.get("examinationCourseCode")));
+            tbExaminationRelation.setCourseName(String.valueOf(map.get("courseName")));
+            tbExaminationRelation.setTeachCollegeName(String.valueOf(map.get("teachCollegeName")));
+            tbExaminationRelation.setTeacherCode(String.valueOf(map.get("teacherCode")));
+            tbExaminationRelation.setTeacherName(String.valueOf(map.get("teacherName")));
+            tbExaminationRelationList.add(tbExaminationRelation);
+        }
+
         tbExaminationService.remove(new QueryWrapper<TBExamination>().lambda().eq(TBExamination::getExamId,examId));
+        tbExaminationRelationService.remove(new QueryWrapper<TBExaminationRelation>().lambda().eq(TBExaminationRelation::getExamId,examId));
+
         tbExaminationService.saveBatch(tbExaminationList);
+        tbExaminationRelationService.saveBatch(tbExaminationRelationList);
         return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
     }