Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/dev_v3.3.1' into dev_v3.3.1

# Conflicts:
#	distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskApplyController.java
xiaofei 1 gadu atpakaļ
vecāks
revīzija
07f4da4f5b
49 mainītis faili ar 1101 papildinājumiem un 838 dzēšanām
  1. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/CourseEvaluationParam.java
  2. 17 28
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachClazzParams.java
  3. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachCourseSelectParam.java
  4. 9 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachStudentBatchParam.java
  5. 24 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeacherTeamParam.java
  6. 58 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/BasicTeachClazzResult.java
  7. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachClazzResult.java
  8. 13 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachCourseResult.java
  9. 20 19
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachClazz.java
  10. 20 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachCourse.java
  11. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachStudent.java
  12. 9 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CourseEvaluationTypeEnum.java
  13. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicTeachClazzMapper.java
  14. 5 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachClazzMapper.java
  15. 9 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java
  16. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicTeachClazzService.java
  17. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java
  18. 12 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/CourseEvaluationService.java
  19. 6 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java
  20. 20 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java
  21. 7 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java
  22. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTeachClazzServiceImpl.java
  23. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  24. 23 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CourseEvaluationServiceImpl.java
  25. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  26. 33 33
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  27. 95 95
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  28. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  29. 64 68
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java
  30. 195 150
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java
  31. 101 101
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachStudentServiceImpl.java
  32. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  33. 18 0
      distributed-print-business/src/main/resources/db/log/脚本-caozx.sql
  34. 15 0
      distributed-print-business/src/main/resources/mapper/BasicTeachClazzMapper.xml
  35. 4 8
      distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml
  36. 11 8
      distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml
  37. 8 12
      distributed-print-business/src/main/resources/mapper/TeachStudentMapper.xml
  38. 35 36
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java
  39. 29 32
      distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java
  40. 7 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/CourseEvaluationController.java
  41. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskApplyController.java
  42. 21 61
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  43. 8 5
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachClazzController.java
  44. 25 12
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java
  45. 24 25
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachStudentController.java
  46. 15 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicCourseMapper.java
  47. 7 5
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java
  48. 8 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  49. 14 0
      teachcloud-common/src/main/resources/mapper/BasicCourseMapper.xml

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/CourseEvaluationParam.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.bean.params;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.CourseEvaluationTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
@@ -36,6 +37,9 @@ public class CourseEvaluationParam {
     @Length(min = 1, message = "缺少评价方式描述")
     private String evaluationDesc;
 
+    @ApiModelProperty("评价方式类型")
+    private CourseEvaluationTypeEnum type;
+
     public Long getExamId() {
         return examId;
     }
@@ -67,4 +71,12 @@ public class CourseEvaluationParam {
     public void setEvaluationDesc(String evaluationDesc) {
         this.evaluationDesc = evaluationDesc;
     }
+
+    public CourseEvaluationTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(CourseEvaluationTypeEnum type) {
+        this.type = type;
+    }
 }

+ 17 - 28
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachClazzParams.java

@@ -8,7 +8,9 @@ import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
 
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @Description: 教学班级编辑参数
@@ -19,42 +21,29 @@ public class TeachClazzParams {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "班级id(修改时必填)")
-    @DBVerify(value = "班级id")
-    @EditKey
-    private Long id;
+    @NotEmpty
+    @Range(min = 1L,message = "请选择班级")
+    private List<Long> idList;
 
     @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "基础课程主键")
