Przeglądaj źródła

Merge branch 'feature_HW_20230331' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 2 lat temu
rodzic
commit
fa046c4eaa
90 zmienionych plików z 3168 dodań i 385 usunięć
  1. 3 2
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  3. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseHomeworkDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  5. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesDao.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  7. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LessonExaminationDao.java
  8. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  9. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonExaminationDao.java
  10. 230 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java
  11. 56 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  12. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HomeworkStat.java
  13. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationDetailDto.java
  14. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto.java
  15. 10 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto1.java
  16. 5 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSaveDto.java
  17. 1 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSubmitDto.java
  18. 138 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto.java
  20. 8 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto1.java
  21. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto.java
  22. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto1.java
  23. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationSaveDto.java
  24. 99 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  25. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java
  26. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java
  27. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java
  28. 48 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java
  29. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LessonExamination.java
  30. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  31. 8 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonExamination.java
  32. 15 14
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonExaminationDetail.java
  33. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonTrainingDetail.java
  34. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java
  35. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EHomeWorkStatus.java
  36. 45 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ELessonTrainingType.java
  37. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseHomeworkQueryInfo.java
  38. 68 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java
  39. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/LessonExaminationQueryInfo.java
  40. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  41. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java
  42. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  43. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java
  44. 1 5
      mec-biz/src/main/java/com/ym/mec/biz/service/LessonExaminationService.java
  45. 43 2
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java
  46. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  47. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonExaminationDetailService.java
  48. 3 6
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonExaminationService.java
  49. 19 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonTrainingDetailService.java
  50. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java
  51. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java
  52. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  53. 79 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java
  54. 130 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  55. 76 28
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  56. 80 28
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonExaminationServiceImpl.java
  57. 442 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  58. 191 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  59. 24 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationDetailServiceImpl.java
  60. 75 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationServiceImpl.java
  61. 68 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java
  62. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  63. 20 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  64. 8 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  65. 14 2
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  66. 18 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  67. 124 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  68. 31 2
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  69. 65 26
      mec-biz/src/main/resources/config/mybatis/LessonExaminationMapper.xml
  70. 100 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  71. 3 1
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  72. 19 25
      mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationDetailMapper.xml
  73. 64 19
      mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationMapper.xml
  74. 3 0
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  75. 8 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  76. 21 0
      mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java
  77. 10 0
      mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesReplyController.java
  78. 31 4
      mec-student/src/main/java/com/ym/mec/student/controller/LessonExaminationController.java
  79. 56 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java
  80. 0 51
      mec-student/src/main/java/com/ym/mec/student/controller/StudentLessonExaminationController.java
  81. 6 0
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java
  82. 1 0
      mec-student/src/main/java/com/ym/mec/student/controller/WechatController.java
  83. 51 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  84. 14 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  85. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudentLessonExaminationDetailController.java
  86. 21 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExtracurricularExercisesController.java
  87. 18 9
      mec-web/src/main/java/com/ym/mec/web/controller/LessonExaminationController.java
  88. 0 40
      mec-web/src/main/java/com/ym/mec/web/controller/StudentLessonExaminationController.java
  89. 75 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java
  90. 3 1
      mec-web/src/main/java/com/ym/mec/web/controller/WebCourseHomeworkController.java

+ 3 - 2
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -340,7 +340,8 @@ public class UserChannelContext {
 		if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.AMPLITUDE.getCode())) {
 			amplitude = (int) Signals.norm(samples);
 		}else if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.DECIBELS.getCode())){
-			amplitude = (int) Signals.decibels(samples) >= 38 ? 10 : 1;
+			amplitude = (int) Signals.decibels(samples);
+			amplitude = amplitude >= 50 ? amplitude : 0;
 		}
 		//float rms = Signals.rms(samples);
 		
@@ -885,7 +886,7 @@ public class UserChannelContext {
 
 		if (musicXmlNote.getFrequency() == -1) {// 休止符
 			
-			LOGGER.debug("--Amplitude:{}  Denominator:{}",chunkList.stream().map(t -> t).collect(Collectors.toList()), musicXmlNote.getDenominator());
+			LOGGER.debug("--Amplitude:{}  Denominator:{}",chunkList.stream().map(t -> t.getAmplitude()).collect(Collectors.toList()), musicXmlNote.getDenominator());
 			return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0;
 		}
 		

+ 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);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseHomeworkDao.java

@@ -74,4 +74,8 @@ public interface CourseHomeworkDao extends BaseDAO<Long, CourseHomework> {
 	 * @return
 	 */
 	List<TeacherHomeworkListDto> findByIdList(@Param("homeworkIdList") List<Integer> homeworkIdList);
+
+    void updateFinishNum(@Param("courseHomeworkId") Long courseHomeworkId);
+
+    CourseHomework getByCourseScheduleId(@Param("courseScheduleId") Integer courseScheduleId);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1990,5 +1990,5 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherServeHomeworkDetailV2(@Param(
-        "param") CourseHomeworkWrapper.CourseHomeworkQuery queryInfo, @Param("courseIds") List<Long> courseIds);
+        "param") Map<String, Object> param, @Param("courseIds") List<Long> courseIds);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.ExtracurricularExercisesHomeworkListDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.TeacherHomeworkListDto;
@@ -65,4 +66,10 @@ public interface ExtracurricularExercisesDao extends BaseDAO<Long, Extracurricul
      * @return
      */
     List<TeacherHomeworkListDto> findByIdList(@Param("exercisesIdList") List<Integer> exercisesIdList);
+
+    int countTeacherExtraHomeworkDetailV2(Map<String, Object> params);
+
+    List<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherExtraHomeworkDetailV2(Map<String, Object> params);
+
+    void updateFinishNum(@Param("courseHomeworkId") Long courseHomeworkId);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
 import com.ym.mec.common.dal.BaseDAO;
@@ -133,4 +134,7 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     List<EduHomeworkCardDto> countEduHomeworkSubjectStudentNumWithMusicGroup(@Param("groupId") String groupId,
                                                                              @Param("startTime") Date startTime,
                                                                              @Param("endTime") Date endTime);
+
+    ExtracurricularExercisesReply getByExtraIdAndUserId(@Param("extraId") Long extraId, @Param("userId") Long userId);
+
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LessonExaminationDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto1;
+import com.ym.mec.biz.dal.dto.LessonExaminationResultDto2;
 import com.ym.mec.biz.dal.dto.LessonExaminationSaveDto;
 import com.ym.mec.biz.dal.entity.LessonExamination;
 import org.apache.ibatis.annotations.Param;
@@ -27,5 +28,11 @@ public interface LessonExaminationDao extends BaseMapper<LessonExamination> {
     List<LessonExaminationResultDto1> queryPageByStudent(Map<String, Object> params);
 
     int findCountByStudent(Map<String, Object> params);
+
+    LessonExaminationResultDto1 getOneByStudent(@Param("userId") Integer userId, @Param("lessonExaminationId") Long lessonExaminationId);
+
+    void updateTrainingNum(@Param("lessonExaminationId") Long lessonExaminationId);
+
+    void updateStandardNum(@Param("lessonExaminationId") Long lessonExaminationId);
 }
 

+ 22 - 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,25 @@ 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);
+
+    List<StudentCourseHomework> findStudentCourseHomeworkByCourse(@Param("query") StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
+    int queryNotSuccessHomeworkList(Integer userId);
+
+    StudentCourseHomework getHomeworkByUserIdAndCourseHomeworkId(@Param("userId") Long userId, @Param(
+        "courseHomeworkId") Long courseHomeworkId);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonExaminationDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
 import com.ym.mec.biz.dal.entity.StudentLessonExamination;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,5 +22,18 @@ public interface StudentLessonExaminationDao extends BaseMapper<StudentLessonExa
     List<StudentLessonExaminationDto> queryPage(Map<String, Object> params);
 
     int findCount(Map<String, Object> params);
+
+    List<StudentLessonExaminationDto1> queryStudentPage(@Param("lessonExaminationId") Long lessonExaminationId);
+
+    /**
+     * 查询未完成的考试
+     *
+     * @param userId 用户id
+     */
+    int queryNotSuccessExaminationList(Integer userId);
+
+    void updateTrainingScore(@Param("lessonExaminationId") Long lessonExaminationId, @Param("userId") Integer userId);
+
+    List<Map<Long, String>> getStudentName(@Param("examinationIds") List<Long> examinationIds);
 }
 

+ 230 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java

@@ -1,11 +1,15 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 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 +28,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")
@@ -41,13 +47,17 @@ public class CourseHomeworkWrapper {
         private String courseType;
 
         @ApiModelProperty(value = "乐团id")
-        private Integer musicGroupId;
+        private String musicGroupId;
 
-        @ApiModelProperty(value = "班级类型  NORMAL:声部班,MIX:合奏班")
+        @ApiModelProperty(value = "班级类型  SINGLE:声部班,MIX:合奏班")
         private String classType;
 
         @ApiModelProperty(value = "作业练习状态 UNASSIGNED:未布置,ASSIGNED:已布置,DEADLINE:已截止")
         private EHomeWorkStatus homeWorkStatus;
+
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+        private ELessonTrainingType type;
     }
 
 
@@ -59,6 +69,9 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "课程id")
         private Integer courseScheduleId;
 
+        @ApiModelProperty(value = "作业id")
+        private Long courseHomeworkId;
+
         @ApiModelProperty(value = "课程日期")
         private Date classDate;
 
@@ -74,8 +87,17 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "老师id")
         private Integer teacherId;
 
+        @ApiModelProperty("老师名")
+        private String teacherName;
+
+        @ApiModelProperty("课程名称")
+        private String courseScheduleName;
+
+        @ApiModelProperty("老师头像")
+        private String teacherImg;
+
         @ApiModelProperty(value = "乐团id")
-        private Integer musicGroupId;
+        private String musicGroupId;
 
         @ApiModelProperty(value = "乐团名称")
         private String musicGroupName;
@@ -89,6 +111,9 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "声部名称")
         private String subjectName;
 
+        @ApiModelProperty("班级id")
+        private Integer classGroupId;
+
         @ApiModelProperty("班级名称")
         private String classGroupName;
 
@@ -100,5 +125,205 @@ public class CourseHomeworkWrapper {
 
         @ApiModelProperty("已完成人数")
         private Integer finishNum;
+
+        @ApiModelProperty("布置时间")
+        private Date assignTime;
+
+        @ApiModelProperty("截止时间")
+        private Date expiryDate;
+
+        @ApiModelProperty("完成状态 false 未完成 true 已完成")
+        private Boolean finishStatus;
+
+        @ApiModelProperty(value = "作业类型 来源(HOMEWORK,EXTRACURRICULAR,EXTRA)",required = true)
+        private ELessonTrainingType type;
+
+        private String studentIdList;
+
+        @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 Long 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;
+    }
+
+
+    @Data
+    @ApiModel(value = "WebExtraCourseHomework-课外作业列表")
+    public static class WebExtraCourseHomework {
+
+        /**  */
+        private Long id;
+
+        private String musicGroupId;
+
+        /** 老师编号 */
+        @ApiModelProperty(value="等级")
+        private Integer teacherId;
+
+        private SysUser teacher = new SysUser();
+
+        /** 学生列表 */
+        @ApiModelProperty(value="学生列表")
+        private String studentIdList;
+
+        @ApiModelProperty("班级id")
+        private Integer classGroupId;
+
+        @ApiModelProperty("作业来源分类")
+        private String groupType;
+
+        /** 批次号 */
+        @ApiModelProperty(value="批次号")
+        private String batchNo;
+
+        /** 标题 */
+        @ApiModelProperty(value="标题")
+        private String title;
+
+        /** 附件地址(多个用逗号分隔) */
+        @ApiModelProperty(value="附件地址(多个用逗号分隔)")
+        private String attachments;
+
+        /** 作业内容 */
+        @ApiModelProperty(value="作业内容")
+        private String content;
+
+        /** 截止日期 */
+        @ApiModelProperty(value="截止日期")
+        private java.util.Date expireDate;
+
+        /** 完成人数 */
+        @ApiModelProperty(value="完成人数")
+        private Integer completedNum;
+
+        /** 预计人数 */
+        @ApiModelProperty(value="预计人数")
+        private Integer expectNum;
+
+        /**  */
+        private java.util.Date createTime;
+
+        /**  */
+        private java.util.Date updateTime;
+
+        @ApiModelProperty(value="是否及时回复")
+        private int isReplied;
+
+        @ApiModelProperty(value="是否提交")
+        private int isSubmit;
+
+        private int status;
+
+        private String organName;
+
+        private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
+
+        /** 伴奏列表(多个用逗号分隔) */
+        @ApiModelProperty(value="伴奏列表(多个用逗号分隔)")
+        private String musicScoreId;
+
+        private String musicScoreName;
+
+        private List<MusicScoreSubjectDto> musicScoreSubjectDtos;
+
+
+        @ApiModelProperty("乐团名")
+        private String musicGroupName;
+
+        @ApiModelProperty("班级名")
+        private String classGroupName;
+
+        private String versionTag;
+
+
+        @ApiModelProperty("布置时间")
+        private Date assignTime;
+
+        @ApiModelProperty("练习内容")
+        private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> trainingDetailList;
     }
+
+
 }

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

