فهرست منبع

布置作业逻辑

liujunchi 2 سال پیش
والد
کامیت
d7bbf7f0e2
21فایلهای تغییر یافته به همراه711 افزوده شده و 44 حذف شده
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonTrainingDetailMapper.java
  3. 104 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java
  5. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  6. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java
  7. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java
  8. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  9. 70 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonTrainingDetail.java
  10. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EHomeWorkStatus.java
  11. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StandardEnum.java
  12. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  13. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentLessonTrainingDetailService.java
  14. 68 31
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  15. 33 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  16. 99 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java
  17. 32 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  18. 42 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  19. 3 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  20. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentLessonTrainingDetailMapper.xml
  21. 15 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

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

@@ -1964,4 +1964,14 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<String> queryStartedCourseMusicGroupIdList(String groupType);
 
     void batchUpdateDelFlag(@Param("courseIds") String courseIds);
+
+    /**
+     * 老师端练习列表
+     *
+     * @param queryInfo
+     * @param courseIds
+     * @return
+     */
+    List<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherServeHomeworkDetailV2(@Param(
+        "param") CourseHomeworkWrapper.CourseHomeworkQuery queryInfo, @Param("courseIds") List<Long> courseIds);
 }

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

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 练习内容
+ * 2023-03-31 14:18:47
+ */
+@Repository
+public interface StudentLessonTrainingDetailMapper extends BaseMapper<StudentLessonTrainingDetail> {
+	
+}

+ 104 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java

