소스 검색

Merge branch 'feature_HW_20230331' into master_saas

liujunchi 2 년 전
부모
커밋
0d123d7744
36개의 변경된 파일1432개의 추가작업 그리고 23개의 파일을 삭제
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  3. 111 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java
  4. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  5. 117 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java
  6. 111 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  7. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java
  8. 39 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java
  9. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  10. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonTrainingDetail.java
  11. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ELessonTrainingType.java
  12. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseHomeworkQueryInfo.java
  13. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java
  14. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  15. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java
  16. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  17. 42 2
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java
  18. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonTrainingDetailService.java
  19. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  20. 47 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java
  21. 105 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  22. 271 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  23. 74 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  24. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java
  25. 8 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  26. 4 2
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  27. 7 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  28. 5 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  29. 19 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  30. 48 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  31. 10 0
      mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesReplyController.java
  32. 22 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java
  33. 1 0
      mec-student/src/main/java/com/ym/mec/student/controller/WechatController.java
  34. 47 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  35. 40 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java
  36. 3 1
      mec-web/src/main/java/com/ym/mec/web/controller/WebCourseHomeworkController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -868,4 +868,6 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     Boolean hasConvertCourse(@Param("classIdList") List<Integer> classIdList);
 
     void addClassTimes(@Param("classGroupId") Integer classGroupId, @Param("num") Integer num);
+
+    List<ClassGroup> queryByIds(@Param("classIds") List<Integer> classIds);
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -194,4 +195,18 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
     List<EduHomeworkCardDto> countHomeworkSubjectStudentInfoWithMusicGroup(@Param("groupId") String groupId,
                                                                            @Param("startTime") Date startTime,
                                                                            @Param("endTime") Date endTime);
+
+    List<StudentCourseHomework> findByCourseScheduleIds(@Param("courseScheduleIds") List<Integer> courseScheduleIds);
+
+    /**
+     * 根据学员id和课程作业id查询学员课程作业
+     *
+     * @param studentIds       学员id
+     * @param courseHomeworkId 课程作业id
+     * @param type             课程作业类型
+     */
+    List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> findByStudentIdsAndCourseScheduleId(
+        @Param("studentIds") List<Integer> studentIds,
+        @Param("courseHomeworkId") Long courseHomeworkId,
+        @Param("type") ELessonTrainingType type);
 }

+ 111 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java

@@ -1,11 +1,13 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.util.Date;
 import java.util.List;
 
@@ -24,14 +26,16 @@ public class CourseHomeworkWrapper {
     public static class CourseHomeworkQuery extends QueryInfo {
 
 
+        @ApiModelProperty(value = "课程id")
+        private Integer courseScheduleId;
 
         @ApiModelProperty("当月")
         private Date month;
 
-        @ApiModelProperty(value = "开始时间")
+        @ApiModelProperty(value = "开始时间",required = true)
         private Date startTime;
 
-        @ApiModelProperty(value = "结束时间")
+        @ApiModelProperty(value = "结束时间",required = true)
         private Date endTime;
 
         @ApiModelProperty(value = "老师id")
@@ -59,6 +63,9 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "课程id")
         private Integer courseScheduleId;
 
+        @ApiModelProperty(value = "作业id")
+        private Long courseHomeworkId;
+
         @ApiModelProperty(value = "课程日期")
         private Date classDate;
 
@@ -75,7 +82,7 @@ public class CourseHomeworkWrapper {
         private Integer teacherId;
 
         @ApiModelProperty(value = "乐团id")
-        private Integer musicGroupId;
+        private String musicGroupId;
 
         @ApiModelProperty(value = "乐团名称")
         private String musicGroupName;
@@ -89,6 +96,9 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "声部名称")
         private String subjectName;
 
+        @ApiModelProperty("班级id")
+        private Integer classGroupId;
+
         @ApiModelProperty("班级名称")
         private String classGroupName;
 
@@ -100,5 +110,103 @@ public class CourseHomeworkWrapper {
 
         @ApiModelProperty("已完成人数")
         private Integer finishNum;
+
+        @ApiModelProperty("布置时间")
+        private Date assignTime;
+
+        @ApiModelProperty("截止时间")
+        private Date expiryDate;
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+        private ELessonTrainingType type;
+
+        @ApiModelProperty("练习内容")
+        private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> trainingDetailList;
+    }
+
+
+    @Data
+    @ApiModel(value = "StudentCourseHomeworkQuery-学生课程作业详情")
+    public static class StudentCourseHomeworkQuery {
+
+        @ApiModelProperty(value = "用户ID")
+        private Long userId;
+
+        @ApiModelProperty(value = "课程编号",required = true)
+        @NotNull(message = "课程编号不能为空")
+        private Integer courseScheduleId;
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+        @NotNull(message = "作业类型不能为空")
+        private ELessonTrainingType type;
+
     }
+
+
+    @Data
+    @ApiModel(value = "AddStudentHomeworkRecord-添加学生作业记录")
+    public static class AddStudentHomeworkRecord {
+
+        @ApiModelProperty(value = "用户ID")
+        private Long userId;
+
+        @ApiModelProperty(value = "作业详情id",required = true)
+        @NotNull(message = "作业详情id不能为空")
+        private Integer id;
+
+    }
+
+
+    @Data
+    @ApiModel(value = "StudentCourseHomeworkDetail-学生课程作业详情")
+    public static class StudentCourseHomeworkDetail {
+
+        @ApiModelProperty(value = "学生作业ID")
+        private Integer studentCourseHomeworkId;
+
+        @ApiModelProperty(value = "课程ID")
+        private Long courseScheduleId;
+
+        @ApiModelProperty(value = "课程名称")
+        private String courseName;
+
+        @ApiModelProperty(value = "上课开始时间")
+        private Date startClassTime;
+
+        @ApiModelProperty(value = "作业过期时间")
+        private String expiryDate;
+
+        @ApiModelProperty(value = "结束时间")
+        private Date endClassTime;
+
+        @ApiModelProperty(value = "乐团id")
+        private String musicGroupId;
+
+        @ApiModelProperty(value = "乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty(value = "乐团图片")
+        private String musicGroupImg;
+
+        @ApiModelProperty("班级id")
+        private Integer classGroupId;
+
+        @ApiModelProperty("班级名称")
+        private String classGroupName;
+
+        @ApiModelProperty("教学形式(线上、线下)")
+        private String teachMode;
+
+        @ApiModelProperty("完成状态 false 未完成 true 已完成")
+        private Boolean finishStatus;
+
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)")
+        private ELessonTrainingType type;
+
+        @ApiModelProperty(value = "练习内容")
+        private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetail;
+    }
+
+
 }

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java

@@ -44,6 +44,52 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
     @ApiModelProperty(value = "作业创建时间")
     private Date homeworkCreateTime;
 