@@ -44,6 +44,62 @@ 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;
+
+    private String subjectId;
+
+    public String getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(String subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    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;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HomeworkStat.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-04-06
+ */
+@Data
+public class HomeworkStat {
+
+    @ApiModelProperty("类型  HOMEWORK:作业,EXAMINATION:评测")
+    private String type;
+
+    @ApiModelProperty("是否展示  true:展示,false:不展示")
+    private boolean show;
+}

+ 0 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationDetailDto.java

@@ -23,8 +23,5 @@ public class LessonExaminationDetailDto{
 
     @ApiModelProperty(value = "合格分数")
     private Integer score;
-
-    @ApiModelProperty(value = "声部")
-    private Integer subjectId;
 }
 

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto.java

@@ -4,6 +4,8 @@ package com.ym.mec.biz.dal.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  *
  * @author zx
@@ -14,15 +16,33 @@ public class LessonExaminationResultDto{
     @ApiModelProperty(value = "测验编号")
     private Long id;
 
+    @ApiModelProperty(value = "分部")
+    private Integer organId;
+
+    @ApiModelProperty(value = "分部")
+    private String organName;
+
     @ApiModelProperty(value = "班级名称")
     private String classGroupName;
 
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
     @ApiModelProperty(value = "乐团名称")
     private String musicGroupName;
 
+    @ApiModelProperty(value = "老师姓名")
+    private String teacherName;
+
+    @ApiModelProperty(value = "老师编号")
+    private Integer teacherId;
+
     @ApiModelProperty(value = "班级编号")
     private Long classGroupId;
 
+    @ApiModelProperty(value = "布置时间")
+    private Date createTime;
+
     @ApiModelProperty(value = "截止日期")
     private String expireDate;
 
@@ -34,5 +54,8 @@ public class LessonExaminationResultDto{
 
     @ApiModelProperty(value = "预计人数")
     private Integer expectNum;
+
+    @ApiModelProperty(value = "学员姓名")
+    private String studentNames;
 }
 

+ 10 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto1.java

@@ -20,25 +20,25 @@ public class LessonExaminationResultDto1 {
     @ApiModelProperty(value = "班级名称")
     private String classGroupName;
 
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
     @ApiModelProperty(value = "乐团名称")
     private String musicGroupName;
 
     @ApiModelProperty(value = "班级编号")
     private Long classGroupId;
 
-    @ApiModelProperty(value = "截止日期")
-    private String expireDate;
-
-    @ApiModelProperty(value = "是否截止")
-    private Boolean expireFlag;
+    @ApiModelProperty(value = "老师姓名")
+    private String teacherName;
 
-    @ApiModelProperty(value = "是否达标")
-    private Boolean standardFlag;
+    @ApiModelProperty(value = "老师头像")
+    private String avatar;
 
-    @ApiModelProperty(value = "是否训练")
-    private Boolean trainingFlag;
+    @ApiModelProperty(value = "截止日期")
+    private String expireDate;
 
     @ApiModelProperty(value = "测评分数")
-    private Integer score;
+    private Integer trainingScore;
 }
 

+ 5 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSaveDto.java

@@ -19,18 +19,15 @@ public class LessonExaminationSaveDto {
     private Integer teacherId;
 
     @ApiModelProperty(value = "班级编号")
-    private Long classGroupId;
+    private Integer classGroupId;
 
     @ApiModelProperty(value = "课程编号")
     private Long courseScheduleId;
 
-    @ApiModelProperty(value = "截止日期")
-    private Date expireDate;
+    @ApiModelProperty(value = "学员总数")
+    private Integer expectNum;
 
-    @ApiModelProperty(value = "学员编号,逗号分割")
-    private String studentIds;
-
-    @ApiModelProperty(value = "作业内容")
-    private List<LessonExaminationDetailDto> examinationDetailDtos;
+    @ApiModelProperty(value = "声部学员列表")
+    private List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos;
 }
 

+ 1 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSubmitDto.java

@@ -12,10 +12,7 @@ import lombok.Data;
 @Data
 public class LessonExaminationSubmitDto {
     @ApiModelProperty(value = "测验编号")
-    private Long LessonExaminationId;
-
-    @ApiModelProperty(value = "学员编号")
-    private Integer userId;
+    private Long studentLessonExaminationDetailId;
 
     @ApiModelProperty(value = "测评分数")
     private Integer score;

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

@@ -1,5 +1,9 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.enums.StandardEnum;
+import io.swagger.annotations.ApiModelProperty;
+
 import java.util.Date;
 
 /**
@@ -8,23 +12,154 @@ 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;
+
+    private StandardEnum standardFlag;
+
+    @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;
+
+    @ApiModelProperty("提交时间")
+    private Date submitTime;
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public StandardEnum getStandardFlag() {
+        return standardFlag;
+    }
+
+    public void setStandardFlag(StandardEnum standardFlag) {
+        this.standardFlag = standardFlag;
+    }
+
+    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 +169,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;
     }
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto.java

@@ -12,7 +12,7 @@ import lombok.Data;
 @Data
 public class StudentLessonExaminationDetailDto {
     @ApiModelProperty(value = "主键")
-    private Long id;
+    private Long studentLessonExaminationDetailId;
 
     @ApiModelProperty(value = "学员编号")
     private Integer userId;

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto1.java

@@ -18,7 +18,13 @@ public class StudentLessonExaminationDetailDto1 {
     @ApiModelProperty(value = "练习最高分数")
     private Integer trainingScore;
 
-    @ApiModelProperty(value = "合格分数")
-    private Integer score;
+    @ApiModelProperty(value = "达标分数")
+    private Integer standardScore;
+
+    @ApiModelProperty(value = "实际均摊得分")
+    private Integer actualAvgScore;
+
+    @ApiModelProperty(value = "均摊总分")
+    private Integer avgScore;
 }
 

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto.java

@@ -20,11 +20,11 @@ public class StudentLessonExaminationDto {
     @ApiModelProperty(value = "学员姓名")
     private String username;
 
-    @ApiModelProperty(value = "最大分数训练评测时间")
+    @ApiModelProperty(value = "最评测时间")
     private Date trainingTime;
 
     @ApiModelProperty(value = "测评分数")
-    private Integer score;
+    private Integer trainingScore;
 
     @ApiModelProperty(value = "是否会员")
     private Boolean memberFlag;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto1.java

@@ -21,7 +21,7 @@ public class StudentLessonExaminationDto1 {
     private String phone;
 
     @ApiModelProperty(value = "测评分数")
-    private Integer score;
+    private Integer trainingScore;
 
     @ApiModelProperty(value = "学员编号")
     private Integer userId;

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationSaveDto.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ *
+ * @author zx
+ * @since 2023-04-03 18:20:36
+ */
+@Data
+public class StudentLessonExaminationSaveDto {
+
+    @ApiModelProperty(value = "学员编号,逗号分割")
+    private String studentIds;
+
+    @ApiModelProperty(value = "声部")
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "作业内容")
+    private List<LessonExaminationDetailDto> examinationDetailDtos;
+}
+

+ 99 - 3
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,16 +38,105 @@ 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 String  musicScoreName;
+
+        @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);
         }
+	}
+
+
+
+    @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")
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "true:完成 false未完成",hidden = true)
+        private Boolean standardFlag;
 
-        public static StudentLessonTrainingDetail from(String json) {
-            return JSON.parseObject(json, StudentLessonTrainingDetail.class);
-        }
 	}
 
+
+
+    @Data
+    @ApiModel(" StudentLessonTraining-学生练习内容查询对象")
+    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;
+    }
+
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java

@@ -37,6 +37,16 @@ public class TeacherAttendanceDetailDto {
     
     private School school;
 
+    private String versionTag;
+
+    public String getVersionTag() {
+        return versionTag;
+    }
+
+    public void setVersionTag(String versionTag) {
+        this.versionTag = versionTag;
+    }
+
     public Integer getErrorAttendanceNum() {
         return errorAttendanceNum;
     }

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

@@ -65,6 +65,38 @@ public class WebCourseHomeworkListDto {
     @ApiModelProperty(value = "伴奏编号",required = false)
     private String musicScoreId;
 
+    @ApiModelProperty(value = "乐团名")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "截止时间")
+    private Date expiryDate;
+
+    private String versionTag;
+
+    public String getVersionTag() {
+        return versionTag;
+    }
+
+    public void setVersionTag(String versionTag) {
+        this.versionTag = versionTag;
+    }
+
+    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;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java

@@ -46,6 +46,8 @@ public class CourseHomework extends BaseEntity {
 	
 	/**  */
 	private String musicGroupId;
+
+    private String versionTag;
 	
 	private MusicGroup musicGroup = new MusicGroup();
 	
@@ -76,6 +78,14 @@ public class CourseHomework extends BaseEntity {
         this.studentLessonTrainingDetails = studentLessonTrainingDetails;
     }
 
+    public String getVersionTag() {
+        return versionTag;
+    }
+
+    public void setVersionTag(String versionTag) {
+        this.versionTag = versionTag;
+    }
+
     public String getTitle() {
 		return title;
 	}

+ 48 - 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,11 +36,13 @@ public class ExtracurricularExercises extends BaseEntity {
     private Integer classGroupId;
 
     @ApiModelProperty("作业来源分类")
-    private GroupType groupType;
+    private String groupType;
 	
 	/** 批次号 */
 	@ApiModelProperty(value="批次号")
 	private String batchNo;
+
+    private String versionTag;
 	
 	/** 标题 */
 	@ApiModelProperty(value="标题")
@@ -92,9 +95,51 @@ 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 getVersionTag() {
+        return versionTag;
+    }
+
+    public void setVersionTag(String versionTag) {
+        this.versionTag = versionTag;
+    }
+
+    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 +148,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;
     }
 

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LessonExamination.java

@@ -23,9 +23,17 @@ public class LessonExamination{
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
+    @TableField("organ_id_")
+    @ApiModelProperty(value = "分部编号")
+    private Integer organId;
+
+    @TableField("music_group_id_")
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
     @TableField("class_group_id_")
     @ApiModelProperty(value = "班级编号")
-    private Long classGroupId;
+    private Integer classGroupId;
 
     @TableField("course_schedule_id_")
     @ApiModelProperty(value = "课程编号")

+ 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;
     }

+ 8 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonExamination.java

@@ -32,10 +32,6 @@ public class StudentLessonExamination extends BaseEntity {
     @ApiModelProperty(value = "测验编号")
     private Long lessonExaminationId;
 
-    @TableField("score_")
-    @ApiModelProperty(value = "最高练习分数")
-    private Integer score;
-
     @TableField("standard_flag_")
     @ApiModelProperty(value = "是否达标")
     private Integer standardFlag;
@@ -48,6 +44,14 @@ public class StudentLessonExamination extends BaseEntity {
     @ApiModelProperty(value = "测评总分")
     private Boolean trainingScore;
 
+    @TableField("training_time_")
+    @ApiModelProperty(value = "最后测评时间")
+    private Date trainingTime;
+
+    @TableField("subject_id_")
+    @ApiModelProperty(value = "声部")
+    private Integer subjectId;
+
     @TableField("create_time_")
     @ApiModelProperty(value = "创建时间")
     private Date createTime;

+ 15 - 14
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonExaminationDetail.java

@@ -33,9 +33,6 @@ public class StudentLessonExaminationDetail implements Serializable {
     @ApiModelProperty(value = "测验编号")
     private Long lessonExaminationId;
 
-    @TableField("student_lesson_examination_id_")
-    private Long studentLessonExaminationId;
-
     @TableField("music_score_id_")
     @ApiModelProperty(value = "曲目id")
     private Long musicScoreId;
@@ -44,28 +41,32 @@ public class StudentLessonExaminationDetail implements Serializable {
     @ApiModelProperty(value = "评测难度")
     private String heardLevel;
 
+    @TableField("standard_flag_")
+    @ApiModelProperty(value = "是否达标")
+    private Boolean standardFlag;
+
+    @TableField("standard_score_")
+    @ApiModelProperty(value = "达标分数")
+    private Integer standardScore;
+
     @TableField("training_score_")
     @ApiModelProperty(value = "练习最高分数")
     private Integer trainingScore;
 
-    @TableField("training_flag_")
-    @ApiModelProperty(value = "是否练习")
-    private Boolean trainingFlag;
-
-    @TableField("score_")
-    @ApiModelProperty(value = "合格分数")
-    private Integer score;
+    @TableField("actual_avg_score_")
+    @ApiModelProperty(value = "实际均摊得分")
+    private Integer actualAvgScore;
 
-    @TableField("standard_score_")
-    @ApiModelProperty(value = "达标总分")
-    private Integer standardScore;
+    @TableField("avg_score_")
+    @ApiModelProperty(value = "均摊总分")
+    private Integer avgScore;
 
     @TableField("part_index_")
     @ApiModelProperty(value = "分谱")
     private Integer partIndex;
 
     @TableField("training_time_")
-    @ApiModelProperty(value = "最高分提交时间")
+    @ApiModelProperty(value = "最提交时间")
     private Date trainingTime;
 
     @TableField("create_time_")

+ 6 - 1
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;
 
@@ -24,13 +25,17 @@ import java.util.Date;
 public class StudentLessonTrainingDetail implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+	    @TableId(value = "id_",type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("用户ID") 
 	@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;

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java

@@ -134,6 +134,9 @@ public class Teacher extends SysUser {
 	@ApiModelProperty(value = "岗位管理部门",required = false)
 	private String postDeptIds;
 
+	@ApiModelProperty(value = "云教练限制")
+	private Boolean coursewareLimit;
+
 	public Boolean getIsSettlementSalary() {
 		return isSettlementSalary;
 	}
@@ -422,6 +425,14 @@ public class Teacher extends SysUser {
 		this.postDeptIds = postDeptIds;
 	}
 
+	public Boolean getCoursewareLimit() {
+		return coursewareLimit;
+	}
+
+	public void setCoursewareLimit(Boolean coursewareLimit) {
+		this.coursewareLimit = coursewareLimit;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EHomeWorkStatus.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.ym.mec.common.enums.BaseEnum;
 import lombok.Getter;
 
 /**
@@ -10,7 +11,7 @@ import lombok.Getter;
  * @date 2023-04-03
  */
 @Getter
-public enum EHomeWorkStatus {
+public enum EHomeWorkStatus implements BaseEnum<String, EHomeWorkStatus> {
 
     /**
      * 未布置

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

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

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

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

+ 68 - 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,73 @@ public class ExtraExercilseQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "是否云教练作业")
 	private Boolean cloudHomeworkFlag;
 
+
+
+    @ApiModelProperty(value = "作业练习类型(HOMEWORK,EXTRACURRICULAR,EXTRA)")
+    private ELessonTrainingType type;
+
+    @ApiModelProperty("完成状态 false 未完成 true 已完成")
+    private Boolean finishStatus;
+
+    @ApiModelProperty("模糊查询 乐团名称/老师")
+    private String search;
+
+    @ApiModelProperty("是否是学员布置")
+    private Boolean studentAssignFlag;
+
+    private Long studentExerciseId;
+
+    private String versionTag;
+
+    public String getVersionTag() {
+        return versionTag;
+    }
+
+    public void setVersionTag(String versionTag) {
+        this.versionTag = versionTag;
+    }
+
+    public Boolean getStudentAssignFlag() {
+        return studentAssignFlag;
+    }
+
+    public void setStudentAssignFlag(Boolean studentAssignFlag) {
+        this.studentAssignFlag = studentAssignFlag;
+    }
+
+    public Long getStudentExerciseId() {
+        return studentExerciseId;
+    }
+
+    public void setStudentExerciseId(Long studentExerciseId) {
+        this.studentExerciseId = studentExerciseId;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    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;
 	}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/LessonExaminationQueryInfo.java

@@ -7,6 +7,12 @@ import lombok.Data;
 @Data
 public class LessonExaminationQueryInfo extends QueryInfo {
 
+    @ApiModelProperty(value = "分部编号")
+    private String organId;
+
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
     @ApiModelProperty(value = "老师编号")
     private Integer teacherId;
 

+ 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);
 }

+ 15 - 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,18 @@ public interface CourseHomeworkService extends BaseService<Long, CourseHomework>
 	 * @return
 	 */
 	PageInfo<WebCourseHomeworkListDto> queryHomePage(CourseHomeWorkTemplateQueryInfo queryInfo);
+
+    /**
+     * 获取课后作业详情
+     *
+     * @param courseScheduleId 课程id
+     */
+    CourseHomeworkWrapper.CourseHomeworkList findCourseHomeworkDetail(Integer courseScheduleId);
+
+    /**
+     * 课外作业详情
+     *
+     * @param extraId 作业id
+     */
+    CourseHomeworkWrapper.CourseHomeworkList findCourseExtraHomeworkDetail(Integer extraId);
 }

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

@@ -1,8 +1,10 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 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 +65,15 @@ public interface ExtracurricularExercisesReplyService extends BaseService<Long,
     PageInfo<ExtraExerciseStudentsDto> findExtraExercises(ExtraExercilseReplyQueryInfo queryInfo);
 
     PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    /**
+     * 查询学生课外训练情况
+     *
+     */
+    PageInfo<StudentHomeworkRecordDto> findStudentExtraExercisesV2(ExtraExercilseQueryInfo queryInfo);
+
+    /**
+     * 查询学生课外训练详情
+     */
+    CourseHomeworkWrapper.CourseHomeworkList findStudentExtraExerciseDetailV2(Long studentExerciseId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.TeacherHomeworkListDto;
 import com.ym.mec.biz.dal.dto.WebCourseHomeworkListDto;
@@ -61,4 +62,6 @@ public interface ExtracurricularExercisesService extends BaseService<Long, Extra
      * @return
      */
     PageInfo<TeacherHomeworkListDto> findExtraExercilsesHomeworks(ExtraExercilseQueryInfo queryInfo);
+
+    PageInfo<CourseHomeworkWrapper.WebExtraCourseHomework> findExtraExercilsesV2(ExtraExercilseQueryInfo queryInfo);
 }

+ 1 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/LessonExaminationService.java

@@ -4,16 +4,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dao.LessonExaminationDao;
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto1;
-import com.ym.mec.biz.dal.dto.LessonExaminationResultDto2;
 import com.ym.mec.biz.dal.dto.LessonExaminationSaveDto;
 import com.ym.mec.biz.dal.entity.LessonExamination;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo1;
-import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo2;
 import com.ym.mec.common.page.PageInfo;
 
-import java.util.List;
-
 /**
  * 进度评测表(LessonExamination)表服务接口
  *
@@ -30,6 +26,6 @@ public interface LessonExaminationService extends IService<LessonExamination> {
 
     PageInfo<LessonExaminationResultDto1> queryPageByStudent(LessonExaminationQueryInfo1 queryInfo);
 
-    PageInfo<LessonExaminationResultDto2> queryPageByWeb(LessonExaminationQueryInfo2 queryInfo);
+    LessonExaminationResultDto1 getOne(Integer userId, Long lessonExaminationId);
 }
 

+ 43 - 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,45 @@ 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);
+
+    /**
+     * 学生端查看练习详情
+     *
+     * @return
+     */
+    CourseHomeworkWrapper.CourseHomeworkList 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);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -77,4 +77,10 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      *
      */
     PageInfo<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherServeHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo);
+
+    /**
+     * 老师课外作业列表
+     *
+     */
+    PageInfo<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherExtraHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonExaminationDetailService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao;
 import com.ym.mec.biz.dal.dto.LessonExaminationDetailDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
 import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 
@@ -19,7 +20,7 @@ public interface StudentLessonExaminationDetailService extends IService<StudentL
 
     StudentLessonExaminationDetailDao getDao();
 
-    void save(Long lessonExaminationId, String[] studentIds, List<LessonExaminationDetailDto> detailDtos);
+    void save(Long lessonExaminationId,List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos);
 
     List<StudentLessonExaminationDetailDto> queryAll(StudentLessonExaminationQueryDto query);
 }

+ 3 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonExaminationService.java

@@ -2,10 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDao;
-import com.ym.mec.biz.dal.dto.LessonExaminationSaveDto;
-import com.ym.mec.biz.dal.dto.LessonExaminationSubmitDto;
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.StudentLessonExamination;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -22,7 +19,7 @@ public interface StudentLessonExaminationService extends IService<StudentLessonE
 
     StudentLessonExaminationDao getDao();
 
-    void save(Long lessonExaminationId, String[] studentIds);
+    void save(Long lessonExaminationId,List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos);
 
     PageInfo<StudentLessonExaminationDto> queryPage(StudentLessonExaminationQueryInfo queryInfo);
 
@@ -35,6 +32,6 @@ public interface StudentLessonExaminationService extends IService<StudentLessonE
     */
     void submit(LessonExaminationSubmitDto submitDto);
 
-    PageInfo<StudentLessonExaminationDto1> queryPageByWeb(Integer studentLessonExaminationId);
+    List<StudentLessonExaminationDto1> queryStudentPage(Long lessonExaminationId);
 }
 

+ 19 - 1
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;
@@ -40,5 +41,22 @@ public interface StudentLessonTrainingDetailService extends IService<StudentLess
      * @param studentLessonTrainingDetails 作业标准
      * @param userIdList 学生ID
      */
-    List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails, List<Integer> userIdList,Long homeworkId);
+    List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails, List<Integer> userIdList,Long homeworkId,ELessonTrainingType type);
+
+    /**
+     * 查询布置的作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type 作业类型
+     */
+    List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type);
+
+    /**
+     * 学生端查询作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type 作业类型
+     * @param userId 学生ID
+     */
+    List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type, Long userId);
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.HomeworkStat;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 
 import java.util.Date;
@@ -67,4 +68,11 @@ public interface StudentServeService {
 
 
     List<IndexBaseDto> musicGroupHomeworkStatWithStu(String musicGroupId, Integer studentId, String startDay, String endDay);
+
+    /**
+     * 展示按钮红点
+     *
+     * @param userId 用户id
+     */
+    List<HomeworkStat> homeworkStat(Integer userId);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java

@@ -26,4 +26,5 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
     void transcod(Integer sysMusicScoreId);
 
     int updateExtStyleConfigJson(Integer id, String extStyleConfigJson);
-}
+
+}

+ 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());