@@ -0,0 +1,104 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-04-03
+ */
+@Data
+@ApiModel(value = "课程作业包装类")
+public class CourseHomeworkWrapper {
+
+    @Data
+    @ApiModel(value = "课程作业查询条件")
+    public static class CourseHomeworkQuery extends QueryInfo {
+
+
+
+        @ApiModelProperty("当月")
+        private Date month;
+
+        @ApiModelProperty(value = "开始时间")
+        private Date startTime;
+
+        @ApiModelProperty(value = "结束时间")
+        private Date endTime;
+
+        @ApiModelProperty(value = "老师id")
+        private Integer teacherId;
+
+        @ApiModelProperty(value = "课程类型 课后练习 :MUSIC  小课练习: 包含VIP,PRACTICE")
+        private String courseType;
+
+        @ApiModelProperty(value = "乐团id")
+        private Integer musicGroupId;
+
+        @ApiModelProperty(value = "班级类型  NORMAL:声部班,MIX:合奏班")
+        private String classType;
+
+        @ApiModelProperty(value = "作业练习状态 UNASSIGNED:未布置,ASSIGNED:已布置,DEADLINE:已截止")
+        private EHomeWorkStatus homeWorkStatus;
+    }
+
+
+
+    @Data
+    @ApiModel(value = "课程作业列表")
+    public static class CourseHomeworkList {
+
+        @ApiModelProperty(value = "课程id")
+        private Integer courseScheduleId;
+
+        @ApiModelProperty(value = "课程日期")
+        private Date classDate;
+
+        @ApiModelProperty(value = "开始时间")
+        private Date startTime;
+
+        @ApiModelProperty(value = "结束时间")
+        private Date endTime;
+
+        @ApiModelProperty(value = "作业练习状态 UNASSIGNED:未布置,ASSIGNED:已布置,DEADLINE:已截止")
+        private EHomeWorkStatus homeWorkStatus;
+
+        @ApiModelProperty(value = "老师id")
+        private Integer teacherId;
+
+        @ApiModelProperty(value = "乐团id")
+        private Integer musicGroupId;
+
+        @ApiModelProperty(value = "乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty(value = "乐团图片")
+        private String musicGroupImg;
+
+        @ApiModelProperty(value = "班级类型  NORMAL:声部班,MIX:合奏班")
+        private String classType;
+
+        @ApiModelProperty(value = "声部名称")
+        private String subjectName;
+
+        @ApiModelProperty("班级名称")
+        private String classGroupName;
+
+        @ApiModelProperty("教学形式(线上、线下)")
+        private String teachMode;
+
+        @ApiModelProperty("学生人数")
+        private Integer studentNum;
+
+        @ApiModelProperty("已完成人数")
+        private Integer finishNum;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java

@@ -18,6 +18,18 @@ public class MusicScoreSubjectDto {
     @ApiModelProperty(value = "曲目编号、分谱(新版布置作业需要)",required = false)
     private List<MusicScoreHomeworkDto> musicScoreHomeworkDtoList;
 
+
+    @ApiModelProperty("新版作业 time:2023-03-31")
+    private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
+
+    public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
+        return studentLessonTrainingDetails;
+    }
+
+    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
+        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
+    }
+
     public List<MusicScoreHomeworkDto> getMusicScoreHomeworkDtoList() {
         return musicScoreHomeworkDtoList;
     }

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

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 练习内容
+ * 2023-03-31 14:18:47
+ */
+@ApiModel(value = "StudentLessonTrainingDetailWrapper对象", description = "练习内容查询对象")
+public class StudentLessonTrainingDetailWrapper {
+
+
+    @Data
+    @ApiModel(" AddStudentLessonTrainingDetail-练习内容")
+    public static class AddStudentLessonTrainingDetail {
+
+        @ApiModelProperty("曲目id")
+        private Long musicScoreId;
+
+        @ApiModelProperty("练习速度")
+        private Integer trainingSpeed;
+
+        @ApiModelProperty("标准练习次数")
+        private Integer times;
+
+        @ApiModelProperty("分谱")
+        private Integer partIndex;
+    }
+
+	@ApiModel(" StudentLessonTrainingDetail-练习内容")
+    public static class StudentLessonTrainingDetail {
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static StudentLessonTrainingDetail from(String json) {
+            return JSON.parseObject(json, StudentLessonTrainingDetail.class);
+        }
+	}
+
+}

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.dto.MusicScoreSubjectDto;
 
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
 import io.swagger.annotations.ApiModelProperty;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -64,7 +65,18 @@ public class CourseHomework extends BaseEntity {
 
 	private List<MusicScoreSubjectDto> musicScoreSubjectDto;
 
-	public String getTitle() {
+    @ApiModelProperty("新版作业 time:2023-03-31")
+    private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
+
+    public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
+        return studentLessonTrainingDetails;
+    }
+
+    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
+        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
+    }
+
+    public String getTitle() {
 		return title;
 	}
 

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.MusicScoreSubjectDto;
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
@@ -28,6 +30,12 @@ public class ExtracurricularExercises extends BaseEntity {
 	/** 学生列表 */
 	@ApiModelProperty(value="学生列表")
 	private String studentIdList;
+
+    @ApiModelProperty("班级id")
+    private Integer classGroupId;
+
+    @ApiModelProperty("作业来源分类")
+    private GroupType groupType;
 	
 	/** 批次号 */
 	@ApiModelProperty(value="批次号")
@@ -83,6 +91,34 @@ public class ExtracurricularExercises extends BaseEntity {
 
 	private List<MusicScoreSubjectDto> musicScoreSubjectDtos;
 
+
+    @ApiModelProperty("新版作业 time:2023-03-31")
+    private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
+        return studentLessonTrainingDetails;
+    }
+
+    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
+        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
+    }
+
 	public List<MusicScoreSubjectDto> getMusicScoreSubjectDtos() {
 		return musicScoreSubjectDtos;
 	}

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -59,6 +60,9 @@ public class StudentCourseHomework extends BaseEntity {
 	@ApiModelProperty(value="提交时间")
 	private Date submitTime;
 
+    @ApiModelProperty(value="类型")
+    private GroupType groupType;
+
 	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
 	//伴奏编号
@@ -76,7 +80,15 @@ public class StudentCourseHomework extends BaseEntity {
 	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
 	private StandardEnum standardFlag;
 
-	public StandardEnum getStandardFlag() {
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public StandardEnum getStandardFlag() {
 		return standardFlag;
 	}
 

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

@@ -0,0 +1,70 @@
+package com.ym.mec.biz.dal.entity;
+
+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.StandardEnum;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 练习内容
+ * 2023-03-31 14:18:47
+ */
+@Data
+@ApiModel(" StudentLessonTrainingDetail-练习内容")
+@TableName("student_lesson_training_detail")
+public class StudentLessonTrainingDetail implements Serializable {
+
+    @ApiModelProperty("主键ID") 
+	    @TableId(value = "id_")
+	    private Long id;
+
+    @ApiModelProperty("用户ID") 
+	@TableField(value = "user_id_")
+    private Long userId;
+
+    @ApiModelProperty("练习编号") 
+	@TableField(value = "course_homework_id_")
+    private Long courseHomeworkId;
+
+    @ApiModelProperty("曲目id") 
+	@TableField(value = "music_score_id_")
+    private Long musicScoreId;
+
+    @ApiModelProperty("分谱")
+    @TableField(value = "part_index_")
+    private Integer partIndex;
+
+    @ApiModelProperty("练习速度") 
+	@TableField(value = "training_speed_")
+    private Integer trainingSpeed;
+
+    @ApiModelProperty("已练习次数") 
+	@TableField(value = "training_times_")
+    private Integer trainingTimes;
+
+    @ApiModelProperty("练习状态") 
+	@TableField(value = "training_status_")
+    private StandardEnum trainingStatus;
+
+    @ApiModelProperty("标准练习次数") 
+	@TableField(value = "times_")
+    private Integer times;
+
+    @ApiModelProperty("创建时间") 
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间") 
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EHomeWorkStatus.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.Getter;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-04-03
+ */
+@Getter
+public enum EHomeWorkStatus {
+
+    /**
+     * 未布置
+     */
+    UNASSIGNED("未布置"),
+
+    /**
+     * 已布置
+     */
+    ASSIGNED("已布置"),
+
+    /**
+     * 已截止
+     */
+    DEADLINE("已截止"),
+
+    ;
+
+
+    private String msg;
+
+    @EnumValue
+    private String code;
+
+    EHomeWorkStatus(String msg) {
+        this.msg = msg;
+        this.code = this.name();
+    }
+
+}

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StandardEnum.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.dal.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum StandardEnum implements BaseEnum<String, StandardEnum> {
-	NOT_STANDARD("NOT_STANDARD", "未达标"), STANDARD("STANDARD", "已达标"), EXCELLENT("EXCELLENT", "优秀");
+    NOT_START("NOT_START", "未提交"), NOT_STANDARD("NOT_STANDARD", "未达标"), STANDARD("STANDARD", "已达标"), EXCELLENT("EXCELLENT", "优秀");
 
+    @EnumValue
 	private String code;
 
 	private String msg;

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

@@ -71,4 +71,10 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
     void deleteByStudent(Integer studentId,String monday);
 
     TeacherExercisesServiceDto getStatistics(ExtraExercilseQueryInfo queryInfo);
+
+    /**
+     * 老师端课后作业列表
+     *
+     */
+    PageInfo<CourseHomeworkWrapper.CourseHomeworkList> queryTeacherServeHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo);
 }

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

@@ -0,0 +1,44 @@
+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 java.util.Collection;
+import java.util.List;
+
+/**
+ * 练习内容
+ * 2023-03-31 14:18:47
+ */
+public interface StudentLessonTrainingDetailService extends IService<StudentLessonTrainingDetail>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return StudentLessonTrainingDetail
+     */
+	StudentLessonTrainingDetail detail(Long id);
+	
+    /**
+     * 添加
+     * @param studentLessonTrainingDetail StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail
+     * @return Boolean
+     */
+     Boolean add(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail);   
+
+    /**
+     * 更新
+     * @param studentLessonTrainingDetail StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail
+     * @return Boolean
+     */
+     Boolean update(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail);
+
+    /**
+     * 将作业标准 转换为 需要的作业详情
+     *
+     * @param studentLessonTrainingDetails 作业标准
+     * @param userIdList 学生ID
+     */
+    List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails, List<Integer> userIdList,Long homeworkId);
+}

+ 68 - 31
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java

@@ -1,17 +1,22 @@
 package com.ym.mec.biz.service.impl;
 
 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.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 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.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 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.service.ExtracurricularExercisesService;
+import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -21,6 +26,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 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.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -55,6 +61,12 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 	@Autowired
 	private StudentCourseHomeworkDao studentCourseHomeworkDao;
 
+    @Autowired
+    private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+
+    @Autowired
+    private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
 	@Override
 	public BaseDAO<Long, ExtracurricularExercises> getDAO() {
 		return extracurricularExercisesDao;
@@ -70,16 +82,28 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 			throw new BizException("请填写内容");
 		}
 		List<MusicScoreSubjectDto> scoreSubjectDtoList = exercises.getMusicScoreSubjectDtos();
-		if(StringUtils.isBlank(exercises.getStudentIdList())){
-			if(scoreSubjectDtoList == null || scoreSubjectDtoList.size() == 0){
-				throw new BizException("请指定学生");
-			}
+
+        if (exercises.getClassGroupId() != null) {
+            List<ClassGroupStudentMapper> studentMapperList = classGroupStudentMapperDao.findByClassGroup(
+                exercises.getClassGroupId());
+            if (CollectionUtils.isEmpty(studentMapperList)) {
+                throw new BizException("班级学生为空");
+            }
+            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());
 		Teacher teacher = teacherDao.get(exercises.getTeacherId());
@@ -100,32 +124,45 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 		extracurricularExercisesDao.insert(exercises);
 		String dateStr = DateUtil.dateToString(exercises.getExpireDate(), "MM月dd日HH点");
 
-		Map<List<Integer>, List<MusicScoreSubjectDto>> collect = null;
-		Set<List<Integer>> lists = null;
-		if(!CollectionUtils.isEmpty(scoreSubjectDtoList)){
-			collect = scoreSubjectDtoList.stream().collect(Collectors.groupingBy(e -> e.getUserIdList()));
-			lists = collect.keySet();
-		}
-		for (Integer studentId : studentIds) {
-			ExtracurricularExercisesReply studentExtraExercise=new ExtracurricularExercisesReply();
-			studentExtraExercise.setExtracurricularExercisesId(exercises.getId());
-			studentExtraExercise.setUserId(studentId);
-			studentExtraExercise.setStatus(0);
-			studentExtraExercise.setIsReplied(0);
-			studentExtraExercise.setIsView(0);
-			studentExtraExercise.setIsRepliedTimely(0);
-			studentExtraExercise.setMusicScoreId(exercises.getMusicScoreId());
-			if(!CollectionUtils.isEmpty(scoreSubjectDtoList)){
-				for (List<Integer> list : lists) {
-					if(list.contains(studentId)){
-						MusicScoreSubjectDto musicScoreSubjectDto = collect.get(list).get(0);
-						studentExtraExercise.setMusicScoreId(StringUtils.join(musicScoreSubjectDto.getMusicScoreIdList(),","));
-						studentExtraExercise.setMusicScoreContent(JSONObject.toJSONString(musicScoreSubjectDto.getMusicScoreHomeworkDtoList()));
-						break;
-					}
-				}
-			}
-			extracurricularExercisesReplyDao.insert(studentExtraExercise);
+        ExtracurricularExercisesReply studentExtraExercise=new ExtracurricularExercisesReply();
+        studentExtraExercise.setExtracurricularExercisesId(exercises.getId());
+        studentExtraExercise.setStatus(0);
+        studentExtraExercise.setIsReplied(0);
+        studentExtraExercise.setIsView(0);
+        studentExtraExercise.setIsRepliedTimely(0);
+        studentExtraExercise.setMusicScoreId(exercises.getMusicScoreId());
+
+        List<ExtracurricularExercisesReply> extracurricularExercisesReplies = new ArrayList<>();
+
+        List<StudentLessonTrainingDetail> studentLessonTrainingDetailList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(scoreSubjectDtoList)){
+            for (MusicScoreSubjectDto musicScoreSubjectDto : scoreSubjectDtoList) {
+                // 原本作业逻辑
+                for (Integer userId : musicScoreSubjectDto.getUserIdList()) {
+                    studentExtraExercise.setUserId(userId);
+                    studentExtraExercise.setMusicScoreId(StringUtils.join(musicScoreSubjectDto.getMusicScoreIdList(),","));
+                    studentExtraExercise.setMusicScoreContent(JSONObject.toJSONString(musicScoreSubjectDto.getMusicScoreHomeworkDtoList()));
+                    extracurricularExercisesReplies.add(ObjectUtils.clone(studentExtraExercise));
+                }
+                // 作业详情
+                studentLessonTrainingDetailList.addAll(studentLessonTrainingDetailService
+                                   .homeWorkDetail(musicScoreSubjectDto.getStudentLessonTrainingDetails(), musicScoreSubjectDto.getUserIdList(),exercises.getId()));
+
+            }
+        } else {
+            for (Integer studentId : studentIds) {
+                studentExtraExercise.setUserId(studentId);
+                extracurricularExercisesReplies.add(ObjectUtils.clone(studentExtraExercise));
+            }
+            // 作业详情
+            studentLessonTrainingDetailList.addAll(studentLessonTrainingDetailService
+                                                       .homeWorkDetail(exercises.getStudentLessonTrainingDetails(), studentIds,exercises.getId()));
+        }
+        extracurricularExercisesReplyDao.batchInsert(extracurricularExercisesReplies);
+        studentLessonTrainingDetailService.saveBatch(studentLessonTrainingDetailList);
+
+        for (ExtracurricularExercisesReply extracurricularExercisesReply : extracurricularExercisesReplies) {
+            Integer studentId = extracurricularExercisesReply.getUserId();
 
 			String notifyUrl = "?courseScheduleID=" + studentExtraExercise.getId() + "&studentCourseHomeworkId=" + studentExtraExercise.getId() + "&extra=1";
 			String extra = "dayaedu" + notifyUrl + "&userId=" + studentId;

+ 33 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -9,12 +9,14 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
@@ -636,7 +638,36 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 		return serviceDto;
 	}
 
-	@Transactional(rollbackFor = Exception.class)
+    /**
+     * 老师端课后作业列表
+     *
+     * @param queryInfo
+     */
+    @Override
+    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();
+        }
+        List<Long> courseIds = studentExtracurricularExercisesSituationDao.queryCourseIdByClassDate(firstDayOfMonth,lastDayOfMonth,queryInfo.getTeacherId());
+        if(courseIds == null || courseIds.size() == 0){
+            return pageInfo;
+        }
+
+        // 查出课程列表
+        courseScheduleDao.queryTeacherServeHomeworkDetailV2(queryInfo, courseIds);
+
+        return pageInfo;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
 	public void delSituations(List<StudentExtracurricularExercisesSituation> situations){
 		if (CollectionUtils.isEmpty(situations)){
 			return;
@@ -649,4 +680,4 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			courseScheduleStatisticsDao.updateCourseService(collect,0);
 		}
 	}
-}
+}

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

@@ -0,0 +1,99 @@
+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.dto.StudentLessonTrainingDetailWrapper;
+import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
+import com.ym.mec.biz.dal.enums.StandardEnum;
+import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 练习内容
+ * 2023-03-31 14:18:47
+ */
+@Slf4j
+@Service
+public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentLessonTrainingDetailMapper, StudentLessonTrainingDetail> implements StudentLessonTrainingDetailService {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return StudentLessonTrainingDetail
+     */
+	@Override
+    public StudentLessonTrainingDetail detail(Long id) {
+        
+        return baseMapper.selectById(id);
+    }
+	
+    /**
+     * 添加
+     * @param studentLessonTrainingDetail StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail) {    	
+        
+        return this.save(JSON.parseObject(studentLessonTrainingDetail.jsonString(), StudentLessonTrainingDetail.class));
+    }
+
+    /**
+     * 更新
+     * @param studentLessonTrainingDetail StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail){
+
+        return this.updateById(JSON.parseObject(studentLessonTrainingDetail.jsonString(), StudentLessonTrainingDetail.class));       
+    }
+
+    /**
+     * 将作业标准 转换为 需要的作业详情
+     *
+     * @param detailList 作业标准
+     * @param userIdList                   学生ID
+     */
+    @Override
+    public List<StudentLessonTrainingDetail> homeWorkDetail(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> detailList, List<Integer> userIdList,Long homeworkId) {
+        // 保存作业标准
+        if (CollectionUtils.isEmpty(detailList) || CollectionUtils.isEmpty(userIdList)) {
+            return new ArrayList<>();
+        }
+
+        List<StudentLessonTrainingDetail> result = new ArrayList<>();
+
+        if (!CollectionUtils.isEmpty(detailList)) {
+            List<StudentLessonTrainingDetail> details = JSON.parseArray(
+                JSON.toJSONString(detailList), StudentLessonTrainingDetail.class);
+            result.addAll(details);
+            // 根据声部添加学生作业详情
+            userIdList.forEach(userId -> {
+                List<StudentLessonTrainingDetail> detailsUser = JSON.parseArray(
+                    JSON.toJSONString(detailList), StudentLessonTrainingDetail.class);
+                for (StudentLessonTrainingDetail studentLessonTrainingDetail : detailsUser) {
+                    studentLessonTrainingDetail.setUserId(userId.longValue());
+                }
+                result.addAll(detailsUser);
+            });
+        }
+        for (StudentLessonTrainingDetail studentLessonTrainingDetail : result) {
+
+            studentLessonTrainingDetail.setCourseHomeworkId(homeworkId);
+            studentLessonTrainingDetail.setTrainingTimes(0);
+            studentLessonTrainingDetail.setTrainingStatus(StandardEnum.NOT_START);
+            studentLessonTrainingDetail.setCreateTime(new Date());
+            studentLessonTrainingDetail.setUpdateTime(new Date());
+
+        }
+        return result;
+    }
+}

+ 32 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -77,6 +78,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	@Autowired
 	private StudentService studentService;
 
+    @Autowired
+    private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
+
 	@Override
 	public BaseDAO<Long, TeacherAttendance> getDAO() {
 		return teacherAttendanceDao;
@@ -335,7 +339,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				teacherAttendanceDao.insert(teacherAttendance);
 			}
 
-			if(StringUtils.isNotBlank(courseHomeworkInfo.getContent())){
+			if(StringUtils.isNotBlank(courseHomeworkInfo.getContent()) || !CollectionUtils.isEmpty(courseHomeworkInfo.getStudentLessonTrainingDetails())){
 				CourseHomework courseHomework = courseHomeworkDao.findByCourseSchedule(teacherAttendance.getCourseScheduleId());
 				if(Objects.isNull(courseHomework)){
 					//新增课堂作业
@@ -349,15 +353,24 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					courseHomeworkService.insert(courseHomework);
 					List<StudentCourseHomework> studentCourseHomeworks = new ArrayList<>();
 
+                    // 作业详情
+                    List<StudentLessonTrainingDetail> studentLessonTrainingDetails = new ArrayList<>();
+
 					//获取按学员声部发放的作业
 					List<MusicScoreSubjectDto> musicScoreSubjectDto = courseHomework.getMusicScoreSubjectDto();
 					if(musicScoreSubjectDto != null && musicScoreSubjectDto.size() > 0){
 						for (MusicScoreSubjectDto scoreSubjectDto : musicScoreSubjectDto) {
-							studentCourseHomeworks.addAll(studentCourseHomeworkDao.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
-									courseHomework.getId(),
-									StringUtils.join(scoreSubjectDto.getMusicScoreIdList(),","),
-									JSONObject.toJSONString(scoreSubjectDto.getMusicScoreHomeworkDtoList()),
-									scoreSubjectDto.getUserIdList()));
+                            List<Integer> userIdList = scoreSubjectDto.getUserIdList();
+                            studentCourseHomeworks.addAll(studentCourseHomeworkDao.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
+                                             courseHomework.getId(),
+                                             StringUtils.join(scoreSubjectDto.getMusicScoreIdList(),","),
+                                             JSONObject.toJSONString(scoreSubjectDto.getMusicScoreHomeworkDtoList()),
+                                             userIdList));
+
+
+                            studentLessonTrainingDetails.addAll(studentLessonTrainingDetailService
+                                                                    .homeWorkDetail(scoreSubjectDto.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId()));
+
 						}
 					}else {
 						studentCourseHomeworks.addAll(studentCourseHomeworkDao.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
@@ -365,10 +378,20 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 								courseHomework.getMusicScoreId(),
 								"",
 								null));
+
+                        List<Integer> userIdList = studentCourseHomeworks.stream()
+                                                                      .map(StudentCourseHomework::getUserId)
+                                                                      .collect(Collectors.toList());
+                        studentLessonTrainingDetails.addAll(studentLessonTrainingDetailService
+                                                                .homeWorkDetail(courseHomeworkInfo.getStudentLessonTrainingDetails(), userIdList,courseHomework.getId()));
+
 					}
 					if(CollectionUtils.isEmpty(studentCourseHomeworks)){
 						throw new BizException("此课程没有学生");
 					}
+                    for (StudentCourseHomework studentCourseHomework : studentCourseHomeworks) {
+                        studentCourseHomework.setGroupType(teacherAttendance.getGroupType());
+                    }
 
 					//排除不被服务学员
 //					Set<Integer> serveStudentIds = studentServeService.getStudentWithCourse(teacherAttendance.getCourseScheduleId());
@@ -405,6 +428,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 									userMap, null, 0, 3 + notifyUrl, "STUDENT", teacher.getRealName(), courseSchedule.getName(), dateStr);
 						}
 					}