-    @NotNull(message = "请选择基础课程")
-    @Range(min = 1L, message = "请选择基础课程")
-    private Long basicCourseId;
-
-    @ApiModelProperty(value = "教学班级名称")
-    @NotNull(message = "请输入教学班级名称")
-    @Length(min = 1,message = "请输入教学班级名称")
-    private String teachClazzName;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
+    @ApiModelProperty(value = "教学课程id")
+    @NotNull(message = "教学课程id")
+    @Range(min = 1L, message = "请选择课程")
+    private Long teachCourseId;
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public List<Long> getIdList() {
+        return idList;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setIdList(List<Long> idList) {
+        this.idList = idList;
     }
 
-    public String getTeachClazzName() {
-        return teachClazzName;
+    public Long getTeachCourseId() {
+        return teachCourseId;
     }
 
-    public void setTeachClazzName(String teachClazzName) {
-        this.teachClazzName = teachClazzName;
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
     }
 }

+ 44 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachCourseSelectParam.java

@@ -0,0 +1,44 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description: 教学课程选择参数
+ * @Author: CaoZixuan
+ * @Date: 2024-03-05
+ */
+public class TeachCourseSelectParam {
+
+    @ApiModelProperty("考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "缺少考试")
+    @Range(min = 1L, message = "缺少考试")
+    private Long examId;
+
+    @ApiModelProperty("课程编号集合")
+    @NotEmpty(message = "缺少课程编号集合")
+    private List<String> courseCodeList;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public List<String> getCourseCodeList() {
+        return courseCodeList;
+    }
+
+    public void setCourseCodeList(List<String> courseCodeList) {
+        this.courseCodeList = courseCodeList;
+    }
+}

+ 9 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachStudentBatchParam.java

@@ -6,7 +6,9 @@ import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Range;
 
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -20,14 +22,13 @@ public class TeachStudentBatchParam {
     @ApiModelProperty(value = "教学班级主键")
     @NotNull(message = "请选择教学班级")
     @Range(min = 1L, message = "请选择教学班级")
-    @DBVerify(value = "教学班级id",required = true)
     private Long teachClazzId;
 
-
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "学生字典id集合")
-    @NotNull(message = "请选择要添加的学生")
-    private Set<Long> basicStudentIdSet;
+    @NotEmpty(message = "请选择要添加的学生")
+    @Range(min = 1L, message = "请选择要添加的学生")
+    private List<Long> basicExamStudentIdList;
 
     public Long getTeachClazzId() {
         return teachClazzId;
@@ -37,11 +38,11 @@ public class TeachStudentBatchParam {
         this.teachClazzId = teachClazzId;
     }
 
-    public Set<Long> getBasicStudentIdSet() {
-        return basicStudentIdSet;
+    public List<Long> getBasicExamStudentIdList() {
+        return basicExamStudentIdList;
     }
 
-    public void setBasicStudentIdSet(Set<Long> basicStudentIdSet) {
-        this.basicStudentIdSet = basicStudentIdSet;
+    public void setBasicExamStudentIdList(List<Long> basicExamStudentIdList) {
+        this.basicExamStudentIdList = basicExamStudentIdList;
     }
 }

+ 24 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeacherTeamParam.java

@@ -1,5 +1,7 @@
 package com.qmth.distributed.print.business.bean.params;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
@@ -12,6 +14,7 @@ import javax.validation.constraints.NotNull;
  * @Date: 2023-03-16
  */
 public class TeacherTeamParam {
+
     @ApiModelProperty("姓名")
     @NotNull(message = "请填写姓名")
     @Length(message = "请填写姓名")
@@ -23,8 +26,15 @@ public class TeacherTeamParam {
     private String teacherCode;
 
     @ApiModelProperty("基础课程id")
-    @NotNull(message = "请选择课程")
-    private Long basicCourseId;
+    @NotNull(message = "缺少考试")
+    @Range(min = 1L, message = "缺少考试")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+
+    @ApiModelProperty("课程编号")
+    @NotNull(message = "缺少课程编号")
+    @Length(min = 1, message = "缺少课程编号")
+    private String courseCode;
 
     public String getTeacherName() {
         return teacherName;
@@ -42,11 +52,19 @@ public class TeacherTeamParam {
         this.teacherCode = teacherCode;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
     }
 }

+ 58 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/BasicTeachClazzResult.java

@@ -0,0 +1,58 @@
+package com.qmth.distributed.print.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 教学班字典查询结果
+ * @Author: CaoZixuan
+ * @Date: 2024-03-06
+ */
+public class BasicTeachClazzResult {
+    @ApiModelProperty(value = "班级id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @ApiModelProperty(value = "考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+
+    @ApiModelProperty(value = "课程编号")
+    private String courseCode;
+
+    @ApiModelProperty(value = "教学班名称")
+    private String clazzName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+}

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachClazzResult.java

@@ -27,7 +27,7 @@ public class TeachClazzResult {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "教学课程id")
-    private Long basicCourseId;
+    private Long teachCourseId;
 
     public Long getId() {
         return id;
@@ -61,11 +61,11 @@ public class TeachClazzResult {
         this.teachStudentCount = teachStudentCount;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public Long getTeachCourseId() {
+        return teachCourseId;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
     }
 }

+ 13 - 12
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachCourseResult.java

@@ -15,16 +15,17 @@ public class TeachCourseResult {
     @ApiModelProperty(value = "教学课程id")
     private Long id;
 
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "基础课程id")
-    private Long basicCourseId;
-
     @ApiModelProperty(value = "教学课程名称")
     private String courseName;
 
     @ApiModelProperty(value = "教学课程编号")
     private String courseCode;
 
+    @ApiModelProperty(value = "创建人")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long createId;
+
+    @ApiModelProperty(value = "创建时间")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long createTime;
 
@@ -36,14 +37,6 @@ public class TeachCourseResult {
         this.id = id;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
-    }
-
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
-    }
-
     public String getCourseName() {
         return courseName;
     }
@@ -60,6 +53,14 @@ public class TeachCourseResult {
         this.courseCode = courseCode;
     }
 
+    public Long getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
+
     public Long getCreateTime() {
         return createTime;
     }

+ 20 - 19
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachClazz.java

@@ -22,19 +22,20 @@ public class TeachClazz extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long schoolId;
 
-    @ApiModelProperty(value = "教学班编号")
-    private String teachClazzCode;
+    @ApiModelProperty(value = "教学课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long teachCourseId;
 
-    @ApiModelProperty(value = "教学班名称")
-    private String teachClazzName;
+    @ApiModelProperty(value = "教学班字典id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long basicTeachClazzId;
 
     @ApiModelProperty(value = "用户id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
-    @ApiModelProperty(value = "基础课程主键")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long basicCourseId;
+    @ApiModelProperty(value = "教学班名称(冗余字段【教学班名称不会变】)")
+    private String clazzName;
 
     public Long getSchoolId() {
         return schoolId;
@@ -44,20 +45,20 @@ public class TeachClazz extends BaseEntity implements Serializable {
         this.schoolId = schoolId;
     }
 
-    public String getTeachClazzCode() {
-        return teachClazzCode;
+    public Long getTeachCourseId() {
+        return teachCourseId;
     }
 
-    public void setTeachClazzCode(String teachClazzCode) {
-        this.teachClazzCode = teachClazzCode;
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
     }
 
-    public String getTeachClazzName() {
-        return teachClazzName;
+    public Long getBasicTeachClazzId() {
+        return basicTeachClazzId;
     }
 
-    public void setTeachClazzName(String teachClazzName) {
-        this.teachClazzName = teachClazzName;
+    public void setBasicTeachClazzId(Long basicTeachClazzId) {
+        this.basicTeachClazzId = basicTeachClazzId;
     }
 
     public Long getUserId() {
@@ -68,11 +69,11 @@ public class TeachClazz extends BaseEntity implements Serializable {
         this.userId = userId;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public String getClazzName() {
+        return clazzName;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
     }
 }

+ 20 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachCourse.java

@@ -27,11 +27,11 @@ public class TeachCourse extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long examId;
 
-    // TODO: 2024/2/28  删除该字段
-    @Deprecated
-    @ApiModelProperty(value = "基础课程id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long basicCourseId;
+//    // TODO: 2024/2/28  删除该字段
+//    @Deprecated
+//    @ApiModelProperty(value = "基础课程id")
+//    @JsonSerialize(using = ToStringSerializer.class)
+//    private Long basicCourseId;
 
     @ApiModelProperty(value = "课程编号")
     private String courseCode;
@@ -50,14 +50,14 @@ public class TeachCourse extends BaseEntity implements Serializable {
 
     }
 
-    public TeachCourse(SysUser sysUser, Long basicCourseId, Long teachId) {
-        setSchoolId(sysUser.getSchoolId());
-        setBasicCourseId(basicCourseId);
-        setUserId(teachId);
-        insertInfo(sysUser.getId());
-        updateInfo(sysUser.getId());
-        this.enable = true;
-    }
+//    public TeachCourse(SysUser sysUser, Long basicCourseId, Long teachId) {
+//        setSchoolId(sysUser.getSchoolId());
+//        setBasicCourseId(basicCourseId);
+//        setUserId(teachId);
+//        insertInfo(sysUser.getId());
+//        updateInfo(sysUser.getId());
+//        this.enable = true;
+//    }
 
     public Long getSchoolId() {
         return schoolId;
@@ -107,11 +107,11 @@ public class TeachCourse extends BaseEntity implements Serializable {
         this.weightSetting = weightSetting;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
-    }
-
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
-    }
+//    public Long getBasicCourseId() {
+//        return basicCourseId;
+//    }
+//
+//    public void setBasicCourseId(Long basicCourseId) {
+//        this.basicCourseId = basicCourseId;
+//    }
 }

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachStudent.java

@@ -32,7 +32,7 @@ public class TeachStudent extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "教学课程id(冗余)")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long basicCourseId;
+    private Long teachCourseId;
 
     @ApiModelProperty(value = "用户id(冗余)")
     @JsonSerialize(using = ToStringSerializer.class)
@@ -62,12 +62,12 @@ public class TeachStudent extends BaseEntity implements Serializable {
         this.teachClazzId = teachClazzId;
     }
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public Long getTeachCourseId() {
+        return teachCourseId;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
     }
 
     public Long getUserId() {

+ 9 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/CourseEvaluationTypeEnum.java

@@ -6,17 +6,24 @@ package com.qmth.distributed.print.business.enums;
  * @Date: 2024-02-28
  */
 public enum CourseEvaluationTypeEnum {
-    DEFAULT("默认", "按阅卷功能模块里的卷面成绩计算"), CUSTOM("自定义", "");
+    DEFAULT("默认", "期末成绩", "按阅卷功能模块里的卷面成绩计算"), CUSTOM("自定义", "自定义", "");
+
+    private final String type;
 
     private final String name;
 
     private final String value;
 
-    CourseEvaluationTypeEnum(String name, String value) {
+    CourseEvaluationTypeEnum(String type, String name, String value) {
+        this.type = type;
         this.name = name;
         this.value = value;
     }
 
+    public String getType() {
+        return type;
+    }
+
     public String getName() {
         return name;
     }

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicTeachClazzMapper.java

@@ -1,7 +1,11 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.entity.BasicTeachClazz;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BasicTeachClazzMapper extends BaseMapper<BasicTeachClazz> {
 
+    /**
+     * 查询教学课程字典集合
+     *
+     * @param examId 考试id
+     * @return 教学课程字典集合
+     */
+    List<BasicTeachClazzResult> findTeachClazzList(@Param("examId") Long examId);
 }

+ 5 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachClazzMapper.java

@@ -15,18 +15,13 @@ import org.apache.ibatis.annotations.Param;
 public interface TeachClazzMapper extends BaseMapper<TeachClazz> {
 
     /**
-     * 分页查询教学班级
+     * 分页查询教学班级(自己分配到的)
      *
      * @param iPage          分页参数
-     * @param basicCourseId  基础课程主键
-     * @param teachClazzName 教学班级名称
-     * @param schoolId       学校id
-     * @param id
+     * @param teachCourseId  教学课程id
+     * @param teachClazzName 教学班
      * @return 结果
      */
-    IPage<TeachClazzResult> findTeachClazzPage(@Param("iPage") Page<TeachClazzResult> iPage,
-                                               @Param("basicCourseId") Long basicCourseId,
-                                               @Param("teachClazzName") String teachClazzName,
-                                               @Param("schoolId") Long schoolId,
-                                               @Param("userId") Long userId);
+    IPage<TeachClazzResult> findTeachClazzPage(@Param("iPage") Page<TeachClazzResult> iPage, @Param("teachCourseId") Long teachCourseId,
+            @Param("teachClazzName") String teachClazzName);
 }

+ 9 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java

@@ -23,31 +23,29 @@ public interface TeachCourseMapper extends BaseMapper<TeachCourse> {
      * 分页查询教学课程
      *
      * @param iPage      分页参数
+     * @param examId     考试id
      * @param courseName 课程名称
      * @param userId     用户id
-     * @param schoolId   学校id
      * @return 结果
      */
     IPage<TeachCourseResult> findTeachCoursePage(@Param("iPage") Page<TeachCourseResult> iPage,
-                                                 @Param("courseName") String courseName,
-                                                 @Param("userId") Long userId,
-                                                 @Param("schoolId") Long schoolId);
+            @Param("examId") Long examId, @Param("courseName") String courseName, @Param("userId") Long userId);
 
     /**
      * 教师团队分页查询
      *
-     * @param iPage         分页参数
-     * @param userInfo      用户信息(姓名||工号)
-     * @param basicCourseId 基础课程id
+     * @param iPage      分页参数
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     * @param userInfo   用户信息(姓名||工号)
      * @return 分页结果
      */
-    IPage<TeacherTeamResult> findTeacherTeamPage(@Param("iPage") Page<TeacherTeamResult> iPage,
-                                                 @Param("userInfo") String userInfo,
-                                                 @Param("basicCourseId") Long basicCourseId,
-                                                 @Param("schoolId") Long schoolId);
+    IPage<TeacherTeamResult> findTeacherTeamPage(@Param("iPage") Page<TeacherTeamResult> iPage, @Param("examId") Long examId,
+            @Param("courseCode") String courseCode, @Param("userInfo") String userInfo);
 
     /**
      * 根据机构id查询教师集合
+     *
      * @param orgIdList orgIdList
      * @return 教师查询集合
      */

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicTeachClazzService.java

@@ -1,9 +1,12 @@
 package com.qmth.distributed.print.business.service;
 
+import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.entity.BasicTeachClazz;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.entity.SysUser;
 
+import java.util.List;
+
 /**
  * <p>
  * 基础教学班表 服务类
@@ -24,4 +27,12 @@ public interface BasicTeachClazzService extends IService<BasicTeachClazz> {
      * @return 教学班
      */
     BasicTeachClazz findOrCreateBasicTeachClazz(SysUser requestUser, Long examId, String courseCode, String teachClazzName);
+
+    /**
+     * 查询所有加血版
+     *
+     * @param examId 考试id
+     * @return 教学班结果
+     */
+    List<BasicTeachClazzResult> findAllTeachClazz(Long examId);
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.service;
 
+import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
@@ -26,4 +27,6 @@ public interface ConditionService {
     List<BasicClazz> listClazz(Long semesterId, Long examId, String courseCode, String clazzName);
 
     List<SysOrg> listCollege();
+
+    List<BasicTeachClazzResult> listBasicTeachClazz(Long examId);
 }

+ 12 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/CourseEvaluationService.java

@@ -32,9 +32,9 @@ public interface CourseEvaluationService extends IService<CourseEvaluation> {
      * 保存课程评价方式
      *
      * @param courseEvaluationParam 课程评价方式参数
-     * @param requestUser           请求用户
+     * @param userId                用户id
      */
-    void saveCourseEvaluation(CourseEvaluationParam courseEvaluationParam, SysUser requestUser);
+    void saveCourseEvaluation(CourseEvaluationParam courseEvaluationParam, Long userId);
 
     /**
      * 删除课程评价方式
@@ -42,4 +42,13 @@ public interface CourseEvaluationService extends IService<CourseEvaluation> {
      * @param id 课程评价方式id
      */
     void deleteCourseEvaluation(Long id);
-}
+
+    /**
+     * 创建默认的评价方式
+     *
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     * @param userId     教师id
+     */
+    void createDefaultCourseEvaluation(Long examId, String courseCode, Long userId);
+}

+ 6 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java

@@ -20,22 +20,22 @@ public interface TeachClazzService extends IService<TeachClazz> {
     /**
      * 分页查询教学班列表
      *
-     * @param basicCourseId  基础课程id
-     * @param teachClazzName 班级名称
+     * @param examId         考试id
+     * @param courseCode     考试编号
+     * @param teachClazzName 教学班名称
      * @param pageNumber     分页页数
      * @param pageSize       分页容量
-     * @return 教学班分页结果
+     * @return 分页结果
      */
-    IPage<TeachClazzResult> teachClazzPage(Long basicCourseId, String teachClazzName, int pageNumber, int pageSize);
+    IPage<TeachClazzResult> teachClazzPage(Long examId, String courseCode, String teachClazzName, int pageNumber, int pageSize);
 
     /**
      * 编辑教学班
      *
      * @param teachClazzParams 教学班编辑参数
      * @param requestUser      请求的用户
-     * @return 教学班新增结果
      */
-    Boolean editTeachClazz(TeachClazzParams teachClazzParams, SysUser requestUser);
+    void selectTeachClazz(TeachClazzParams teachClazzParams, SysUser requestUser);
 
     /**
      * 根据教学班级id集合批量删除教学班级
@@ -52,6 +52,4 @@ public interface TeachClazzService extends IService<TeachClazz> {
      * @return 字典结果
      */
     List<DictionaryResult> findTeachCourseByUserId(Long userId);
-
-    List<TeachClazz> listByBasicCourseIdAndUserId(Long schoolId, Long basicCourseId, Long userId);
 }

+ 20 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.params.TeachCourseSelectParam;
 import com.qmth.distributed.print.business.bean.result.CourseWeightSettingStatusResult;
 import com.qmth.distributed.print.business.bean.params.TeachCourseParams;
 import com.qmth.distributed.print.business.bean.params.TeacherTeamParam;
@@ -29,13 +30,14 @@ public interface TeachCourseService extends IService<TeachCourse> {
     /**
      * 分页查询教学课程列表
      *
+     * @param examId     考试id
      * @param courseName 课程名称
      * @param pageNumber 分页参数
      * @param pageSize   分页容量
      * @param userId     用户id
      * @return 教学课程分页结果
      */
-    IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId);
+    IPage<TeachCourseResult> teachCoursePage(Long examId, String courseName, int pageNumber, int pageSize, Long userId);
 
     /**
      * 手动创建教学课程
@@ -44,15 +46,16 @@ public interface TeachCourseService extends IService<TeachCourse> {
      * @param requestUser       请求的用户
      * @return 创建结果
      */
+    @Deprecated
     Boolean manualCreate(TeachCourseParams teachCourseParams, SysUser requestUser);
 
     /**
      * 选择课程表并创建教学课程
      *
-     * @param basicCourseIdList 基础课程id集合
-     * @param requestUser       请求的用户
+     * @param teachCourseSelectParam 教学课程选择参数
+     * @param requestUser            请求的用户
      */
-    void selectCreate(List<Long> basicCourseIdList, SysUser requestUser);
+    void selectCreate(TeachCourseSelectParam teachCourseSelectParam, SysUser requestUser);
 
     /**
      * 导入教学课程
@@ -60,6 +63,7 @@ public interface TeachCourseService extends IService<TeachCourse> {
      * @param file        文件
      * @param requestUser 请求用户
      */
+    @Deprecated
     void importTeachCourse(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException;
 
     /**
@@ -88,11 +92,12 @@ public interface TeachCourseService extends IService<TeachCourse> {
     /**
      * 教师库添加教师团队
      *
-     * @param basicCourseId 基础课程id
-     * @param userIdList    选择的用户(教师)id集合
-     * @param requestUser   请求的用户
+     * @param examId      考试id
+     * @param courseCode  课程编号
+     * @param userIdList  用户id集合
+     * @param requestUser 请求人
      */
-    void selectCreateTeacher(Long basicCourseId, List<Long> userIdList, SysUser requestUser);
+    void selectCreateTeacher(Long examId, String courseCode, List<Long> userIdList, SysUser requestUser);
 
     /**
      * 导入教师团队
@@ -101,18 +106,20 @@ public interface TeachCourseService extends IService<TeachCourse> {
      * @param basicCourseId 基础课程id
      * @param requestUser   请求的用户
      */
+    @Deprecated
     void importTeacherTeam(MultipartFile file, Long basicCourseId, SysUser requestUser) throws IOException, NoSuchFieldException, IllegalAccessException;
 
     /**
      * 分页查询教师团队
      *
-     * @param userInfo      用户姓名或工号
-     * @param basicCourseId 基础课程id
-     * @param pageNumber    分页页数
-     * @param pageSize      分页容量
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     * @param userInfo   教师信息
+     * @param pageNumber 分页页数
+     * @param pageSize   分页容量
      * @return 分页结果
      */
-    IPage<TeacherTeamResult> findTeacherTeamPage(String userInfo, Long basicCourseId, int pageNumber, int pageSize);
+    IPage<TeacherTeamResult> findTeacherTeamPage(Long examId, String courseCode, String userInfo, int pageNumber, int pageSize);
 
     /**
      * 根据机构id查询用户

+ 7 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.params.TeachStudentBatchParam;
 import com.qmth.distributed.print.business.bean.result.TeachStudentResult;
 import com.qmth.distributed.print.business.entity.TeachStudent;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -38,16 +39,16 @@ public interface TeachStudentService extends IService<TeachStudent> {
      * @param requestUser  请求用户
      * @return 创建结果
      */
+    @Deprecated
     Boolean createTeachStudent(String studentName, String studentCode, Long teachClazzId, SysUser requestUser);
 
     /**
      * 批量创建教学学生
-     * @param basicStudentIdSet 学生字典id集合
-     * @param teachClazzId 教学班级id
-     * @param schoolId 学校id
-     * @param requestUser 请求用户
+     *
+     * @param teachStudentBatchParam 教学学生参数
+     * @param requestUser            请求用户
      */
-    void createTeachStudentBatch(Set<Long> basicStudentIdSet,Long teachClazzId,Long schoolId,SysUser requestUser);
+    void createTeachStudentBatch(TeachStudentBatchParam teachStudentBatchParam, SysUser requestUser);
 
     /**
      * 教学学生导入
@@ -57,6 +58,7 @@ public interface TeachStudentService extends IService<TeachStudent> {
      * @param schoolId     学校id
      * @param requestUser  请求用户
      */
+    @Deprecated
     String importTeachStudent(MultipartFile file, Long teachClazzId, Long schoolId, SysUser requestUser) throws IOException, NoSuchFieldException;
 
     /**

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTeachClazzServiceImpl.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.entity.BasicTeachClazz;
 import com.qmth.distributed.print.business.mapper.BasicTeachClazzMapper;
 import com.qmth.distributed.print.business.service.BasicTeachClazzService;
@@ -10,6 +11,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -44,4 +46,9 @@ public class BasicTeachClazzServiceImpl extends ServiceImpl<BasicTeachClazzMappe
         }
         return basicTeachClazz;
     }
+
+    @Override
+    public List<BasicTeachClazzResult> findAllTeachClazz(Long examId) {
+        return this.baseMapper.findTeachClazzList(examId);
+    }
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -1,11 +1,13 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ConditionMapper;
 import com.qmth.distributed.print.business.service.BasicExamService;
+import com.qmth.distributed.print.business.service.BasicTeachClazzService;
 import com.qmth.distributed.print.business.service.ConditionService;
 import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
@@ -48,6 +50,9 @@ public class ConditionServiceImpl implements ConditionService {
     @Resource
     ConditionMapper conditionMapper;
 
+    @Resource
+    BasicTeachClazzService basicTeachClazzService;
+
     @Override
     public List<BasicSemester> listSemester(Boolean enable) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -181,4 +186,9 @@ public class ConditionServiceImpl implements ConditionService {
         return sysOrgService.list(queryWrapper);
     }
 
+    @Override
+    public List<BasicTeachClazzResult> listBasicTeachClazz(Long examId) {
+        return basicTeachClazzService.findAllTeachClazz(examId);
+    }
+
 }

+ 23 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CourseEvaluationServiceImpl.java

@@ -42,14 +42,14 @@ public class CourseEvaluationServiceImpl extends ServiceImpl<CourseEvaluationMap
 
     @Transactional
     @Override
-    public void saveCourseEvaluation(CourseEvaluationParam courseEvaluationParam, SysUser requestUser) {
-        Long requestUserId = requestUser.getId();
+    public void saveCourseEvaluation(CourseEvaluationParam courseEvaluationParam, Long userId) {
         Long examId = courseEvaluationParam.getExamId();
         String courseCode = courseEvaluationParam.getCourseCode();
         String evaluation = courseEvaluationParam.getEvaluation();
         String evaluationDesc = courseEvaluationParam.getEvaluationDesc();
+        CourseEvaluationTypeEnum type = courseEvaluationParam.getType();
 
-        TeachCourse teachCourse = teachCourseService.findByExamIdCourseCodeAndUserId(examId, courseCode, requestUserId);
+        TeachCourse teachCourse = teachCourseService.findByExamIdCourseCodeAndUserId(examId, courseCode, userId);
         Long teachCourseId = teachCourse.getId();
         if (this.count(
                 new QueryWrapper<CourseEvaluation>().lambda().eq(CourseEvaluation::getTeachCourseId, teachCourseId)
@@ -59,14 +59,14 @@ public class CourseEvaluationServiceImpl extends ServiceImpl<CourseEvaluationMap
 
         CourseEvaluation courseEvaluation = new CourseEvaluation();
         courseEvaluation.setTeachCourseId(teachCourseId);
-        courseEvaluation.setSchoolId(requestUser.getSchoolId());
+        courseEvaluation.setSchoolId(teachCourse.getSchoolId());
         courseEvaluation.setExamId(examId);
         courseEvaluation.setCourseCode(courseCode);
-        courseEvaluation.setUserId(requestUserId);
-        courseEvaluation.setType(CourseEvaluationTypeEnum.CUSTOM);
+        courseEvaluation.setUserId(userId);
+        courseEvaluation.setType(type);
         courseEvaluation.setEvaluation(evaluation);
         courseEvaluation.setEvaluationDesc(evaluationDesc);
-        courseEvaluation.insertInfo(requestUserId);
+        courseEvaluation.insertInfo(userId);
         this.save(courseEvaluation);
     }
 
@@ -75,12 +75,26 @@ public class CourseEvaluationServiceImpl extends ServiceImpl<CourseEvaluationMap
     public void deleteCourseEvaluation(Long id) {
         CourseEvaluation courseEvaluation = this.getById(id);
         if (Objects.nonNull(courseEvaluation)) {
-            if (CourseEvaluationTypeEnum.DEFAULT.equals(courseEvaluation.getType())){
-                throw ExceptionResultEnum.ERROR.exception(String.format("[%s]的评价方式不能删除",CourseEvaluationTypeEnum.DEFAULT.getName()));
+            if (CourseEvaluationTypeEnum.DEFAULT.equals(courseEvaluation.getType())) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("[%s]的评价方式不能删除", CourseEvaluationTypeEnum.DEFAULT.getType()));
             }
             Long teachCourseId = courseEvaluation.getTeachCourseId();
             teachCourseService.clearCourseSetting(teachCourseId, CourseSettingTypeEnum.COURSE_EVALUATION);
             this.removeById(id);
         }
     }
+
+    @Transactional
+    @Override
+    public void createDefaultCourseEvaluation(Long examId, String courseCode, Long userId) {
+        // 创建默认评价方式
+        CourseEvaluationTypeEnum type = CourseEvaluationTypeEnum.DEFAULT;
+        CourseEvaluationParam courseEvaluationParam = new CourseEvaluationParam();
+        courseEvaluationParam.setExamId(examId);
+        courseEvaluationParam.setCourseCode(courseCode);
+        courseEvaluationParam.setEvaluation(type.getName());
+        courseEvaluationParam.setEvaluationDesc(type.getValue());
+        courseEvaluationParam.setType(type);
+        this.saveCourseEvaluation(courseEvaluationParam, userId);
+    }
 }

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

@@ -1200,7 +1200,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         Set<String> clazzNameSet = new HashSet<>();
         if (clazzIdSet.size() > 0) {
             Set<String> basicClazzSet = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId, clazzIdSet)).stream().map(BasicClazz::getClazzName).collect(Collectors.toSet());
-            Set<String> teachClazzSet = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getId, clazzIdSet)).stream().map(TeachClazz::getTeachClazzName).collect(Collectors.toSet());
+            Set<String> teachClazzSet = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getId, clazzIdSet)).stream().map(TeachClazz::getClazzName).collect(Collectors.toSet());
             clazzNameSet.addAll(basicClazzSet);
             clazzNameSet.addAll(teachClazzSet);
         }

+ 33 - 33
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -93,39 +93,39 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         List<TaskPrintClassDto> taskPrintClassDtos = new ArrayList<>();
-        BasicCourse basicCourse = basicCourseService.findByCourseCode(courseCode, schoolId);
-        // 1.判断教学表中是否有数据
-        List<TeachCourse> teachCourseDatasource = teachCourseService.list(new QueryWrapper<TeachCourse>().lambda()
-                .eq(TeachCourse::getSchoolId, schoolId)
-                .eq(TeachCourse::getUserId, requestUser.getId()));
-        if (teachCourseDatasource != null && teachCourseDatasource.size() > 0) {
-            // 如果该用户创建了任意教学课程,则走教学课程查询逻辑
-            List<TeachCourse> teachCourseList = teachCourseDatasource.stream().filter(e -> basicCourseService.getById(e.getBasicCourseId()).getCode().equals(courseCode)).collect(Collectors.toList());
-            if (teachCourseList.size() > 1) {
-                throw ExceptionResultEnum.ERROR.exception("基础信息管理中[" + basicCourse.getName() + "]教学课程信息存在多条数据异常");
-            }
-            if (teachCourseList.size() == 0) {
-                // 没创建该教学课程
-                throw ExceptionResultEnum.ERROR.exception("请优先在基础信息管理中创建[" + basicCourse.getName() + "]的教学课程信息");
-            }
-            TeachCourse teachCourse = teachCourseList.get(0);
-            List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getBasicCourseId, teachCourse.getBasicCourseId()));
-            for (TeachClazz teachClazz : teachClazzList) {
-                TaskPrintClassDto dto = new TaskPrintClassDto();
-                dto.setClassId(String.valueOf(teachClazz.getId()));
-                dto.setTeachBasicEnum(TeachBasicEnum.TEACH_CLAZZ);
-                dto.setClassName(teachClazz.getTeachClazzName());
-                dto.setStudentCount(teachStudentService.count(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getTeachClazzId, teachClazz.getId())));
-                taskPrintClassDtos.add(dto);
-            }
-        } else {
-            List<BasicUserCourse> courseList = basicUserCourseService.listBySchoolIdAndCourseCode(schoolId, courseCode);
-            Set<String> stringList = courseList.stream().map(m -> String.valueOf(m.getClazzId())).collect(Collectors.toSet());
-
-            if (!CollectionUtils.isEmpty(stringList)) {
-                taskPrintClassDtos = basicStudentService.listByClass(schoolId, stringList);
-            }
-        }
+//        BasicCourse basicCourse = basicCourseService.findByCourseCode(courseCode, schoolId);
+//        // 1.判断教学表中是否有数据
+//        List<TeachCourse> teachCourseDatasource = teachCourseService.list(new QueryWrapper<TeachCourse>().lambda()
+//                .eq(TeachCourse::getSchoolId, schoolId)
+//                .eq(TeachCourse::getUserId, requestUser.getId()));
+//        if (teachCourseDatasource != null && teachCourseDatasource.size() > 0) {
+//            // 如果该用户创建了任意教学课程,则走教学课程查询逻辑
+//            List<TeachCourse> teachCourseList = teachCourseDatasource.stream().filter(e -> basicCourseService.getById(e.getBasicCourseId()).getCode().equals(courseCode)).collect(Collectors.toList());
+//            if (teachCourseList.size() > 1) {
+//                throw ExceptionResultEnum.ERROR.exception("基础信息管理中[" + basicCourse.getName() + "]教学课程信息存在多条数据异常");
+//            }
+//            if (teachCourseList.size() == 0) {
+//                // 没创建该教学课程
+//                throw ExceptionResultEnum.ERROR.exception("请优先在基础信息管理中创建[" + basicCourse.getName() + "]的教学课程信息");
+//            }
+//            TeachCourse teachCourse = teachCourseList.get(0);
+//            List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getBasicCourseId, teachCourse.getBasicCourseId()));
+//            for (TeachClazz teachClazz : teachClazzList) {
+//                TaskPrintClassDto dto = new TaskPrintClassDto();
+//                dto.setClassId(String.valueOf(teachClazz.getId()));
+//                dto.setTeachBasicEnum(TeachBasicEnum.TEACH_CLAZZ);
+//                dto.setClassName(teachClazz.getTeachClazzName());
+//                dto.setStudentCount(teachStudentService.count(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getTeachClazzId, teachClazz.getId())));
+//                taskPrintClassDtos.add(dto);
+//            }
+//        } else {
+//            List<BasicUserCourse> courseList = basicUserCourseService.listBySchoolIdAndCourseCode(schoolId, courseCode);
+//            Set<String> stringList = courseList.stream().map(m -> String.valueOf(m.getClazzId())).collect(Collectors.toSet());
+//
+//            if (!CollectionUtils.isEmpty(stringList)) {
+//                taskPrintClassDtos = basicStudentService.listByClass(schoolId, stringList);
+//            }
+//        }
         return taskPrintClassDtos;
     }
 

+ 95 - 95
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1686,101 +1686,101 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Long schoolId = requestUser.getSchoolId();
         Long userId = requestUser.getId();
         List<ExamTaskStudentObjectResult> result = new ArrayList<>();
-        switch (examObjectType) {
-            case TEACH_CLAZZ_STUDENT:
-                if (!SystemConstant.strNotNull(courseCode)) {
-                    throw ExceptionResultEnum.ERROR.exception("缺少考试课程编号");
-                }
-                BasicCourse basicCourse = basicCourseService.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode));
-                if (Objects.isNull(basicCourse)) {
-                    throw ExceptionResultEnum.ERROR.exception("找不到课程编号对应的课程");
-                }
-                Long basicCourseId = basicCourse.getId();
-                TeachCourse teachCourse = teachCourseService.getOne(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getSchoolId, schoolId).eq(TeachCourse::getBasicCourseId, basicCourseId).eq(TeachCourse::getUserId, userId));
-                if (Objects.nonNull(teachCourse)) {
-                    // 教学班对象
-                    List<TeachStudent> teachStudentDatasource = teachStudentService.list(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getSchoolId, schoolId).eq(TeachStudent::getUserId, userId).eq(TeachStudent::getBasicCourseId, teachCourse.getBasicCourseId()));
-
-                    // 教学班id集合
-                    List<Long> teachClazzIdList = teachStudentDatasource.stream().map(TeachStudent::getTeachClazzId).distinct().collect(Collectors.toList());
-                    for (Long teachClazzId : teachClazzIdList) {
-                        TeachClazz teachClazz = teachClazzService.getById(teachClazzId);
-                        if (Objects.isNull(teachClazz)) {
-                            throw ExceptionResultEnum.ERROR.exception("教学班数据异常");
-                        }
-                        List<TeachStudent> teachStudentList = teachStudentDatasource.stream().filter(e -> e.getTeachClazzId().equals(teachClazzId)).collect(Collectors.toList());
-
-                        // 获取学生信息数据
-                        List<StudentInfo> studentInfoList = teachStudentList.stream().flatMap(e -> {
-                            Long studentId = e.getStudentId();
-                            if (!SystemConstant.longNotNull(studentId)) {
-                                throw ExceptionResultEnum.ERROR.exception("教学学生数据异常");
-                            }
-                            BasicStudentResult basicStudentResult = basicStudentService.findById(studentId);
-                            if (Objects.isNull(basicStudentResult)) {
-                                throw ExceptionResultEnum.ERROR.exception("未找到对应的基础学生数据");
-                            }
-                            StudentInfo studentInfo = new StudentInfo();
-                            studentInfo.setStudentId(studentId);
-                            studentInfo.setStudentCode(basicStudentResult.getStudentCode());
-                            studentInfo.setStudentName(basicStudentResult.getStudentName());
-                            studentInfo.setCollegeName(basicStudentResult.getCollegeName());
-                            studentInfo.setMajorName(basicStudentResult.getMajorName());
-                            studentInfo.setTeachClazzId(teachClazzId);
-                            studentInfo.setTeachClazzName(teachClazz.getTeachClazzName());
-                            studentInfo.setBasicClazzId(basicStudentResult.getClazzId());
-                            studentInfo.setBasicClazzName(basicStudentResult.getClazz());
-                            return Stream.of(studentInfo);
-                        }).collect(Collectors.toList());
-
-                        ExamTaskStudentObjectResult examTaskStudentObjectResult = new ExamTaskStudentObjectResult();
-                        examTaskStudentObjectResult.setClazzId(teachClazzId);
-                        examTaskStudentObjectResult.setClazzName(teachClazz.getTeachClazzName());
-                        examTaskStudentObjectResult.setStudentInfoList(studentInfoList);
-                        examTaskStudentObjectResult.setStudentClazzType(examObjectType.getStudentClazzType());
-                        result.add(examTaskStudentObjectResult);
-                    }
-                }
-                break;
-            case BASIC_CLAZZ_STUDENT:
-                // 基础班级对象
-                List<BasicStudentResult> basicStudentResultList = basicStudentService.basicStudentList(schoolId, null, null, null, null);
-                if (!CollectionUtils.isEmpty(basicStudentResultList)) {
-                    LinkedMultiValueMap<Long, StudentInfo> studentInfoLinkedMultiValueMap = new LinkedMultiValueMap<>();
-                    Map<Long, ExamTaskStudentObjectResult> examTaskStudentObjectResultMap = new LinkedHashMap<>();
-                    for (BasicStudentResult e : basicStudentResultList) {
-                        // 没有班级的考生,不返回
-                        if (StringUtils.isBlank(e.getClazz())) {
-                            continue;
-                        }
-                        StudentInfo studentInfo = new StudentInfo();
-                        studentInfo.setStudentId(e.getId());
-                        studentInfo.setStudentCode(e.getStudentCode());
-                        studentInfo.setStudentName(e.getStudentName());
-                        studentInfo.setCollegeName(e.getCollegeName());
-                        studentInfo.setMajorName(e.getMajorName());
-                        studentInfo.setBasicClazzId(e.getClazzId());
-                        studentInfo.setBasicClazzName(e.getClazz());
-                        studentInfoLinkedMultiValueMap.add(e.getClazzId(), studentInfo);
-
-                        ExamTaskStudentObjectResult examTaskStudentObjectResult = null;
-                        if (!examTaskStudentObjectResultMap.containsKey(e.getClazzId())) {
-                            examTaskStudentObjectResult = new ExamTaskStudentObjectResult();
-                            examTaskStudentObjectResult.setClazzId(e.getClazzId());
-                            examTaskStudentObjectResult.setClazzName(e.getClazz());
-                            examTaskStudentObjectResult.setStudentClazzType(examObjectType.getStudentClazzType());
-                        } else {
-                            examTaskStudentObjectResult = examTaskStudentObjectResultMap.get(e.getClazzId());
-                        }
-                        examTaskStudentObjectResult.setStudentInfoList(studentInfoLinkedMultiValueMap.get(e.getClazzId()));
-                        examTaskStudentObjectResultMap.put(e.getClazzId(), examTaskStudentObjectResult);
-                    }
-                    result.addAll(examTaskStudentObjectResultMap.values());
-                }
-                break;
-            default:
-                break;
-        }
+//        switch (examObjectType) {
+//            case TEACH_CLAZZ_STUDENT:
+//                if (!SystemConstant.strNotNull(courseCode)) {
+//                    throw ExceptionResultEnum.ERROR.exception("缺少考试课程编号");
+//                }
+//                BasicCourse basicCourse = basicCourseService.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode));
+//                if (Objects.isNull(basicCourse)) {
+//                    throw ExceptionResultEnum.ERROR.exception("找不到课程编号对应的课程");
+//                }
+//                Long basicCourseId = basicCourse.getId();
+//                TeachCourse teachCourse = teachCourseService.getOne(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getSchoolId, schoolId).eq(TeachCourse::getBasicCourseId, basicCourseId).eq(TeachCourse::getUserId, userId));
+//                if (Objects.nonNull(teachCourse)) {
+//                    // 教学班对象
+//                    List<TeachStudent> teachStudentDatasource = teachStudentService.list(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getSchoolId, schoolId).eq(TeachStudent::getUserId, userId).eq(TeachStudent::getBasicCourseId, teachCourse.getBasicCourseId()));
+//
+//                    // 教学班id集合
+//                    List<Long> teachClazzIdList = teachStudentDatasource.stream().map(TeachStudent::getTeachClazzId).distinct().collect(Collectors.toList());
+//                    for (Long teachClazzId : teachClazzIdList) {
+//                        TeachClazz teachClazz = teachClazzService.getById(teachClazzId);
+//                        if (Objects.isNull(teachClazz)) {
+//                            throw ExceptionResultEnum.ERROR.exception("教学班数据异常");
+//                        }
+//                        List<TeachStudent> teachStudentList = teachStudentDatasource.stream().filter(e -> e.getTeachClazzId().equals(teachClazzId)).collect(Collectors.toList());
+//
+//                        // 获取学生信息数据
+//                        List<StudentInfo> studentInfoList = teachStudentList.stream().flatMap(e -> {
+//                            Long studentId = e.getStudentId();
+//                            if (!SystemConstant.longNotNull(studentId)) {
+//                                throw ExceptionResultEnum.ERROR.exception("教学学生数据异常");
+//                            }
+//                            BasicStudentResult basicStudentResult = basicStudentService.findById(studentId);
+//                            if (Objects.isNull(basicStudentResult)) {
+//                                throw ExceptionResultEnum.ERROR.exception("未找到对应的基础学生数据");
+//                            }
+//                            StudentInfo studentInfo = new StudentInfo();
+//                            studentInfo.setStudentId(studentId);
+//                            studentInfo.setStudentCode(basicStudentResult.getStudentCode());
+//                            studentInfo.setStudentName(basicStudentResult.getStudentName());
+//                            studentInfo.setCollegeName(basicStudentResult.getCollegeName());
+//                            studentInfo.setMajorName(basicStudentResult.getMajorName());
+//                            studentInfo.setTeachClazzId(teachClazzId);
+//                            studentInfo.setTeachClazzName(teachClazz.getTeachClazzName());
+//                            studentInfo.setBasicClazzId(basicStudentResult.getClazzId());
+//                            studentInfo.setBasicClazzName(basicStudentResult.getClazz());
+//                            return Stream.of(studentInfo);
+//                        }).collect(Collectors.toList());
+//
+//                        ExamTaskStudentObjectResult examTaskStudentObjectResult = new ExamTaskStudentObjectResult();
+//                        examTaskStudentObjectResult.setClazzId(teachClazzId);
+//                        examTaskStudentObjectResult.setClazzName(teachClazz.getTeachClazzName());
+//                        examTaskStudentObjectResult.setStudentInfoList(studentInfoList);
+//                        examTaskStudentObjectResult.setStudentClazzType(examObjectType.getStudentClazzType());
+//                        result.add(examTaskStudentObjectResult);
+//                    }
+//                }
+//                break;
+//            case BASIC_CLAZZ_STUDENT:
+//                // 基础班级对象
+//                List<BasicStudentResult> basicStudentResultList = basicStudentService.basicStudentList(schoolId, null, null, null, null);
+//                if (!CollectionUtils.isEmpty(basicStudentResultList)) {
+//                    LinkedMultiValueMap<Long, StudentInfo> studentInfoLinkedMultiValueMap = new LinkedMultiValueMap<>();
+//                    Map<Long, ExamTaskStudentObjectResult> examTaskStudentObjectResultMap = new LinkedHashMap<>();
+//                    for (BasicStudentResult e : basicStudentResultList) {
+//                        // 没有班级的考生,不返回
+//                        if (StringUtils.isBlank(e.getClazz())) {
+//                            continue;
+//                        }
+//                        StudentInfo studentInfo = new StudentInfo();
+//                        studentInfo.setStudentId(e.getId());
+//                        studentInfo.setStudentCode(e.getStudentCode());
+//                        studentInfo.setStudentName(e.getStudentName());
+//                        studentInfo.setCollegeName(e.getCollegeName());
+//                        studentInfo.setMajorName(e.getMajorName());
+//                        studentInfo.setBasicClazzId(e.getClazzId());
+//                        studentInfo.setBasicClazzName(e.getClazz());
+//                        studentInfoLinkedMultiValueMap.add(e.getClazzId(), studentInfo);
+//
+//                        ExamTaskStudentObjectResult examTaskStudentObjectResult = null;
+//                        if (!examTaskStudentObjectResultMap.containsKey(e.getClazzId())) {
+//                            examTaskStudentObjectResult = new ExamTaskStudentObjectResult();
+//                            examTaskStudentObjectResult.setClazzId(e.getClazzId());
+//                            examTaskStudentObjectResult.setClazzName(e.getClazz());
+//                            examTaskStudentObjectResult.setStudentClazzType(examObjectType.getStudentClazzType());
+//                        } else {
+//                            examTaskStudentObjectResult = examTaskStudentObjectResultMap.get(e.getClazzId());
+//                        }
+//                        examTaskStudentObjectResult.setStudentInfoList(studentInfoLinkedMultiValueMap.get(e.getClazzId()));
+//                        examTaskStudentObjectResultMap.put(e.getClazzId(), examTaskStudentObjectResult);
+//                    }
+//                    result.addAll(examTaskStudentObjectResultMap.values());
+//                }
+//                break;
+//            default:
+//                break;
+//        }
         return result;
     }
 

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

@@ -1466,7 +1466,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             // 教学班模式 教学班数据
             if (Objects.nonNull(teachClazz)) {
                 examStudent.setTeachClazzId(teachClazz.getId());
-                examStudent.setTeachClazzName(teachClazz.getTeachClazzName());
+                examStudent.setTeachClazzName(teachClazz.getClazzName());
             }
             examStudent.setStudentClazzType(studentClazzType);
             examStudentList.add(examStudent);

+ 64 - 68
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java

@@ -1,27 +1,27 @@
 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.TeachClazzParams;
 import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.TeachClazzResult;
+import com.qmth.distributed.print.business.entity.BasicTeachClazz;
 import com.qmth.distributed.print.business.entity.TeachClazz;
 import com.qmth.distributed.print.business.entity.TeachCourse;
 import com.qmth.distributed.print.business.entity.TeachStudent;
 import com.qmth.distributed.print.business.mapper.TeachClazzMapper;
+import com.qmth.distributed.print.business.service.BasicTeachClazzService;
 import com.qmth.distributed.print.business.service.TeachClazzService;
 import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.distributed.print.business.service.TeachStudentService;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -38,24 +38,46 @@ import java.util.stream.Collectors;
  */
 @Service
 public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachClazz> implements TeachClazzService {
+
     @Resource
     private TeachStudentService teachStudentService;
+
     @Resource
     private TeachCourseService teachCourseService;
+
     @Resource
-    private BasicCourseService basicCourseService;
+    private BasicTeachClazzService basicTeachClazzService;
 
     @Override
-    public IPage<TeachClazzResult> teachClazzPage(Long basicCourseId, String teachClazzName, int pageNumber, int pageSize) {
-        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+    public IPage<TeachClazzResult> teachClazzPage(Long examId, String courseCode, String teachClazzName, int pageNumber,
+            int pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long userId = sysUser.getId();
+        TeachCourse teachCourse = teachCourseService.findByExamIdCourseCodeAndUserId(examId, courseCode, userId);
+        Long teachCourseId = teachCourse.getId();
+
         teachClazzName = SystemConstant.translateSpecificSign(teachClazzName);
-        IPage<TeachClazzResult> resultIPage = this.baseMapper.findTeachClazzPage(new Page<>(pageNumber, pageSize), basicCourseId, teachClazzName, schoolId, sysUser.getId());
+        IPage<TeachClazzResult> resultIPage;
+
+        IPage<TeachClazzResult> selfPage = this.baseMapper.findTeachClazzPage(new Page<>(pageNumber, pageSize),
+                teachCourseId, teachClazzName);
+        if (CollectionUtils.isEmpty(selfPage.getRecords())) {
+            // 查询该教学课程下所有教学班
+            TeachCourse leaderTeachCourse = teachCourseService.findByExamIdCourseCodeAndUserId(examId, courseCode,
+                    teachCourse.getCreateId());
+            Long leaderTeachCourseId = leaderTeachCourse.getId();
+            resultIPage = this.baseMapper.findTeachClazzPage(new Page<>(pageNumber, pageSize), leaderTeachCourseId,
+                    teachClazzName);
+        } else {
+            resultIPage = selfPage;
+        }
+
         List<TeachClazzResult> teachClazzResultList = resultIPage.getRecords();
 
         for (TeachClazzResult teachClazzResult : teachClazzResultList) {
             Long id = teachClazzResult.getId();
-            int count = teachStudentService.count(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getTeachClazzId, id));
+            int count = teachStudentService.count(
+                    new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getTeachClazzId, id));
             teachClazzResult.setTeachStudentCount(count);
         }
         return resultIPage;
@@ -63,85 +85,59 @@ public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachCla
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Boolean editTeachClazz(TeachClazzParams teachClazzParams, SysUser requestUser) {
-        Long id = teachClazzParams.getId();
-        Long basicCourseId = teachClazzParams.getBasicCourseId();
-        String teachClazzName = teachClazzParams.getTeachClazzName();
-        boolean result;
-
-        if (SystemConstant.isOneNull(teachClazzName, basicCourseId)) {
-            throw ExceptionResultEnum.ERROR.exception("参数异常");
-        }
-        BasicCourse basicCourse = basicCourseService.getById(basicCourseId);
-        if (Objects.isNull(basicCourse)) {
-            throw ExceptionResultEnum.ERROR.exception("未找到课程");
-        }
-        String courseName = basicCourse.getName();
-
-        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
-        TeachClazz check = this.getOne(new QueryWrapper<TeachClazz>()
-                .lambda()
-                .eq(TeachClazz::getSchoolId, schoolId)
-                .eq(TeachClazz::getBasicCourseId,basicCourse.getId())
-                .eq(TeachClazz::getTeachClazzName, teachClazzName));
-
-        if (Objects.nonNull(check) && !check.getId().equals(id)) {
-            throw ExceptionResultEnum.ERROR.exception("课程【" + courseName
-                    + "】中已存在班级名称为【" + check.getTeachClazzName() + "】的班级");
-        }
+    public void selectTeachClazz(TeachClazzParams teachClazzParams, SysUser requestUser) {
+        Long teachCourseId = teachClazzParams.getTeachCourseId();
+        List<Long> dbIdList = this.list(
+                new QueryWrapper<TeachClazz>().lambda().eq(TeachClazz::getTeachCourseId, teachCourseId)).stream().map(TeachClazz::getBasicTeachClazzId).collect(Collectors.toList());
+
+        List<TeachClazz> teachClazzList = new ArrayList<>();
+        List<Long> idList = teachClazzParams.getIdList().stream().filter(e -> !dbIdList.contains(e)).collect(Collectors.toList());
+        for (Long basicTeachClazzId : idList) {
+            BasicTeachClazz basicTeachClazz = basicTeachClazzService.getById(basicTeachClazzId);
+            if (Objects.isNull(basicTeachClazz)) {
+                throw ExceptionResultEnum.ERROR.exception("教学课程字典不存在");
+            }
 
-        if (SystemConstant.longNotNull(id)) {
-            // 重命名课程
-            result = this.update(new UpdateWrapper<TeachClazz>().lambda().eq(TeachClazz::getId, id).set(TeachClazz::getTeachClazzName, teachClazzName));
-        } else {
             TeachClazz teachClazz = new TeachClazz();
-            teachClazz.setSchoolId(schoolId);
-            teachClazz.setTeachClazzName(teachClazzName);
+            teachClazz.setSchoolId(basicTeachClazz.getSchoolId());
+            teachClazz.setTeachCourseId(teachCourseId);
+            teachClazz.setBasicTeachClazzId(basicTeachClazzId);
             teachClazz.setUserId(requestUser.getId());
-            teachClazz.setBasicCourseId(basicCourseId);
+            teachClazz.setClazzName(basicTeachClazz.getClazzName());
             teachClazz.insertInfo(requestUser.getId());
-            result = this.save(teachClazz);
+            teachClazzList.add(teachClazz);
         }
-        return result;
+        this.saveBatch(teachClazzList);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean deleteTeachClazzBatch(List<Long> idList) {
         // 删除班级时、同步删除学生
-        List<TeachStudent> teachStudentList = teachStudentService.list(new QueryWrapper<TeachStudent>().lambda().in(TeachStudent::getTeachClazzId, idList));
+        List<TeachStudent> teachStudentList = teachStudentService.list(
+                new QueryWrapper<TeachStudent>().lambda().in(TeachStudent::getTeachClazzId, idList));
         // 删除教学学生
-        teachStudentService.deleteTeachStudentBatch(teachStudentList.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList()));
+        teachStudentService.deleteTeachStudentBatch(
+                teachStudentList.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList()));
         return this.removeByIds(idList);
     }
 
     @Override
     public List<DictionaryResult> findTeachCourseByUserId(Long userId) {
         Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
-        List<TeachCourse> teachCourseList = teachCourseService.list(new QueryWrapper<TeachCourse>().lambda()
-                .eq(TeachCourse::getUserId, userId)
-                .eq(TeachCourse::getSchoolId, schoolId)
-                .orderByDesc(TeachCourse::getCreateTime));
+        List<TeachCourse> teachCourseList = teachCourseService.list(
+                new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getUserId, userId).eq(TeachCourse::getSchoolId, schoolId).orderByDesc(TeachCourse::getCreateTime));
         List<DictionaryResult> dictionaryResultList = new ArrayList<>();
-        for (TeachCourse teachCourse : teachCourseList) {
-            BasicCourse basicCourse = basicCourseService.getById(teachCourse.getBasicCourseId());
-            if (basicCourse.getEnable()) {
-                DictionaryResult dictionaryResult = new DictionaryResult();
-                dictionaryResult.setId(teachCourse.getId());
-                dictionaryResult.setCode(basicCourse.getCode());
-                dictionaryResult.setName(basicCourse.getName());
-                dictionaryResultList.add(dictionaryResult);
-            }
-        }
+        //        for (TeachCourse teachCourse : teachCourseList) {
+        //            BasicCourse basicCourse = basicCourseService.getById(teachCourse.getBasicCourseId());
+        //            if (basicCourse.getEnable()) {
+        //                DictionaryResult dictionaryResult = new DictionaryResult();
+        //                dictionaryResult.setId(teachCourse.getId());
+        //                dictionaryResult.setCode(basicCourse.getCode());
+        //                dictionaryResult.setName(basicCourse.getName());
+        //                dictionaryResultList.add(dictionaryResult);
+        //            }
+        //        }
         return dictionaryResultList;
     }
-
-    @Override
-    public List<TeachClazz> listByBasicCourseIdAndUserId(Long schoolId, Long basicCourseId, Long userId) {
-        QueryWrapper<TeachClazz> teachClazzQueryWrapper = new QueryWrapper<>();
-        teachClazzQueryWrapper.lambda().eq(TeachClazz::getSchoolId, schoolId)
-                .eq(TeachClazz::getBasicCourseId, basicCourseId)
-                .eq(TeachClazz::getUserId, userId);
-        return this.list(teachClazzQueryWrapper);
-    }
 }

+ 195 - 150
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java

@@ -6,9 +6,9 @@ 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.google.common.collect.Lists;
-import com.qmth.distributed.print.business.bean.dto.excel.TeachCourseDto;
 import com.qmth.distributed.print.business.bean.dto.excel.TeacherTeamDto;
 import com.qmth.distributed.print.business.bean.params.TeachCourseParams;
+import com.qmth.distributed.print.business.bean.params.TeachCourseSelectParam;
 import com.qmth.distributed.print.business.bean.params.TeacherTeamParam;
 import com.qmth.distributed.print.business.bean.result.CourseWeightSettingStatusResult;
 import com.qmth.distributed.print.business.bean.result.DictionaryResult;
@@ -18,7 +18,6 @@ import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;
 import com.qmth.distributed.print.business.mapper.TeachCourseMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.base.BaseEntity;
-import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.result.TeacherSelectResult;
 import com.qmth.teachcloud.common.bean.result.TeacherTeamResult;
@@ -87,118 +86,118 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     private CourseDimensionService courseDimensionService;
 
     @Override
-    public IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId) {
-        if (!SystemConstant.longNotNull(userId)) {
-            throw ExceptionResultEnum.ERROR.exception("请先登录");
-        }
-        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+    public IPage<TeachCourseResult> teachCoursePage(Long examId, String courseName, int pageNumber, int pageSize, Long userId) {
         courseName = SystemConstant.translateSpecificSign(courseName);
-        return this.baseMapper.findTeachCoursePage(new Page<>(pageNumber, pageSize), courseName, userId, schoolId);
+        return this.baseMapper.findTeachCoursePage(new Page<>(pageNumber, pageSize), examId, courseName, userId);
     }
 
+    @Deprecated
     @Transactional
     @Override
     public Boolean manualCreate(TeachCourseParams teachCourseParams, SysUser requestUser) {
-        String courseCode = teachCourseParams.getCourseCode();
-        String courseName = teachCourseParams.getCourseName();
-        Long schoolId = requestUser.getSchoolId();
-        Long userId = requestUser.getId();
-        Long basicCourseId;
-
-        // 校验
-        BasicCourse basicCourse = basicCourseService.getOne(
-                new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode));
-        if (Objects.nonNull(basicCourse)) {
-            // 根据课程编号查询存在课程判断名称是否一致
-            if (!courseName.equals(basicCourse.getName())) {
-                throw ExceptionResultEnum.ERROR.exception("课程编号[" + courseCode + "]的课程名称错误");
-            } else {
-                basicCourseId = basicCourse.getId();
-                // 判断重复教学课程
-                if (this.count(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getSchoolId, schoolId)
-                        .eq(TeachCourse::getUserId, userId).eq(TeachCourse::getBasicCourseId, basicCourseId)) > 0) {
-                    throw ExceptionResultEnum.ERROR.exception("课程[" + courseName + "]已经创建");
-                }
-            }
-        } else {
-            // 不存在课程,直接新增一个课程!
-            BasicCourseParams basicCourseParams = new BasicCourseParams();
-            basicCourseParams.setCourseCode(courseCode);
-            basicCourseParams.setCourseName(courseName);
-            basicCourseParams.setTeachingRoomId(requestUser.getOrgId());
-            basicCourseId = basicCourseService.saveBasicCourse(basicCourseParams, requestUser);
-        }
-        TeachCourse teachCourse = new TeachCourse();
-        teachCourse.setSchoolId(schoolId);
-        teachCourse.setBasicCourseId(basicCourseId);
-        teachCourse.setUserId(userId);
-        teachCourse.setEnable(true);
-        teachCourse.insertInfo(userId);
-        return this.save(teachCourse);
+        throw ExceptionResultEnum.ERROR.exception("废弃的方法");
+        //        String courseCode = teachCourseParams.getCourseCode();
+        //        String courseName = teachCourseParams.getCourseName();
+        //        Long schoolId = requestUser.getSchoolId();
+        //        Long userId = requestUser.getId();
+        //        Long basicCourseId;
+        //
+        //        // 校验
+        //        BasicCourse basicCourse = basicCourseService.getOne(
+        //                new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode));
+        //        if (Objects.nonNull(basicCourse)) {
+        //            // 根据课程编号查询存在课程判断名称是否一致
+        //            if (!courseName.equals(basicCourse.getName())) {
+        //                throw ExceptionResultEnum.ERROR.exception("课程编号[" + courseCode + "]的课程名称错误");
+        //            } else {
+        //                basicCourseId = basicCourse.getId();
+        //                // 判断重复教学课程
+        //                if (this.count(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getSchoolId, schoolId)
+        //                        .eq(TeachCourse::getUserId, userId).eq(TeachCourse::getBasicCourseId, basicCourseId)) > 0) {
+        //                    throw ExceptionResultEnum.ERROR.exception("课程[" + courseName + "]已经创建");
+        //                }
+        //            }
+        //        } else {
+        //            // 不存在课程,直接新增一个课程!
+        //            BasicCourseParams basicCourseParams = new BasicCourseParams();
+        //            basicCourseParams.setCourseCode(courseCode);
+        //            basicCourseParams.setCourseName(courseName);
+        //            basicCourseParams.setTeachingRoomId(requestUser.getOrgId());
+        //            basicCourseId = basicCourseService.saveBasicCourse(basicCourseParams, requestUser);
+        //        }
+        //        TeachCourse teachCourse = new TeachCourse();
+        //        teachCourse.setSchoolId(schoolId);
+        //        teachCourse.setBasicCourseId(basicCourseId);
+        //        teachCourse.setUserId(userId);
+        //        teachCourse.setEnable(true);
+        //        teachCourse.insertInfo(userId);
+        //        return this.save(teachCourse);
     }
 
     @Transactional
     @Override
-    public void selectCreate(List<Long> basicCourseIdList, SysUser requestUser) {
-        // TODO: 2024/3/4 选择课程改造 传一个list课程对象 创建时还有加默认的评价方式
+    public void selectCreate(TeachCourseSelectParam teachCourseSelectParam, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         Long userId = requestUser.getId();
-        if (CollectionUtils.isNotEmpty(basicCourseIdList)) {
-            basicCourseIdList = basicCourseService.listByIds(basicCourseIdList).stream().filter(BasicCourse::getEnable)
-                    .map(BaseEntity::getId).distinct().collect(Collectors.toList());
-
-            if (CollectionUtils.isNotEmpty(basicCourseIdList)) {
-                List<Long> alreadyCreated = this.list(
-                                new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getUserId, userId).in(TeachCourse::getBasicCourseId, basicCourseIdList)).stream()
-                        .map(TeachCourse::getBasicCourseId).distinct().collect(Collectors.toList());
-
-                // 去掉已经创建的教学课程
-                basicCourseIdList.removeAll(alreadyCreated);
-                // 创建教学课程
-                List<TeachCourse> teachCourseList = basicCourseIdList.stream().flatMap(e -> {
-                    TeachCourse teachCourse = new TeachCourse();
-                    teachCourse.setSchoolId(schoolId);
-                    teachCourse.setBasicCourseId(e);
-                    teachCourse.setUserId(userId);
-                    teachCourse.setEnable(true);
-                    teachCourse.insertInfo(userId);
-                    return Stream.of(teachCourse);
-                }).collect(Collectors.toList());
-
-                // 新增课程
-                this.saveBatch(teachCourseList);
+        Long examId = teachCourseSelectParam.getExamId();
+        List<String> courseCodeList = teachCourseSelectParam.getCourseCodeList();
+
+        if (CollectionUtils.isNotEmpty(courseCodeList)) {
+            List<String> occupiedCourseCodeList = this.list(
+                            new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getExamId, examId).eq(TeachCourse::getUserId, userId)).stream().map(TeachCourse::getCourseCode)
+                    .collect(Collectors.toList());
+
+            courseCodeList = courseCodeList.stream().filter(occupiedCourseCodeList::contains).collect(Collectors.toList());
+
+            TeachCourse tmp = new TeachCourse();
+            tmp.setSchoolId(schoolId);
+            tmp.setExamId(examId);
+            tmp.setUserId(userId);
+            tmp.setEnable(true);
+            tmp.setWeightSetting(false);
+
+            for (String courseCode : courseCodeList) {
+                TeachCourse cell = new TeachCourse();
+                BeanUtils.copyProperties(tmp, cell);
+                cell.insertInfo(userId);
+                this.save(cell);
+
+                // 创建默认评价方式
+                courseEvaluationService.createDefaultCourseEvaluation(examId, courseCode, userId);
             }
         }
     }
 
+    @Deprecated
     @Transactional
     @Override
-    public void importTeachCourse(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException {
-        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeachCourseDto.class),
-                (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
-                    if (finalExcelErrorList.size() > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
-                    }
-                    return finalExcelList;
-                }, 2);
-
-        if (Objects.nonNull(finalList) && finalList.size() > 0) {
-            for (int i = 0; i < finalList.size(); i++) {
-                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
-                List<Object> teachCourseImportDtoList = map.get(i);
-                for (int y = 0; y < Objects.requireNonNull(teachCourseImportDtoList).size(); y++) {
-                    if (teachCourseImportDtoList.get(y) instanceof TeachCourseDto) {
-                        TeachCourseDto teachCourseDto = (TeachCourseDto) teachCourseImportDtoList.get(y);
-                        String courseCode = teachCourseDto.getCourseCode();
-                        String courseName = teachCourseDto.getCourseName();
-                        TeachCourseParams teachCourseParams = new TeachCourseParams();
-                        teachCourseParams.setCourseCode(courseCode);
-                        teachCourseParams.setCourseName(courseName);
-                        this.manualCreate(teachCourseParams, requestUser);
-                    }
-                }
-            }
-        }
+    public void importTeachCourse(MultipartFile file, SysUser requestUser) {
+        throw ExceptionResultEnum.ERROR.exception("废弃的方法");
+        //        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeachCourseDto.class),
+        //                (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+        //                    if (finalExcelErrorList.size() > 0) {
+        //                        throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
+        //                    }
+        //                    return finalExcelList;
+        //                }, 2);
+        //
+        //        if (Objects.nonNull(finalList) && finalList.size() > 0) {
+        //            for (int i = 0; i < finalList.size(); i++) {
+        //                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
+        //                List<Object> teachCourseImportDtoList = map.get(i);
+        //                for (int y = 0; y < Objects.requireNonNull(teachCourseImportDtoList).size(); y++) {
+        //                    if (teachCourseImportDtoList.get(y) instanceof TeachCourseDto) {
+        //                        TeachCourseDto teachCourseDto = (TeachCourseDto) teachCourseImportDtoList.get(y);
+        //                        String courseCode = teachCourseDto.getCourseCode();
+        //                        String courseName = teachCourseDto.getCourseName();
+        //                        TeachCourseParams teachCourseParams = new TeachCourseParams();
+        //                        teachCourseParams.setCourseCode(courseCode);
+        //                        teachCourseParams.setCourseName(courseName);
+        //                        this.manualCreate(teachCourseParams, requestUser);
+        //                    }
+        //                }
+        //            }
+        //        }
     }
 
     @Override
@@ -224,17 +223,46 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void deleteTeachCourseBatch(List<Long> idList) {
-        // 删除课程时,同步删除班级、学生、教师
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long userId = requestUser.getId();
         List<TeachCourse> teachCourseList = this.listByIds(idList);
-        for (TeachCourse teachCourse : teachCourseList) {
-            List<TeachClazz> teachClazzList = teachClazzService.listByBasicCourseIdAndUserId(teachCourse.getSchoolId(),
-                    teachCourse.getBasicCourseId(), teachCourse.getUserId());
-            if (CollectionUtils.isNotEmpty(teachClazzList)) {
-                List<Long> teachClazzIds = teachClazzList.stream().map(TeachClazz::getId).collect(Collectors.toList());
-                teachClazzService.deleteTeachClazzBatch(teachClazzIds);
+        List<String> cantDeleteCourseCodeList = teachCourseList.stream().filter(e -> !e.getCreateId().equals(userId)).map(TeachCourse::getCourseCode).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(cantDeleteCourseCodeList)) {
+            throw ExceptionResultEnum.ERROR.exception(
+                    String.format("[%s]课程非本人创建,无法删除", String.join(",", cantDeleteCourseCodeList)));
+        }
+        List<TeachCourse> mainTeachCourseList = teachCourseList.stream().filter(e -> e.getCreateId().equals(userId)).collect(Collectors.toList());
+        if (mainTeachCourseList.size() > 0) {
+            for (TeachCourse mainTeachCourse : mainTeachCourseList) {
+                List<TeachCourse> teamList = this.list(
+                        new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getExamId, mainTeachCourse.getExamId())
+                                .eq(TeachCourse::getCourseCode, mainTeachCourse.getCourseCode())
+                                .eq(TeachCourse::getCreateId, userId).ne(TeachCourse::getUserId, userId));
+                if (CollectionUtils.isNotEmpty(teamList)) {
+                    throw ExceptionResultEnum.ERROR.exception(
+                            String.format("请先删除课程(编号)[%s]下的教师团队,再删除课程", mainTeachCourse.getCourseCode()));
+                }
             }
         }
-        this.removeByIds(idList);
+
+        for (Long teachCourseId : idList) {
+            // 删除知识点
+            courseDimensionService.remove(
+                    new QueryWrapper<CourseDimension>().lambda().eq(CourseDimension::getTeachCourseId, teachCourseId));
+            // 删除课程目标
+            courseTargetService.remove(
+                    new QueryWrapper<CourseTarget>().lambda().eq(CourseTarget::getTeachCourseId, teachCourseId));
+            // 删除课程评价方式
+            courseEvaluationService.remove(new QueryWrapper<CourseEvaluation>().lambda()
+                    .eq(CourseEvaluation::getTeachCourseId, teachCourseId));
+            // 删除权重设置
+            courseWeightService.remove(
+                    new QueryWrapper<CourseWeight>().lambda().eq(CourseWeight::getTeachCourseId, teachCourseId));
+            // 删除教学课程
+            this.removeById(teachCourseId);
+
+            // TODO: 2024/3/6 可能还要删除教学班学生等 
+        }
     }
 
     @Transactional
@@ -242,7 +270,8 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     public void manualCreateTeacher(TeacherTeamParam teacherTeamParam, SysUser requestUser) throws IllegalAccessException {
         String name = teacherTeamParam.getTeacherName();
         String code = teacherTeamParam.getTeacherCode();
-        Long basicCourseId = teacherTeamParam.getBasicCourseId();
+        Long examId = teacherTeamParam.getExamId();
+        String courseCode = teacherTeamParam.getCourseCode();
         Long requestUserId = requestUser.getId();
         Long schoolId = requestUser.getSchoolId();
         Long teacherId;
@@ -256,8 +285,8 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
             } else {
                 teacherId = dbUser.getId();
                 // 判断在该教师团队下已经存在该教师
-                if (this.count(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getSchoolId, schoolId)
-                        .eq(TeachCourse::getBasicCourseId, basicCourseId).eq(TeachCourse::getUserId, teacherId)) > 0) {
+                if (this.count(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getExamId, examId)
+                        .eq(TeachCourse::getCourseCode, courseCode).eq(TeachCourse::getUserId, teacherId)) > 0) {
                     throw ExceptionResultEnum.ERROR.exception("教师[" + name + "]已经在教师团队中");
                 }
             }
@@ -283,16 +312,21 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
         // 添加教师团队
         TeachCourse teachCourse = new TeachCourse();
         teachCourse.setSchoolId(schoolId);
-        teachCourse.setBasicCourseId(basicCourseId);
+        teachCourse.setExamId(examId);
+        teachCourse.setCourseCode(courseCode);
+        teachCourse.setWeightSetting(false);
         teachCourse.setUserId(teacherId);
         teachCourse.setEnable(true);
         teachCourse.insertInfo(requestUserId);
         this.save(teachCourse);
+
+        // 创建默认的评价方式
+        courseEvaluationService.createDefaultCourseEvaluation(examId, courseCode, teacherId);
     }
 
     @Transactional
     @Override
-    public void selectCreateTeacher(Long basicCourseId, List<Long> userIdList, SysUser requestUser) {
+    public void selectCreateTeacher(Long examId, String courseCode, List<Long> userIdList, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         Long requestUserId = requestUser.getId();
         if (CollectionUtils.isNotEmpty(userIdList)) {
@@ -302,7 +336,8 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
 
             if (CollectionUtils.isNotEmpty(userIdList)) {
                 List<Long> alreadyCreated = this.list(
-                                new QueryWrapper<TeachCourse>().lambda().in(TeachCourse::getUserId, userIdList).eq(TeachCourse::getBasicCourseId, basicCourseId)).stream().map(TeachCourse::getUserId)
+                                new QueryWrapper<TeachCourse>().lambda().in(TeachCourse::getUserId, userIdList)
+                                        .eq(TeachCourse::getCourseCode, courseCode)).stream().map(TeachCourse::getUserId)
                         .distinct().collect(Collectors.toList());
 
                 // 去掉已经在该课程教师团队的老师
@@ -312,7 +347,9 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
                 List<TeachCourse> teachCourseList = userIdList.stream().flatMap(e -> {
                     TeachCourse teachCourse = new TeachCourse();
                     teachCourse.setSchoolId(schoolId);
-                    teachCourse.setBasicCourseId(basicCourseId);
+                    teachCourse.setExamId(examId);
+                    teachCourse.setCourseCode(courseCode);
+                    teachCourse.setWeightSetting(false);
                     teachCourse.setUserId(e);
                     teachCourse.setEnable(true);
                     teachCourse.insertInfo(requestUserId);
@@ -321,47 +358,55 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
 
                 // 新增课程
                 this.saveBatch(teachCourseList);
+
+                for (Long userId : userIdList) {
+                    // 创建默认评价方式
+                    courseEvaluationService.createDefaultCourseEvaluation(examId, courseCode, userId);
+                }
             }
         }
     }
 
+    @Deprecated
     @Transactional
     @Override
     public void importTeacherTeam(MultipartFile file, Long basicCourseId, SysUser requestUser) throws IOException, NoSuchFieldException, IllegalAccessException {
-        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeacherTeamDto.class),
-                (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
-                    if (finalExcelErrorList.size() > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
-                    }
-                    return finalExcelList;
-                }, 2);
-
-        if (Objects.nonNull(finalList) && finalList.size() > 0) {
-            for (int i = 0; i < finalList.size(); i++) {
-                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
-                List<Object> teacherTeamImportList = map.get(i);
-                for (int y = 0; y < Objects.requireNonNull(teacherTeamImportList).size(); y++) {
-                    if (teacherTeamImportList.get(y) instanceof TeacherTeamDto) {
-                        TeacherTeamDto teacherTeamDto = (TeacherTeamDto) teacherTeamImportList.get(y);
-                        TeacherTeamParam teacherTeamParam = new TeacherTeamParam();
-                        teacherTeamParam.setTeacherCode(teacherTeamDto.getCode());
-                        teacherTeamParam.setTeacherName(teacherTeamDto.getName());
-                        teacherTeamParam.setBasicCourseId(basicCourseId);
-                        this.manualCreateTeacher(teacherTeamParam, requestUser);
-                    }
-                }
-            }
-        }
+        throw ExceptionResultEnum.ERROR.exception("废弃的方法");
+        //        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeacherTeamDto.class),
+        //                (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+        //                    if (finalExcelErrorList.size() > 0) {
+        //                        throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
+        //                    }
+        //                    return finalExcelList;
+        //                }, 2);
+        //
+        //        if (Objects.nonNull(finalList) && finalList.size() > 0) {
+        //            for (int i = 0; i < finalList.size(); i++) {
+        //                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
+        //                List<Object> teacherTeamImportList = map.get(i);
+        //                for (int y = 0; y < Objects.requireNonNull(teacherTeamImportList).size(); y++) {
+        //                    if (teacherTeamImportList.get(y) instanceof TeacherTeamDto) {
+        //                        TeacherTeamDto teacherTeamDto = (TeacherTeamDto) teacherTeamImportList.get(y);
+        //                        TeacherTeamParam teacherTeamParam = new TeacherTeamParam();
+        //                        teacherTeamParam.setTeacherCode(teacherTeamDto.getCode());
+        //                        teacherTeamParam.setTeacherName(teacherTeamDto.getName());
+        //                        teacherTeamParam.setBasicCourseId(basicCourseId);
+        //                        this.manualCreateTeacher(teacherTeamParam, requestUser);
+        //                    }
+        //                }
+        //            }
+        //        }
     }
 
     @Override
-    public IPage<TeacherTeamResult> findTeacherTeamPage(String userInfo, Long basicCourseId, int pageNumber, int pageSize) {
+    public IPage<TeacherTeamResult> findTeacherTeamPage(Long examId, String courseCode, String userInfo, int pageNumber,
+            int pageSize) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         if (SystemConstant.strNotNull(userInfo)) {
             userInfo = SystemConstant.translateSpecificSign(userInfo);
         }
-        IPage<TeacherTeamResult> page = this.baseMapper.findTeacherTeamPage(new Page<>(pageNumber, pageSize), userInfo,
-                basicCourseId, schoolId);
+        IPage<TeacherTeamResult> page = this.baseMapper.findTeacherTeamPage(new Page<>(pageNumber, pageSize), examId,
+                courseCode, userInfo);
         page.getRecords().forEach(e -> {
             Long userId = e.getUserId();
             List<Long> userIdList = new ArrayList<>();
@@ -396,18 +441,18 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     @Override
     @Transactional
     public void updateByCourseIdAndTeacherList(Long basicCourseId, Set<Long> teachIdSet) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        List<TeachCourse> teachCourseList = null;
-        // 删除原有的全部
-        this.remove(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getBasicCourseId, basicCourseId).gt(TeachCourse::getId, 0));
-        // 新增
-        if (!CollectionUtils.isEmpty(teachIdSet)) {
-            teachCourseList = new ArrayList<>();
-            for (Long teachId : teachIdSet) {
-                teachCourseList.add(new TeachCourse(sysUser, basicCourseId, teachId));
-            }
-            this.saveBatch(teachCourseList);
-        }
+        //        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        //        List<TeachCourse> teachCourseList = null;
+        //        // 删除原有的全部
+        //        this.remove(new QueryWrapper<TeachCourse>().lambda().eq(TeachCourse::getBasicCourseId, basicCourseId).gt(TeachCourse::getId, 0));
+        //        // 新增
+        //        if (!CollectionUtils.isEmpty(teachIdSet)) {
+        //            teachCourseList = new ArrayList<>();
+        //            for (Long teachId : teachIdSet) {
+        //                teachCourseList.add(new TeachCourse(sysUser, basicCourseId, teachId));
+        //            }
+        //            this.saveBatch(teachCourseList);
+        //        }
     }
 
     @Override

+ 101 - 101
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachStudentServiceImpl.java

@@ -1,35 +1,32 @@
 package com.qmth.distributed.print.business.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.google.common.collect.Lists;
-import com.qmth.distributed.print.business.bean.dto.excel.TeachStudentImportDto;
+import com.qmth.distributed.print.business.bean.params.TeachStudentBatchParam;
 import com.qmth.distributed.print.business.bean.result.TeachStudentResult;
+import com.qmth.distributed.print.business.entity.BasicExamStudent;
 import com.qmth.distributed.print.business.entity.TeachClazz;
 import com.qmth.distributed.print.business.entity.TeachStudent;
 import com.qmth.distributed.print.business.mapper.TeachStudentMapper;
+import com.qmth.distributed.print.business.service.BasicExamStudentService;
 import com.qmth.distributed.print.business.service.TeachClazzService;
 import com.qmth.distributed.print.business.service.TeachStudentService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-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.BasicStudentService;
-import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * @Description: 教学学生服务实现类
@@ -38,8 +35,10 @@ import java.util.stream.Collectors;
  */
 @Service
 public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, TeachStudent> implements TeachStudentService {
+
     @Resource
-    private BasicStudentService basicStudentService;
+    private BasicExamStudentService basicExamStudentService;
+
     @Resource
     private TeachClazzService teachClazzService;
 
@@ -47,107 +46,112 @@ public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, Tea
     public IPage<TeachStudentResult> teachStudentPage(Long teachClazzId, String studentInfo, int pageNumber, int pageSize) {
         studentInfo = SystemConstant.translateSpecificSign(studentInfo);
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
-        return this.baseMapper.findTeachStudentPage(new Page<>(pageNumber, pageSize), teachClazzId, studentInfo, schoolId);
+        return this.baseMapper.findTeachStudentPage(new Page<>(pageNumber, pageSize), teachClazzId, studentInfo,
+                schoolId);
     }
 
+    @Deprecated
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean createTeachStudent(String studentName, String studentCode, Long teachClazzId, SysUser requestUser) {
-        if (SystemConstant.isOneNull(studentName, studentCode, teachClazzId)) {
-            throw ExceptionResultEnum.ERROR.exception("参数不完整");
-        }
-        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
-        BasicStudent basicStudent = basicStudentService.getOne(new QueryWrapper<BasicStudent>()
-                .lambda()
-                .eq(BasicStudent::getSchoolId, schoolId)
-                .eq(BasicStudent::getStudentCode, studentCode)
-                .eq(BasicStudent::getStudentName, studentName));
-        if (Objects.isNull(basicStudent)) {
-            throw ExceptionResultEnum.ERROR.exception("学生姓名[" + studentName + "],学号[" + studentCode + "]的学生在学生管理中不存在,请先创建该学生");
-        }
-        if (this.checkTeachStudentRepeat(basicStudent.getId(), teachClazzId, schoolId)) {
-            throw ExceptionResultEnum.ERROR.exception("学生姓名[" + studentName + "],学号为[" + studentCode + "]的学生在该班级已存在");
-        }
-        List<BasicStudent> basicStudentList = new ArrayList<>();
-        basicStudentList.add(basicStudent);
-        return this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
+        throw ExceptionResultEnum.ERROR.exception("废弃的方法");
+        //        if (SystemConstant.isOneNull(studentName, studentCode, teachClazzId)) {
+        //            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        //        }
+        //        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        //        BasicStudent basicStudent = basicStudentService.getOne(new QueryWrapper<BasicStudent>()
+        //                .lambda()
+        //                .eq(BasicStudent::getSchoolId, schoolId)
+        //                .eq(BasicStudent::getStudentCode, studentCode)
+        //                .eq(BasicStudent::getStudentName, studentName));
+        //        if (Objects.isNull(basicStudent)) {
+        //            throw ExceptionResultEnum.ERROR.exception("学生姓名[" + studentName + "],学号[" + studentCode + "]的学生在学生管理中不存在,请先创建该学生");
+        //        }
+        //        if (this.checkTeachStudentRepeat(basicStudent.getId(), teachClazzId, schoolId)) {
+        //            throw ExceptionResultEnum.ERROR.exception("学生姓名[" + studentName + "],学号为[" + studentCode + "]的学生在该班级已存在");
+        //        }
+        //        List<BasicStudent> basicStudentList = new ArrayList<>();
+        //        basicStudentList.add(basicStudent);
+        //        return this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void createTeachStudentBatch(Set<Long> basicStudentIdSet, Long teachClazzId, Long schoolId, SysUser requestUser) {
-        List<BasicStudent> basicStudentList = basicStudentService.listByIds(basicStudentIdSet);
-        if (basicStudentList.size() > 0){
-            this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
+    public void createTeachStudentBatch(TeachStudentBatchParam teachStudentBatchParam, SysUser requestUser) {
+        Long teachClazzId = teachStudentBatchParam.getTeachClazzId();
+        List<Long> basicExamStudentIdList = teachStudentBatchParam.getBasicExamStudentIdList();
+
+        List<BasicExamStudent> basicExamStudentList = basicExamStudentService.listByIds(basicExamStudentIdList);
+        if (basicExamStudentList.size() > 0) {
+            this.createTeachStudentBatch(basicExamStudentList, teachClazzId, requestUser);
         }
     }
 
+    @Deprecated
     @Transactional(rollbackFor = Exception.class)
     @Override
     public String importTeachStudent(MultipartFile file, Long teachClazzId, Long schoolId, SysUser requestUser) throws IOException, NoSuchFieldException {
-        if (SystemConstant.isOneNull(file, teachClazzId, schoolId)) {
-            throw ExceptionResultEnum.ERROR.exception("参数缺失");
-        }
-
-        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeachStudentImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
-            if (finalExcelErrorList.size() > 0) {
-                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
-            }
-            return finalExcelList;
-        },2);
-
-        List<BasicStudent> basicStudentDatasource = basicStudentService.list(new QueryWrapper<BasicStudent>().lambda().eq(BasicStudent::getSchoolId, schoolId));
-        Set<String> studentCodeSet = new HashSet<>();
-
-        if (Objects.nonNull(finalList) && finalList.size() > 0) {
-            for (int i = 0; i < finalList.size(); i++) {
-                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
-                List<Object> teachStudentImportDtoList = map.get(i);
-                for (int y = 0; y < Objects.requireNonNull(teachStudentImportDtoList).size(); y++) {
-                    if (teachStudentImportDtoList.get(y) instanceof TeachStudentImportDto) {
-                        TeachStudentImportDto teachStudentImportDto = (TeachStudentImportDto) teachStudentImportDtoList.get(y);
-                        String studentCode = teachStudentImportDto.getStudentCode();
-                        studentCodeSet.add(studentCode);
-                    }
-                }
-            }
-        }
-
-        // 要导入操作的基础学生数据集合
-        List<BasicStudent> basicStudentList = basicStudentDatasource.stream()
-                .filter(e -> studentCodeSet.contains(e.getStudentCode()))
-                .collect(Collectors.toList());
-
-        // 学号不存在
-        String basicStudentNotFoundStr = studentCodeSet.stream()
-                .filter(e -> !basicStudentList.stream().map(BasicStudent::getStudentCode).collect(Collectors.toList()).contains(e))
-                .collect(Collectors.joining(","));
-
-        this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
-        String success = "[" + basicStudentList.size() + "]个学生导入成功";
-        if (SystemConstant.strNotNull(basicStudentNotFoundStr)){
-            success = success + ",且学号[" + basicStudentNotFoundStr + "]的学生在字典中不存在没有导入";
-        }
-        return success;
+        throw ExceptionResultEnum.ERROR.exception("废弃的方法");
+        //        if (SystemConstant.isOneNull(file, teachClazzId, schoolId)) {
+        //            throw ExceptionResultEnum.ERROR.exception("参数缺失");
+        //        }
+        //
+        //        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeachStudentImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+        //            if (finalExcelErrorList.size() > 0) {
+        //                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
+        //            }
+        //            return finalExcelList;
+        //        },2);
+        //
+        //        List<BasicStudent> basicStudentDatasource = basicStudentService.list(new QueryWrapper<BasicStudent>().lambda().eq(BasicStudent::getSchoolId, schoolId));
+        //        Set<String> studentCodeSet = new HashSet<>();
+        //
+        //        if (Objects.nonNull(finalList) && finalList.size() > 0) {
+        //            for (int i = 0; i < finalList.size(); i++) {
+        //                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
+        //                List<Object> teachStudentImportDtoList = map.get(i);
+        //                for (int y = 0; y < Objects.requireNonNull(teachStudentImportDtoList).size(); y++) {
+        //                    if (teachStudentImportDtoList.get(y) instanceof TeachStudentImportDto) {
+        //                        TeachStudentImportDto teachStudentImportDto = (TeachStudentImportDto) teachStudentImportDtoList.get(y);
+        //                        String studentCode = teachStudentImportDto.getStudentCode();
+        //                        studentCodeSet.add(studentCode);
+        //                    }
+        //                }
+        //            }
+        //        }
+        //
+        //        // 要导入操作的基础学生数据集合
+        //        List<BasicStudent> basicStudentList = basicStudentDatasource.stream()
+        //                .filter(e -> studentCodeSet.contains(e.getStudentCode()))
+        //                .collect(Collectors.toList());
+        //
+        //        // 学号不存在
+        //        String basicStudentNotFoundStr = studentCodeSet.stream()
+        //                .filter(e -> !basicStudentList.stream().map(BasicStudent::getStudentCode).collect(Collectors.toList()).contains(e))
+        //                .collect(Collectors.joining(","));
+        //
+        //        this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
+        //        String success = "[" + basicStudentList.size() + "]个学生导入成功";
+        //        if (SystemConstant.strNotNull(basicStudentNotFoundStr)){
+        //            success = success + ",且学号[" + basicStudentNotFoundStr + "]的学生在字典中不存在没有导入";
+        //        }
+        //        return success;
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean deleteTeachStudentBatch(List<Long> idList) {
-        // TODO: 2022/2/10 不确定删除逻辑目前直接做删除操作 (直接删除教学学生)
         return this.removeByIds(idList);
     }
 
     /**
      * 批量创建教学学生
      *
-     * @param basicStudentList 要创建教学学生的基础学生集合
-     * @param teachClazzId     教学班级id
-     * @param schoolId         学校id
-     * @param requestUser      请求用户
-     * @return 创建结果
+     * @param basicExamStudentList 要创建教学学生的考生字典集合
+     * @param teachClazzId         教学班级id
+     * @param requestUser          请求用户
      */
-    private Boolean createTeachStudentBatch(List<BasicStudent> basicStudentList, Long teachClazzId, Long schoolId, SysUser requestUser) {
+    private void createTeachStudentBatch(List<BasicExamStudent> basicExamStudentList, Long teachClazzId, SysUser requestUser) {
         TeachClazz teachClazz = teachClazzService.getById(teachClazzId);
         if (Objects.isNull(teachClazz)) {
             throw ExceptionResultEnum.ERROR.exception("教学班级不存在");
@@ -157,41 +161,37 @@ public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, Tea
         }
 
         List<TeachStudent> teachStudentList = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(basicStudentList)) {
-            for (BasicStudent basicStudent : basicStudentList) {
-                Long basicStudentId = basicStudent.getId();
+        if (CollectionUtils.isNotEmpty(basicExamStudentList)) {
+            for (BasicExamStudent basicExamStudent : basicExamStudentList) {
+                Long basicExamStudentId = basicExamStudent.getId();
                 // 批量新增重复的课程跳过
-                if (this.checkTeachStudentRepeat(basicStudentId, teachClazzId, schoolId)) {
+                if (this.checkTeachStudentRepeat(basicExamStudentId, teachClazzId)) {
                     continue;
                 }
 
                 TeachStudent teachStudent = new TeachStudent();
-                teachStudent.setSchoolId(basicStudent.getSchoolId());
-                teachStudent.setStudentId(basicStudent.getId());
+                teachStudent.setSchoolId(requestUser.getSchoolId());
+                teachStudent.setStudentId(basicExamStudent.getId());
                 teachStudent.setTeachClazzId(teachClazzId);
-                teachStudent.setBasicCourseId(teachClazz.getBasicCourseId());
+                teachStudent.setTeachCourseId(teachClazz.getTeachCourseId());
                 teachStudent.setUserId(teachClazz.getUserId());
                 teachStudent.insertInfo(requestUser.getId());
                 teachStudentList.add(teachStudent);
             }
         }
-        return this.saveBatch(teachStudentList);
+        this.saveBatch(teachStudentList);
     }
 
     /**
      * 检验教学学生已存在
      *
-     * @param basicStudentId 基础学生id
-     * @param teachClazzId   教学班级id
-     * @param schoolId       学校id
+     * @param basicExamStudentId 考生字典id
+     * @param teachClazzId       教学班级id
      * @return true-已存在不能新增、false-不存在可以新增
      */
-    private Boolean checkTeachStudentRepeat(Long basicStudentId, Long teachClazzId, Long schoolId) {
-        TeachStudent teachStudent = this.getOne(new QueryWrapper<TeachStudent>()
-                .lambda()
-                .eq(TeachStudent::getStudentId, basicStudentId)
-                .eq(TeachStudent::getTeachClazzId, teachClazzId)
-                .eq(TeachStudent::getSchoolId, schoolId));
+    private Boolean checkTeachStudentRepeat(Long basicExamStudentId, Long teachClazzId) {
+        TeachStudent teachStudent = this.getOne(
+                new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getStudentId, basicExamStudentId).eq(TeachStudent::getTeachClazzId, teachClazzId));
         return Objects.nonNull(teachStudent);
     }
 }

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

@@ -2332,11 +2332,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                                                    int sheet) {
         DictionaryResult clazz = null;
         if (!clazzMap.containsKey(key)) {//不存在查询
-            TeachClazz teachClazz = teachClazzService.getOne(new QueryWrapper<TeachClazz>().lambda().eq(TeachClazz::getSchoolId, schoolId).eq(TeachClazz::getTeachClazzName, key));
+            TeachClazz teachClazz = teachClazzService.getOne(new QueryWrapper<TeachClazz>().lambda().eq(TeachClazz::getSchoolId, schoolId).eq(TeachClazz::getClazzName, key));
             if (Objects.nonNull(teachClazz)) {
                 clazz = new DictionaryResult();
                 clazz.setId(teachClazz.getId());
-                clazz.setName(teachClazz.getTeachClazzName());
+                clazz.setName(teachClazz.getClazzName());
             } else {
                 QueryWrapper<BasicClazz> basicClazzQueryWrapper = new QueryWrapper<>();
                 basicClazzQueryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId)

+ 18 - 0
distributed-print-business/src/main/resources/db/log/脚本-caozx.sql

@@ -0,0 +1,18 @@
+ALTER TABLE `teach_clazz` 
+DROP INDEX `teach_clazz_unique` ;
+;
+ALTER TABLE `teach_clazz` 
+DROP COLUMN `basic_course_id`,
+DROP COLUMN `teach_clazz_name`,
+DROP COLUMN `teach_clazz_code`,
+ADD COLUMN `teach_course_id` BIGINT NOT NULL AFTER `school_id`,
+ADD COLUMN `basic_teach_clazz_id` BIGINT NOT NULL AFTER `teach_course_id`,
+ADD COLUMN `clazz_name` VARCHAR(50) NOT NULL COMMENT '教学课程名称' AFTER `user_id`;
+ALTER TABLE `teach_clazz` 
+ADD UNIQUE INDEX `teach_clazz_unique` (`teach_course_id` ASC, `basic_teach_clazz_id` ASC) VISIBLE;
+;
+
+
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1127', '共用接口-查询教学班字典', '/api/admin/basic/condition/list_basic_teach_clazz', 'URL', '149', '16', 'SYS', '1', '1', '1');
+ALTER TABLE `teach_student` 
+CHANGE COLUMN `basic_course_id` `teach_course_id` BIGINT NOT NULL COMMENT '教学课程id(冗余)' ;

+ 15 - 0
distributed-print-business/src/main/resources/mapper/BasicTeachClazzMapper.xml

@@ -2,4 +2,19 @@
 <!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.BasicTeachClazzMapper">
 
+    <select id="findTeachClazzList"
+            resultType="com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult">
+        SELECT
+            id,
+            exam_id AS examId,
+            course_code AS courseCode,
+            clazz_name AS clazzName
+        FROM
+            basic_teach_clazz
+        <where>
+            <if test="examId != null">
+                AND exam_id = #{examId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 4 - 8
distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml

@@ -6,22 +6,18 @@
             resultType="com.qmth.distributed.print.business.bean.result.TeachClazzResult">
         SELECT
             id,
-            basic_course_id AS basicCourseId,
-            teach_clazz_name AS teachClazzName,
+            teach_course_id AS teachCourseId,
+            clazz_name AS teachClazzName,
             create_time AS createTime
         FROM
             teach_clazz
         <where>
-            <if test="schoolId != null and schoolId != ''">
-                AND school_id = #{schoolId}
-            </if>
-            <if test="userId != null">
-                AND user_id = #{userId}
+            <if test="teachCourseId != null">
+                AND teach_course_id = #{teachCourseId}
             </if>
             <if test="teachClazzName != null and teachClazzName != ''">
                 AND teach_clazz_name LIKE CONCAT('%',#{teachClazzName},'%')
             </if>
-                AND basic_course_id = #{basicCourseId}
         </where>
         ORDER BY create_time DESC
     </select>

+ 11 - 8
distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml

@@ -8,20 +8,20 @@
             tc.id,
             bc.code AS courseCode,
             bc.name AS courseName,
-            bc.id AS basicCourseId,
+            tc.create_id AS createId,
             tc.create_time AS createTime
         FROM
             teach_course tc
                 INNER JOIN
-            basic_course bc ON tc.basic_course_id = bc.id AND bc.enable = TRUE
+            basic_course bc ON tc.school_id = bc.school_id AND tc.course_code = bc.code AND bc.enable = TRUE
         <where>
-            <if test="schoolId != null and schoolId != ''">
-                AND tc.school_id = #{schoolId}
+            <if test="examId != null">
+                AND tc.exam_id = #{examId}
             </if>
             <if test="courseName != null and courseName != ''">
                 AND bc.name LIKE CONCAT('%',#{courseName},'%')
             </if>
-            <if test="userId != null and userId != ''">
+            <if test="userId != null">
                 AND tc.user_id = #{userId}
             </if>
             AND tc.enable = true
@@ -44,15 +44,18 @@
             sys_org so ON su.org_id = so.id
         <where>
             su.enable = true
+            <if test="examId != null">
+                AND tc.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                AND tc.course_code = #{courseCode}
+            </if>
             <if test="schoolId != null">
                 AND tc.school_id = #{schoolId}
             </if>
             <if test="userInfo != null and userInfo != ''">
                 AND (su.real_name LIKE CONCAT('%',#{userInfo},'%') OR su.code LIKE CONCAT('%',#{userInfo},'%'))
             </if>
-            <if test="basicCourseId != null">
-                AND tc.basic_course_id = #{basicCourseId}
-            </if>
         </where>
     </select>
     <select id="findTeacherByOrgIds" resultType="com.qmth.teachcloud.common.bean.result.TeacherSelectResult">

+ 8 - 12
distributed-print-business/src/main/resources/mapper/TeachStudentMapper.xml

@@ -6,21 +6,17 @@
             resultType="com.qmth.distributed.print.business.bean.result.TeachStudentResult">
         SELECT
             ts.id AS id,
-            bs.student_name AS studentName,
-            bs.student_code AS studentCode,
-            so.name AS belongOrgName,
-            bm.name AS majorName,
-            bc.clazz_name AS clazzName
+            bes.student_name AS studentName,
+            bes.student_code AS studentCode,
+            bes.college AS belongOrgName,
+            bes.major AS majorName,
+            tc.clazz_name AS clazzName
         FROM
             teach_student ts
                 LEFT JOIN
-            basic_student bs ON ts.student_id = bs.id
+            basic_exam_student bes ON ts.student_id = bes.id
                 LEFT JOIN
-            sys_org so ON bs.belong_org_id = so.id
-                LEFT JOIN
-            basic_major bm ON bs.major_id = bm.id
-                LEFT JOIN
-            basic_clazz bc ON bs.clazz_id = bc.id
+            teach_clazz tc ON tc.id = ts.teach_clazz_id
         <where>
             <if test="schoolId != null and schoolId != ''">
                 AND ts.school_id = #{schoolId}
@@ -29,7 +25,7 @@
                 AND ts.teach_clazz_id = #{teachClazzId}
             </if>
             <if test="studentInfo != null and studentInfo != ''">
-                AND (bs.student_name LIKE CONCAT('%',#{studentInfo},'%') OR bs.student_code LIKE CONCAT('%',#{studentInfo},'%'))
+                AND (bes.student_name LIKE CONCAT('%',#{studentInfo},'%') OR bes.student_code LIKE CONCAT('%',#{studentInfo},'%'))
             </if>
         </where>
         ORDER BY id

+ 35 - 36
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -61,9 +61,8 @@ public class BasicCourseController {
 
     @ApiOperation(value = "模糊查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
-    public Result query(@RequestParam(value = "param", required = false) String param,
-                        @RequestParam(value = "printPlanId", required = false) List<String> printPlanId,
-                        @RequestParam(value = "teachingRoomId", required = false) Long teachingRoomId) {
+    public Result query(@RequestParam(value = "param", required = false) String param, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId,
+            @RequestParam(value = "teachingRoomId", required = false) Long teachingRoomId) {
         if (Objects.isNull(printPlanId)) {
             printPlanId = new ArrayList<>();
         }
@@ -72,7 +71,6 @@ public class BasicCourseController {
         return ResultUtil.ok(userDtos);
     }
 
-
     @ApiOperation(value = "删除")
     @RequestMapping(value = "/remove", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
@@ -81,22 +79,21 @@ public class BasicCourseController {
         return ResultUtil.ok(isSuccess);
     }
 
-
     @ApiOperation(value = "课程管理-查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findBasicCourseList(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
-                                      @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
-                                      @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
-                                      @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
-                                      @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) {
-        return ResultUtil.ok(basicCourseService.basicCoursePage(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime), pageNumber, pageSize));
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Result.class) })
+    public Result findBasicCourseList(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId, @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+            @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime, @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
+            @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) {
+        return ResultUtil.ok(basicCourseService.basicCoursePage(SystemConstant.convertIdToLong(belongOrgId), courseName,
+                SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime),
+                pageNumber, pageSize));
     }
 
     @ApiOperation(value = "课程管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "更新成功", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
     @Transactional
     public Result saveBasicCourse(@Valid @RequestBody BasicCourseParams basicCourseParams, BindingResult bindingResult) {
@@ -105,15 +102,15 @@ public class BasicCourseController {
         }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long l = basicCourseService.saveBasicCourse(basicCourseParams, sysUser);
-//        if (!CollectionUtils.isEmpty(basicCourseParams.getTeachIdSet())) {
-//            teachCourseService.updateByCourseIdAndTeacherList(basicCourseParams.getId(), basicCourseParams.getTeachIdSet());
-//        }
+        //        if (!CollectionUtils.isEmpty(basicCourseParams.getTeachIdSet())) {
+        //            teachCourseService.updateByCourseIdAndTeacherList(basicCourseParams.getId(), basicCourseParams.getTeachIdSet());
+        //        }
         return ResultUtil.ok(l);
     }
 
     @ApiOperation(value = "课程管理-批量删除")
     @RequestMapping(value = "/delete_batch", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "删除成功", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result enableBasicCourse(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList) {
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatch(idList));
@@ -121,26 +118,29 @@ public class BasicCourseController {
 
     @ApiOperation(value = "课程管理-根据查询条件批量删除")
     @RequestMapping(value = "/delete_by_query", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
-    @OperationLogDetail(detail = "根据查询条件[所属机构id[{{belongOrgId}}],课程名称(模糊查询)[{{courseName}}],创建时间(起始位置)[{{startCreateTime}}]," +
-            "创建时间(终止位置)[{{endCreateTime}}],状态[{{enable}}],启用&禁用操作[{{enableOperate}}]]批量启用/禁用课程", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.EDIT, customizedOperationType = CustomizedOperationTypeEnum.DELETE)
+    @ApiResponses({ @ApiResponse(code = 200, message = "删除成功", response = EditResult.class) })
+    @OperationLogDetail(detail =
+            "根据查询条件[所属机构id[{{belongOrgId}}],课程名称(模糊查询)[{{courseName}}],创建时间(起始位置)[{{startCreateTime}}],"
+                    + "创建时间(终止位置)[{{endCreateTime}}],状态[{{enable}}],启用&禁用操作[{{enableOperate}}]]批量启用/禁用课程", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.EDIT, customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result enableBasicCourseByQuery(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
-                                           @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
-                                           @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
-                                           @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime) {
+            @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName, @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
+            @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime) {
         // 禁用条件
         if (!SystemConstant.strNotNull(belongOrgId) && !SystemConstant.strNotNull(courseName) && !SystemConstant.strNotNull(startCreateTime) && !SystemConstant.strNotNull(endCreateTime)) {
             throw ExceptionResultEnum.ERROR.exception("请选择要禁用的条件");
         }
-        return ResultUtil.ok(basicCourseService.removeBasicCourseBatchByQuery(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime)));
+        return ResultUtil.ok(
+                basicCourseService.removeBasicCourseBatchByQuery(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime),
+                        SystemConstant.convertIdToLong(endCreateTime)));
     }
 
     @ApiOperation(value = "课程基本信息管理-批量导入")
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "返回信息", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
     @Transactional
-    public Result basicCourseImportAsync(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+    public Result basicCourseImportAsync(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file)
+            throws Exception {
         List<BasicCourseParams> basicCourseParamsList = basicCourseService.executeImportBasicCourseLogic(file);
         if (!CollectionUtils.isEmpty(basicCourseParamsList)) {
             for (BasicCourseParams basicCourseParams : basicCourseParamsList) {
@@ -154,22 +154,21 @@ public class BasicCourseController {
 
     @ApiOperation(value = "课程管理-导出")
     @RequestMapping(value = "/export", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息")})
+    @ApiResponses({ @ApiResponse(code = 200, message = "返回信息") })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
-    public void export(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
-                       @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
-                       @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
-                       @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
-                       HttpServletResponse response) throws Exception {
+    public void export(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId, @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+            @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime, @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
+            HttpServletResponse response) throws Exception {
         basicCourseService.exportData(response, SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime));
     }
 
     @ApiOperation(value = "课程管理-查询")
     @RequestMapping(value = "/list_by_org", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findBasicCourseListByOrg(@ApiParam(value = "所属机构id", required = true) @RequestParam String belongOrgId) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Result.class) })
+    public Result findBasicCourseListByOrg(@ApiParam(value = "考试id", required = true) @RequestParam String examId,
+            @ApiParam(value = "所属机构id", required = true) @RequestParam String belongOrgId) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(basicCourseService.listByOrgId(SystemConstant.convertIdToLong(belongOrgId), sysUser.getSchoolId()));
+        return ResultUtil.ok(basicCourseService.listByOrgId(SystemConstant.convertIdToLong(belongOrgId), SystemConstant.convertIdToLong(examId), sysUser));
     }
 }
 

+ 29 - 32
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -1,10 +1,8 @@
 package com.qmth.distributed.print.api;
 
-import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.service.ConditionService;
-import com.qmth.teachcloud.common.bean.result.BasicCollegeResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
@@ -28,6 +26,7 @@ import java.util.Map;
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_BASIC + "/condition")
 public class ConditionController {
+
     @Resource
     private ConditionService conditionService;
 
@@ -36,86 +35,84 @@ public class ConditionController {
 
     @ApiOperation(value = "学期")
     @RequestMapping(value = "/list_semester", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicSemester.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicSemester.class) })
     public Result listSemester(@ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
         return ResultUtil.ok(conditionService.listSemester(enable));
     }
 
     @ApiOperation(value = "考试")
     @RequestMapping(value = "/list_exam", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicExam.class)})
-    public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                           @ApiParam(value = "考试类型") @RequestParam(required = false) ExamCategoryEnum category,
-                           @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicExam.class) })
+    public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试类型") @RequestParam(required = false) ExamCategoryEnum category,
+            @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
         return ResultUtil.ok(conditionService.listExam(semesterId, category, enable));
     }
 
     @ApiOperation(value = "课程")
     @RequestMapping(value = "/list_course", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCourse.class)})
-    public Result listCourse(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                             @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-                             @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable,
-                             @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicCourse.class) })
+    public Result listCourse(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+            @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
         return ResultUtil.ok(conditionService.listCourse(semesterId, examId, enable, printPlanId));
     }
 
     @ApiOperation(value = "试卷编号")
     @RequestMapping(value = "/list_paper_number", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = String.class)})
-    public Result listPaperNumber(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                                  @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-                                  @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
-                                  @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = String.class) })
+    public Result listPaperNumber(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+            @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
         return ResultUtil.ok(conditionService.listPaperNumber(semesterId, examId, courseCode, printPlanId));
     }
 
     @ApiOperation(value = "印刷计划")
     @RequestMapping(value = "/list_print_plan", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = PrintPlanBrief.class)})
-    public Result listPrintPlan(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                                @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-                                @ApiParam(value = "source") @RequestParam(required = false) String source) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = PrintPlanBrief.class) })
+    public Result listPrintPlan(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+            @ApiParam(value = "source") @RequestParam(required = false) String source) {
         return ResultUtil.ok(conditionService.listPrintPlan(semesterId, examId, source));
     }
 
     @ApiOperation(value = "班级")
     @RequestMapping(value = "/list_clazz", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicClazz.class)})
-    public Result listClazz(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                            @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-                            @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
-                            @ApiParam(value = "班级名称") @RequestParam(required = false) String clazzName) {
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicClazz.class) })
+    public Result listClazz(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+            @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode, @ApiParam(value = "班级名称") @RequestParam(required = false) String clazzName) {
         return ResultUtil.ok(conditionService.listClazz(semesterId, examId, courseCode, clazzName));
     }
 
     @ApiOperation(value = "学院")
     @RequestMapping(value = "/list_college", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = SysOrg.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = SysOrg.class) })
     public Result listCollege() {
         return ResultUtil.ok(conditionService.listCollege());
     }
 
     @ApiOperation(value = "扫描-获取学期、考试列表")
     @RequestMapping(value = "/scan/semester/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
     public Result scanSemesterList(@ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
         return ResultUtil.ok(scanConditionService.scanSemesterList(enable));
     }
 
     @ApiOperation(value = "扫描-获取课程、试卷编号列表")
     @RequestMapping(value = "/scan/course/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
     public Result scanCourseList(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") Long examId) {
         return ResultUtil.ok(scanConditionService.scanCourseList(examId));
     }
 
     @ApiOperation(value = "扫描-获取校区、考场")
     @RequestMapping(value = "/scan/campus/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
     public Result scanCampusList(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") Long examId,
-                                 @ApiParam(value = "课程代码") @RequestParam(value = "courseCode", required = false) String courseCode,
-                                 @ApiParam(value = "试卷编号") @RequestParam(value = "coursePaperId", required = false) String coursePaperId) {
+            @ApiParam(value = "课程代码") @RequestParam(value = "courseCode", required = false) String courseCode, @ApiParam(value = "试卷编号") @RequestParam(value = "coursePaperId", required = false) String coursePaperId) {
         return ResultUtil.ok(scanConditionService.scanCampusList(examId, courseCode, coursePaperId));
     }
+
+    @ApiOperation(value = "教学班字典")
+    @RequestMapping(value = "/list_basic_teach_clazz", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
+    public Result listBasicTeachClazz(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") String examId) {
+        return ResultUtil.ok(conditionService.listBasicTeachClazz(SystemConstant.convertIdToLong(examId)));
+    }
 }

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

@@ -4,6 +4,7 @@ package com.qmth.distributed.print.api;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.params.CourseEvaluationParam;
 import com.qmth.distributed.print.business.bean.result.CourseEvaluationResult;
+import com.qmth.distributed.print.business.enums.CourseEvaluationTypeEnum;
 import com.qmth.distributed.print.business.service.CourseEvaluationService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.Objects;
 
 /**
  * <p>
@@ -55,7 +57,11 @@ public class CourseEvaluationController {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        courseEvaluationService.saveCourseEvaluation(courseEvaluationParam, sysUser);
+        if (Objects.nonNull(courseEvaluationParam)){
+            // 设置为自定义评价方式
+            courseEvaluationParam.setType(CourseEvaluationTypeEnum.CUSTOM);
+        }
+        courseEvaluationService.saveCourseEvaluation(courseEvaluationParam, sysUser.getId());
         return ResultUtil.ok();
     }
 

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

@@ -1,6 +1,5 @@
 package com.qmth.distributed.print.api;
 
-import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailCardDto;
 import com.qmth.distributed.print.business.bean.params.ApproveFormParams;

+ 21 - 61
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -1,6 +1,5 @@
 package com.qmth.distributed.print.api;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
@@ -8,14 +7,12 @@ import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.params.LoginParam;
 import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.entity.BasicExamStudent;
+import com.qmth.distributed.print.business.entity.BasicTeachClazz;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
-import com.qmth.distributed.print.business.entity.TeachClazz;
 import com.qmth.distributed.print.business.enums.DictionaryEnum;
 import com.qmth.distributed.print.business.enums.LoginTypeEnum;
-import com.qmth.distributed.print.business.service.ConditionService;
-import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.distributed.print.business.service.TBSyncTaskService;
-import com.qmth.distributed.print.business.service.TeachClazzService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
@@ -117,6 +114,12 @@ public class SysController {
     @Resource
     ConditionService conditionService;
 
+    @Resource
+    BasicTeachClazzService basicTeachClazzService;
+
+    @Resource
+    BasicExamStudentService basicExamStudentService;
+
     /**
      * 登录
      *
@@ -658,6 +661,7 @@ public class SysController {
                                      @ApiParam(value = "专业id") @RequestParam(required = false) String majorId,
                                      @ApiParam(value = "班级id") @RequestParam(required = false) String clazzId,
                                      @ApiParam(value = "学生id") @RequestParam(required = false) String studentId,
+                                     @ApiParam(value = "考试id") @RequestParam(required = false) String examId,
                                      @ApiParam(value = "查询字典对象", required = true) @RequestParam DictionaryEnum dictionaryEnum) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         List<DictionaryResult> dictionaryResultList = new ArrayList<>();
@@ -754,74 +758,30 @@ public class SysController {
                 }).collect(Collectors.toList());
                 break;
             case CLAZZ:
-                QueryWrapper<BasicClazz> clazzQueryWrapper = new QueryWrapper<>();
-                clazzQueryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getEnable, true);
-                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
-                    clazzQueryWrapper.lambda().eq(BasicClazz::getMajorId, majorId);
-                }
-                // 基础班
-                List<BasicClazz> basicClazzList = basicClazzService.list(clazzQueryWrapper);
-                List<DictionaryResult> resultBasicClazzList = basicClazzList.stream().map(e -> {
+                QueryWrapper<BasicTeachClazz> clazzQueryWrapper = new QueryWrapper<>();
+                clazzQueryWrapper.lambda().eq(BasicTeachClazz::getSchoolId, schoolId).eq(BasicTeachClazz::getExamId, examId);
+                List<BasicTeachClazz> basicTeachClazzList = basicTeachClazzService.list(clazzQueryWrapper);
+                List<DictionaryResult> resultBasicClazzList = basicTeachClazzList.stream().map(e -> {
                     DictionaryResult dictionaryResult = new DictionaryResult();
                     dictionaryResult.setId(e.getId());
-                    dictionaryResult.setCode(e.getClazzCode());
                     dictionaryResult.setName(e.getClazzName());
                     return dictionaryResult;
                 }).collect(Collectors.toList());
-
                 dictionaryResultList.addAll(resultBasicClazzList);
                 break;
             case ALL_CLAZZ: //针对归档管理临时处理用
-                QueryWrapper<BasicClazz> basicClazzQueryWrapper = new QueryWrapper<>();
-                basicClazzQueryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getEnable, true);
-                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
-                    basicClazzQueryWrapper.lambda().eq(BasicClazz::getMajorId, majorId);
-                }
-                // 基础班
-                List<BasicClazz> bClazzList = basicClazzService.list(basicClazzQueryWrapper);
-                List<DictionaryResult> rbClazzList = bClazzList.stream().map(e -> {
-                    DictionaryResult dictionaryResult = new DictionaryResult();
-                    dictionaryResult.setId(e.getId());
-                    dictionaryResult.setCode(e.getClazzCode());
-                    dictionaryResult.setName(e.getClazzName());
-                    return dictionaryResult;
-                }).collect(Collectors.toList());
-
-                dictionaryResultList.addAll(rbClazzList);
-
-                // 教学班
-                QueryWrapper<TeachClazz> teachClazzQueryWrapper = new QueryWrapper<>();
-                teachClazzQueryWrapper.lambda().in(TeachClazz::getSchoolId, schoolId);
-                List<TeachClazz> teachClazzList = teachClazzService.list(teachClazzQueryWrapper);
-                List<DictionaryResult> resultTeachClazzList = teachClazzList.stream().map(e -> {
-                    DictionaryResult dictionaryResult = new DictionaryResult();
-                    dictionaryResult.setId(e.getId());
-                    dictionaryResult.setCode(e.getTeachClazzCode());
-                    dictionaryResult.setName(e.getTeachClazzName());
-                    return dictionaryResult;
-                }).collect(Collectors.toList());
-
-                if (resultTeachClazzList.size() > 0) {
-                    dictionaryResultList.addAll(resultTeachClazzList);
-                }
-                break;
+                throw ExceptionResultEnum.ERROR.exception("使用枚举[CLAZZ]");
             case STUDENT:
-                QueryWrapper<BasicStudent> studentQueryWrapper = new QueryWrapper<>();
-                studentQueryWrapper.lambda().eq(BasicStudent::getSchoolId, schoolId).eq(BasicStudent::getEnable, true);
-                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(collegeId))) {
-                    studentQueryWrapper.lambda().eq(BasicStudent::getBelongOrgId, collegeId);
-                }
-                if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
-                    studentQueryWrapper.lambda().eq(BasicStudent::getMajorId, majorId);
-                }
+                QueryWrapper<BasicExamStudent> studentQueryWrapper = new QueryWrapper<>();
+                studentQueryWrapper.lambda().eq(BasicExamStudent::getSchoolId, schoolId);
                 if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(clazzId))) {
-                    studentQueryWrapper.lambda().eq(BasicStudent::getClazzId, clazzId);
+                    studentQueryWrapper.lambda().eq(BasicExamStudent::getClazzId, clazzId);
                 }
                 if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(studentId))) {
-                    studentQueryWrapper.lambda().eq(BasicStudent::getId, studentId);
+                    studentQueryWrapper.lambda().eq(BasicExamStudent::getId, studentId);
                 }
-                List<BasicStudent> basicStudentList = basicStudentService.list(studentQueryWrapper);
-                dictionaryResultList = basicStudentList.stream().map(e -> {
+                List<BasicExamStudent> basicExamStudentList = basicExamStudentService.list(studentQueryWrapper);
+                dictionaryResultList = basicExamStudentList.stream().map(e -> {
                     DictionaryResult dictionaryResult = new DictionaryResult();
                     dictionaryResult.setId(e.getId());
                     dictionaryResult.setCode(e.getStudentCode());

+ 8 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachClazzController.java

@@ -39,23 +39,26 @@ public class TeachClazzController {
     @ApiOperation(value = "教学班级-查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findTeachClazzPage(@ApiParam(value = "基础课程id") @RequestParam(required = false) String basicCourseId,
+    public Result findTeachClazzPage(@ApiParam(value = "考试id") @RequestParam(required = false) String examId,
+                                     @ApiParam(value = "课程编号") @RequestParam(required = false) String courseCode,
                                      @ApiParam(value = "班级名称(模糊查询)") @RequestParam(required = false) String teachClazzName,
                                      @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) {
-        return ResultUtil.ok(teachClazzService.teachClazzPage(SystemConstant.convertIdToLong(basicCourseId), teachClazzName, pageNumber, pageSize));
+        return ResultUtil.ok(teachClazzService.teachClazzPage(SystemConstant.convertIdToLong(examId),courseCode, teachClazzName, pageNumber, pageSize));
     }
 
-    @ApiOperation(value = "教学班级-编辑教学班级")
+    @ApiOperation(value = "教学班级-选择教学班")
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
-    public Result createTeachClazz(@Valid @RequestBody TeachClazzParams teachClazzParams, BindingResult bindingResult) {
+    @Deprecated
+    public Result selectTeachClazz(@Valid @RequestBody TeachClazzParams teachClazzParams, BindingResult bindingResult) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        return ResultUtil.ok(teachClazzService.editTeachClazz(teachClazzParams, requestUser));
+        teachClazzService.selectTeachClazz(teachClazzParams, requestUser);
+        return ResultUtil.ok();
     }
 
     @ApiOperation(value = "教学班级-批量删除")

+ 25 - 12
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.api;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.params.TeachCourseParams;
+import com.qmth.distributed.print.business.bean.params.TeachCourseSelectParam;
 import com.qmth.distributed.print.business.bean.params.TeacherTeamParam;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.TeachCourseService;
@@ -27,6 +28,7 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 教学课程 前端控制器
@@ -46,18 +48,21 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Result.class) })
-    //    @OperationLogDetail(detail = "根据查询条件课程名称[{{courseName}}]模糊查询教学课程,查询第[{{pageNumber}}]页,每页查[{{pageSize}}]个", operationType = OperationTypeEnum.SELECT, operationUnit = OperationUnitEnum.TEACH_COURSE,customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result findTeachCoursePage(@ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+    public Result findTeachCoursePage(@ApiParam(value = "考试id") @RequestParam(required = false) String examId,
+            @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
             @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) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(teachCourseService.teachCoursePage(courseName, pageNumber, pageSize, requestUser.getId()));
+        return ResultUtil.ok(
+                teachCourseService.teachCoursePage(SystemConstant.convertIdToLong(examId), courseName, pageNumber,
+                        pageSize, requestUser.getId()));
     }
 
     @ApiOperation(value = "教学课程-手动添加课程")
     @RequestMapping(value = "/manual_create", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
     @OperationLogDetail(detail = "手动添加教学课程,参数[{{teachCourseParams}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    @Deprecated
     public Result manualCreate(@Valid @RequestBody TeachCourseParams teachCourseParams, BindingResult bindingResult) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
@@ -69,10 +74,13 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-课程表选择教学课程")
     @RequestMapping(value = "/select_create", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
-    @OperationLogDetail(detail = "从课程表选择并创建教学课程,参数[{{basicCourseIdList}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
-    public Result selectCreate(@ApiParam(value = "基础课程id", required = true) @RequestParam List<Long> basicCourseIdList) {
+    @OperationLogDetail(detail = "从课程表选择并创建教学课程,参数[{{teachCourseSelectParam}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result selectCreate(@Valid @RequestBody TeachCourseSelectParam teachCourseSelectParam, BindingResult bindingResult) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        teachCourseService.selectCreate(basicCourseIdList, requestUser);
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        teachCourseService.selectCreate(teachCourseSelectParam, requestUser);
         return ResultUtil.ok();
     }
 
@@ -80,6 +88,7 @@ public class TeachCourseController {
     @RequestMapping(value = "/import", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
     @OperationLogDetail(detail = "教学课程批量导入", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    @Deprecated
     public Result importTeachCourse(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws IOException, NoSuchFieldException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         teachCourseService.importTeachCourse(file, requestUser);
@@ -119,10 +128,12 @@ public class TeachCourseController {
     @ApiOperation(value = "教师团队-用户表选择教师")
     @RequestMapping(value = "/select_create_teacher", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
-    @OperationLogDetail(detail = "从教师库选择并加入教师团队,参数[{{basicCourseIdList}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
-    public Result selectCreate(@ApiParam(value = "基础课程id", required = true) @RequestParam Long basicCourseId, @ApiParam(value = "教师id集合", required = true) @RequestParam List<Long> userIdList) {
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result selectCreate(@ApiParam(value = "考试id", required = true) @RequestParam String examId, @ApiParam(value = "课程编号", required = true) @RequestParam String courseCode,
+            @ApiParam(value = "教师id集合", required = true) @RequestParam List<String> userIdList) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        teachCourseService.selectCreateTeacher(basicCourseId, userIdList, requestUser);
+        teachCourseService.selectCreateTeacher(SystemConstant.convertIdToLong(examId), courseCode,
+                userIdList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()), requestUser);
         return ResultUtil.ok();
     }
 
@@ -130,6 +141,7 @@ public class TeachCourseController {
     @RequestMapping(value = "/import_teacher", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
     @OperationLogDetail(detail = "教学课程批量导入", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    @Deprecated
     public Result importTeacherTeam(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file, @ApiParam(value = "基础课程", required = true) @RequestParam Long basicCourseId)
             throws IOException, NoSuchFieldException, IllegalAccessException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
@@ -140,12 +152,13 @@ public class TeachCourseController {
     @ApiOperation(value = "教师团队-分页查询")
     @RequestMapping(value = "/teacher_team_page", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Result.class) })
-    //    @OperationLogDetail(detail = "根据查询条件课程名称[{{courseName}}]模糊查询教学课程,查询第[{{pageNumber}}]页,每页查[{{pageSize}}]个", operationType = OperationTypeEnum.SELECT, operationUnit = OperationUnitEnum.TEACH_COURSE,customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    public Result findTeachTeamPage(@ApiParam(value = "用户姓名工号(模糊查询)") @RequestParam(required = false) String userInfo, @ApiParam(value = "基础课程id", required = true) @RequestParam String basicCourseId,
+    public Result findTeachTeamPage(@ApiParam(value = "考试id", required = true) @RequestParam String examId,
+            @ApiParam(value = "课程编号", required = true) @RequestParam String courseCode,
+            @ApiParam(value = "用户姓名工号(模糊查询)") @RequestParam(required = false) String userInfo,
             @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) {
         return ResultUtil.ok(
-                teachCourseService.findTeacherTeamPage(userInfo, SystemConstant.convertIdToLong(basicCourseId),
+                teachCourseService.findTeacherTeamPage(SystemConstant.convertIdToLong(examId), courseCode, userInfo,
                         pageNumber, pageSize));
     }
 

+ 24 - 25
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachStudentController.java

@@ -8,7 +8,6 @@ import com.qmth.distributed.print.business.service.TeachStudentService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -25,7 +24,6 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @Description: 教学学生 前端控制器
@@ -38,67 +36,68 @@ import java.util.Set;
 @Validated
 //@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class TeachStudentController {
+
     @Resource
     private TeachStudentService teachStudentService;
 
     @ApiOperation(value = "教学学生-查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findTeachStudentPage(@ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId,
-                                       @ApiParam(value = "学生信息(学号、姓名)") @RequestParam(required = false) String studentInfo,
-                                       @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) {
-        return ResultUtil.ok(teachStudentService.teachStudentPage(SystemConstant.convertIdToLong(teachClazzId), studentInfo, pageNumber, pageSize));
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Result.class) })
+    public Result findTeachStudentPage(@ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId, @ApiParam(value = "学生信息(学号、姓名)") @RequestParam(required = false) String studentInfo,
+            @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) {
+        return ResultUtil.ok(
+                teachStudentService.teachStudentPage(SystemConstant.convertIdToLong(teachClazzId), studentInfo,
+                        pageNumber, pageSize));
     }
 
     @ApiOperation(value = "教学学生-创建教学学生")
     @RequestMapping(value = "/create", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    @Deprecated
     public Result createTeachStudent(@Valid @RequestBody TeachStudentParams teachStudentParams, BindingResult bindingResult) throws IllegalAccessException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SystemConstant.verifyDBFields(teachStudentParams, teachStudentParams.getClass());
-        return ResultUtil.ok(teachStudentService.createTeachStudent(teachStudentParams.getStudentName(), teachStudentParams.getStudentCode(), teachStudentParams.getTeachClazzId(), requestUser));
+        return ResultUtil.ok(teachStudentService.createTeachStudent(teachStudentParams.getStudentName(),
+                teachStudentParams.getStudentCode(), teachStudentParams.getTeachClazzId(), requestUser));
     }
 
     @ApiOperation(value = "教学学生-从课程班级批量添加学生")
     @RequestMapping(value = "/create_batch", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "创建成功", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
-    public Result createTeachStudentBatchByDictionary(@Valid @RequestBody TeachStudentBatchParam teachStudentBatchParam, BindingResult bindingResult) {
+    public Result createTeachStudentBatchByDictionary(@Valid @RequestBody TeachStudentBatchParam teachStudentBatchParam,
+            BindingResult bindingResult) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        Set<Long> basicStudentIdSet = teachStudentBatchParam.getBasicStudentIdSet();
-        if (basicStudentIdSet == null || basicStudentIdSet.size() == 0) {
-            throw ExceptionResultEnum.ERROR.exception("请选择要删除的对象");
-        }
-        Long teachClazzId = teachStudentBatchParam.getTeachClazzId();
-        Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
-        teachStudentService.createTeachStudentBatch(basicStudentIdSet, teachClazzId, schoolId, requestUser);
+        teachStudentService.createTeachStudentBatch(teachStudentBatchParam, requestUser);
         return ResultUtil.ok();
     }
 
-
     @ApiOperation(value = "教学学生-批量导入")
     @RequestMapping(value = "/import", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "返回信息", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
-    public Result teachStudentImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
-                                     @ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId) throws IOException, NoSuchFieldException {
+    @Deprecated
+    public Result teachStudentImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file, @ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId)
+            throws IOException, NoSuchFieldException {
 
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok((Object) teachStudentService.importTeachStudent(file, SystemConstant.convertIdToLong(teachClazzId), schoolId, requestUser));
+        return ResultUtil.ok(
+                (Object) teachStudentService.importTeachStudent(file, SystemConstant.convertIdToLong(teachClazzId),
+                        schoolId, requestUser));
     }
 
     @ApiOperation(value = "教学学生-批量删除")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "删除成功", response = EditResult.class) })
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result deleteTeachStudent(@ApiParam(value = "选择的要删除的学生id集合", required = true) @RequestParam List<Long> idList) {
         return ResultUtil.ok(teachStudentService.deleteTeachStudentBatch(idList));

+ 15 - 9
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicCourseMapper.java

@@ -39,21 +39,27 @@ public interface BasicCourseMapper extends BaseMapper<BasicCourse> {
      * @param startCreateTime 课程创建时间(起始值)
      * @param endCreateTime   课程创建时间(终止值)
      * @param schoolId        学校id
-     * @param dpr          权限机构组
+     * @param dpr             权限机构组
      * @return 结果
      */
-    IPage<BasicCourseResult> findBasicCoursePage(@Param("iPage") Page<BasicCourseResult> iPage,
-                                                 @Param("belongOrgId") Long belongOrgId,
-                                                 @Param("courseName") String courseName,
-                                                 @Param("startCreateTime") Long startCreateTime,
-                                                 @Param("endCreateTime") Long endCreateTime,
-                                                 @Param("schoolId") Long schoolId,
-                                                 @Param("dpr") DataPermissionRule dpr);
+    IPage<BasicCourseResult> findBasicCoursePage(@Param("iPage") Page<BasicCourseResult> iPage, @Param("belongOrgId") Long belongOrgId,
+            @Param("courseName") String courseName, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime,
+            @Param("schoolId") Long schoolId, @Param("dpr") DataPermissionRule dpr);
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
     Set<Map<String, Object>> findExamTaskByCourseCode(@Param("schoolId") Long schoolId, @Param("courseCodeSet") Set<String> courseCodeSet);
 
-    List<BasicCourseExportDto> listExportData(@Param("belongOrgId") Long belongOrgId, @Param("courseName") String courseName, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime, @Param("schoolId") Long schoolId, @Param("dpr") DataPermissionRule dpr);
+    List<BasicCourseExportDto> listExportData(@Param("belongOrgId") Long belongOrgId, @Param("courseName") String courseName, @Param("startCreateTime") Long startCreateTime,
+            @Param("endCreateTime") Long endCreateTime, @Param("schoolId") Long schoolId, @Param("dpr") DataPermissionRule dpr);
 
     void updateCourseNameFormExamTask(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("courseName") String courseName);
+
+    /**
+     * 查询教师已选用的课程,课程编号集合
+     *
+     * @param examId 考试id
+     * @param userId 用户id
+     * @return 已占用课程编号集合
+     */
+    List<String> findOccupiedCourseCode(@Param("examId") Long examId, @Param("userId") Long userId);
 }

+ 7 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -91,7 +91,8 @@ public interface BasicCourseService extends IService<BasicCourse> {
      *
      * @param finalList 基础课程数据集合
      */
-    List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<Integer,List<String>> errorMap);
+    List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList,
+            Map<Integer, List<String>> errorMap);
 
     /**
      * @param schoolId
@@ -105,9 +106,10 @@ public interface BasicCourseService extends IService<BasicCourse> {
     /**
      * 根据机构id选择老师
      *
-     * @param orgId    机构id
-     * @param schoolId 学校id
-     * @return 基础课程结果
+     * @param orgId       机构id
+     * @param examId      考试id
+     * @param requestUser 请求用户
+     * @return 可选基础课程结果
      */
-    List<TeachCourseSelectResult> listByOrgId(Long orgId, Long schoolId);
+    List<TeachCourseSelectResult> listByOrgId(Long orgId, Long examId, SysUser requestUser);
 }

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

@@ -71,13 +71,13 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
 
     @Resource
-    BasicTeachCourseService basicTeachCourseService;
+    private BasicTeachCourseService basicTeachCourseService;
 
     @Resource
     private SysUserService sysUserService;
 
     @Resource
-    SysUserRoleService sysUserRoleService;
+    private SysUserRoleService sysUserRoleService;
 
     @Override
     public List<BasicCourse> listCoursesByUserId(Long userId) {
@@ -502,7 +502,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     }
 
     @Override
-    public List<TeachCourseSelectResult> listByOrgId(Long orgId, Long schoolId) {
+    public List<TeachCourseSelectResult> listByOrgId(Long orgId, Long examId, SysUser requestUser) {
         List<Long> temp = new ArrayList<>();
         temp.add(orgId);
 
@@ -519,11 +519,11 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     }
                 }
             }
-            result = this.list(new QueryWrapper<BasicCourse>()
-                            .lambda()
-                            .in(BasicCourse::getTeachingRoomId, orgIdSet)
-                            .orderByAsc(BasicCourse::getOrgId))
-                    .stream().flatMap(e -> {
+            // 查询本次考试已选择的课程编号
+            List<String> occupiedCourseCodeList = this.baseMapper.findOccupiedCourseCode(examId, requestUser.getId());
+
+            result = this.list(new QueryWrapper<BasicCourse>().lambda().in(BasicCourse::getTeachingRoomId, orgIdSet)
+                            .orderByAsc(BasicCourse::getOrgId)).stream().filter(e -> !occupiedCourseCodeList.contains(e.getCode())).flatMap(e -> {
                         TeachCourseSelectResult teachCourseSelectResult = new TeachCourseSelectResult();
                         teachCourseSelectResult.setBasicCourseId(e.getId());
                         teachCourseSelectResult.setCourseName(e.getName());

+ 14 - 0
teachcloud-common/src/main/resources/mapper/BasicCourseMapper.xml

@@ -176,4 +176,18 @@
         </where>
         ORDER BY createTime DESC
     </select>
+    <select id="findOccupiedCourseCode" resultType="java.lang.String">
+        SELECT
+            course_code
+        FROM
+            teach_course
+        <where>
+            <if test="examId != null">
+                AND exam_id = #{examId}
+            </if>
+            <if test="userId != null">
+                AND user_id = #{userId}
+            </if>
+        </where>
+    </select>
 </mapper>