+ 79 - 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,71 @@ 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;
+
+    }
+
+    /**
+     * 课外作业详情
+     *
+     * @param extraId 作业id
+     */
+    @Override
+    public CourseHomeworkWrapper.CourseHomeworkList findCourseExtraHomeworkDetail(Integer extraId) {
+
+        CourseHomeworkWrapper.CourseHomeworkQuery query = new CourseHomeworkWrapper.CourseHomeworkQuery();
+        query.setCourseScheduleId(extraId);
+        query.setPage(1);
+        query.setRows(1);
+        PageInfo<CourseHomeworkWrapper.CourseHomeworkList> courseHomeworkListPageInfo = studentExtracurricularExercisesSituationService.queryTeacherExtraHomeworkDetailV2(
+            query);
+        List<CourseHomeworkWrapper.CourseHomeworkList> rows = courseHomeworkListPageInfo.getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            throw new BizException("作业不存在");
+        }
+        CourseHomeworkWrapper.CourseHomeworkList courseHomeworkList = rows.get(0);
+
+        // 设置作业信息
+        if (courseHomeworkList.getCourseHomeworkId() == null) {
+            return courseHomeworkList;
+        }
+
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> baseLessonTrainingDetail = studentLessonTrainingDetailService.getBaseLessonTrainingDetail(
+            courseHomeworkList.getCourseHomeworkId(),courseHomeworkList.getType());
+
+        courseHomeworkList.setTrainingDetailList(baseLessonTrainingDetail);
+        return courseHomeworkList;
+    }
 }

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

@@ -3,16 +3,23 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 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.EHomeWorkStatus;
+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.CourseHomeworkService;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.ExtracurricularExercisesService;
+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 +34,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 +62,19 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	@Autowired
 	private StudentServeService studentServeService;
 
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+
+    @Autowired
+    private ClassGroupDao classGroupDao;
+
+    @Autowired
+    private ExtracurricularExercisesService extracurricularExercisesService;
+
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
 	@Override
 	public BaseDAO<Long, ExtracurricularExercisesReply> getDAO() {
 		return extracurricularExercisesReplyDao;
@@ -64,16 +86,25 @@ 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());
+            studentCourseHomework.setCourseHomeworkId(extraExerciseId);
+            studentCourseHomework.setCourseScheduleId(extraExerciseId);
 			studentCourseHomework.setUserId(extraExerciseStudent.getUserId());
 			studentCourseHomework.setUserName(extraExerciseStudent.getStudentName());
 			studentCourseHomework.setStatus(extraExerciseStudent.getStatus()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
 			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 +159,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 +288,101 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    /**
+     * 查询学生课外训练情况
+     *
+     * @param queryInfo
+     */
+    @Override
+    public PageInfo<StudentHomeworkRecordDto> findStudentExtraExercisesV2(ExtraExercilseQueryInfo queryInfo) {
+        queryInfo.setVersionTag("v2");
+        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()));
+            studentHomeworkRecordDto.setSubmitTime(row.getSubmitTime());
+            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;
+    }
+
+    @Override
+    public CourseHomeworkWrapper.CourseHomeworkList findStudentExtraExerciseDetailV2(Long studentExerciseId) {
+
+        return courseHomeworkService.findCourseExtraHomeworkDetail( studentExerciseId.intValue());
+
+
+    }
 }

+ 76 - 28
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
@@ -11,6 +13,7 @@ import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -18,6 +21,7 @@ import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesService;
 import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 import com.ym.mec.biz.service.StudentServeService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -28,6 +32,7 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -39,6 +44,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -65,6 +71,11 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 
     @Autowired
+    private ClassGroupDao classGroupDao;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+    @Autowired
     private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
 
 	@Override
@@ -76,33 +87,22 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createExtraExercises(ExtracurricularExercises exercises) {
 		if(StringUtils.isBlank(exercises.getTitle())){
-			throw new BizException("请填写标题");
+			// throw new BizException("请填写标题");
 		}
 		if(StringUtils.isBlank(exercises.getContent())){
-			throw new BizException("请填写内容");
+			// throw new BizException("请填写内容");
 		}
-		List<MusicScoreSubjectDto> scoreSubjectDtoList = exercises.getMusicScoreSubjectDtos();
 
-        if (exercises.getClassGroupId() != null) {
-            List<ClassGroupStudentMapper> studentMapperList = classGroupStudentMapperDao.findByClassGroup(
-                exercises.getClassGroupId());
-            if (CollectionUtils.isEmpty(studentMapperList)) {
-                throw new BizException("班级学生为空");
+        List<MusicScoreSubjectDto> scoreSubjectDtoList = exercises.getMusicScoreSubjectDtos();
+        if(StringUtils.isBlank(exercises.getStudentIdList())){
+            if(scoreSubjectDtoList == null || scoreSubjectDtoList.size() == 0){
+                throw new BizException("请指定学生");
+            }
+            List<Integer> studentIdList = new ArrayList<>();
+            for (MusicScoreSubjectDto musicScoreSubjectDto : scoreSubjectDtoList) {
+                studentIdList.addAll(musicScoreSubjectDto.getUserIdList());
             }
-            List<Integer> studentIdList = studentMapperList.stream()
-                .filter(o -> !o.getStatus().equals(ClassGroupStudentStatusEnum.QUIT))
-               .map(ClassGroupStudentMapper::getUserId)
-                .collect(Collectors.toList());
             exercises.setStudentIdList(StringUtils.join(studentIdList,","));
-
-        } else if(StringUtils.isNotBlank(exercises.getStudentIdList()) || CollectionUtils.isEmpty(scoreSubjectDtoList)) {
-			List<Integer> studentIdList = new ArrayList<>();
-			for (MusicScoreSubjectDto musicScoreSubjectDto : scoreSubjectDtoList) {
-				studentIdList.addAll(musicScoreSubjectDto.getUserIdList());
-			}
-			exercises.setStudentIdList(StringUtils.join(studentIdList,","));
-		} else {
-            throw new BizException("请指定学生");
         }
 
 		teacherDao.getLocked(exercises.getTeacherId());
@@ -115,7 +115,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 
 		if(Objects.isNull(exercises.getExpireDate())){
 			LocalDateTime localDateTime=LocalDateTime.now();
-			localDateTime=localDateTime.plusDays(2).withHour(21).withMinute(0).withSecond(0);
+			localDateTime=localDateTime.plusDays(Integer.parseInt(sysConfigService.findByParamName("homework_expire_time").getParanValue()));
 			exercises.setExpireDate(Date.from(localDateTime.atZone(DateUtil.zoneId).toInstant()));
 		}
 		List<Integer> studentIds = Arrays.asList(exercises.getStudentIdList().split(",")).stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
@@ -142,24 +142,35 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
                     studentExtraExercise.setUserId(userId);
                     studentExtraExercise.setMusicScoreId(StringUtils.join(musicScoreSubjectDto.getMusicScoreIdList(),","));
                     studentExtraExercise.setMusicScoreContent(JSONObject.toJSONString(musicScoreSubjectDto.getMusicScoreHomeworkDtoList()));
-                    extracurricularExercisesReplies.add(ObjectUtils.clone(studentExtraExercise));
+                    extracurricularExercisesReplies.add(JSON.parseObject(JSON.toJSONString(studentExtraExercise),ExtracurricularExercisesReply.class));
                 }
                 // 作业详情
                 studentLessonTrainingDetailList.addAll(studentLessonTrainingDetailService
-                                   .homeWorkDetail(musicScoreSubjectDto.getStudentLessonTrainingDetails(), musicScoreSubjectDto.getUserIdList(),exercises.getId()));
+                                   .homeWorkDetail(musicScoreSubjectDto.getStudentLessonTrainingDetails(), musicScoreSubjectDto.getUserIdList(), exercises.getId(),
+                                                   ELessonTrainingType.valueOf(exercises.getGroupType())));
 
             }
         } else {
             for (Integer studentId : studentIds) {
                 studentExtraExercise.setUserId(studentId);
-                extracurricularExercisesReplies.add(ObjectUtils.clone(studentExtraExercise));
+                extracurricularExercisesReplies.add(JSON.parseObject(JSON.toJSONString(studentExtraExercise),ExtracurricularExercisesReply.class));
+
             }
             // 作业详情
             studentLessonTrainingDetailList.addAll(studentLessonTrainingDetailService
-                                                       .homeWorkDetail(exercises.getStudentLessonTrainingDetails(), studentIds,exercises.getId()));
+                                                       .homeWorkDetail(exercises.getStudentLessonTrainingDetails(), studentIds,exercises.getId(),
+                                                       ELessonTrainingType.valueOf(exercises.getGroupType())));
+        }
+        for (ExtracurricularExercisesReply extracurricularExercisesReply : extracurricularExercisesReplies) {
+            extracurricularExercisesReplyDao.insert(extracurricularExercisesReply);
+        }
+        if (!CollectionUtils.isEmpty(studentLessonTrainingDetailList)) {
+            studentLessonTrainingDetailService.saveBatch(studentLessonTrainingDetailList);
+            exercises.setVersionTag("v2");
+        } else {
+            exercises.setVersionTag("v1");
         }
-        extracurricularExercisesReplyDao.batchInsert(extracurricularExercisesReplies);
-        studentLessonTrainingDetailService.saveBatch(studentLessonTrainingDetailList);
+        extracurricularExercisesDao.update(exercises);
 
         for (ExtracurricularExercisesReply extracurricularExercisesReply : extracurricularExercisesReplies) {
             Integer studentId = extracurricularExercisesReply.getUserId();
@@ -351,4 +362,41 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 		}
 		return pageInfo;
 	}
+
+    @Override
+    public PageInfo<CourseHomeworkWrapper.WebExtraCourseHomework> findExtraExercilsesV2(ExtraExercilseQueryInfo queryInfo) {
+        PageInfo<ExtracurricularExercises> extracurricularExercisesPageInfo = this.queryPage(queryInfo);
+        List<ExtracurricularExercises> rows = extracurricularExercisesPageInfo.getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            return new PageInfo<>();
+        }
+
+        PageInfo<CourseHomeworkWrapper.WebExtraCourseHomework> convert = extracurricularExercisesPageInfo.convert(
+            o -> JSON.parseObject(JSON.toJSONString(o), CourseHomeworkWrapper.WebExtraCourseHomework.class));
+
+        List<CourseHomeworkWrapper.WebExtraCourseHomework> rows1 = convert.getRows();
+
+        // 设置班级名称
+        List<Integer> classIds = rows1.stream().map(CourseHomeworkWrapper.WebExtraCourseHomework::getClassGroupId).filter(Objects::nonNull).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(classIds)) {
+            return convert;
+        }
+
+        List<ClassGroup> classGroups = classGroupDao.queryByIds(classIds);
+
+        // 分组
+        Map<Integer, ClassGroup> classGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, Function.identity()));
+
+        rows1.forEach(o -> {
+            if (o.getClassGroupId() == null) {
+                return;
+            }
+            ClassGroup classGroup = classGroupMap.get(o.getClassGroupId());
+            if (classGroup != null) {
+                o.setClassGroupName(classGroup.getName());
+            }
+        });
+
+        return convert;
+    }
 }

+ 80 - 28
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonExaminationServiceImpl.java

@@ -1,34 +1,30 @@
 package com.ym.mec.biz.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ym.mec.biz.dal.dao.LessonExaminationDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.LessonExamination;
-import com.ym.mec.biz.dal.entity.StudentLessonExamination;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
+import com.ym.mec.biz.dal.dto.LessonExaminationResultDto1;
+import com.ym.mec.biz.dal.dto.LessonExaminationSaveDto;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo1;
-import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo2;
 import com.ym.mec.biz.service.LessonExaminationService;
 import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
 import com.ym.mec.biz.service.StudentLessonExaminationService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