+    @ApiModelProperty(value = "作业id")
+    private Long extracurricularExercisesId;
+
+    @ApiModelProperty(value = "乐团id")
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "班级id")
+    private Integer classGroupId;
+
+    @ApiModelProperty(value = "作业类型")
+    private String type;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @Override
+    public Long getExtracurricularExercisesId() {
+        return extracurricularExercisesId;
+    }
+
+    @Override
+    public void setExtracurricularExercisesId(Long extracurricularExercisesId) {
+        this.extracurricularExercisesId = extracurricularExercisesId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
     public Date getHomeworkCreateTime() {
         return homeworkCreateTime;
     }

+ 117 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java

@@ -1,5 +1,8 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import io.swagger.annotations.ApiModelProperty;
+
 import java.util.Date;
 
 /**
@@ -8,23 +11,134 @@ import java.util.Date;
  */
 public class StudentHomeworkRecordDto {
 
+    @ApiModelProperty(value = "学生作业ID")
     private Integer studentCourseHomeworkId;
 
+    @ApiModelProperty(value = "课程ID")
     private Long courseScheduleId;
 
+    @ApiModelProperty(value = "课程名称")
     private String courseName;
 
+    @ApiModelProperty(value = "上课开始时间")
     private Date startClassTime;
 
+    @ApiModelProperty(value = "老师ID")
     private Integer teacherId;
 
+    @ApiModelProperty(value = "老师名称")
     private String teacherName;
 
+    @ApiModelProperty(value = "老师头像")
     private String headUrl;
 
+    @ApiModelProperty(value = "作业状态")
     private int status;
 
-    private String expiryDate;
+    @ApiModelProperty(value = "作业过期时间")
+    private Date expiryDate;
+
+
+    @ApiModelProperty(value = "结束时间")
+    private Date endClassTime;
+
+
+    @ApiModelProperty(value = "乐团id")
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "乐团名称")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "乐团图片")
+    private String musicGroupImg;
+
+
+    @ApiModelProperty("班级id")
+    private Integer classGroupId;
+
+    @ApiModelProperty("班级名称")
+    private String classGroupName;
+
+    @ApiModelProperty("教学形式(线上、线下)")
+    private String teachMode;
+
+    @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+    private ELessonTrainingType type;
+
+    @ApiModelProperty("完成状态 false 未完成 true 已完成")
+    private Boolean finishStatus;
+
+    public ELessonTrainingType getType() {
+        return type;
+    }
+
+    public void setType(ELessonTrainingType type) {
+        this.type = type;
+    }
+
+    public Boolean getFinishStatus() {
+        return finishStatus;
+    }
+
+    public void setFinishStatus(Boolean finishStatus) {
+        this.finishStatus = finishStatus;
+    }
+
+    public Date getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(Date endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getMusicGroupImg() {
+        return musicGroupImg;
+    }
+
+    public void setMusicGroupImg(String musicGroupImg) {
+        this.musicGroupImg = musicGroupImg;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public String getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(String teachMode) {
+        this.teachMode = teachMode;
+    }
 
     public String getHeadUrl() {
         return headUrl;
@@ -34,11 +148,11 @@ public class StudentHomeworkRecordDto {
         this.headUrl = headUrl;
     }
 
-    public String getExpiryDate() {
+    public Date getExpiryDate() {
         return expiryDate;
     }
 
-    public void setExpiryDate(String expiryDate) {
+    public void setExpiryDate(Date expiryDate) {
         this.expiryDate = expiryDate;
     }
 

+ 111 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java

@@ -2,10 +2,17 @@ package com.ym.mec.biz.dal.dto;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.enums.StandardEnum;
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
 /**
  * 练习内容
  * 2023-03-31 14:18:47
@@ -31,8 +38,37 @@ public class StudentLessonTrainingDetailWrapper {
         private Integer partIndex;
     }
 
+    @Data
 	@ApiModel(" StudentLessonTrainingDetail-练习内容")
     public static class StudentLessonTrainingDetail {
+
+
+        @ApiModelProperty("主键ID")
+        private Long id;
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("练习编号")
+        private Long courseHomeworkId;
+
+        @ApiModelProperty("曲目id")
+        private Long musicScoreId;
+
+        @ApiModelProperty("分谱")
+        private Integer partIndex;
+
+        @ApiModelProperty("练习速度")
+        private Integer trainingSpeed;
+
+        @ApiModelProperty("已练习次数")
+        private Integer trainingTimes;
+
+        @ApiModelProperty("练习状态")
+        private StandardEnum trainingStatus;
+
+        @ApiModelProperty("标准练习次数")
+        private Integer times;
         
         public String jsonString() {
             return JSON.toJSONString(this);
@@ -43,4 +79,79 @@ public class StudentLessonTrainingDetailWrapper {
         }
 	}
 
+
+
+    @Data
+    @ApiModel(" StudentLessonTrainingQuery-学生练习内容查询对象")
+    public static class StudentLessonTrainingQuery {
+
+
+        @ApiModelProperty(value = "用户ID")
+        private Long userId;
+
+        @ApiModelProperty(value = "课程编号",required = true)
+        @NotNull(message = "课程编号不能为空")
+        private Integer courseScheduleId;
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+        @NotNull(message = "作业类型不能为空")
+        private ELessonTrainingType type;
+
+        @ApiModelProperty(value = "声部id",hidden = true)
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "true:完成 false未完成",hidden = true)
+        private Boolean standardFlag;
+
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static StudentLessonTrainingDetail from(String json) {
+            return JSON.parseObject(json, StudentLessonTrainingDetail.class);
+        }
+	}
+
+
+
+    @Data
+    @ApiModel(" StudentLessonTrainingQuery-学生练习内容查询对象")
+    public static class StudentLessonTraining {
+
+
+        @ApiModelProperty(value = "用户ID")
+        private Long userId;
+
+        @ApiModelProperty(value = "用户名")
+        private String userName;
+
+        @ApiModelProperty(value = "头像")
+        private String avatar;
+
+        @ApiModelProperty("是否是vip")
+        private Boolean vipFlag;
+
+        @ApiModelProperty("声部id")
+        private Integer subjectId;
+
+        @ApiModelProperty("声部名称")
+        private String subjectName;
+
+        @ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
+        private StandardEnum standardFlag;
+
+        @ApiModelProperty(value = "是否完成")
+        private Boolean finishFlag;
+
+        @ApiModelProperty(value = "练习内容")
+        private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetail;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+    }
+
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java

@@ -65,6 +65,28 @@ public class WebCourseHomeworkListDto {
     @ApiModelProperty(value = "伴奏编号",required = false)
     private String musicScoreId;
 
+    @ApiModelProperty(value = "乐团名")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "截止时间")
+    private Date expiryDate;
+
+    public Date getExpiryDate() {
+        return expiryDate;
+    }
+
+    public void setExpiryDate(Date expiryDate) {
+        this.expiryDate = expiryDate;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
     public String getMusicScoreId() {
         return musicScoreId;
     }

+ 39 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java

@@ -9,6 +9,7 @@ import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -35,7 +36,7 @@ public class ExtracurricularExercises extends BaseEntity {
     private Integer classGroupId;
 
     @ApiModelProperty("作业来源分类")
-    private GroupType groupType;
+    private String groupType;
 	
 	/** 批次号 */
 	@ApiModelProperty(value="批次号")
@@ -92,9 +93,44 @@ public class ExtracurricularExercises extends BaseEntity {
 	private List<MusicScoreSubjectDto> musicScoreSubjectDtos;
 
 
+    @ApiModelProperty("乐团名")
+    private String musicGroupName;
+
+    @ApiModelProperty("班级名")
+    private String classGroupName;
+
+
+    @ApiModelProperty("布置时间")
+    private java.util.Date assignTime;
+
     @ApiModelProperty("新版作业 time:2023-03-31")
     private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
 
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public Date getAssignTime() {
+        return assignTime;
+    }
+
+    public void setAssignTime(Date assignTime) {
+        this.assignTime = assignTime;
+    }
+
     public Integer getClassGroupId() {
         return classGroupId;
     }
@@ -103,11 +139,11 @@ public class ExtracurricularExercises extends BaseEntity {
         this.classGroupId = classGroupId;
     }
 
-    public GroupType getGroupType() {
+    public String getGroupType() {
         return groupType;
     }
 
-    public void setGroupType(GroupType groupType) {
+    public void setGroupType(String groupType) {
         this.groupType = groupType;
     }
 

+ 69 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.biz.dal.enums.StandardEnum;
@@ -11,6 +13,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 对应数据库表(student_course_homework):
@@ -80,6 +83,72 @@ public class StudentCourseHomework extends BaseEntity {
 	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
 	private StandardEnum standardFlag;
 
+    @ApiModelProperty("完成状态")
+    private Boolean  finishFlag;
+
+    @ApiModelProperty("是否是vip")
+    private Boolean vipFlag;
+
+    @ApiModelProperty("声部id")
+    private Integer subjectId;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+    private ELessonTrainingType type;
+
+    @ApiModelProperty(value = "练习内容")
+    private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetail;
+
+    public List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getStudentLessonTrainingDetail() {
+        return studentLessonTrainingDetail;
+    }
+
+    public void setStudentLessonTrainingDetail(List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetail) {
+        this.studentLessonTrainingDetail = studentLessonTrainingDetail;
+    }
+
+    public ELessonTrainingType getType() {
+        return type;
+    }
+
+    public void setType(ELessonTrainingType type) {
+        this.type = type;
+    }
+
+    public Boolean getFinishFlag() {
+        return finishFlag;
+    }
+
+    public void setFinishFlag(Boolean finishFlag) {
+        this.finishFlag = finishFlag;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Boolean getVipFlag() {
+        return vipFlag;
+    }
+
+    public void setVipFlag(Boolean vipFlag) {
+        this.vipFlag = vipFlag;
+    }
+
     public GroupType getGroupType() {
         return groupType;
     }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonTrainingDetail.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.StandardEnum;
 import lombok.Data;
 
@@ -31,6 +32,10 @@ public class StudentLessonTrainingDetail implements Serializable {
 	@TableField(value = "user_id_")
     private Long userId;
 
+    @ApiModelProperty("作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)")
+    @TableField(value = "type_")
+    private ELessonTrainingType type;
+
     @ApiModelProperty("练习编号") 
 	@TableField(value = "course_homework_id_")
     private Long courseHomeworkId;

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ELessonTrainingType.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.Getter;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-04-04
+ */
+@Getter
+public enum ELessonTrainingType {
+
+    /**
+     * 课后练习
+     */
+    HOMEWORK( "课后练习"),
+
+
+    /**
+     * 课外练习
+     */
+    EXTRACURRICULAR( "课外练习"),
+
+    /**
+     * 额外练习
+     */
+    EXTRA( "额外练习")
+    ;
+
+    private String desc;
+
+    @EnumValue
+    private String code;
+
+    ELessonTrainingType(String desc) {
+        this.desc = desc;
+        this.code = name();
+    }
+
+
+
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseHomeworkQueryInfo.java

@@ -34,6 +34,18 @@ public class CourseHomeworkQueryInfo extends QueryInfo {
 
     private Date classDate;
 
+    @ApiModelProperty("完成状态 false 未完成 true 已完成")
+    private Boolean finishStatus;
+
+
+    public Boolean getFinishStatus() {
+        return finishStatus;
+    }
+
+    public void setFinishStatus(Boolean finishStatus) {
+        this.finishStatus = finishStatus;
+    }
+
     public Date getClassDate() {
         return classDate;
     }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -34,6 +35,29 @@ public class ExtraExercilseQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "是否云教练作业")
 	private Boolean cloudHomeworkFlag;
 
+
+
+    @ApiModelProperty(value = "作业练习类型(HOMEWORK,EXTRACURRICULAR,EXTRA)")
+    private ELessonTrainingType type;
+
+    @ApiModelProperty("完成状态 false 未完成 true 已完成")
+    private Boolean finishStatus;
+
+    public ELessonTrainingType getType() {
+        return type;
+    }
+
+    public void setType(ELessonTrainingType type) {
+        this.type = type;
+    }
+
+    public Boolean getFinishStatus() {
+        return finishStatus;
+    }
+
+    public void setFinishStatus(Boolean finishStatus) {
+        this.finishStatus = finishStatus;
+    }
 	public Boolean getCloudHomeworkFlag() {
 		return cloudHomeworkFlag;
 	}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -596,4 +596,11 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
 
     //修改班级基本信息
     int updateClassGroup(ClassGroup classGroup);
+
+    /**
+     * 查询班级列表
+     *
+     * @param classIds 班级id列表
+     */
+    List<ClassGroup> queryByIds(List<Integer> classIds);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.WebCourseHomeworkListDto;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
@@ -55,4 +56,11 @@ public interface CourseHomeworkService extends BaseService<Long, CourseHomework>
 	 * @return
 	 */
 	PageInfo<WebCourseHomeworkListDto> queryHomePage(CourseHomeWorkTemplateQueryInfo queryInfo);
+
+    /**
+     * 获取课后作业详情
+     *
+     * @param courseScheduleId 课程id
+     */
+    CourseHomeworkWrapper.CourseHomeworkList findCourseHomeworkDetail(Integer courseScheduleId);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
+import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
@@ -63,4 +64,10 @@ public interface ExtracurricularExercisesReplyService extends BaseService<Long,
     PageInfo<ExtraExerciseStudentsDto> findExtraExercises(ExtraExercilseReplyQueryInfo queryInfo);
 
     PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    /**
+     * 查询学生课外训练情况
+     *
+     */
+    PageInfo<StudentHomeworkRecordDto> findStudentExtraExercisesV2(ExtraExercilseQueryInfo queryInfo);
 }

+ 42 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java

@@ -1,8 +1,8 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -71,7 +71,7 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
      * @param queryInfo:
      * @return com.ym.mec.common.page.PageInfo
      */
-    PageInfo findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo);
+    PageInfo<StudentHomeworkRecordDto> findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo);
 
     /**
      * 提交作业
@@ -107,4 +107,44 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
     PageInfo<EduHomeworkStatDto> queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo);
 
     List<EduHomeworkStatDto> queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    /**
+     *  根据课程计划id查询学生作业列表
+     *
+     * @param courseScheduleIds 课程计划id列表
+     */
+    List<StudentCourseHomework> queryByCourseScheduleIds(List<Integer> courseScheduleIds);
+
+    List<StudentCourseHomework> findStudentCourseHomeworkByCourseV2(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
+    List<StudentCourseHomework> findExtraExerciseStudentsV2(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
+    /**
+     * 学生端查看练习详情
+     *
+     */
+    CourseHomeworkWrapper.StudentCourseHomeworkDetail findStudentHomeworkRecordDetail(CourseHomeworkWrapper.StudentCourseHomeworkQuery query);
+
+    /**
+     * 添加学生作业练习记录
+     */
+    Boolean addStudentHomeworkRecord(CourseHomeworkWrapper.AddStudentHomeworkRecord record);
+
+    /**
+     * 老师查看学生作业练习详情
+     *
+     * @param courseScheduleId 课程计划id
+     * @param userId 学生id
+     * @param type 作业类型
+     */
+    StudentLessonTrainingDetailWrapper.StudentLessonTraining findCourseHomeworkStudentDetailPublicV2(Long courseScheduleId, Long userId, ELessonTrainingType type);
+
+    /**
+     * 老师查看学生作业练习详情
+     *
+     * @param courseScheduleId 课程计划id
+     * @param userId 学生id
+     * @param type 作业类型
+     */
+    StudentLessonTrainingDetailWrapper.StudentLessonTraining findExtracurricularExercisesDetailPublicV2(Long courseScheduleId, Long userId, ELessonTrainingType type);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonTrainingDetailService.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 
 import java.util.Collection;
 import java.util.List;
@@ -41,4 +42,12 @@ public interface StudentLessonTrainingDetailService extends IService<StudentLess
      * @param userIdList 学生ID
      */
     List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails, List<Integer> userIdList,Long homeworkId);
+
+    /**
+     * 查询布置的作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type 作业类型
+     */
+    List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3429,6 +3429,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         return 1;
     }
 
+    /**
+     * 查询班级列表
+     *
+     * @param classIds 班级id列表
+     */
+    @Override
+    public List<ClassGroup> queryByIds(List<Integer> classIds) {
+        return classGroupDao.queryByIds(classIds);
+    }
+
     @Override
     public PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
         PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());

+ 47 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java

@@ -5,18 +5,23 @@ import com.ym.mec.biz.dal.dao.CourseHomeworkDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.StudentCourseHomeworkDao;
 import com.ym.mec.biz.dal.dao.StudentCourseHomeworkReplyDao;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.MusicScoreSubjectDto;
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.dto.TeacherHomeworkListDto;
 import com.ym.mec.biz.dal.dto.WebCourseHomeworkListDto;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
+import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
+import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -49,9 +54,15 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
 
 	@Autowired
 	private SysMessageService sysMessageService;
-	@Autowired
+    @Autowired
 	private CourseScheduleDao courseScheduleDao;
 
+    @Autowired
+    private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
+
+    @Autowired
+    private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
 	@Override
 	public BaseDAO<Long, CourseHomework> getDAO() {
 		return courseHomeworkDao;
@@ -228,4 +239,39 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    /**
+     * 获取课后作业详情
+     *
+     * @param courseScheduleId 课程id
+     */
+    @Override
+    public CourseHomeworkWrapper.CourseHomeworkList findCourseHomeworkDetail(Integer courseScheduleId) {
+
+        CourseHomeworkWrapper.CourseHomeworkQuery query = new CourseHomeworkWrapper.CourseHomeworkQuery();
+        query.setCourseScheduleId(courseScheduleId);
+        query.setPage(1);
+        query.setRows(1);
+        PageInfo<CourseHomeworkWrapper.CourseHomeworkList> courseHomeworkListPageInfo = studentExtracurricularExercisesSituationService.queryTeacherServeHomeworkDetailV2(
+            query);
+
+        List<CourseHomeworkWrapper.CourseHomeworkList> rows = courseHomeworkListPageInfo.getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            return null;
+        }
+        CourseHomeworkWrapper.CourseHomeworkList courseHomeworkList = rows.get(0);
+
+        // 设置作业信息
+        if (courseHomeworkList.getCourseHomeworkId() == null) {
+            return courseHomeworkList;
+        }
+
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> baseLessonTrainingDetail = studentLessonTrainingDetailService.getBaseLessonTrainingDetail(
+            courseHomeworkList.getCourseHomeworkId(), ELessonTrainingType.HOMEWORK);
+
+        courseHomeworkList.setTrainingDetailList(baseLessonTrainingDetail);
+        courseHomeworkList.setType(ELessonTrainingType.HOMEWORK);
+        return courseHomeworkList;
+
+    }
 }

+ 105 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -6,13 +6,16 @@ import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
@@ -27,8 +30,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -53,6 +58,13 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	@Autowired
 	private StudentServeService studentServeService;
 
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+
+    @Autowired
+    private ClassGroupDao classGroupDao;
+
 	@Override
 	public BaseDAO<Long, ExtracurricularExercisesReply> getDAO() {
 		return extracurricularExercisesReplyDao;
@@ -64,7 +76,13 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			throw new BizException("请选择课外训练");
 		}
 		List<ExtraExerciseStudentsDto> extraExerciseStudents = extracurricularExercisesReplyDao.findExtraExerciseStudents(extraExerciseId, studentName);
-		List<StudentCourseHomework> studentCourseHomeworks=new ArrayList<>();
+
+        ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(extraExerciseId);
+        if(extracurricularExercises == null){
+            throw new BizException("课外训练不存在");
+        }
+
+        List<StudentCourseHomework> studentCourseHomeworks=new ArrayList<>();
 		for (ExtraExerciseStudentsDto extraExerciseStudent : extraExerciseStudents) {
 			StudentCourseHomework studentCourseHomework=new StudentCourseHomework();
 			studentCourseHomework.setId(extraExerciseStudent.getId());
@@ -74,6 +92,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			studentCourseHomework.setIsReplied(extraExerciseStudent.getIsReplied()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
 			studentCourseHomework.setIsView(extraExerciseStudent.getIsView()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
 			studentCourseHomework.setAvatar(extraExerciseStudent.getHeadUrl());
+            studentCourseHomework.setType(ELessonTrainingType.valueOf(extracurricularExercises.getGroupType()));
 			studentCourseHomeworks.add(studentCourseHomework);
 		}
 		return studentCourseHomeworks;
@@ -128,7 +147,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	}
 
 	@Override
-	public PageInfo findStudentExtraExercises(ExtraExercilseQueryInfo queryInfo) {
+	public PageInfo<ExtraExerciseStudentsDto> findStudentExtraExercises(ExtraExercilseQueryInfo queryInfo) {
 		PageInfo<ExtraExerciseStudentsDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
@@ -257,4 +276,88 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    /**
+     * 查询学生课外训练情况
+     *
+     * @param queryInfo
+     */
+    @Override
+    public PageInfo<StudentHomeworkRecordDto> findStudentExtraExercisesV2(ExtraExercilseQueryInfo queryInfo) {
+        PageInfo<ExtraExerciseStudentsDto> studentExtraExercises = findStudentExtraExercises(queryInfo);
+
+        // 构建返回数据
+        List<ExtraExerciseStudentsDto> rows = studentExtraExercises.getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            return new PageInfo<>();
+        }
+        List<StudentHomeworkRecordDto> recordDtoList = new ArrayList<>();
+        for (ExtraExerciseStudentsDto row : rows) {
+            StudentHomeworkRecordDto studentHomeworkRecordDto = new StudentHomeworkRecordDto();
+            studentHomeworkRecordDto.setStudentCourseHomeworkId(row.getExtracurricularExercisesId().intValue());
+            studentHomeworkRecordDto.setTeacherId(row.getTeacherId());
+            studentHomeworkRecordDto.setTeacherName(row.getTeacherName());
+            studentHomeworkRecordDto.setHeadUrl(row.getHeadUrl());
+            studentHomeworkRecordDto.setHeadUrl(row.getHeadUrl());
+            studentHomeworkRecordDto.setStatus(row.getStatus());
+            studentHomeworkRecordDto.setExpiryDate(row.getExpireDate());
+            studentHomeworkRecordDto.setMusicGroupId(row.getMusicGroupId());
+            studentHomeworkRecordDto.setClassGroupId(row.getClassGroupId());
+            studentHomeworkRecordDto.setType(ELessonTrainingType.valueOf(row.getType()));
+            recordDtoList.add(studentHomeworkRecordDto);
+        }
+
+
+        // 构建返回数据
+
+        // 乐团信息
+
+        // 乐团信息
+        List<String> musicGroupIds = recordDtoList.stream().map(e -> e.getMusicGroupId())
+            .filter(Objects::nonNull).collect(Collectors.toList());
+        Map<String, MusicGroup> musicGroupMap = new HashMap<>();
+
+        if (!CollectionUtils.isEmpty(musicGroupIds)) {
+            List<MusicGroup> musicGroups = musicGroupService.queryListByIds(new HashSet<>(musicGroupIds));
+            musicGroupMap = musicGroups.stream().collect(Collectors.toMap(MusicGroup::getId, Function.identity()));
+        }
+
+        // 班级名称
+
+        List<Integer> classIds = recordDtoList.stream().map(e -> e.getClassGroupId())
+                                              .filter(Objects::nonNull).collect(Collectors.toList());
+        Map<Integer, ClassGroup> classGroupMap = new HashMap<>();
+
+        if (!CollectionUtils.isEmpty(classIds)) {
+            List<ClassGroup> classGroups = classGroupDao.queryByIds(classIds);
+            classGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, Function.identity()));
+        }
+
+        for (StudentHomeworkRecordDto studentHomeworkRecordDto : recordDtoList) {
+            // 乐团信息
+            MusicGroup musicGroup = musicGroupMap.get(studentHomeworkRecordDto.getMusicGroupId());
+            if (Objects.nonNull(musicGroup)) {
+                studentHomeworkRecordDto.setMusicGroupName(musicGroup.getName());
+                studentHomeworkRecordDto.setMusicGroupImg(musicGroup.getImg());
+            }
+
+            // 班级信息
+            ClassGroup classGroup = classGroupMap.get(studentHomeworkRecordDto.getClassGroupId());
+            if (Objects.nonNull(classGroup)) {
+                studentHomeworkRecordDto.setClassGroupName(classGroup.getName());
+            }
+
+            // 设置完成状态
+            if (studentHomeworkRecordDto.getStatus() == 0) {
+                studentHomeworkRecordDto.setFinishStatus(false);
+            } else {
+                studentHomeworkRecordDto.setFinishStatus(true);
+            }
+        }
+
+        PageInfo<StudentHomeworkRecordDto> pageInfo = new PageInfo<>(studentExtraExercises.getPageNo(),studentExtraExercises.getLimit());
+        pageInfo.setRows(recordDtoList);
+        pageInfo.setTotal(studentExtraExercises.getTotal());
+        return pageInfo;
+    }
 }

+ 271 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -7,18 +7,29 @@ import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.enums.StandardEnum;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.StudentService;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -105,6 +116,12 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     @Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 
+    @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+
+    @Autowired
+    private MusicGroupService musicGroupService;
+
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
         return studentCourseHomeworkDao;
@@ -381,7 +398,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     }
 
     @Override
-    public PageInfo findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo) {
+    public PageInfo<StudentHomeworkRecordDto> findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo) {
         PageInfo<StudentHomeworkRecordDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
@@ -404,6 +421,47 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         if (count == 0) {
             dataList = new ArrayList<>();
         }
+
+        // 构建返回数据
+
+        // 乐团信息
+
+        // 乐团信息
+        List<String> musicGroupIds = dataList.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toList());
+
+        List<MusicGroup> musicGroups = musicGroupService.queryListByIds(new HashSet<>(musicGroupIds));
+        Map<String, MusicGroup> musicGroupMap = musicGroups.stream().collect(Collectors.toMap(MusicGroup::getId, Function.identity()));
+
+
+        // 班级名称
+
+        List<Integer> classIds = dataList.stream().map(e -> e.getClassGroupId()).collect(Collectors.toList());
+
+        List<ClassGroup> classGroups = classGroupDao.queryByIds(classIds);
+        Map<Integer, ClassGroup> classGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, Function.identity()));
+
+        for (StudentHomeworkRecordDto studentHomeworkRecordDto : dataList) {
+            // 乐团信息
+            MusicGroup musicGroup = musicGroupMap.get(studentHomeworkRecordDto.getMusicGroupId());
+            if (Objects.nonNull(musicGroup)) {
+                studentHomeworkRecordDto.setMusicGroupName(musicGroup.getName());
+                studentHomeworkRecordDto.setMusicGroupImg(musicGroup.getImg());
+            }
+
+            // 班级信息
+            ClassGroup classGroup = classGroupMap.get(studentHomeworkRecordDto.getClassGroupId());
+            if (Objects.nonNull(classGroup)) {
+                studentHomeworkRecordDto.setClassGroupName(classGroup.getName());
+            }
+
+            // 设置完成状态
+            if (studentHomeworkRecordDto.getStatus() == 0) {
+                studentHomeworkRecordDto.setFinishStatus(false);
+            } else {
+                studentHomeworkRecordDto.setFinishStatus(true);
+            }
+        }
+
         pageInfo.setRows(dataList);
         return pageInfo;
     }
@@ -672,4 +730,216 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         }
         return dataList;
     }