+                    if (!CollectionUtils.isEmpty(studentLessonTrainingDetails)) {
+                        studentLessonTrainingDetailService.saveBatch(studentLessonTrainingDetails);
+                    }
 				}else{
 					courseHomework.setContent(teacherSignOutDto.getCourseHomeworkInfo().getContent());
 					courseHomework.setAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());

+ 42 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4124,4 +4124,46 @@
     <select id="queryStartedCourseMusicGroupIdList" resultType="java.lang.String">
 		select distinct cs.music_group_id_ from course_schedule cs where cs.group_type_ = #{groupType} and cs.status_ = 'OVER'
     </select>
+
+    <select id="queryTeacherServeHomeworkDetailV2"
+            resultType="com.ym.mec.biz.dal.dto.CourseHomeworkWrapper$CourseHomeworkList">
+        SELECT
+        cs.id_ as courseScheduleId,
+        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,
+        cs.teacher_id_ as teacherId,
+        cs.music_group_id_ as musicGroupId,
+        cs.type_ as classType,
+        cs.teach_mode_ as teachMode
+        from course_schedule cs
+        left join course_homework ch on cs.id_ = ch.course_schedule_id_
+
+        <where>
+            <if test="param.musicGroupId != null">
+                and #{param.musicGroupId} = cs.music_group_id_
+            </if>
+            <if test="param.classType != null">
+                and cs.type_ = #{param.classType}
+            </if>
+            <if test="param.homeWorkStatus != null">
+                <if test="param.homeWorkStatus.code == 'UNASSIGNED'">
+                    and ch.id_ is null
+                </if>
+                <if test="param.homeWorkStatus.code == 'ASSIGNED'">
+                    and ch.id_ is not null
+                </if>
+                <if test="param.homeWorkStatus.code == 'DEADLINE'">
+                    and ch.id_ is not null and ch.expiry_date_ &lt; now()
+                </if>
+            </if>
+            <if test="courseIds != null and courseIds.size() != 0">
+                and cs.id_ in
+                <foreach collection="courseIds" item="courseId" open="(" separator="," close=")">
+                    #{courseId}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -88,7 +88,7 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_course_homework
         (user_id_,course_schedule_id_,course_homework_id_,attachments_,score_,create_time_,
-         update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_,standard_flag_)
+         update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_,standard_flag_,group_type_)
         VALUE
         <foreach collection="list" item="homework" separator=",">
             (#{homework.userId},#{homework.courseScheduleId},#{homework.courseHomeworkId},#{homework.attachments},
@@ -96,7 +96,8 @@
             #{homework.isReplied,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{homework.isView,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{homework.isRepliedTimely},
             #{homework.musicScoreId},#{homework.musicScoreContent},#{homework.tenantId},
-            #{homework.standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+            #{homework.standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{homework.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
 

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/StudentLessonTrainingDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ym.mec.biz.dal.dao.StudentLessonTrainingDetailMapper">
+
+</mapper>

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

@@ -6,6 +6,8 @@ import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.MusicGroup;
@@ -18,6 +20,7 @@ import com.ym.mec.biz.service.ExtracurricularExercisesService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 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;
@@ -65,6 +68,18 @@ public class ExtracurricularExercisesController extends BaseController {
     }
 
 
+    @ApiOperation(value = "获取教师有服务指标的课程列表")
+    @GetMapping("/queryTeacherServeHomeworkDetail/v2")
+    public HttpResponseResult<PageInfo<CourseHomeworkWrapper.CourseHomeworkList>> queryTeacherServeHomeworkDetailV2(CourseHomeworkWrapper.CourseHomeworkQuery queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeHomeworkDetailV2(queryInfo));
+    }
+
+
     @ApiOperation(value = "获取老师训练统计")
     @GetMapping("/getStatistics")
     public HttpResponseResult getStatistics(ExtraExercilseQueryInfo queryInfo) {