-import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-import org.springframework.validation.BindException;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 进度评测表(LessonExamination)表服务实现类
@@ -47,6 +43,16 @@ public class LessonExaminationServiceImpl extends ServiceImpl<LessonExaminationD
     private StudentLessonExaminationService studentLessonExaminationService;
     @Autowired
     private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private OrganizationDao organizationDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private ClassGroupDao classGroupDao;
 
     @Override
     public LessonExaminationDao getDao() {
@@ -56,29 +62,45 @@ public class LessonExaminationServiceImpl extends ServiceImpl<LessonExaminationD
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void publish(LessonExaminationSaveDto param) {
-        String studentIds = param.getStudentIds();
-        if(StringUtils.isEmpty(studentIds)){
+        if(CollectionUtils.isEmpty(param.getStudentLessonExaminationSaveDtos())){
             throw new BizException("请选择学员");
         }
-        List<LessonExaminationDetailDto> examinationDetailDtos = param.getExaminationDetailDtos();
-        if(CollectionUtils.isEmpty(examinationDetailDtos)){
-            throw new BizException("请选择练习内容");
-        }
         String expireTime = sysConfigDao.findConfigValue("homework_expire_time");
         if(org.apache.commons.lang3.StringUtils.isEmpty(expireTime)){
             expireTime = "7";
         }
         String expireDate = DateUtil.dateToString(DateUtil.addDays(new Date(), Integer.parseInt(expireTime)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
-        String[] split = studentIds.split(",");
         LessonExamination lessonExamination = new LessonExamination();
-        lessonExamination.setExpectNum(split.length);
-        lessonExamination.setClassGroupId(param.getClassGroupId());
-        lessonExamination.setCourseScheduleId(param.getCourseScheduleId());
+        lessonExamination.setExpectNum(param.getExpectNum());
+        if(param.getCourseScheduleId() != null){
+            CourseSchedule schedule = courseScheduleDao.get(param.getCourseScheduleId());
+            if(Objects.nonNull(schedule)){
+                lessonExamination.setOrganId(schedule.getOrganId());
+                lessonExamination.setMusicGroupId(schedule.getMusicGroupId());
+                lessonExamination.setClassGroupId(schedule.getClassGroupId());
+                lessonExamination.setCourseScheduleId(schedule.getId());
+            }
+        }else if(param.getClassGroupId() != null){
+            ClassGroup classGroup = classGroupDao.get(param.getClassGroupId());
+            if(Objects.nonNull(classGroup)){
+                lessonExamination.setClassGroupId(classGroup.getId());
+                lessonExamination.setMusicGroupId(classGroup.getMusicGroupId());
+                MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+                if(Objects.nonNull(musicGroup)){
+                    lessonExamination.setOrganId(musicGroup.getOrganId());
+                }
+            }
+        }else {
+            Teacher teacher = teacherDao.get(param.getTeacherId());
+            if(Objects.nonNull(teacher)){
+                lessonExamination.setOrganId(teacher.getTeacherOrganId());
+            }
+        }
         lessonExamination.setExpireDate(expireDate);
         lessonExamination.setTeacherId(param.getTeacherId());
         baseMapper.insert(lessonExamination);
-        studentLessonExaminationService.save(lessonExamination.getId(),split);
-        studentLessonExaminationDetailService.save(lessonExamination.getId(),split,examinationDetailDtos);
+        studentLessonExaminationService.save(lessonExamination.getId(),param.getStudentLessonExaminationSaveDtos());
+        studentLessonExaminationDetailService.save(lessonExamination.getId(),param.getStudentLessonExaminationSaveDtos());
     }
 
     @Override
@@ -92,6 +114,27 @@ public class LessonExaminationServiceImpl extends ServiceImpl<LessonExaminationD
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = baseMapper.queryPage(params);
+            Set<String> musicGroupIds = dataList.stream().filter(e -> StringUtils.isNotEmpty(e.getMusicGroupId())).
+                    map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+            Map<String, String> musicGroupNameMap = Collections.EMPTY_MAP;
+            if(CollectionUtils.isNotEmpty(musicGroupIds)){
+                musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+            }
+            List<Long> examinationIds = dataList.stream().filter(e -> StringUtils.isEmpty(e.getMusicGroupId())).map(e -> e.getId()).collect(Collectors.toList());
+            Map<Long,String> nameMap = Collections.EMPTY_MAP;
+            if(CollectionUtils.isNotEmpty(examinationIds)){
+                nameMap = MapUtil.convertMybatisMap(studentLessonExaminationService.getDao().getStudentName(examinationIds));
+            }
+            List<Integer> teacherIds = dataList.stream().map(e -> e.getTeacherId()).distinct().collect(Collectors.toList());
+            Map<Integer, String> teacherNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(teacherIds));
+            Set<Integer> organIds = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
+            Map<Integer, String> organNameMap = MapUtil.convertIntegerMap(organizationDao.findOrganNameMapList(organIds));
+            for (LessonExaminationResultDto vo : dataList) {
+                vo.setOrganName(organNameMap.get(vo.getOrganId()));
+                vo.setMusicGroupName(musicGroupNameMap.get(vo.getMusicGroupId()));
+                vo.setTeacherName(teacherNameMap.get(vo.getTeacherId()));
+                vo.setStudentNames(nameMap.get(vo.getId()));
+            }
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -111,6 +154,15 @@ public class LessonExaminationServiceImpl extends ServiceImpl<LessonExaminationD
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = baseMapper.queryPageByStudent(params);
+            Set<String> musicGroupIds = dataList.stream().filter(e -> StringUtils.isNotEmpty(e.getMusicGroupId())).
+                    map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+            Map<String, String> musicGroupNameMap = Collections.EMPTY_MAP;
+            if(CollectionUtils.isNotEmpty(musicGroupIds)){
+                musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+            }
+            for (LessonExaminationResultDto1 vo : dataList) {
+                vo.setMusicGroupName(musicGroupNameMap.get(vo.getMusicGroupId()));
+            }
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -120,8 +172,8 @@ public class LessonExaminationServiceImpl extends ServiceImpl<LessonExaminationD
     }
 
     @Override
-    public PageInfo<LessonExaminationResultDto2> queryPageByWeb(LessonExaminationQueryInfo2 queryInfo) {
-        return null;
+    public LessonExaminationResultDto1 getOne(Integer userId, Long lessonExaminationId) {
+        return baseMapper.getOneByStudent(userId,lessonExaminationId);
     }
 
 }

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

@@ -7,18 +7,30 @@ 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.ExtracurricularExercisesService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 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 +117,21 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     @Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 
+    @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+    @Autowired
+    private ExtracurricularExercisesService  extracurricularExercisesService;
+
+    @Autowired
+    private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
+    @Autowired
+    private ExtracurricularExercisesDao extracurricularExercisesDao;
+
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
         return studentCourseHomeworkDao;
@@ -381,7 +408,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 +431,59 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         if (count == 0) {
             dataList = new ArrayList<>();
         }
+
+        // 构建返回数据
+
+        // 乐团信息
+
+        // 乐团信息
+        Map<String, MusicGroup> musicGroupMap = new HashMap<>();
+        List<String> musicGroupIds = dataList.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toList());
+
+        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 = dataList.stream().map(e -> e.getClassGroupId()).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 : 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.getStandardFlag() == null) {
+                studentHomeworkRecordDto.setFinishStatus(false);
+            } else
+            if (studentHomeworkRecordDto.getStandardFlag().equals(StandardEnum.STANDARD)
+                || studentHomeworkRecordDto.getStandardFlag().equals(StandardEnum.EXCELLENT)){
+                studentHomeworkRecordDto.setFinishStatus(true);
+            } else {
+                studentHomeworkRecordDto.setFinishStatus(false);
+            }
+            studentHomeworkRecordDto.setType(ELessonTrainingType.HOMEWORK);
+        }
+
         pageInfo.setRows(dataList);
         return pageInfo;
     }
@@ -672,4 +752,365 @@ 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 = studentCourseHomeworkDao.findStudentCourseHomeworkByCourse(query);
+        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::getUserId, 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() == null) {
+                studentCourseHomework.setFinishFlag(false);
+            } else
+            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);
+        if (query.getSubjectId() != null) {
+            extraExerciseStudents = extraExerciseStudents.stream()
+                                                         .filter(o -> o.getSubjectId().equals(query.getSubjectId()))
+                                                         .collect(Collectors.toList());
+        }
+        return getStudentCourseHomeworks(extraExerciseStudents);
+    }
+
+    /**
+     * 学生端查看练习详情
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public CourseHomeworkWrapper.CourseHomeworkList findStudentHomeworkRecordDetail(CourseHomeworkWrapper.StudentCourseHomeworkQuery query) {
+        CourseHomeworkWrapper.CourseHomeworkList courseHomeworkDetail = null;
+        if (ELessonTrainingType.HOMEWORK.equals(query.getType())) {
+            courseHomeworkDetail= courseHomeworkService.findCourseHomeworkDetail(
+                query.getCourseScheduleId());
+        } else {
+            courseHomeworkDetail = courseHomeworkService.findCourseExtraHomeworkDetail(query.getCourseScheduleId());
+        }
+        if (courseHomeworkDetail == null) {
+            throw new BizException("作业不存在");
+        }
+
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> detailList = studentLessonTrainingDetailService.getBaseLessonTrainingDetail(
+            courseHomeworkDetail.getCourseHomeworkId(), query.getType(), query.getUserId());
+
+        long count = detailList.stream().filter(o -> o.getTrainingTimes() < o.getTimes()).count();
+        if (count >0) {
+            courseHomeworkDetail.setFinishStatus(false);
+        } else {
+            courseHomeworkDetail.setFinishStatus(true);
+        }
+        courseHomeworkDetail.setTrainingDetailList(detailList);
+
+        return courseHomeworkDetail;
+
+    }
+
+    /**
+     * 添加学生作业练习记录
+     *
+     * @param record
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addStudentHomeworkRecord(CourseHomeworkWrapper.AddStudentHomeworkRecord record) {
+
+        StudentLessonTrainingDetail studentLessonTrainingDetail = studentLessonTrainingDetailService.getById(record.getId());
+        if (studentLessonTrainingDetail == null) {
+            throw new BizException("练习记录不存在");
+        }
+        // 设置个人作业练习详情记录
+        studentLessonTrainingDetail.setTrainingTimes(studentLessonTrainingDetail.getTrainingTimes() +1);
+
+        if (studentLessonTrainingDetail.getTrainingTimes() >= studentLessonTrainingDetail.getTimes()) {
+            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.STANDARD);
+        } else {
+            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_STANDARD);
+
+        }
+        studentLessonTrainingDetail.setUpdateTime(new Date());
+        studentLessonTrainingDetailService.updateById(studentLessonTrainingDetail);
+
+        // 查询当前作业的其他作业,判断是否全部完成
+        List<StudentLessonTrainingDetail> list = studentLessonTrainingDetailService.lambdaQuery()
+                                   .eq(StudentLessonTrainingDetail::getCourseHomeworkId,
+                                       studentLessonTrainingDetail.getCourseHomeworkId())
+                                   .eq(StudentLessonTrainingDetail::getUserId,
+                                       record.getUserId())
+                                   .eq(StudentLessonTrainingDetail::getType,
+                                       studentLessonTrainingDetail.getType())
+                                   .in(StudentLessonTrainingDetail::getTrainingStatus,
+                                       StandardEnum.NOT_START,
+                                       StandardEnum.NOT_STANDARD)
+                                   .list();
+        if (!CollectionUtils.isEmpty(list)) {
+            return true;
+        }
+
+        // 设置个人作业练习记录
+
+        if (studentLessonTrainingDetail.getType().equals(ELessonTrainingType.HOMEWORK)) {
+
+            StudentCourseHomework studentCourseHomework = studentCourseHomeworkDao.getHomeworkByUserIdAndCourseHomeworkId(
+                record.getUserId(), studentLessonTrainingDetail.getCourseHomeworkId());
+
+            if (studentCourseHomework == null) {
+                throw new BizException("学生作业记录不存在");
+            }
+            if (studentCourseHomework.getStandardFlag() == null) {
+
+            } else
+            if (studentCourseHomework.getStandardFlag().equals(StandardEnum.STANDARD)
+                || studentCourseHomework.getStandardFlag().equals(StandardEnum.EXCELLENT)){
+                return true;
+            }
+            // 设置作业完成
+            studentCourseHomework.setStandardFlag(StandardEnum.STANDARD);
+            studentCourseHomework.setUpdateTime(new Date());
+            studentCourseHomework.setSubmitTime(new Date());
+            studentCourseHomeworkDao.update(studentCourseHomework);
+
+            // 添加完成人数
+            CourseHomework courseHomework = courseHomeworkDao.get(studentLessonTrainingDetail.getCourseHomeworkId());
+            if (courseHomework == null) {
+                throw new BizException("课程作业不存在");
+            }
+            if (courseHomework.getExpiryDate().compareTo(new Date()) < 0) {
+                throw new BizException("作业已截止");
+            }
+            courseHomeworkDao.updateFinishNum(studentLessonTrainingDetail.getCourseHomeworkId());
+
+
+        } else {
+            ExtracurricularExercisesReply exercisesReply = extracurricularExercisesReplyDao.getByExtraIdAndUserId(
+                studentLessonTrainingDetail.getCourseHomeworkId(), record.getUserId());
+
+            if (exercisesReply == null) {
+                throw new BizException("学生作业记录不存在");
+            }
+            if (exercisesReply.getStandardFlag() == null) {
+
+            } else
+            if (exercisesReply.getStandardFlag().equals(StandardEnum.STANDARD)
+                || exercisesReply.getStandardFlag().equals(StandardEnum.EXCELLENT)){
+                return true;
+            }
+            // 设置作业完成
+            exercisesReply.setStandardFlag(StandardEnum.STANDARD);
+            exercisesReply.setUpdateTime(new Date());
+            exercisesReply.setSubmitTime(new Date());
+            extracurricularExercisesReplyDao.update(exercisesReply);
+            // 添加完成人数
+            ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(studentLessonTrainingDetail.getCourseHomeworkId());
+            if (extracurricularExercises == null) {
+                throw new BizException("课外作业不存在");
+            }
+            if (extracurricularExercises.getExpireDate().compareTo(new Date()) < 0) {
+                throw new BizException("作业已截止");
+            }
+            extracurricularExercisesDao.updateFinishNum(studentLessonTrainingDetail.getCourseHomeworkId());
+        }
+        return true;
+    }
+
+
+    /**
+     * 老师查看学生作业练习详情
+     *
+     * @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() == null) {
+            studentLessonTraining.setFinishFlag(false);
+        } else
+        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 studentLessonTraining = getUserInfo(userId);
+
+
+        // 作业信息
+        ExtracurricularExercisesReply exercisesReply = extracurricularExercisesReplyDao.getByExtraIdAndUserId(
+            courseScheduleId, userId);
+        if (exercisesReply == null) {
+            throw new BizException("作业不存在");
+        }
+        studentLessonTraining.setStandardFlag(exercisesReply.getStandardFlag());
+
+        // 作业完成情况
+        if (exercisesReply.getStandardFlag() == null) {
+            studentLessonTraining.setFinishFlag(false);
+        } else if( exercisesReply.getStandardFlag().equals(StandardEnum.STANDARD) || exercisesReply.getStandardFlag().equals(StandardEnum.EXCELLENT)) {
+            studentLessonTraining.setFinishFlag(true);
+        } else {
+            studentLessonTraining.setFinishFlag(false);
+        }
+
+        // 练习内容
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetails = studentCourseHomeworkDao
+            .findByStudentIdsAndCourseScheduleId(Collections.singletonList(userId.intValue()), exercisesReply.getExtracurricularExercisesId(),type);
+
+        studentLessonTraining.setStudentLessonTrainingDetail(studentLessonTrainingDetails);
+        return studentLessonTraining;
+
+    }
+
+    @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;
+    }
 }

+ 191 - 10
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,18 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	@Autowired
 	private CourseScheduleStatisticsDao courseScheduleStatisticsDao;
 
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+    @Autowired
+    private ClassGroupService classGroupService;
+
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+
+    @Autowired
+    private ExtracurricularExercisesDao extracurricularExercisesDao;
+
 	@Override
 	public BaseDAO<Long, StudentExtracurricularExercisesSituation> getDAO() {
 		return studentExtracurricularExercisesSituationDao;
@@ -647,22 +667,183 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
     public PageInfo<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherServeHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo) {
         PageInfo<CourseHomeworkWrapper.CourseHomeworkList> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         //获取时间段内有服务指标的课程(课后作业)
-        Date firstDayOfMonth;
-        Date lastDayOfMonth;
-        if(Objects.isNull(queryInfo.getStartTime())){
-            firstDayOfMonth = DateUtil.getFirstDayOfMonth(queryInfo.getMonth());
-            lastDayOfMonth = DateUtil.getLastDayOfMonth(queryInfo.getMonth());
-        }else {
-            firstDayOfMonth = queryInfo.getStartTime();
-            lastDayOfMonth = queryInfo.getEndTime();
+
+        Date firstDayOfMonth = queryInfo.getStartTime();
+        Date lastDayOfMonth = queryInfo.getEndTime();
+        List<Long> courseIds = new ArrayList<>();
+        if (queryInfo.getCourseScheduleId() != null) {
+            courseIds.add(queryInfo.getCourseScheduleId().longValue());
+        } else {
+            courseIds = studentExtracurricularExercisesSituationDao.queryCourseIdByClassDate(firstDayOfMonth,
+                                                    lastDayOfMonth, queryInfo.getTeacherId());
         }
-        List<Long> courseIds = studentExtracurricularExercisesSituationDao.queryCourseIdByClassDate(firstDayOfMonth,lastDayOfMonth,queryInfo.getTeacherId());
         if(courseIds == null || courseIds.size() == 0){
             return pageInfo;
         }
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("versionTag","v2");
 
         // 查出课程列表
-        courseScheduleDao.queryTeacherServeHomeworkDetailV2(queryInfo, courseIds);
+        List<CourseHomeworkWrapper.CourseHomeworkList> courseHomeworkLists = courseScheduleDao.queryTeacherServeHomeworkDetailV2(
+            params, 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()));
+
+        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());
+            }
+
+            // 设置老师信息
+            Integer teacherId = courseHomeworkList.getTeacherId();
+            if (teacherId != null) {
+                SysUser sysUser = sysUserFeignService.queryUserById(teacherId);
+                courseHomeworkList.setTeacherImg(sysUser.getAvatar());
+                courseHomeworkList.setTeacherName(sysUser.getRealName());
+            }
+
+
+        }
+
+
+        pageInfo.setRows(courseHomeworkLists);
+        return pageInfo;
+    }
+
+    /**
+     * 老师课外作业列表
+     *
+     * @param queryInfo
+     */
+    @Override
+    public PageInfo<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherExtraHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo) {
+
+        // 获取时间段内有服务指标的乐团(课外作业)
+        List<String> subjectIds = new ArrayList<>();
+        if (queryInfo.getCourseScheduleId() == null) {
+            if (queryInfo.getType() == null || queryInfo.getType().equals(ELessonTrainingType.EXTRACURRICULAR)) {
+                if (queryInfo.getHomeWorkStatus() == null || queryInfo.getHomeWorkStatus().equals(EHomeWorkStatus.UNASSIGNED)) {
+                    StudentExerciseMusicGroupQueryInfo query = new StudentExerciseMusicGroupQueryInfo();
+                    query.setMondayDate(DateUtil.dateToString(queryInfo.getStartTime()));
+                    query.setSundayDate(DateUtil.dateToString(queryInfo.getEndTime()));
+                    query.setTeacherId(queryInfo.getTeacherId());
+                    query.setPage(1);
+                    query.setRows(10000);
+                    PageInfo<MusicGroupExtracurricularSummaryDto> groupList = queryStudentExerciseMusicGroupList(query);
+
+                    if (!CollectionUtils.isEmpty(groupList.getRows())) {
+                        subjectIds = groupList.getRows().stream().map(o -> o.getMusicGroupId()).collect(Collectors.toList());
+                    }
+                }
+            }
+        }
+        PageInfo<CourseHomeworkWrapper.CourseHomeworkList> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("subjectIds", subjectIds);
+        params.put("versionTag","v2");
+
+        int count = extracurricularExercisesDao.countTeacherExtraHomeworkDetailV2(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            List<CourseHomeworkWrapper.CourseHomeworkList> courseHomeworkLists  = extracurricularExercisesDao.queryTeacherExtraHomeworkDetailV2(params);
+
+
+            // 乐团信息
+            List<String> musicGroupIds = courseHomeworkLists.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 = courseHomeworkLists.stream().map(e -> e.getClassGroupId())
+                                                        .filter(Objects::nonNull)
+                                                        .collect(Collectors.toList());
+            Map<Integer, ClassGroup> classGroupMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(classIds)) {
+                List<ClassGroup> classGroups = classGroupService.queryByIds(classIds);
+                if (!CollectionUtils.isEmpty(classGroups)) {
+                    classGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, Function.identity()));
+                }
+            }
+            for (CourseHomeworkWrapper.CourseHomeworkList courseHomeworkList : courseHomeworkLists) {
+
+                // 乐团信息
+                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());
+                }
+
+                // 如果是给学生布置的作业  名 : xx等多少名学员
+                if (StringUtils.isEmpty(courseHomeworkList.getMusicGroupId()) && courseHomeworkList.getClassGroupId() == null) {
+                    String studentIdList = courseHomeworkList.getStudentIdList();
+                    if (StringUtils.isNotBlank(studentIdList)) {
+
+                        String[] split = studentIdList.split(",");
+                        String userId = split[0];
+                        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
+                        if (split.length == 1) {
+                            courseHomeworkList.setMusicGroupName(sysUser.getUsername());
+                        } else {
+                            courseHomeworkList.setMusicGroupName(sysUser.getUsername() + "等" + split.length + "名学员");
+                        }
+                    }
+                }
+
+                // 设置老师信息
+                SysUser sysUser = sysUserFeignService.queryUserById(courseHomeworkList.getTeacherId());
+                if (Objects.nonNull(sysUser)) {
+                    courseHomeworkList.setTeacherName(sysUser.getUsername());
+                    courseHomeworkList.setTeacherImg(sysUser.getAvatar());
+                }
+            }
+
+            pageInfo.setRows(courseHomeworkLists);
+        }
+
 
         return pageInfo;
     }