+
+    /**
+     * 根据课程计划id查询学生作业列表
+     *
+     * @param courseScheduleIds 课程计划id列表
+     */
+    @Override
+    public List<StudentCourseHomework> queryByCourseScheduleIds(List<Integer> courseScheduleIds) {
+        return studentCourseHomeworkDao.findByCourseScheduleIds(courseScheduleIds);
+    }
+
+    @Override
+    public List<StudentCourseHomework> findStudentCourseHomeworkByCourseV2(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query) {
+        List<StudentCourseHomework> studentCourseHomeworkByCourse = findStudentCourseHomeworkByCourse(
+            query.getCourseScheduleId().longValue(), null, null);
+        for (StudentCourseHomework studentCourseHomework : studentCourseHomeworkByCourse) {
+            studentCourseHomework.setType(ELessonTrainingType.HOMEWORK);
+        }
+        return getStudentCourseHomeworks(studentCourseHomeworkByCourse);
+
+    }
+
+    @NotNull
+    private List<StudentCourseHomework> getStudentCourseHomeworks(List<StudentCourseHomework> studentCourseHomeworkByCourse) {
+        if (CollectionUtils.isEmpty(studentCourseHomeworkByCourse)) {
+            return Collections.emptyList();
+        }
+
+        // 设置是否会员
+
+        // 获取用户id集合
+        List<Integer> userIds = studentCourseHomeworkByCourse.stream().map(StudentCourseHomework::getUserId).collect(Collectors.toList());
+
+        // 获取学生列表
+        List<Student> students = studentDao.findByStudentIds(userIds);
+        if (CollectionUtils.isEmpty(students)) {
+            return studentCourseHomeworkByCourse;
+        }
+        // 转map
+        Map<Integer, Student> studentMap = students.stream().collect(Collectors.toMap(Student::getId, s -> s, (s1, s2) -> s1));
+        for (StudentCourseHomework studentCourseHomework : studentCourseHomeworkByCourse) {
+            if (studentMap.containsKey(studentCourseHomework.getUserId())) {
+                Student student = studentMap.get(studentCourseHomework.getUserId());
+                if ((student.getMembershipEndTime() == null || student.getMembershipEndTime().compareTo(new Date()) < 0) &&
+                    (student.getExperienceMembershipEndTime() == null || student.getExperienceMembershipEndTime().compareTo(new Date()) < 0)) {
+                    studentCourseHomework.setVipFlag(false);
+                } else {
+                    studentCourseHomework.setVipFlag(true);
+                }
+                studentCourseHomework.setSubjectId(Integer.parseInt(student.getSubjectIdList()));
+            }
+        }
+
+
+        // 设置声部
+
+        // 获取声部id集合
+        List<Integer> voicePartIds = students.stream().map(Student::getSubjectIdList).map(Integer::parseInt).collect(Collectors.toList());
+
+        if (CollectionUtils.isEmpty(voicePartIds)) {
+            return studentCourseHomeworkByCourse;
+        }
+
+        List<Subject> subjectList = subjectDao.findBySubjectIds(voicePartIds);
+        // 转map
+        Map<Integer, Subject> subjectMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, s -> s, (s1, s2) -> s1));
+        for (StudentCourseHomework studentCourseHomework : studentCourseHomeworkByCourse) {
+            if (subjectMap.containsKey(studentCourseHomework.getSubjectId())) {
+                studentCourseHomework.setSubjectName(subjectMap.get(studentCourseHomework.getSubjectId()).getName());
+            }
+        }
+
+        // 设置完成状态
+        for (StudentCourseHomework studentCourseHomework : studentCourseHomeworkByCourse) {
+            if( studentCourseHomework.getStandardFlag().equals(StandardEnum.STANDARD) || studentCourseHomework.getStandardFlag().equals(StandardEnum.EXCELLENT)) {
+                studentCourseHomework.setFinishFlag(true);
+            } else {
+                studentCourseHomework.setFinishFlag(false);
+            }
+        }
+
+        // 设置每个学生的作业完成情况
+        List<Integer> studentIds = studentCourseHomeworkByCourse.stream().map(StudentCourseHomework::getUserId).collect(Collectors.toList());
+
+        StudentCourseHomework studentCourseHomework = studentCourseHomeworkByCourse.get(0);
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetails = studentCourseHomeworkDao
+            .findByStudentIdsAndCourseScheduleId(studentIds, studentCourseHomework.getCourseHomeworkId(),studentCourseHomework.getType());
+
+        if (!CollectionUtils.isEmpty(studentLessonTrainingDetails)) {
+            // 按userid分组 ,
+            Map<Long, List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail>> studentLessonTrainingDetailMap = studentLessonTrainingDetails.stream()
+                .collect(Collectors.groupingBy(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail::getUserId,
+                                               LinkedHashMap::new, Collectors.toList()));
+
+            for (StudentCourseHomework studentCourseHomework1 : studentCourseHomeworkByCourse) {
+                if (studentLessonTrainingDetailMap.containsKey(studentCourseHomework1.getUserId().longValue())) {
+                    List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetails1 = studentLessonTrainingDetailMap.get(studentCourseHomework1.getUserId().longValue());
+                    studentCourseHomework1.setStudentLessonTrainingDetail(studentLessonTrainingDetails1);
+                }
+            }
+        }
+
+        return studentCourseHomeworkByCourse;
+    }
+
+    @Override
+    public List<StudentCourseHomework> findExtraExerciseStudentsV2(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query) {
+        List<StudentCourseHomework> extraExerciseStudents = extracurricularExercisesReplyService.findExtraExerciseStudents(
+            query.getCourseScheduleId().longValue(), null);
+        for (StudentCourseHomework studentCourseHomework : extraExerciseStudents) {
+            studentCourseHomework.setType(ELessonTrainingType.EXTRACURRICULAR);
+        }
+        return getStudentCourseHomeworks(extraExerciseStudents);
+    }
+
+    /**
+     * 学生端查看练习详情
+     *
+     * @param query
+     */
+    @Override
+    public CourseHomeworkWrapper.StudentCourseHomeworkDetail findStudentHomeworkRecordDetail(CourseHomeworkWrapper.StudentCourseHomeworkQuery query) {
+        return null;
+    }
+
+    /**
+     * 添加学生作业练习记录
+     *
+     * @param record
+     */
+    @Override
+    public Boolean addStudentHomeworkRecord(CourseHomeworkWrapper.AddStudentHomeworkRecord record) {
+        return null;
+    }
+
+    /**
+     * 老师查看学生作业练习详情
+     *
+     * @param courseScheduleId 课程计划id
+     * @param userId           学生id
+     * @param type             作业类型
+     */
+    @Override
+    public StudentLessonTrainingDetailWrapper.StudentLessonTraining findCourseHomeworkStudentDetailPublicV2(Long courseScheduleId, Long userId, ELessonTrainingType type) {
+
+        StudentLessonTrainingDetailWrapper.StudentLessonTraining studentLessonTraining = getUserInfo(userId);
+
+        // 作业信息
+        CourseHomeworkStudentDetailDto courseHomeworkStudentDetail = studentCourseHomeworkDao.findCourseHomeworkStudentDetail(
+            courseScheduleId, userId);
+        if (courseHomeworkStudentDetail == null) {
+            throw new BizException("作业不存在");
+        }
+        studentLessonTraining.setStandardFlag(courseHomeworkStudentDetail.getStandardFlag());
+
+        // 作业完成情况
+        if( courseHomeworkStudentDetail.getStandardFlag().equals(StandardEnum.STANDARD) || courseHomeworkStudentDetail.getStandardFlag().equals(StandardEnum.EXCELLENT)) {
+            studentLessonTraining.setFinishFlag(true);
+        } else {
+            studentLessonTraining.setFinishFlag(false);
+        }
+
+        // 练习内容
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetails = studentCourseHomeworkDao
+            .findByStudentIdsAndCourseScheduleId(Collections.singletonList(userId.intValue()), courseHomeworkStudentDetail.getCourseHomeworkId(),type);
+
+        studentLessonTraining.setStudentLessonTrainingDetail(studentLessonTrainingDetails);
+        return studentLessonTraining;
+
+    }
+
+    @Override
+    public StudentLessonTrainingDetailWrapper.StudentLessonTraining findExtracurricularExercisesDetailPublicV2(Long courseScheduleId, Long userId, ELessonTrainingType type) {
+        StudentLessonTrainingDetailWrapper.StudentLessonTraining userInfo = getUserInfo(userId);
+
+        // extracurricularExercisesReplyDao.findExtraExerciseStudentDetail(courseScheduleId, userId);
+
+        // 作业完成情况 TODO
+
+        return userInfo;
+    }
+
+    @NotNull
+    private StudentLessonTrainingDetailWrapper.StudentLessonTraining getUserInfo(Long userId) {
+        SysUser sysUser = sysUserFeignService.queryUserById(userId.intValue());
+        if (sysUser == null) {
+            throw new BizException("用户不存在");
+        }
+        StudentLessonTrainingDetailWrapper.StudentLessonTraining studentLessonTraining = new StudentLessonTrainingDetailWrapper.StudentLessonTraining();
+
+        studentLessonTraining.setUserId(userId.longValue());
+        studentLessonTraining.setUserName(sysUser.getRealName());
+        studentLessonTraining.setAvatar(sysUser.getAvatar());
+        Student student = studentDao.get(studentLessonTraining.getUserId().intValue());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        if ((student.getMembershipEndTime() == null || student.getMembershipEndTime().compareTo(new Date()) < 0) &&
+            (student.getExperienceMembershipEndTime() == null || student.getExperienceMembershipEndTime().compareTo(new Date()) < 0)) {
+            studentLessonTraining.setVipFlag(false);
+        } else {
+            studentLessonTraining.setVipFlag(true);
+        }
+        // 声部
+        Subject subject = subjectDao.get(Integer.parseInt(student.getSubjectIdList()));
+        if (subject == null) {
+            throw new BizException("声部不存在");
+        }
+        studentLessonTraining.setSubjectId(subject.getId());
+        studentLessonTraining.setSubjectName(subject.getName());
+        return studentLessonTraining;
+    }
 }