+ 24 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationDetailServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao;
 import com.ym.mec.biz.dal.dto.LessonExaminationDetailDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
 import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
@@ -34,27 +35,31 @@ public class StudentLessonExaminationDetailServiceImpl extends ServiceImpl<Stude
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void save(Long lessonExaminationId, String[] studentIds, List<LessonExaminationDetailDto> detailDtos) {
+    public void save(Long lessonExaminationId,List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos) {
         List<StudentLessonExaminationDetail> detailList = new ArrayList<>();
-        for (String id : studentIds) {
-            Integer studentId = Integer.parseInt(id);
-            Integer score = 100/detailDtos.size();
-            Integer subScore = 100 - score * detailDtos.size();
-            for (int i = 0; i < detailDtos.size(); i++) {
-                LessonExaminationDetailDto vo = detailDtos.get(i);
-                StudentLessonExaminationDetail studentLessonExaminationDetail = new StudentLessonExaminationDetail();
-                studentLessonExaminationDetail.setLessonExaminationId(lessonExaminationId);
-                studentLessonExaminationDetail.setScore(vo.getScore());
-                if(i == 0){
-                    studentLessonExaminationDetail.setStandardScore(score + subScore);
-                }else {
-                    studentLessonExaminationDetail.setStandardScore(score);
+        for (StudentLessonExaminationSaveDto dto : studentLessonExaminationSaveDtos) {
+            String[] studentIds = dto.getStudentIds().split(",");
+            List<LessonExaminationDetailDto> detailDtos = dto.getExaminationDetailDtos();
+            for (String id : studentIds) {
+                Integer studentId = Integer.parseInt(id);
+                Integer score = 100/detailDtos.size();
+                Integer subScore = 100 - score * detailDtos.size();
+                for (int i = 0; i < detailDtos.size(); i++) {
+                    LessonExaminationDetailDto vo = detailDtos.get(i);
+                    StudentLessonExaminationDetail studentLessonExaminationDetail = new StudentLessonExaminationDetail();
+                    studentLessonExaminationDetail.setUserId(studentId);
+                    studentLessonExaminationDetail.setLessonExaminationId(lessonExaminationId);
+                    studentLessonExaminationDetail.setMusicScoreId(vo.getMusicScoreId());
+                    studentLessonExaminationDetail.setHeardLevel(vo.getHeardLevel());
+                    studentLessonExaminationDetail.setStandardScore(vo.getScore());
+                    if(i == 0){
+                        studentLessonExaminationDetail.setAvgScore(score + subScore);
+                    }else {
+                        studentLessonExaminationDetail.setAvgScore(score);
+                    }
+                    studentLessonExaminationDetail.setPartIndex(vo.getPartIndex());
+                    detailList.add(studentLessonExaminationDetail);
                 }
-                studentLessonExaminationDetail.setPartIndex(vo.getPartIndex());
-                studentLessonExaminationDetail.setHeardLevel(vo.getHeardLevel());
-                studentLessonExaminationDetail.setUserId(studentId);
-                studentLessonExaminationDetail.setMusicScoreId(vo.getMusicScoreId());
-                detailList.add(studentLessonExaminationDetail);
             }
         }
         baseMapper.insertBatch(detailList);

+ 75 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationServiceImpl.java

@@ -1,26 +1,30 @@
 package com.ym.mec.biz.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.LessonExaminationDao;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDao;
 import com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.dto.LessonExaminationSubmitDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
+import com.ym.mec.biz.dal.entity.LessonExamination;
 import com.ym.mec.biz.dal.entity.StudentLessonExamination;
 import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
+import com.ym.mec.biz.service.LessonExaminationService;
+import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
 import com.ym.mec.biz.service.StudentLessonExaminationService;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.*;
 
 /**
@@ -34,26 +38,31 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
 
     private final static Logger log = LoggerFactory.getLogger(StudentLessonExaminationServiceImpl.class);
 
+    @Autowired
+    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+    @Autowired
+    private LessonExaminationDao lessonExaminationDao;
+
     @Override
     public StudentLessonExaminationDao getDao() {
         return this.baseMapper;
     }
 
-    @Autowired
-    private SysConfigDao sysConfigDao;
-    @Autowired
-    private StudentLessonExaminationDetailDao studentLessonExaminationDetailDao;
-
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void save(Long lessonExaminationId, String[] studentIds) {
+    public void save(Long lessonExaminationId, List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos) {
         List<StudentLessonExamination> studentLessonExaminations = new ArrayList<>();
-        for (String studentId : studentIds) {
-            StudentLessonExamination studentLessonExamination = new StudentLessonExamination();
-            studentLessonExamination.setLessonExaminationId(lessonExaminationId);
-            studentLessonExamination.setUserId(Integer.parseInt(studentId));
-            studentLessonExaminations.add(studentLessonExamination);
+        for (StudentLessonExaminationSaveDto dto : studentLessonExaminationSaveDtos) {
+            String[] studentIds = dto.getStudentIds().split(",");
+            for (String studentId : studentIds) {
+                StudentLessonExamination studentLessonExamination = new StudentLessonExamination();
+                studentLessonExamination.setLessonExaminationId(lessonExaminationId);
+                studentLessonExamination.setUserId(Integer.parseInt(studentId));
+                studentLessonExamination.setSubjectId(dto.getSubjectId());
+                studentLessonExaminations.add(studentLessonExamination);
+            }
         }
+
         baseMapper.insertBatch(studentLessonExaminations);
     }
 
@@ -79,12 +88,59 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void submit(LessonExaminationSubmitDto submitDto) {
-
+        Long studentLessonExaminationDetailId = submitDto.getStudentLessonExaminationDetailId();
+        StudentLessonExaminationDetail detail = studentLessonExaminationDetailService.getById(studentLessonExaminationDetailId);
+        if(Objects.isNull(detail)){
+            throw new BizException("训练内容不存在");
+        }
+        Long lessonExaminationId = detail.getLessonExaminationId();
+        Integer userId = detail.getUserId();
+        LessonExamination lessonExamination = lessonExaminationDao.selectById(lessonExaminationId);
+        if(Objects.isNull(lessonExamination)){
+            throw new BizException("训练内容不存在");
+        }
+        Date now = new Date();
+        Date expireDate = DateUtil.stringToDate(lessonExamination.getExpireDate(), DateUtil.DEFAULT_PATTERN);
+        if(DateUtil.daysBetween(now,expireDate) < 0){
+            throw new BizException("训练已截止");
+        }
+        StudentLessonExamination studentLessonExamination = this.lambdaQuery().eq(StudentLessonExamination::getLessonExaminationId, lessonExaminationId)
+                .eq(StudentLessonExamination::getUserId, userId).one();
+        studentLessonExamination.setTrainingTime(now);
+        this.updateById(studentLessonExamination);
+        detail.setTrainingTime(now);
+        if(detail.getTrainingTime() == null){
+            //训练人数加一
+            lessonExaminationDao.updateTrainingNum(lessonExaminationId);
+        }
+        //是否达标
+        if(submitDto.getScore() >= detail.getStandardScore()){
+            if(!detail.getStandardFlag()){
+                //达标人数加一
+                lessonExaminationDao.updateStandardNum(lessonExaminationId);
+            }
+            detail.setStandardFlag(true);
+        }
+        //训练分数是否比上一次高
+        Boolean flag = submitDto.getScore() > detail.getTrainingScore();
+        if(flag){
+            detail.setTrainingScore(submitDto.getScore());
+            //计算分数
+            Double actualScore = detail.getTrainingScore() * 1D / detail.getStandardScore() * detail.getAvgScore();
+            //更新分数
+            detail.setActualAvgScore(actualScore.intValue() > detail.getAvgScore() ? detail.getAvgScore():actualScore.intValue());
+        }
+        //更新详情
+        studentLessonExaminationDetailService.updateById(detail);
+        //更新总分
+        if(flag){
+            baseMapper.updateTrainingScore(lessonExaminationId,userId);
+        }
     }
 
     @Override
-    public PageInfo<StudentLessonExaminationDto1> queryPageByWeb(Integer studentLessonExaminationId) {
-        return null;
+    public List<StudentLessonExaminationDto1> queryStudentPage(Long lessonExaminationId) {
+        return baseMapper.queryStudentPage(lessonExaminationId);
     }
 }
 

+ 68 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java

@@ -3,17 +3,25 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.StudentLessonTrainingDetailMapper;
+import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
+import com.ym.mec.biz.service.SysMusicScoreService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 练习内容
@@ -23,6 +31,8 @@ import java.util.List;
 @Service
 public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentLessonTrainingDetailMapper, StudentLessonTrainingDetail> implements StudentLessonTrainingDetailService {
 
+    @Autowired
+    private SysMusicScoreDao sysMusicScoreDao;
 	/**
      * 查询详情
      * @param id 详情ID
@@ -63,7 +73,7 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
      * @param userIdList                   学生ID
      */
     @Override
-    public List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> detailList, List<Integer> userIdList,Long homeworkId) {
+    public List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> detailList, List<Integer> userIdList,Long homeworkId,ELessonTrainingType type) {
         // 保存作业标准
         if (CollectionUtils.isEmpty(detailList) || CollectionUtils.isEmpty(userIdList)) {
             return new ArrayList<>();
@@ -92,8 +102,65 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
             studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_START);
             studentLessonTrainingDetail.setCreateTime(new Date());
             studentLessonTrainingDetail.setUpdateTime(new Date());
+            studentLessonTrainingDetail.setType(type);
 
         }
         return result;
     }
+
+    /**
+     * 查询布置的作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type             作业类型
+     */
+    @Override
+    public List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type) {
+        return getBaseLessonTrainingDetail(courseHomeworkId, type, null);
+    }
+
+    /**
+     * 学生端查询作业详情
+     *
+     * @param courseHomeworkId 作业ID
+     * @param type             作业类型
+     * @param userId           学生ID
+     */
+    @Override
+    public List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> getBaseLessonTrainingDetail(Long courseHomeworkId, ELessonTrainingType type, Long userId) {
+        List<StudentLessonTrainingDetail> list = this.lambdaQuery()
+                                                     .eq(StudentLessonTrainingDetail::getCourseHomeworkId,
+                                                         courseHomeworkId)
+                                                     .isNull(userId == null,StudentLessonTrainingDetail::getUserId)
+                                                     .eq(StudentLessonTrainingDetail::getType, type)
+                                                     .eq(userId != null, StudentLessonTrainingDetail::getUserId, userId)
+                                                     .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> studentLessonTrainingDetails = JSON.parseArray(
+            JSON.toJSONString(list), StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail.class);
+
+         // 曲目id集合
+        List<Long> collect = studentLessonTrainingDetails.stream()
+                                                         .map(
+                                                             StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail::getMusicScoreId)
+                                                         .distinct()
+                                                         .collect(Collectors.toList());
+
+        List<SysMusicScore> scoreList = sysMusicScoreDao.findByIds(
+            collect.stream().map(String::valueOf).collect(Collectors.joining(",")));
+
+        // id 分组
+        Map<Integer, SysMusicScore> musicScoreMap = scoreList.stream()
+                                                     .collect(Collectors.toMap(SysMusicScore::getId, Function.identity()));
+
+        for (StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail : studentLessonTrainingDetails) {
+            SysMusicScore sysMusicScore = musicScoreMap.get(studentLessonTrainingDetail.getMusicScoreId().intValue());
+            if (sysMusicScore != null) {
+                studentLessonTrainingDetail.setMusicScoreName(sysMusicScore.getName());
+            }
+        }
+        return studentLessonTrainingDetails;
+    }
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
+import com.ym.mec.biz.service.StudentLessonExaminationService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysTenantConfigService;
@@ -58,6 +59,9 @@ public class StudentServeServiceImpl implements StudentServeService {
     private MusicGroupDao musicGroupDao;
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
+
+    @Autowired
+    private StudentLessonExaminationDao studentLessonExaminationDao;
     
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -821,4 +825,41 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return result;
     }
+
+    /**
+     * 展示按钮红点
+     *
+     * @param userId 用户id
+     */
+    @Override
+    public List<HomeworkStat> homeworkStat(Integer userId) {
+        List<HomeworkStat> homeworkStatList = new ArrayList<>();
+
+        // 作业按钮红点
+        int num = studentCourseHomeworkDao.queryNotSuccessHomeworkList(userId);
+
+        HomeworkStat homeworkStat = new HomeworkStat();
+        homeworkStat.setType("HOMEWORK");
+        homeworkStatList.add(homeworkStat);
+        if (num > 0) {
+            homeworkStat.setShow(true);
+        } else {
+            homeworkStat.setShow(false);
+        }
+
+        // 评测按钮红点
+        num = studentLessonExaminationDao.queryNotSuccessExaminationList(userId);
+
+
+        HomeworkStat homeworkStat2 = new HomeworkStat();
+        homeworkStat2.setType("EXAMINATION");
+        homeworkStatList.add(homeworkStat2);
+        if (num > 0) {
+            homeworkStat2.setShow(true);
+        } else {
+            homeworkStat2.setShow(false);
+        }
+
+        return homeworkStatList;
+    }
 }

+ 20 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -79,6 +79,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	private StudentService studentService;
 
     @Autowired
+    private SysConfigService sysConfigService;
+
+    @Autowired
     private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
 
 	@Override
@@ -270,6 +273,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				result.put("status",2);
 				return result;
 			}