+ 74 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -1,15 +1,22 @@
 package com.ym.mec.biz.service.impl;
 
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.constant.CommonConstants;
@@ -33,6 +40,7 @@ import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -67,6 +75,15 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	@Autowired
 	private CourseScheduleStatisticsDao courseScheduleStatisticsDao;
 
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+    @Autowired
+    private ClassGroupService classGroupService;
+
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+
 	@Override
 	public BaseDAO<Long, StudentExtracurricularExercisesSituation> getDAO() {
 		return studentExtracurricularExercisesSituationDao;
@@ -662,8 +679,64 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
         }
 
         // 查出课程列表
-        courseScheduleDao.queryTeacherServeHomeworkDetailV2(queryInfo, courseIds);
+        List<CourseHomeworkWrapper.CourseHomeworkList> courseHomeworkLists = courseScheduleDao.queryTeacherServeHomeworkDetailV2(
+            queryInfo, courseIds);
+        if (CollectionUtils.isEmpty(courseHomeworkLists)) {
+            return pageInfo;
+        }
+
+        // 乐团信息
+        List<String> musicGroupIds = courseHomeworkLists.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toList());
+
+        List<MusicGroup> musicGroups = musicGroupService.queryListByIds(new HashSet<>(musicGroupIds));
+        Map<String, MusicGroup> musicGroupMap = musicGroups.stream().collect(Collectors.toMap(MusicGroup::getId, Function.identity()));
+
+
+        // 班级名称
+
+        List<Integer> classIds = courseHomeworkLists.stream().map(e -> e.getClassGroupId()).collect(Collectors.toList());
+
+        List<ClassGroup> classGroups = classGroupService.queryByIds(classIds);
+        Map<Integer, ClassGroup> classGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, Function.identity()));
+
+        // 布置人员 和完成人员
+
+        List<Integer> courseScheduleIds = courseHomeworkLists.stream().filter(e -> !e.getHomeWorkStatus().equals(
+            EHomeWorkStatus.UNASSIGNED)).map(e -> e.getCourseScheduleId()).collect(Collectors.toList());
+
+        List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkService.queryByCourseScheduleIds(
+            courseScheduleIds);
+
+        Map<Long, List<StudentCourseHomework>> studentCourseHomeworkMap = studentCourseHomeworks.stream().collect(Collectors.groupingBy(StudentCourseHomework::getCourseScheduleId));
+
+
+        for (CourseHomeworkWrapper.CourseHomeworkList courseHomeworkList : courseHomeworkLists) {
+
+            courseHomeworkList.setType(ELessonTrainingType.HOMEWORK);
+            // 乐团信息
+            MusicGroup musicGroup = musicGroupMap.get(courseHomeworkList.getMusicGroupId());
+            if (Objects.nonNull(musicGroup)) {
+                courseHomeworkList.setMusicGroupName(musicGroup.getName());
+                courseHomeworkList.setMusicGroupImg(musicGroup.getImg());
+            }
+
+            // 班级信息
+            ClassGroup classGroup = classGroupMap.get(courseHomeworkList.getClassGroupId());
+            if (Objects.nonNull(classGroup)) {
+                courseHomeworkList.setClassGroupName(classGroup.getName());
+            }
+
+            // 布置人员 和完成人员
+            List<StudentCourseHomework> studentCourseHomeworkList = studentCourseHomeworkMap.get(courseHomeworkList.getCourseScheduleId());
+            if (!CollectionUtils.isEmpty(studentCourseHomeworkList)) {
+                courseHomeworkList.setStudentNum(studentCourseHomeworkList.size());
+                courseHomeworkList.setFinishNum(studentCourseHomeworkList.stream().filter(e -> e.getStandardFlag().equals(StandardEnum.STANDARD) || e.getStandardFlag().equals(StandardEnum.EXCELLENT)).collect(
+                    Collectors.toList()).size());
+            }
+        }
+
 
+        pageInfo.setRows(courseHomeworkLists);
         return pageInfo;
     }
 

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.StudentLessonTrainingDetailMapper;
 import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 import lombok.extern.slf4j.Slf4j;
@@ -96,4 +97,24 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
         }
         return result;
     }
+
+    /**
+     * 查询布置的作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type             作业类型
+     */
+    @Override
+    public List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type) {
+        List<StudentLessonTrainingDetail> list = this.lambdaQuery()
+                                                     .eq(StudentLessonTrainingDetail::getCourseHomeworkId,
+                                                         courseHomeworkId)
+                                                     .isNull(StudentLessonTrainingDetail::getUserId)
+                                                     .eq(StudentLessonTrainingDetail::getType, type)
+                                                     .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        return JSON.parseArray(JSON.toJSONString(list),StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail.class);
+    }
 }

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -1643,4 +1643,12 @@
         </foreach>
         AND cs.convert_flag_ = 1 AND cs.status_ = 'NOT_START' AND cs.del_flag_ = 0 AND cs.is_lock_ = 0
     </select>
+
+    <select id="queryByIds" resultType="com.ym.mec.biz.dal.entity.ClassGroup">
+        select * from class_group where id_ in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+
+    </select>
 </mapper>

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -291,7 +291,7 @@
 		SELECT ch.id_,cs.id_ course_schedule_id_,cs.name_ course_schedule_name_,
 		cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.organ_id_,o.name_ organ_name_,
 		mg.id_ group_id_,mg.name_ group_name_,ch.create_time_,cs.actual_teacher_id_,