+            teacherAttendance.setSignInAttachments(teacherSignOutDto.getTeacherAttendanceInfo().getSignInAttachments());
 			teacherAttendance.setSignInDeviceNo(teacherSignOutDto.getTeacherAttendanceInfo().getDeviceNum());
 			if(Objects.nonNull(teacherAttendance.getId())){
 				teacherAttendanceDao.update(teacherAttendance);
@@ -348,11 +352,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					courseHomework.setMusicGroupId(currentCourseDetail.getMusicGroupId());
 					courseHomework.setGroupType(teacherAttendance.getGroupType());
 					courseHomework.setClassGroupId(currentCourseDetail.getClassId().intValue());
-					courseHomework.setExpiryDate(DateUtil.addDays(date,7));
+					courseHomework.setExpiryDate(DateUtil.addDays(date,Integer.parseInt(sysConfigService.findByParamName("homework_expire_time").getParanValue())));
 
 					courseHomeworkService.insert(courseHomework);
 					List<StudentCourseHomework> studentCourseHomeworks = new ArrayList<>();
 
+                    String versionTag = "v1";
                     // 作业详情
                     List<StudentLessonTrainingDetail> studentLessonTrainingDetails = new ArrayList<>();
 
@@ -369,7 +374,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 
                             studentLessonTrainingDetails.addAll(studentLessonTrainingDetailService
-                                                                    .homeWorkDetail(scoreSubjectDto.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId()));
+                                                                    .homeWorkDetail(scoreSubjectDto.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId(),ELessonTrainingType.HOMEWORK));
 
 						}
 					}else {
@@ -383,7 +388,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
                                                                       .map(StudentCourseHomework::getUserId)
                                                                       .collect(Collectors.toList());
                         studentLessonTrainingDetails.addAll(studentLessonTrainingDetailService
-                                                                .homeWorkDetail(courseHomeworkInfo.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId()));
+                                                                .homeWorkDetail(courseHomeworkInfo.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId(),ELessonTrainingType.HOMEWORK));
 
 					}
 					if(CollectionUtils.isEmpty(studentCourseHomeworks)){
@@ -393,6 +398,10 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
                         studentCourseHomework.setGroupType(teacherAttendance.getGroupType());
                     }
 
+                    if (CollectionUtils.isEmpty(studentLessonTrainingDetails)) {
+                        versionTag ="v2";
+                    }
+
 					//排除不被服务学员
 //					Set<Integer> serveStudentIds = studentServeService.getStudentWithCourse(teacherAttendance.getCourseScheduleId());
 //					Iterator<StudentCourseHomework> iterator = studentCourseHomeworks.iterator();
@@ -403,6 +412,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 //						}
 //					}
 					courseHomework.setExpectNum(studentCourseHomeworks.size());
+                    courseHomework.setVersionTag(versionTag);
 
 					Teacher teacher = teacherDao.get(courseSchedule.getActualTeacherId());
 					String dateStr = DateUtil.dateToString(DateUtil.addDays(date, 3), "MM月dd日");
@@ -801,7 +811,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		result.setTeacherName(teacherDao.queryNameById(courseSchedule.getActualTeacherId()));
 		result.setAttendClassTime(teacherAttendanceDao.getAttendClassTime(courseScheduleId));
 		result.setSchool(schoolDao.get(courseSchedule.getSchoolId()));
-		//获取异常考勤学员数量
+
+        // 设置课后作业版本
+        CourseHomework homework = courseHomeworkDao.getByCourseScheduleId(courseScheduleId);
+        if (homework != null) {
+            result.setVersionTag(homework.getVersionTag());
+        }
+        //获取异常考勤学员数量
 		result.setErrorAttendanceNum(studentAttendanceDao.countErrorAttendance(courseScheduleId));
 		if(teacherAttendance != null){
 			result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());

+ 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="classIds" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+
+    </select>
 </mapper>

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

@@ -21,6 +21,7 @@
 		<result column="expect_num_" property="expectNum" />
 		<result column="expiry_date_" property="expiryDate" />
 		<result column="tenant_id_" property="tenantId" />
+		<result column="version_tag_" property="versionTag" />
 	</resultMap>
 
 	<resultMap type="com.ym.mec.biz.dal.dto.CourseHomeworkListDto" id="CourseHomeworkDto">
@@ -286,12 +287,13 @@
 		<result property="classStartDate" column="start_class_time_"/>
 		<result property="classEndDate" column="end_class_time_"/>
 		<result property="musicScoreId" column="music_score_id_"/>
+		<result property="versionTag" column="versionTag"/>
 	</resultMap>
     <select id="queryHomePage" resultMap="WebCourseHomeworkListDtoMap">
 		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,ch.version_tag_ as versionTag
 		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 +334,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>
@@ -382,4 +386,12 @@
 			#{courseScheduleId}
 		</foreach>
 	</delete>
+
+	<update id="updateFinishNum">
+        UPDATE course_homework SET completed_num_ = ifnull(completed_num_,0) + 1 WHERE id_ = #{courseHomeworkId}
+    </update>
+
+	<select id="getByCourseScheduleId" resultMap="CourseHomework">
+        select * from course_homework where course_schedule_id_ = #{courseScheduleId}
+    </select>
 </mapper>

+ 18 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4134,14 +4134,21 @@
             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,
-        if(ch.id_ is null,'UNASSIGNED',if(ch.expiry_date_ &lt; now(),'ASSIGNED','DEADLINE')) as homeWorkStatus,
+        if(ch.id_ is null,'UNASSIGNED',if(ch.expiry_date_ &lt; now(),'DEADLINE','ASSIGNED')) as homeWorkStatus,
         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,
+        ch.create_time_ as assignTime,
+        ch.expiry_date_ as expiryDate,
+        ch.completed_num_ as finishNum,
+        cs.name_ as courseScheduleName,
+        ch.expect_num_ as studentNum
         from course_schedule cs
         left join course_homework ch on cs.id_ = ch.course_schedule_id_
 
@@ -4169,6 +4176,15 @@
                     #{courseId}
                 </foreach>
             </if>
+            <if test="param.courseScheduleId != null">
+                and cs.id_ = #{param.courseScheduleId}
+            </if>
+            <if test="param.versionTag !=null">
+                and ch.version_tag_ = #{param.versionTag}
+            </if>
         </where>
+        <if test="param.offset != null">
+            limit #{param.offset},#{param.rows}
+        </if>
     </select>
 </mapper>

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

@@ -11,6 +11,7 @@
 		<result column="music_group_id_" property="musicGroupId" />
 		<result column="teacher_id_" property="teacherId" />
 		<result column="username_" property="teacher.username" />
+		<result column="classGroupId" property="classGroupId" />
 		<result column="student_id_list_" property="studentIdList" />
 		<result column="batch_no_" property="batchNo" />
 		<result column="title_" property="title" />
@@ -24,6 +25,9 @@
 		<result column="organ_name_" property="organName" />
 		<result column="tenant_id_" property="tenantId" />
 		<result column="music_score_id_" property="musicScoreId" />
+		<result column="assignTime" property="assignTime" />
+		<result column="musicGroupName" property="musicGroupName" />
+		<result column="versionTag" property="versionTag" />
 	</resultMap>
 
 	<sql id="queryPageCondition">
@@ -56,6 +60,26 @@
 			<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>
+            <if test="search != null ">
+                and (su.username_ like '%' #{search} '%' or mg.name_ like '%' #{search} '%')
+            </if>
+            <if test="type != null">
+                and ee.group_type_ = #{type}
+            </if>
+            <if test="studentExerciseId != null">
+                and ee.id_ = #{studentExerciseId}
+            </if>
+            <if test="studentAssignFlag != null">
+                <if test="studentAssignFlag == true">
+                    and ee.music_group_id_ is null
+                </if>
+                <if test="studentAssignFlag == false">
+                    and ee.student_id_list_  is not null
+                </if>
+            </if>
 		</where>
 	</sql>
 	
@@ -111,6 +135,9 @@
 			<if test="completedNum != null">
 			completed_num_ = #{completedNum},
 			</if>
+            <if test="versionTag != null and versionTag != ''">
+                version_tag_ = #{versionTag},
+            </if>
 			update_time_ = NOW()
 		</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
@@ -124,10 +151,12 @@
 	<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,mg.name_ as musicGroupName,ee.class_group_id_ as classGroupId,ee.version_tag_ as versionTag
 		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 sys_user su on t.id_ = su.id_
 		LEFT JOIN organization o ON o.id_ = t.organ_id_
+        left join music_group mg on mg.id_ = ee.music_group_id_
 		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
 		<include refid="queryPageCondition"/>
 		GROUP BY ee.id_
@@ -138,7 +167,9 @@
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(DISTINCT ee.id_) 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 sys_user su on t.id_ = su.id_
 		left join organization o on o.id_ = t.organ_id_
+        left join music_group mg on mg.id_ = ee.music_group_id_
 		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
 		<include refid="queryPageCondition"/>
 	</select>
@@ -303,4 +334,96 @@
 			#{item}
 		</foreach>
 	</select>
+
+	<sql id="extraHomeworkDetailV2">
+		<if test="startTime != null and endTime != null">
+            create_time_ BETWEEN #{startTime} AND #{endTime}
+        </if>
+        <if test="homeWorkStatus != null">
+            <if test="homeWorkStatus.code == 'UNASSIGNED'">
+                AND id_ = -1
+            </if>
+            <if test="homeWorkStatus.code == 'ASSIGNED'">
+                AND expire_date_ &gt;= NOW()
+            </if>
+            <if test="homeWorkStatus.code == 'DEADLINE'">
+                AND expire_date_ &lt; NOW()
+            </if>
+            <if test="courseScheduleId != null">
+                AND id_ = #{courseScheduleId}
+            </if>
+        </if>
+        <if test="type != null">
+            and group_type_ = #{type}
+        </if>
+        <if test="versionTag != null">
+            and version_tag_ = #{versionTag}
+        </if>
+	</sql>
+	<select id="countTeacherExtraHomeworkDetailV2" resultType="int">
+        select count(1) from (
+        select 1 from extracurricular_exercises
+        <where>
+        <include refid="extraHomeworkDetailV2"/>
+        </where>
+        <if test="subjectIds != null and subjectIds.size() != 0">
+            union all
+            select 1 from music_group
+            where id_ in
+            <foreach collection="subjectIds" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>) t
+    </select>
+
+	<select id="queryTeacherExtraHomeworkDetailV2"
+            resultType="com.ym.mec.biz.dal.dto.CourseHomeworkWrapper$CourseHomeworkList">
+
+        <if test="subjectIds != null and subjectIds.size() != 0">
+            (select
+            id_ as musicGroupId,
+            'UNASSIGNED' as homeWorkStatus,
+            'EXTRACURRICULAR' as `type`,
+            null as courseScheduleId,
+            null as courseHomeworkId,
+            null as classGroupId,
+            null as studentNum,
+            null as finishNum,
+            null as assignTime,
+            null as expiryDate,
+            null as studentIdList,
+            null as teacherId
+            from music_group
+            where id_ in
+            <foreach collection="subjectIds" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            )
+            union all
+        </if>
+        (select
+        music_group_id_ as musicGroupId,
+        if(expire_date_ &gt; NOW(), 'ASSIGNED', 'DEADLINE') as homeWorkStatus,
+        group_type_ as `type`,
+        id_ as courseScheduleId,
+        id_ as courseHomeworkId,
+        class_group_id_ as classGroupId,
+        expect_num_ as studentNum,
+        completed_num_ as finishNum,
+        create_time_ as assignTime,
+        expire_date_ as expiryDate,
+        student_id_list_ as studentIdList,
+        teacher_id_ as teacherId
+        from extracurricular_exercises
+        <where>
+
+            <include refid="extraHomeworkDetailV2"/>
+        </where>
+        )
+        <include refid="global.limit"/>
+    </select>
+
+	<update id="updateFinishNum">
+        UPDATE extracurricular_exercises SET completed_num_ = ifnull(completed_num_,0) + 1 WHERE id_ = #{courseHomeworkId}
+    </update>
 </mapper>

+ 31 - 2
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml

@@ -41,6 +41,11 @@
 		<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" />
+		<result column="subjectId" property="subjectId" />
 	</resultMap>
 
 	<sql id="queryPageCondition">
@@ -192,10 +197,12 @@
 			eer.*,
 			su.username_ student_name_,
 		    su.avatar_,
-		    su.phone_
+		    su.phone_,
+        s.subject_id_list_ as subjectId
 		FROM
 			extracurricular_exercises_reply eer
 			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
+        left join student s on s.user_id_ = su.id_
 		WHERE eer.extracurricular_exercises_id_= #{extraExerciseId}
 		<if test="studentName != null">
 			AND su.username_ LIKE CONCAT('%',#{studentName},'%')
@@ -238,10 +245,25 @@
 			<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>
+            <if test="versionTag != null">
+                and ee.version_tag_ = #{versionTag}
+            </if>
 		</where>
 	</sql>
 	<select id="countStudentExtraExercises" resultType="int">
-		SELECT COUNT(id_) FROM extracurricular_exercises_reply eer
+		SELECT COUNT(eer.id_) FROM extracurricular_exercises_reply eer
+        left join extracurricular_exercises ee on eer.extracurricular_exercises_id_ = ee.id_
 		<include refid="queryStudentExtraExercisesCondition"/>
 	</select>
 	<select id="findStudentExtraExercises" resultMap="ExtraExerciseStudentsDto">
@@ -250,6 +272,10 @@
 			ee.title_,
 			ee.expire_date_,
 			ee.teacher_id_,
+        ee.group_type_  as `type`,
+            ee.id_ as extracurricularExercisesId,
+            ee.music_group_id_ as musicGroupId,
+        ee.class_group_id_ as classGroupId,
 			tea.real_name_ teacher_name_,
 			tea.avatar_,
 			su.username_ student_name_
@@ -610,4 +636,7 @@
 		GROUP BY sr.actual_subject_id_
 	</select>
 
+	<select id="getByExtraIdAndUserId" resultType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply">
+        SELECT * from  extracurricular_exercises_reply where extracurricular_exercises_id_ = #{extraId} and user_id_ = #{userId}
+    </select>
 </mapper>

+ 65 - 26
mec-biz/src/main/resources/config/mybatis/LessonExaminationMapper.xml

@@ -3,44 +3,40 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.LessonExaminationDao">
     <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.LessonExamination">
         <id column="id_" property="id"/>
-        <result column="teacher_id_" property="teacherId"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
         <result column="course_schedule_id_" property="courseScheduleId"/>
-        <result column="heard_level_" property="heardLevel"/>
-        <result column="batch_no_" property="batchNo"/>
-        <result column="title_" property="title"/>
-        <result column="attachments_" property="attachments"/>
-        <result column="content_" property="content"/>
-        <result column="expire_date_" jdbcType="TIMESTAMP" property="expireDate"/>
-        <result column="completed_num_" property="completedNum"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="expire_date_" property="expireDate"/>
+        <result column="standard_num_" property="standardNum"/>
+        <result column="training_num_" property="trainingNum"/>
         <result column="expect_num_" property="expectNum"/>
-        <result column="music_score_id_" property="musicScoreId"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="tenant_id_" property="tenantId"/>
     </resultMap>
 
-    <sql id="Base_Column_List">
-        id_
-        , teacher_id_, batch_no_, title_, attachments_, content_, expire_date_, completed_num_, expect_num_, music_score_id_, create_time_, update_time_, tenant_id_
-    </sql>
-
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.dto.LessonExaminationSaveDto">
-        insert into lesson_examination(teacher_id_, batch_no_, title_, attachments_, content_, expire_date_,
-        completed_num_, expect_num_, music_score_id_,tenant_id_)
+        insert into lesson_examination(organ_id_, music_group_id_, class_group_id_, course_schedule_id_, teacher_id_,
+        expire_date_,expect_num_,tenant_id_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.teacherId}, #{entity.batchNo}, #{entity.title}, #{entity.attachments}, #{entity.content},
-            #{entity.expireDate}, #{entity.completedNum}, #{entity.expectNum}, #{entity.musicScoreId},#{entity.tenantId})
+            (#{entity.organId}, #{entity.musicScoreId}, #{entity.classGroupId}, #{entity.courseScheduleId}, #{entity.teacherId},
+             #{entity.expireDate},#{entity.expectNum},#{entity.tenantId})
         </foreach>
     </insert>
+    <update id="updateTrainingNum">
+        UPDATE lesson_examination SET training_num_ = training_num_ + 1 WHERE id_ = #{lessonExaminationId}
+    </update>
+    <update id="updateStandardNum">
+        UPDATE lesson_examination SET standard_num_ = standard_num_ + 1 WHERE id_ = #{lessonExaminationId}
+    </update>
     <select id="queryPage" resultType="com.ym.mec.biz.dal.dto.LessonExaminationResultDto">
-        select le.expire_date_ expireDate,cg.name_ classGroupName,mg.name_ musicGroupName,le.expect_num_ expectNum,
-               le.training_num_ trainingNum,le.standard_num_ standardNum
+        select le.*,cg.name_ classGroupName
         from lesson_examination le
         left join class_group cg ON cg.id_ = le.class_group_id_
-        left join music_group mg ON mg.id_ = cg.music_group_id_
         <include refid="queryPageSql"/>
         GROUP BY le.id_ ORDER BY le.id_ DESC
         <include refid="global.limit"/>
@@ -53,6 +49,12 @@
     </select>
     <sql id="queryPageSql">
         <where>
+            <if test="musicGroupId != null and musicGroupId != ''">
+                AND le.music_group_id_ = #{musicGroupId}
+            </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(le.organ_id_,#{organId})
+            </if>
             <if test="teacherId != null">
                 AND le.teacher_id_ = #{teacherId}
             </if>
@@ -71,17 +73,54 @@
         </where>
     </sql>
 
+    <sql id="queryPageByStudentSql">
+        <where>
+            <if test="lessonExaminationId != null">
+                AND sle.lesson_examination_id_ = #{lessonExaminationId}
+            </if>
+            <if test="studentId != null">
+                AND sle.user_id_ = #{studentId}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND DATE_FORMAT( le.create_time_, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="expireFlag != null and expireFlag == true">
+                AND le.expire_date_ &lt; DATE_FORMAT( NOW(), '%Y-%m-%d' )
+            </if>
+            <if test="expireFlag != null and expireFlag == false">
+                AND le.expire_date_ >= DATE_FORMAT( NOW(), '%Y-%m-%d' )
+            </if>
+            <if test="standardFlag != null">
+                AND sle.standard_flag_ = #{standardFlag}
+            </if>
+        </where>
+    </sql>
+
     <select id="queryPageByStudent" resultType="com.ym.mec.biz.dal.dto.LessonExaminationResultDto1">
-        select le.expire_date_ expireDate,cg.name_ classGroupName,mg.name_ musicGroupName,le.expect_num_ expectNum,
-               le.training_num_ trainingNum,le.standard_num_ standardNum,sle.score_
+        select le.expire_date_ expireDate,cg.name_ classGroupName,le.music_group_id_ musicGroupId,
+               sle.training_score_ trainingScore,sle.lesson_examination_id_ LessonExaminationId,sle.user_id_ userId,
+        su.real_name_ teacherName,su.avatar_ avatar
         from student_lesson_examination sle
         left join lesson_examination le ON sle.lesson_examination_id_ = le.id_
         left join class_group cg ON cg.id_ = le.class_group_id_
-        left join music_group mg ON mg.id_ = cg.music_group_id_
-        GROUP BY le.id_ ORDER BY le.id_ DESC
+        left join sys_user su ON su.id_ = le.teacher_id_
+        <include refid="queryPageByStudentSql"/>
+        ORDER BY sle.id_ DESC
     </select>
     <select id="findCountByStudent" resultType="java.lang.Integer">
-
+        select COUNT(sle.id_)
+        from student_lesson_examination sle
+        left join lesson_examination le ON sle.lesson_examination_id_ = le.id_
+        <include refid="queryPageByStudentSql"/>
+    </select>
+    <select id="getOneByStudent" resultType="com.ym.mec.biz.dal.dto.LessonExaminationResultDto1">
+        select le.expire_date_ expireDate,cg.name_ classGroupName,mg.name_ musicGroupName,
+               sle.training_score_ trainingScore,sle.lesson_examination_id_ LessonExaminationId,sle.user_id_ userId
+        from student_lesson_examination sle
+                 left join lesson_examination le ON sle.lesson_examination_id_ = le.id_
+                 left join class_group cg ON cg.id_ = le.class_group_id_
+                 left join music_group mg ON mg.id_ = le.music_group_id_
+        WHERE sle.lesson_examination_id_ = #{lessonExaminationId} AND sle.user_id_ = #{userId} LIMIT 1
     </select>
 
 </mapper>

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

@@ -364,6 +364,12 @@
         <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"/>
+        <result property="submitTime" column="submitTime"/>
+        <result property="standardFlag" column="standardFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
     <select id="findStudentHomeworkRecord" resultMap="StudentHomeworkRecordDto">
         SELECT
@@ -371,11 +377,17 @@
         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_,
+        sch.submit_time_ as submitTime,
+        sch.standard_flag_ as standardFlag,
         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,15 +395,38 @@
         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>
+        <if test="versionTag != null">
+            and ch.version_tag_ = #{versionTag}
+        </if>
         ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC
         <include refid="global.limit"/>
     </select>
     <select id="countStudentHomeworkRecord" resultType="int">
         SELECT COUNT(sch.id_)
         FROM student_course_homework sch
+        LEFT JOIN course_homework ch ON ch.id_ = sch.course_homework_id_
                  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>
+        <if test="versionTag != null">
+            and ch.version_tag_ = #{versionTag}
+        </if>
     </select>
     <select id="findByCourses" resultMap="StudentCourseHomework">
         SELECT * FROM student_course_homework WHERE course_schedule_id_ IN
@@ -643,4 +678,68 @@
             ]]></if>
         </where>
     </sql>
+
+    <select id="findByCourseScheduleIds" resultMap="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 s.*,sms.name_ as musicScoreName from student_lesson_training_detail s
+        left join sys_music_score sms on s.music_score_id_ = sms.id_
+        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>
+
+    <select id="findStudentCourseHomeworkByCourse" resultMap="StudentCourseHomework">
+        SELECT
+        sch.*,
+        su.username_,
+        su.avatar_,
+        su.phone_
+        FROM
+        student_course_homework sch
+        LEFT JOIN sys_user su ON sch.user_id_=su.id_
+        left join student s on s.user_id_ = su.id_
+        <where>
+            sch.course_schedule_id_=#{query.courseScheduleId}
+            <if test="query.subjectId != null">
+                and s.subject_id_list_ = #{query.subjectId}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryNotSuccessHomeworkList" resultType="int">
+        SELECT
+            count(sch.id_)
+        FROM
+            student_course_homework sch
+        left join course_homework ch on ch.id_ = sch.course_homework_id_
+        WHERE
+            sch.user_id_ = #{userId}
+                AND sch.standard_flag_ not in ('STANDARD','EXCELLENT')
+        and ch.expiry_date_ &gt;= #{now}
+    </select>
+
+    <select id="getHomeworkByUserIdAndCourseHomeworkId" resultMap="StudentCourseHomework">
+        SELECT
+            sch.*
+        FROM
+            student_course_homework sch
+        WHERE
+            sch.user_id_ = #{userId}
+                AND sch.course_homework_id_ = #{courseHomeworkId}
+    </select>
 </mapper>

+ 3 - 1
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -836,7 +836,9 @@
                  LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
                  LEFT JOIN student_extracurricular_exercises_situation_ se ON se.teacher_id_ = csts.user_id_
         WHERE csts.user_id_ = #{teacherId}
-          AND cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth}
+        <if test="firstDayOfMonth != null and lastDayOfMonth != null">
+            AND cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth}
+        </if>
           AND FIND_IN_SET(cs.id_, se.course_ids_)
           AND se.serve_type_ = 'HOMEWORK'
     </select>

+ 19 - 25
mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationDetailMapper.xml

@@ -2,40 +2,34 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao">
     <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail">
-        <id column="id_" jdbcType="INTEGER" property="id"/>
-        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
-        <result column="lesson_examination_id_" jdbcType="INTEGER" property="lessonExaminationId"/>
-        <result column="student_lesson_examination_id_" jdbcType="INTEGER" property="studentLessonExaminationId"/>
-        <result column="music_score_id_" jdbcType="INTEGER" property="musicScoreId"/>
-        <result column="heard_level_" jdbcType="VARCHAR" property="heardLevel"/>
-        <result column="training_score_" jdbcType="INTEGER" property="trainingScore"/>
-        <result column="training_status_" jdbcType="VARCHAR" property="trainingStatus"/>
-        <result column="score_" jdbcType="INTEGER" property="score"/>
-        <result column="standard_score_" jdbcType="INTEGER" property="standardScore"/>
-        <result column="part_index_" jdbcType="INTEGER" property="partIndex"/>
-        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
-        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <id column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="lesson_examination_id_" property="lessonExaminationId"/>
+        <result column="music_score_id_" property="musicScoreId"/>
+        <result column="heard_level_" property="heardLevel"/>
+        <result column="standard_flag_" property="standardFlag"/>
+        <result column="training_score_" property="trainingScore"/>
+        <result column="standard_score_" property="standardScore"/>
+        <result column="avg_score_" property="avgScore"/>
+        <result column="actual_avg_score_" property="actualAvgScore"/>
+        <result column="part_index_" property="partIndex"/>
+        <result column="training_time_" property="trainingTime"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
     </resultMap>
 