-		su.real_name_ actual_teacher_name_,ch.completed_num_,ch.expect_num_,cs.group_type_,sch.music_score_id_
+		su.real_name_ actual_teacher_name_,ch.completed_num_,ch.expect_num_,cs.group_type_,sch.music_score_id_,mg.name_ as musicGroupName,ch.expiry_date_ as expiryDate
 		FROM course_homework ch
 		LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = ch.course_schedule_id_
@@ -332,7 +332,9 @@
 			<if test="search != null and search != ''">
 				AND (cs.id_ = #{search} OR cs.name_ LIKE CONCAT('%',#{search},'%')
 				OR mg.name_ LIKE CONCAT('%',#{search},'%')
-				OR su.real_name_ LIKE CONCAT('%',#{search},'%') OR mg.id_ = #{search} OR cs.actual_teacher_id_ = #{search})
+				OR su.real_name_ LIKE CONCAT('%',#{search},'%')
+                OR mg.id_ = #{search}
+                OR cs.actual_teacher_id_ = #{search})
 			</if>
 		</where>
 	</sql>

+ 7 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4134,6 +4134,7 @@
             resultType="com.ym.mec.biz.dal.dto.CourseHomeworkWrapper$CourseHomeworkList">
         SELECT
         cs.id_ as courseScheduleId,
+        ch.id_ as courseHomeworkId,
         cs.class_date_ as classDate,
         cs.start_class_time_ as startTime,
         cs.end_class_time_ as endTime,
@@ -4141,7 +4142,8 @@
         cs.teacher_id_ as teacherId,
         cs.music_group_id_ as musicGroupId,
         cs.type_ as classType,
-        cs.teach_mode_ as teachMode
+        cs.teach_mode_ as teachMode,
+        cs.class_group_id_ as classGroupId
         from course_schedule cs
         left join course_homework ch on cs.id_ = ch.course_schedule_id_
 
@@ -4169,6 +4171,10 @@
                     #{courseId}
                 </foreach>
             </if>
+            <if test="param.courseScheduleId != null">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
         </where>
+        limit (#{param.rows} - 1) * #{param.page},#{param.rows}
     </select>
 </mapper>

+ 5 - 1
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml

@@ -24,6 +24,7 @@
 		<result column="organ_name_" property="organName" />
 		<result column="tenant_id_" property="tenantId" />
 		<result column="music_score_id_" property="musicScoreId" />
+		<result column="assignTime" property="assignTime" />
 	</resultMap>
 
 	<sql id="queryPageCondition">
@@ -56,6 +57,9 @@
 			<if test="cloudHomeworkFlag != null and cloudHomeworkFlag == false">
 				AND (eer.music_score_id_ IS NULL OR eer.music_score_id_ = '')
 			</if>
+            <if test="type != null">
+                and ee.group_type_ = #{type}
+            </if>
 		</where>
 	</sql>
 	
@@ -124,7 +128,7 @@
 	<select id="queryPage" resultMap="ExtracurricularExercises" parameterType="map">
 		SELECT ee.id_,ee.teacher_id_,ee.student_id_list_,ee.batch_no_,ee.title_,ee.attachments_,ee.music_group_id_,
 		       ee.content_,ee.expire_date_,ee.completed_num_,ee.expect_num_,ee.create_time_,ee.update_time_,ee.tenant_id_
-		     ,u.real_name_ username_,o.name_ organ_name_,eer.music_score_id_
+		     ,u.real_name_ username_,o.name_ organ_name_,eer.music_score_id_,ee.create_time_ as assignTime
 		FROM extracurricular_exercises ee LEFT JOIN sys_user u ON ee.teacher_id_ = u.id_
 		LEFT JOIN teacher t ON t.id_ = ee.teacher_id_
 		LEFT JOIN organization o ON o.id_ = t.organ_id_

+ 19 - 0
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml

@@ -41,6 +41,10 @@
 		<result column="music_score_id_" property="musicScoreId" />
 		<result column="music_score_content_" property="musicScoreContent" />
 		<result column="homework_create_time_" property="homeworkCreateTime" />
+		<result column="extracurricularExercisesId" property="extracurricularExercisesId" />
+		<result column="musicGroupId" property="musicGroupId" />
+		<result column="type" property="type" />
+		<result column="classGroupId" property="classGroupId" />
 	</resultMap>
 
 	<sql id="queryPageCondition">
@@ -238,6 +242,17 @@
 			<if test="createTime!=null">
 				AND DATE_FORMAT(eer.create_time_, '%Y-%m') = DATE_FORMAT(#{createTime}, '%Y-%m')
 			</if>
+            <if test="type != null">
+                and ee.group_type_ = #{type}
+            </if>
+            <if test="finishStatus != null">
+                <if test="finishStatus == true">
+                    and eer.standard_flag_ in ('STANDARD','EXCELLENT')
+                </if>
+                <if test="finishStatus == false">
+                    and eer.standard_flag_  not in ('STANDARD','EXCELLENT')
+                </if>
+            </if>
 		</where>
 	</sql>
 	<select id="countStudentExtraExercises" resultType="int">
@@ -250,6 +265,10 @@
 			ee.title_,
 			ee.expire_date_,
 			ee.teacher_id_,
+        ee.group_type_  as `type`,
+            ee.id_ as extracurricularExercisesId,
+            ee.music_group_id_ as musicGroupId,
+            eer.class_group_id_ as classGroupId,
 			tea.real_name_ teacher_name_,
 			tea.avatar_,
 			su.username_ student_name_

+ 48 - 1
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -364,6 +364,10 @@
         <result property="expiryDate" column="expiry_date_"/>
         <result property="teacherName" column="real_name_"/>
         <result property="headUrl" column="avatar_"/>
+        <result property="endClassTime" column="endClassTime"/>
+        <result property="musicGroupId" column="musicGroupId"/>
+        <result property="classGroupId" column="classGroupId"/>
+        <result property="teachMode" column="teachMode"/>
     </resultMap>
     <select id="findStudentHomeworkRecord" resultMap="StudentHomeworkRecordDto">
         SELECT
@@ -371,11 +375,15 @@
         sch.course_schedule_id_,
         cs.name_ course_name_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+        CONCAT(cs.class_date_,' ',cs.end_class_time_) endClassTime,
         cs.actual_teacher_id_,
         sch.status_,
         ch.expiry_date_,
         su.real_name_,
-        su.avatar_
+        su.avatar_,
+        cs.music_group_id_ as musicGroupId,
+        cs.class_group_id_ as classGroupId,
+        cs.teach_mode_ as teachMode
         FROM
         student_course_homework sch
         LEFT JOIN course_homework ch ON ch.id_ = sch.course_homework_id_
@@ -383,6 +391,14 @@
         LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
         WHERE sch.user_id_=#{userId} AND cs.pre_course_flag_ = 0
         AND DATE_FORMAT(class_date_, '%Y-%m')=DATE_FORMAT(#{classDate}, '%Y-%m')
+        <if test="finishStatus != null">
+            <if test="finishStatus == true">
+                and sch.standard_flag_ in ('STANDARD','EXCELLENT')
+            </if>
+            <if test="finishStatus == false">
+                and sch.standard_flag_  not in ('STANDARD','EXCELLENT')
+            </if>
+        </if>
         ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC
         <include refid="global.limit"/>
     </select>
@@ -392,6 +408,14 @@
                  LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
         WHERE sch.user_id_ = #{userId}
           AND DATE_FORMAT(class_date_, '%Y-%m') = DATE_FORMAT(#{classDate}, '%Y-%m')
+        <if test="finishStatus != null">
+            <if test="finishStatus == true">
+                and sch.standard_flag_ in ('STANDARD','EXCELLENT')
+            </if>
+            <if test="finishStatus == false">
+                and sch.standard_flag_  not in ('STANDARD','EXCELLENT')
+            </if>
+        </if>
     </select>
     <select id="findByCourses" resultMap="StudentCourseHomework">
         SELECT * FROM student_course_homework WHERE course_schedule_id_ IN
@@ -643,4 +667,27 @@
             ]]></if>
         </where>
     </sql>
+
+    <select id="findByCourseScheduleIds" resultType="com.ym.mec.biz.dal.entity.StudentCourseHomework">
+        select *
+        from student_course_homework
+        where course_schedule_id_ in
+        <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+
+    </select>
+
+    <select id="findByStudentIdsAndCourseScheduleId"
+            resultType="com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper$StudentLessonTrainingDetail">
+        SELECT * from student_lesson_training_detail s
+        where s.user_id_ in
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        and s.course_homework_id_ = #{courseHomeworkId}
+        and s.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+
+        order by s.id_
+    </select>
 </mapper>

+ 10 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesReplyController.java

@@ -1,11 +1,13 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -35,6 +37,14 @@ public class ExtracurricularExercisesReplyController extends BaseController {
         return succeed(extracurricularExercisesReplyService.findStudentExtraExercises(queryInfo));
     }
 
+    @ApiOperation(value = "获取学生的课外训练列表")
+    @GetMapping("/findStudentExtraExercises/v2")
+    public HttpResponseResult<PageInfo<StudentHomeworkRecordDto>> findStudentExtraExercisesV2(ExtraExercilseQueryInfo queryInfo){
+        queryInfo.setStudentId(sysUserService.getUserId());
+        return succeed(extracurricularExercisesReplyService.findStudentExtraExercisesV2(queryInfo));
+    }
+
+
     @ApiOperation(value = "获取课外训练学生")
     @GetMapping("/findExtraExerciseStudents")
     public HttpResponseResult findExtraExerciseStudents(Long extraExerciseId,String studentName){

+ 22 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -93,11 +95,30 @@ public class StudentCourseHomeworkController extends BaseController {
 
     @ApiOperation(value = "获取学生作业记录")
     @GetMapping(value = "/findStudentHomeworkRecord")
-    public HttpResponseResult findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentHomeworkRecordDto>> findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo){
         queryInfo.setUserId(sysUserService.getUserId().longValue());
         return succeed(studentCourseHomeworkService.findStudentHomeworkRecord(queryInfo));
     }
 
+
+    @ApiOperation(value = "获取学生作业详情")
+    @GetMapping(value = "/findStudentHomeworkRecordDetail")
+    public HttpResponseResult<CourseHomeworkWrapper.StudentCourseHomeworkDetail>
+            findStudentHomeworkRecordDetail(CourseHomeworkWrapper.StudentCourseHomeworkQuery query){
+        query.setUserId(sysUserService.getUserId().longValue());
+        return succeed(studentCourseHomeworkService.findStudentHomeworkRecordDetail(query));
+    }
+
+
+
+    @ApiOperation(value = "添加作业练习记录")
+    @GetMapping(value = "/addStudentHomeworkRecord")
+    public HttpResponseResult<Boolean>
+        addStudentHomeworkRecord(CourseHomeworkWrapper.AddStudentHomeworkRecord query){
+        query.setUserId(sysUserService.getUserId().longValue());
+        return succeed(studentCourseHomeworkService.addStudentHomeworkRecord(query));
+    }
+
     @ApiOperation(value = "分页查询作业列表")
     @PostMapping(value = "/queryPage")
     public Object queryPage(@RequestBody(required = false) CourseHomeworkQueryInfo queryInfo){

+ 1 - 0
mec-student/src/main/java/com/ym/mec/student/controller/WechatController.java

@@ -1,3 +1,4 @@
+
 package com.ym.mec.student.controller;
 
 import io.swagger.annotations.Api;

+ 47 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java

@@ -3,9 +3,12 @@ package com.ym.mec.teacher.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
@@ -19,10 +22,15 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -132,4 +140,43 @@ public class CourseHomeworkController extends BaseController {
         }
     }
 
+
+
+    @ApiOperation(value = "获取作业详情")
+    @GetMapping(value = "/findCourseHomeworkDetail")
+    public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList> findCourseHomeworkDetail(Integer courseScheduleId){
+
+        return succeed(courseHomeworkService.findCourseHomeworkDetail(courseScheduleId));
+    }
+
+
+
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生-公用")
+    @PostMapping("/findCourseStudentsPublic/v2")
+    public HttpResponseResult<List<StudentCourseHomework>> findCourseStudentsPublicV2(@Validated @RequestBody StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query){
+        if(!ELessonTrainingType.HOMEWORK.equals(query.getType())){
+            if (Objects.isNull(query.getCourseScheduleId())) {
+                throw new BizException("请指定课程");
+            }
+            return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourseV2(query));
+        }else{
+            return succeed(studentCourseHomeworkService.findExtraExerciseStudentsV2(query));
+        }
+    }
+
+
+
+    @ApiOperation(value = "查询单个学生的训练")
+    @GetMapping("/findCourseHomeworkStudentDetailPublic/v2")
+    public HttpResponseResult<StudentLessonTrainingDetailWrapper.StudentLessonTraining> findCourseHomeworkStudentDetailPublicV2(@RequestParam Long courseScheduleId, @RequestParam Long userId, @RequestParam ELessonTrainingType type){
+        if(!ELessonTrainingType.HOMEWORK.equals(type)){
+
+            // 获取学生作业界面详细信息
+            return succeed(studentCourseHomeworkService.findCourseHomeworkStudentDetailPublicV2(courseScheduleId, userId,type));
+        }else{
+
+            return succeed(studentCourseHomeworkService.findExtracurricularExercisesDetailPublicV2(courseScheduleId, userId, type));
+        }
+    }
 }

+ 40 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -2,26 +2,34 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseHomework;
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 
 @RequestMapping("teacher")
 @Api(tags = "教师服务")
@@ -35,6 +43,12 @@ public class TeacherController extends BaseController {
     @Autowired
     private ClassGroupService classGroupService;
 
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+
     @ApiOperation(value = "获取老师列表(基本信息)")
     @GetMapping("/queryTeacherBasicInfo")
     @PreAuthorize("@pcs.hasPermissions('teacher/queryTeacherBasicInfo')")
@@ -189,4 +203,30 @@ public class TeacherController extends BaseController {
     public HttpResponseResult<PageInfo<BasicUserDto>> queryStudent(QueryInfo queryInfo){
         return succeed(teacherService.queryStudent(queryInfo));
     }
+
+
+
+
+    @ApiOperation(value = "获取作业详情")
+    @GetMapping(value = "/findCourseHomeworkDetail")
+    public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList> findCourseHomeworkDetail(Integer courseScheduleId){
+
+        return succeed(courseHomeworkService.findCourseHomeworkDetail(courseScheduleId));
+    }
+
+
+
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生-公用")
+    @PostMapping("/findCourseStudentsPublic/v2")
+    public HttpResponseResult<List<StudentCourseHomework>> findCourseStudentsPublicV2(@Validated @RequestBody StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query){
+        if(!ELessonTrainingType.HOMEWORK.equals(query.getType())){
+            if (Objects.isNull(query.getCourseScheduleId())) {
+                throw new BizException("请指定课程");
+            }
+            return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourseV2(query));
+        }else{
+            return succeed(studentCourseHomeworkService.findExtraExerciseStudentsV2(query));
+        }
+    }
 }

+ 3 - 1
mec-web/src/main/java/com/ym/mec/web/controller/WebCourseHomeworkController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.WebCourseHomeworkListDto;
 import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
@@ -9,6 +10,7 @@ import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,7 +38,7 @@ public class WebCourseHomeworkController extends BaseController {
 
     @ApiOperation(value = "分页查询作业列表")
     @GetMapping(value = "/queryHomePage")
-    public Object queryPage(CourseHomeWorkTemplateQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<WebCourseHomeworkListDto>> queryPage(CourseHomeWorkTemplateQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(courseHomeworkService.queryHomePage(queryInfo));
     }