-    <sql id="Base_Column_List">
-        id_
-        , user_id_, lesson_examination_id_, student_lesson_examination_id_, music_score_id_, heard_level_, training_score_, training_status_, score_, standard_score_, part_index_, create_time_, update_time_
-    </sql>
-
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail">
-        insert into student_lesson_examination_detail(user_id_, lesson_examination_id_, student_lesson_examination_id_,
-        music_score_id_, heard_level_, training_score_, training_status_, score_, standard_score_, part_index_,
-        create_time_, update_time_)
+        insert into student_lesson_examination_detail(user_id_, lesson_examination_id_, music_score_id_, heard_level_,standard_score_,
+                                                      avg_score_, part_index_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.userId}, #{entity.lessonExaminationId}, #{entity.studentLessonExaminationId},
-            #{entity.musicScoreId}, #{entity.heardLevel}, #{entity.trainingScore}, #{entity.trainingStatus},
-            #{entity.score}, #{entity.standardScore}, #{entity.partIndex}, #{entity.createTime}, #{entity.updateTime})
+            (#{entity.userId}, #{entity.lessonExaminationId},#{entity.musicScoreId}, #{entity.heardLevel},
+             #{entity.standardScore}, #{entity.avgScore},#{entity.partIndex})
         </foreach>
     </insert>
     <select id="queryAll" resultType="com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto">
-        select sms.name_ musicScoreName,sled.id_ id, sled.user_id_ userId, sled.lesson_examination_id_ lessonExaminationId, sled.music_score_id_ musicScoreId,
+        select sms.name_ musicScoreName,sled.id_ studentLessonExaminationDetailId, sled.user_id_ userId, sled.lesson_examination_id_ lessonExaminationId, sled.music_score_id_ musicScoreId,
                sled.heard_level_ heardLevel, sled.training_score_ trainingScore,sled.training_flag_ trainingFlag, sled.score_ score,
                sled.standard_score_ standardScore, sled.part_index_ partIndex
         from student_lesson_examination_detail sled

+ 64 - 19
mec-biz/src/main/resources/config/mybatis/StudentLessonExaminationMapper.xml

@@ -2,31 +2,34 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ym.mec.biz.dal.dao.StudentLessonExaminationDao">
     <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.StudentLessonExamination">
-        <id column="id_" jdbcType="INTEGER" property="id"/>
-        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
-        <result column="lesson_examination_id_" jdbcType="INTEGER" property="lessonExaminationId"/>
-        <result column="score_" jdbcType="INTEGER" property="score"/>
-        <result column="training_status_" jdbcType="VARCHAR" property="trainingStatus"/>
-        <result column="expire_date_" jdbcType="TIMESTAMP" property="expireDate"/>
-        <result column="training_time_" jdbcType="TIMESTAMP" property="trainingTime"/>
-        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
-        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <id column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="lesson_examination_id_" property="lessonExaminationId"/>
+        <result column="training_flag_" property="trainingFlag"/>
+        <result column="standard_flag_" property="standardFlag"/>
+        <result column="training_score_" property="trainingScore"/>
+        <result column="training_time_" property="trainingTime"/>
+        <result column="training_time_" property="trainingTime"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
     </resultMap>
 
-    <sql id="Base_Column_List">
-        id_
-        , user_id_, lesson_examination_id_, score_, training_status_, expire_date_, training_time_, create_time_, update_time_
-    </sql>
-
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.StudentLessonExamination">
-        insert into student_lesson_examination(user_id_, lesson_examination_id_, score_, training_status_, expire_date_,training_time_)
+        insert into student_lesson_examination(user_id_, lesson_examination_id_,subject_id_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.userId}, #{entity.lessonExaminationId}, #{entity.score}, #{entity.trainingStatus},
-            #{entity.expireDate}, #{entity.trainingTime})
+            (#{entity.userId}, #{entity.lessonExaminationId}, #{entity.subjectId})
         </foreach>
     </insert>
+    <update id="updateTrainingScore">
+        UPDATE student_lesson_examination
+        set training_score_ = (
+            select SUM(actual_avg_score_) from student_lesson_examination_detail
+            where lesson_examination_id_ = #{lessonExaminationId} and user_id_ = #{userId})
+        where lesson_examination_id_ = #{lessonExaminationId} and user_id_ = #{userId}
+    </update>
     <sql id="queryPageSql">
         <where>
             <if test="lessonExaminationId != null">
@@ -44,19 +47,61 @@
         </where>
     </sql>
     <select id="queryPage" resultType="com.ym.mec.biz.dal.dto.StudentLessonExaminationDto">
-        select su.avatar_ avatar,su.username_ username,sle.training_time_ trainingTime,sle.score_ score,
+        select su.avatar_ avatar,su.username_ username,sle.training_time_ trainingTime,sle.training_score_ trainingScore,
                CASE WHEN s.membership_end_time_ > NOW() THEN 1 ELSE 0 END memberFlag,
                sle.user_id_ userId,sle.lesson_examination_id_ lessonExaminationId,sb.name_ subjectName
         from student_lesson_examination sle
         left join student s ON s.user_id_ = sle.user_id_
         left join subject sb ON s.subject_id_list_ = sb.id_
         left join sys_user su on s.user_id_ = su.id_
-        ORDER BY sle.score_ DESC,sle.id_
+        ORDER BY sle.training_score_ DESC,sle.id_
         <include refid="global.limit"/>
     </select>
     <select id="findCount" resultType="java.lang.Integer">
         select COUNT(sle.id_) from student_lesson_examination sle
         <include refid="global.limit"/>
     </select>
+    <resultMap id="StudentLessonExaminationDtoMap" type="com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1">
+        <result property="subjectName" column="subjectName"/>
+        <result property="userId" column="user_id_"/>
+        <result property="phone" column="phone_"/>
+        <result property="username" column="username_"/>
+        <result property="trainingScore" column="training_score_"/>
+        <association property="detailDtos" javaType="com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto1">
+            <result property="standardScore" column="standard_score_"/>
+            <result property="trainingScore" column="training_score_"/>
+            <result property="actualAvgScore" column="actual_avg_score_"/>
+            <result property="avgScore" column="avg_score_"/>
+            <result property="musicScoreName" column="musicScoreName"/>
+        </association>
+    </resultMap>
+    <select id="queryStudentPage" resultMap="StudentLessonExaminationDtoMap">
+        select sle.user_id_,su.username_,su.phone_,sb.name_ subjectName,sle.training_score_,
+               sms.name_ musicScoreName,sled.actual_avg_score_,sled.standard_score_,sled.training_score_,sled.avg_score_
+        from student_lesson_examination sle
+        left join student_lesson_examination_detail sled ON sled.lesson_examination_id_ = sle.lesson_examination_id_ AND sled.user_id_ = sle.user_id_
+        left join sys_music_score sms ON sms.id_ = sled.music_score_id_
+        left join sys_user su ON su.id_ = sle.user_id_
+        left join subject sb ON sb.id_ = sle.subject_id_
+        where sle.lesson_examination_id_ = #{lessonExaminationId}
+        ORDER BY sle.training_score_ DESC
+    </select>
 
+    <select id="queryNotSuccessExaminationList" resultType="int">
+        select sle.lesson_examination_id_
+        from student_lesson_examination sle
+        left join lesson_examination le on sle.lesson_examination_id_ = le.id_
+        where sle.user_id_ = #{userId}
+          AND sle.standard_flag_ = 0
+        and le.expire_date_ &gt; NOW()
+    </select>
+    <select id="getStudentName" resultType="java.util.Map">
+        select sled.lesson_examination_id_ 'key',GROUP_CONCAT(DISTINCT su.username_) 'value' from student_lesson_examination_detail sled
+        left join sys_user su ON su.id_ = sled.user_id_
+        where sled.lesson_examination_id_ IN
+        <foreach collection="examinationIds" open="(" close=")" separator="," item="id">
+            #{id}
+        </foreach>
+        group by sled.lesson_examination_id_
+    </select>
 </mapper>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -110,6 +110,9 @@
             <if test="signInStatus != null">
                 sign_in_status_ = #{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="signInAttachments != null">
+                sign_in_attachments_ = #{signInAttachments},
+            </if>
             <if test="currentScheduleId != null">
                 current_schedule_id_ = #{currentScheduleId},
             </if>

+ 8 - 1
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -61,6 +61,7 @@
         <result column="is_settlement_salary_" property="isSettlementSalary"/>
         <result column="contract_url_" property="contractUrl"/>
         <result column="tenant_id_" property="tenantId"/>
+        <result column="courseware_limit_" property="coursewareLimit"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.dto.TeacherDefaultSalaryDto" id="TeacherDefaultSalaryDto">
@@ -124,7 +125,7 @@
         su.real_name_,su.id_card_no_,su.password_,su.salt_,su.phone_,su.avatar_,
         su.lock_flag_,su.del_flag_,su.wx_openid_,su.qq_openid_,su.user_type_,
         su.gender_,su.nation_,su.birthdate_,su.email_,su.im_token_,su.username_,su.organ_id_,
-        t.is_settlement_salary_,su.tenant_id_
+        t.is_settlement_salary_,su.tenant_id_, t.courseware_limit_
         FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
         WHERE t.id_ = #{id} AND su.del_flag_ = 0
@@ -237,6 +238,9 @@
             <if test="postDeptIds != null">
                 post_dept_ids_ = #{postDeptIds},
             </if>
+            <if test="coursewareLimit != null">
+                courseware_limit_ = #{coursewareLimit},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>
@@ -323,6 +327,9 @@
             <if test="postDeptIds != null">
                 post_dept_ids_ = #{postDeptIds},
             </if>
+            <if test="coursewareLimit != null">
+                courseware_limit_ = #{coursewareLimit},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>

+ 21 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java

@@ -7,10 +7,15 @@
  */
 package com.ym.mec.common.page;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
+
+import static java.util.stream.Collectors.toList;
 
 /**
  * 分页对象
@@ -161,4 +166,20 @@ public class PageInfo<T> implements Serializable {
 		this.footer = footer;
 	}
 
+
+    /**
+     * <p>
+     * IPage 的泛型转换
+     * </p>
+     *
+     * @param mapper 转换函数
+     * @param <R>    转换后的泛型
+     * @return 转换泛型后的 IPage
+     */
+    @SuppressWarnings("unchecked")
+    public  <R> PageInfo<R> convert(Function<? super T, ? extends R> mapper) {
+        List<R> collect = this.getRows().stream().map(mapper).collect(toList());
+        ((PageInfo<R>) this).setRows(collect);
+        return (PageInfo<R>) this;
+    }
 }

+ 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){

+ 31 - 4
mec-student/src/main/java/com/ym/mec/student/controller/LessonExaminationController.java

@@ -2,20 +2,23 @@ package com.ym.mec.student.controller;
 
 
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto1;
+import com.ym.mec.biz.dal.dto.LessonExaminationSubmitDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo1;
+import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 import com.ym.mec.biz.service.LessonExaminationService;
+import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
+import com.ym.mec.biz.service.StudentLessonExaminationService;
 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 io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-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 org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 进度评测表(LessonExamination)表控制层
@@ -31,6 +34,10 @@ public class LessonExaminationController extends BaseController {
     @Resource
     private LessonExaminationService lessonExaminationService;
     @Resource
+    private StudentLessonExaminationService studentLessonExaminationService;
+    @Resource
+    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+    @Resource
     private SysUserService sysUserService;
 
     @ApiOperation(value = "获取作业列表")
@@ -40,5 +47,25 @@ public class LessonExaminationController extends BaseController {
         return succeed(lessonExaminationService.queryPageByStudent(queryInfo));
     }
 
+    @ApiOperation(value = "获取学员单个作业")
+    @GetMapping("getOne")
+    public HttpResponseResult<LessonExaminationResultDto1> getOne(Long lessonExaminationId) {
+        return succeed(lessonExaminationService.getOne(sysUserService.getUserId(),lessonExaminationId));
+    }
+
+    @ApiOperation(value = "提交作业")
+    @PostMapping("submit")
+    public HttpResponseResult submit(@RequestBody LessonExaminationSubmitDto submitDto) {
+        studentLessonExaminationService.submit(submitDto);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取学员单个作业详情列表")
+    @PostMapping("queryDetailAll")
+    public HttpResponseResult<List<StudentLessonExaminationDetailDto>> queryAll(@RequestBody StudentLessonExaminationQueryDto query) {
+        query.setUserId(sysUserService.getUserId());
+        return succeed(studentLessonExaminationDetailService.queryAll(query));
+    }
+
 }
 

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

@@ -1,11 +1,16 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.HomeworkStat;
+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.StudentLessonTrainingDetail;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
@@ -20,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @Author Joburgess
  * @Date 2019/9/18
@@ -38,6 +45,9 @@ public class StudentCourseHomeworkController extends BaseController {
     @Autowired
     private StudentServeService studentServeService;
 
+    @Autowired
+    private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
     @ApiOperation(value = "提交作业")
     @PostMapping(value = "/add",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @AuditLogAnnotation(operateName = "提交作业")
@@ -93,11 +103,38 @@ 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 = "/findStudentHomeworkRecord/v2")
+    public HttpResponseResult<PageInfo<StudentHomeworkRecordDto>> findStudentHomeworkRecordV2( CourseHomeworkQueryInfo queryInfo){
         queryInfo.setUserId(sysUserService.getUserId().longValue());
+        queryInfo.setVersionTag("v2");
         return succeed(studentCourseHomeworkService.findStudentHomeworkRecord(queryInfo));
     }
 
+    @ApiOperation(value = "获取学生作业详情")
+    @GetMapping(value = "/findStudentHomeworkRecordDetail/v2")
+    public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList>
+            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){
@@ -130,4 +167,22 @@ public class StudentCourseHomeworkController extends BaseController {
         return succeed(studentServeService.musicGroupHomeworkStatWithStu(musicGroupId, sysUserService.getUserId(), startDay, endDay));
     }
 
+
+
+    @ApiOperation(value = "学生端-乐团作业情况")
+    @GetMapping("/homeworkStat")
+    public HttpResponseResult<List<HomeworkStat>> homeworkStat() {
+
+        Integer userId = sysUserService.getUserId();
+
+        return succeed(studentServeService.homeworkStat(userId));
+    }
+
+    @ApiOperation(value = "课后训练的作业详情")
+    @GetMapping("/homeworkDetail")
+    public HttpResponseResult<StudentLessonTrainingDetail> homeworkStat(Integer id) {
+
+        return succeed(studentLessonTrainingDetailService.getById(id));
+    }
+
 }

+ 0 - 51
mec-student/src/main/java/com/ym/mec/student/controller/StudentLessonExaminationController.java

@@ -1,51 +0,0 @@
-package com.ym.mec.student.controller;
-
-
-import com.ym.mec.biz.dal.dto.LessonExaminationSubmitDto;
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
-import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
-import com.ym.mec.biz.service.StudentLessonExaminationService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-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 javax.annotation.Resource;
-
-/**
- * 学生进度评测表(StudentLessonExamination)表控制层
- *
- * @author zx
- * @since 2023-04-03 18:21:30
- */
-@Api(tags = "学生进度评测表")
-@RestController
-@RequestMapping("/studentLessonExamination")
-public class StudentLessonExaminationController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Resource
-    private StudentLessonExaminationService studentLessonExaminationService;
-
-    @ApiOperation(value = "获取单个学员评测")
-    @PostMapping("getOne")
-    public HttpResponseResult<StudentLessonExaminationDto> getOne(@RequestBody StudentLessonExaminationQueryInfo queryInfo) {
-        return succeed(studentLessonExaminationService.queryPage(queryInfo).getRows().get(0));
-    }
-
-    @ApiOperation(value = "提交作业")
-    @PostMapping("submit")
-    public HttpResponseResult submit(@RequestBody LessonExaminationSubmitDto submitDto) {
-        studentLessonExaminationService.submit(submitDto);
-        return succeed();
-    }
-
-
-
-}
-

+ 6 - 0
mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java

@@ -7,6 +7,8 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -25,6 +27,8 @@ import java.util.Objects;
 @RestController
 public class SysMusicCompareRecordController extends BaseController {
 
+    private static final Logger log = LoggerFactory.getLogger(SysMusicCompareRecordController.class);
+
     @Autowired
     private SysUserService sysUserService;
     @Autowired
@@ -39,6 +43,8 @@ public class SysMusicCompareRecordController extends BaseController {
         Integer userId = sysUserService.getUserId();
         record.setUserId(userId);
         record.setClientId("student");
+
+        log.warn(" add record info; record:{},campId :{}",record,campId);
         
         sysMusicCompareRecordService.insert(record,campId);
         

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

+ 51 - 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,47 @@ public class CourseHomeworkController extends BaseController {
         }
     }
 
+
+
+    @ApiOperation(value = "获取作业详情")
+    @GetMapping(value = "/findCourseHomeworkDetail")
+    public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList> findCourseHomeworkDetail(Integer courseScheduleId,ELessonTrainingType type){
+        if (ELessonTrainingType.HOMEWORK.equals(type)) {
+
+            return succeed(courseHomeworkService.findCourseHomeworkDetail(courseScheduleId));
+        } else {
+            return succeed(courseHomeworkService.findCourseExtraHomeworkDetail(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));
+        }
+    }
 }

+ 14 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
@@ -79,6 +80,17 @@ public class ExtracurricularExercisesController extends BaseController {
         return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeHomeworkDetailV2(queryInfo));
     }
 
+    @ApiOperation(value = "获取教师课外作业列表")
+    @GetMapping("/queryTeacherExtraHomeworkDetail/v2")
+    public HttpResponseResult<PageInfo<CourseHomeworkWrapper.CourseHomeworkList>> queryTeacherExtraHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(studentExtracurricularExercisesSituationService.queryTeacherExtraHomeworkDetailV2(queryInfo));
+    }
+
 
     @ApiOperation(value = "获取老师训练统计")
     @GetMapping("/getStatistics")
@@ -106,6 +118,7 @@ public class ExtracurricularExercisesController extends BaseController {
             return failed(HttpStatus.FORBIDDEN,"请登录");
         }
         exercises.setTeacherId(sysUser.getId());
+        exercises.setGroupType(ELessonTrainingType.EXTRACURRICULAR.getCode());
         extracurricularExercisesService.createExtraExercises(exercises);
         return succeed();
     }
@@ -124,6 +137,7 @@ public class ExtracurricularExercisesController extends BaseController {
             exercises.setExpireDate(instance.getTime());
         }
 
+        exercises.setGroupType(ELessonTrainingType.EXTRA.getCode());
         exercises.setTeacherId(sysUser.getId());
         extracurricularExercisesService.createExtraExercises(exercises);
         return succeed();

+ 1 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudentLessonExaminationDetailController.java

@@ -34,7 +34,7 @@ public class StudentLessonExaminationDetailController extends BaseController {
     private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
 
 
-    @ApiOperation(value = "获取学员列表")
+    @ApiOperation(value = "获取学员评测详情列表")
     @PostMapping("queryAll")
     public HttpResponseResult<List<StudentLessonExaminationDetailDto>> queryAll(@RequestBody StudentLessonExaminationQueryDto query) {
         return succeed(studentLessonExaminationDetailService.queryAll(query));

+ 21 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExtracurricularExercisesController.java

@@ -1,11 +1,15 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.WebCourseHomeworkListDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.ExtracurricularExercisesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,4 +46,21 @@ public class ExtracurricularExercisesController extends BaseController {
         }
         return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetail(studentExerciseId));
     }
+
+
+    @ApiOperation(value = "获取课外训练列表")
+    @GetMapping("/queryPageList/v2")
+    private HttpResponseResult<PageInfo<CourseHomeworkWrapper.WebExtraCourseHomework>> findExtraExercilsesV2(ExtraExercilseQueryInfo queryInfo){
+        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(queryInfo.getOrganIdList()));
+        return succeed(extracurricularExercisesService.findExtraExercilsesV2(queryInfo));
+    }
+
+    @ApiOperation(value = "获取课外训练详情")
+    @GetMapping("/findStudentExtraExerciseDetail/v2")
+    private HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList> findStudentExtraExerciseDetailV2(Long studentExerciseId){
+        if(Objects.isNull(studentExerciseId)){
+            return failed("请选择课外训练");
+        }
+        return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetailV2(studentExerciseId));
+    }
 }

+ 18 - 9
mec-web/src/main/java/com/ym/mec/web/controller/LessonExaminationController.java

@@ -1,12 +1,12 @@
 package com.ym.mec.web.controller;
 
 
-import com.ym.mec.biz.dal.dto.LessonExaminationResultDto1;
-import com.ym.mec.biz.dal.dto.LessonExaminationResultDto2;
-import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo1;
-import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo2;
+import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
+import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
 import com.ym.mec.biz.service.LessonExaminationService;
-import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentLessonExaminationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 进度评测表(LessonExamination)表控制层
@@ -33,13 +34,21 @@ public class LessonExaminationController extends BaseController {
     @Resource
     private LessonExaminationService lessonExaminationService;
     @Resource
-    private SysUserService sysUserService;
+    private OrganizationService organizationService;
+    @Resource
+    private StudentLessonExaminationService studentLessonExaminationService;
+
+    @ApiOperation(value = "获取作业学员列表")
+    @PostMapping("queryStudentPage")
+    public HttpResponseResult<List<StudentLessonExaminationDto1>> queryStudentPage(Long lessonExaminationId) {
+        return succeed(studentLessonExaminationService.queryStudentPage(lessonExaminationId));
+    }
 
     @ApiOperation(value = "获取作业列表")
     @PostMapping("queryPage")
-    public HttpResponseResult<PageInfo<LessonExaminationResultDto2>> queryPage(@RequestBody LessonExaminationQueryInfo2 queryInfo) {
-        return succeed(lessonExaminationService.queryPageByWeb(queryInfo));
+    public HttpResponseResult<PageInfo<LessonExaminationResultDto>> queryPage(@RequestBody LessonExaminationQueryInfo queryInfo) {
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        return succeed(lessonExaminationService.queryPage(queryInfo));
     }
-
 }
 

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

@@ -1,40 +0,0 @@
-package com.ym.mec.web.controller;
-
-
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
-import com.ym.mec.biz.service.StudentLessonExaminationService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.page.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * 学生进度评测表(StudentLessonExamination)表控制层
- *
- * @author zx
- * @since 2023-04-03 18:21:30
- */
-@Api(tags = "学生进度评测表")
-@RestController
-@RequestMapping("/studentLessonExamination")
-public class StudentLessonExaminationController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Resource
-    private StudentLessonExaminationService studentLessonExaminationService;
-
-    @ApiOperation(value = "获取评测学员列表")
-    @PostMapping("queryPage")
-    public HttpResponseResult<PageInfo<StudentLessonExaminationDto1>> queryPage(Integer studentLessonExaminationId) {
-        return succeed(studentLessonExaminationService.queryPageByWeb(studentLessonExaminationId));
-    }
-
-}
-

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

@@ -2,26 +2,39 @@ 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.Subject;
 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.SubjectService;
 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.util.CollectionUtils;
+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.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 @RequestMapping("teacher")
 @Api(tags = "教师服务")
@@ -35,6 +48,15 @@ public class TeacherController extends BaseController {
     @Autowired
     private ClassGroupService classGroupService;
 
+    @Autowired
+    private CourseHomeworkService courseHomeworkService;
+
+    @Autowired
+    private SubjectService subjectService;
+
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+
     @ApiOperation(value = "获取老师列表(基本信息)")
     @GetMapping("/queryTeacherBasicInfo")
     @PreAuthorize("@pcs.hasPermissions('teacher/queryTeacherBasicInfo')")
@@ -189,4 +211,57 @@ 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));
+        }
+    }
+
+
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生声部-公用")
+    @PostMapping("/findCourseStudentsSubjectPublic/v2")
+    public HttpResponseResult<List<Subject>> findCourseStudentsSubjectPublicV2(@Validated @RequestBody StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query){
+        List<StudentCourseHomework> studentCourseHomeworkByCourseV2;
+        if(ELessonTrainingType.HOMEWORK.equals(query.getType())){
+            if (Objects.isNull(query.getCourseScheduleId())) {
+                throw new BizException("请指定课程");
+            }
+            studentCourseHomeworkByCourseV2 = studentCourseHomeworkService.findStudentCourseHomeworkByCourseV2(
+                query);
+        }else{
+            studentCourseHomeworkByCourseV2 = studentCourseHomeworkService.findExtraExerciseStudentsV2(query);
+        }
+
+        if (CollectionUtils.isEmpty(studentCourseHomeworkByCourseV2)) {
+            return succeed(new ArrayList<>());
+        }
+        // 获取声部
+        List<Integer> collect = studentCourseHomeworkByCourseV2.stream().map(StudentCourseHomework::getSubjectId).collect(
+            Collectors.toList());
+
+        return succeed(subjectService.findBySubjectByIdList(collect));
+
+    }
 }

+ 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));
     }