Browse Source

乐教通

zouxuan 1 year ago
parent
commit
45ec3e3db7
25 changed files with 492 additions and 88 deletions
  1. 1 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  2. 12 5
      mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java
  3. 9 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java
  4. 10 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  5. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  6. 3 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  8. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  9. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  10. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  11. 91 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherActiveWapper.java
  12. 73 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCompareRecordWapper.java
  13. 2 40
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseConsumerQueryInfo.java
  14. 3 5
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  15. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  16. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java
  17. 40 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  18. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  19. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  20. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  21. 8 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  22. 26 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  23. 12 0
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  24. 54 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  25. 37 0
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

+ 1 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java

@@ -1,7 +1,5 @@
 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.dao.CourseHomeworkDao;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
@@ -20,7 +18,6 @@ import com.yonge.log.model.AuditLogAnnotation;
 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.*;
 
@@ -62,7 +59,7 @@ public class CourseHomeworkController extends BaseController {
 
     @ApiOperation(value = "根据班级获取教师布置的作业")
     @GetMapping("/findTeacherCourseHomeworkByClassGroup")
-    public Object findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo){
+    public HttpResponseResult<List<Map<String, Object>>> findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo){
         queryInfo.setUserId(sysUserService.getUserId().longValue());
         return succeed(courseHomeworkService.findTeacherCourseHomeworkByClassGroup(queryInfo));
     }

+ 12 - 5
mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dto.BaseMapDto;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveWapper;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
@@ -11,13 +12,13 @@ import com.ym.mec.biz.service.*;
 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.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -29,15 +30,15 @@ import java.util.stream.Collectors;
 @RestController
 public class StudentController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserCashAccountService sysUserCashAccountService;
     @Resource
     private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private StudentManageService studentManageService;
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
-    @Autowired
+    @Resource
     private StudentAttendanceService studentAttendanceService;
 
     @ApiOperation(value = "获取学员异常考勤列表")
@@ -75,6 +76,12 @@ public class StudentController extends BaseController {
         return succeed(sysUserCashAccountService.get(id));
     }
 
+    @ApiOperation(value = "云教练统计")
+    @PostMapping("/cloudTeacherActive")
+    public HttpResponseResult<CloudTeacherActiveWapper.ResultMap> cloudTeacherActive(@RequestBody CloudTeacherActiveWapper.Query queryInfo){
+        return succeed(studentManageService.cloudTeacherActiveStatistics(queryInfo));
+    }
+
 
     @ApiOperation(value = "获取学生列表")
     @PostMapping("/queryStudentList")

+ 9 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java

@@ -3,17 +3,16 @@ 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.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 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 io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Objects;
 
@@ -46,6 +45,12 @@ public class SysMusicCompareRecordController extends BaseController {
         return succeed(sysMusicCompareRecordService.insert(record));
     }
 
+    @ApiOperation(value = "获取学员评测记录列表")
+    @PostMapping("queryPageByStudent")
+    public HttpResponseResult<PageInfo<MusicCompareRecordWapper.Result>> queryPageByStudent(@RequestBody MusicCompareRecordWapper.Query query){
+        return succeed(sysMusicCompareRecordService.queryPageByStudent(query));
+    }
+
     @ApiOperation(value = "用户最后一次评测数据")
     @GetMapping("getLastEvaluationMusicalNotesPlayStats")
     public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(Long recordId){

+ 10 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dto.*;
@@ -52,6 +53,8 @@ public class TeacherController extends BaseController {
     private StudentRegistrationService studentRegistrationService;
     @Autowired
     private ImGroupCoreService imGroupCoreService;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
 
     @Autowired
     private StudentCourseHomeworkService studentCourseHomeworkService;
@@ -71,6 +74,13 @@ public class TeacherController extends BaseController {
         return succeed(teacherService.queryOrganList(sysUserService.getUserId()));
     }
 
+    @ApiOperation(value = "课程配置课件")
+    @GetMapping("/configCourseware")
+    public HttpResponseResult configCourseware(Long courseId,String coursewareDetailId) {
+        courseScheduleDao.configCourseware(courseId,coursewareDetailId);
+        return succeed();
+    }
+
     @ApiOperation(value = "根据教师编号查询教师基本信息")
     @GetMapping("/queryUserInfo")
     public Object queryUserInfo() {

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

@@ -2089,4 +2089,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> getNotStartOnlineNoLive(@Param("beforeTime") Integer beforeTime, @Param("tenantInfoId") Integer tenantInfoId);
 
     List<CourseSchedule> getEndTimeBetweenYesterdayAndNow();
+
+    void configCourseware(@Param("courseId") Long courseId, @Param("coursewareDetailId") String coursewareDetailId);
 }

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

@@ -1,11 +1,8 @@
 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.dto.*;
 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;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,6 +33,8 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     List<ExtraExerciseStudentsDto> findExtraExerciseStudents(@Param("extraExerciseId") Long extraExerciseId,
                                                              @Param("studentName") String studentName);
 
+    List<ExtraExerciseStudentsDto> findExtraExerciseStudent(@Param("query") StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
     /**
      * @describe 根据课外作业获取对应的学生列表
      * @author Joburgess

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

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveWapper;
 import com.ym.mec.biz.dal.page.StudentCourseConsumerQueryInfo;
 import com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
@@ -352,6 +353,14 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     List<CloudTeacherSumDto> queryCloudTeacherSumDetail(Map<String, Object> params);
 
     //统计训练时长
+    int countCloudTeacherSumDetail1(Map<String, Object> params);
+
+    //统计训练时长
+    List<CloudTeacherActiveWapper.Result> queryCloudTeacherSumDetail1(Map<String, Object> params);
+
+    CloudTeacherActiveWapper.Statistics cloudTeacherActiveStatistics(Map<String, Object> params);
+
+    //统计训练时长
     int countTeacherSum(@Param("queryInfo") StudentCourseConsumerQueryInfo queryInfo);
 
     //统计重复购买人数
@@ -388,4 +397,5 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     //查询会员学员
     List<Integer> queryMemberStudent(@Param("memberFlag") Boolean memberFlag, @Param("studentIdList") List<Integer> studentIdList);
+
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.biz.dal.page.ExportCompareQueryInfo;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.dal.page.TeacherCloudTrainingQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 
@@ -127,4 +128,8 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     Integer getUserTrainingTime(@Param("userId") Integer userId);
 
     List<SysMusicCompareRecord> getByIds(@Param("musicPracticeRecordIds") List<Long> musicPracticeRecordIds);
+
+    int countByStudent(Map<String, Object> params);
+
+    List<MusicCompareRecordWapper.Result> queryPageByStudent(Map<String, Object> params);
 }

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

@@ -128,6 +128,18 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty(value = "true:完成 false未完成",hidden = true)
         private Boolean standardFlag;
 
+        @ApiModelProperty(value = "提交开始时间",required = true)
+        private String submitStartTime;
+
+        @ApiModelProperty(value = "提交结束时间",required = true)
+        private String submitEndTime;
+
+        @ApiModelProperty(value = "提交状态",required = true)
+        private Integer submitStatus;
+
+        @ApiModelProperty(value = "达标状态,'NOT_STANDARD(\"未达标\"), STANDARD(\"已达标\"), EXCELLENT(\"优秀\")")
+        private String standardStatus;
+
 	}
 
 

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -247,6 +247,14 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty("直播课分享模式,默认:NO_SHARE(未分享),OPEN(公开),PRIVATE(私密)")
 	private ShareModeEnum shareMode;
 
+	@Getter
+	@ApiModelProperty("课件编号")
+	private String coursewareDetailId;
+
+	public void setCoursewareDetailId(String coursewareDetailId) {
+		this.coursewareDetailId = coursewareDetailId;
+	}
+
 	public void setMergeTime(Date mergeTime) {
 		this.mergeTime = mergeTime;
 	}

+ 91 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherActiveWapper.java

@@ -0,0 +1,91 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public class CloudTeacherActiveWapper {
+
+    @Data
+    public static class Query extends QueryInfo {
+        @ApiModelProperty(value = "分部")
+        private String organId;
+
+        @ApiModelProperty(value = "开始时间")
+        private String startDate;
+
+        @ApiModelProperty(value = "结束时间")
+        private String endDate;
+
+        @ApiModelProperty(value = "声部")
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "教师ID")
+        private Integer teacherId;
+
+        @ApiModelProperty(value = "是否会员")
+        private Boolean hasMember;
+    }
+
+    @Data
+    public static class Result {
+        @ApiModelProperty(value = "学员编号")
+        private Integer userId;
+
+        @ApiModelProperty(value = "学员姓名")
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        private String phone;
+
+        @ApiModelProperty(value = "声部")
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "声部")
+        private String subjectName;
+
+        @ApiModelProperty(value = "练习总时长")
+        private BigDecimal trainTotalTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习次数")
+        private BigDecimal trainNum = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习天数")
+        private BigDecimal trainDays = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "平均练习时长")
+        private BigDecimal avgTrainTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "评测次数")
+        private BigDecimal testNum = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "是否会员")
+        private Boolean memberFlag;
+    }
+
+    @Data
+    public static class Statistics {
+        @ApiModelProperty(value = "练习总时长")
+        private BigDecimal trainTotalTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习天数")
+        private BigDecimal trainDays = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "平均练习时长")
+        private BigDecimal avgTrainTime = BigDecimal.ZERO;
+    }
+
+    @Data
+    public static class ResultMap {
+        @ApiModelProperty(value = "列表")
+        private PageInfo<Result> result;
+
+        @ApiModelProperty(value = "汇总")
+        private Statistics statistics;
+    }
+
+}

+ 73 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCompareRecordWapper.java

@@ -0,0 +1,73 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.FeatureType;
+import com.ym.mec.biz.dal.enums.HeardLevelEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+public class MusicCompareRecordWapper {
+
+    @Data
+    public static class Query extends QueryInfo {
+        @ApiModelProperty(value = "评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty(value = "开始时间")
+        private String startDate;
+
+        @ApiModelProperty(value = "结束时间")
+        private String endDate;
+
+        @ApiModelProperty(value = "功能点")
+        private FeatureType feature;
+
+        @ApiModelProperty(value = "学员编号")
+        private Integer studentId;
+    }
+
+    @Data
+    public static class Result {
+
+        @ApiModelProperty(value = "教程编号")
+        private Integer sysMusicScoreId;
+
+        @ApiModelProperty(value = "评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty(value = "教程名称")
+        private String sysMusicScoreName;
+
+        @ApiModelProperty(value = "评分数据")
+        private String scoreData;
+
+        @ApiModelProperty(value = "总分")
+        private BigDecimal score;
+
+        @ApiModelProperty(value = "音准")
+        private BigDecimal intonation;
+
+        @ApiModelProperty(value = "节奏")
+        private BigDecimal cadence;
+
+        @ApiModelProperty(value = "完成度")
+        private BigDecimal integrity;
+
+        @ApiModelProperty(value = "录音文件地址")
+        private String recordFilePath;
+
+        @ApiModelProperty(value = "视频文件地址")
+        private String videoFilePath;
+
+        @ApiModelProperty(value = "功能点")
+        private FeatureType feature;
+
+        @ApiModelProperty(value = "创建时间")
+        private java.util.Date createTime;
+
+        @ApiModelProperty(value = "创建时间无时分秒")
+        private String createDate;
+    }
+}

+ 2 - 40
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseConsumerQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class StudentCourseConsumerQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "分部")
@@ -19,44 +21,4 @@ public class StudentCourseConsumerQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "周数")
     private long weekBetween;
-
-    public long getWeekBetween() {
-        return weekBetween;
-    }
-
-    public void setWeekBetween(long weekBetween) {
-        this.weekBetween = weekBetween;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organId;
-    }
-
-    public String getMonth() {
-        return month;
-    }
-
-    public void setMonth(String month) {
-        this.month = month;
-    }
-
-    public String getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(String startDate) {
-        this.startDate = startDate;
-    }
-
-    public String getEndDate() {
-        return endDate;
-    }
-
-    public void setEndDate(String endDate) {
-        this.endDate = endDate;
-    }
 }

+ 3 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java

@@ -1,10 +1,6 @@
 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.dto.*;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
@@ -19,6 +15,8 @@ import java.util.List;
 
 public interface ExtracurricularExercisesReplyService extends BaseService<Long, ExtracurricularExercisesReply> {
 
+    List<StudentCourseHomework> findExtraExerciseStudents(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
     /**
      * @describe
      * @author Joburgess

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -217,4 +217,8 @@ public interface StudentManageService {
     PageInfo<Student> queryStudent(StudentActivityQueryInfo queryInfo);
 
     List<BaseMapDto> queryStuSubjectId(Integer userId);
+
+    PageInfo<CloudTeacherActiveWapper.Result> cloudTeacherActive(CloudTeacherActiveWapper.Query queryInfo);
+
+    CloudTeacherActiveWapper.ResultMap cloudTeacherActiveStatistics(CloudTeacherActiveWapper.Query queryInfo);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java

@@ -3,9 +3,11 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloudTrainingQueryInfo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -100,4 +102,6 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
     PageInfo<TeacherCloudTrainingDto> queryTeacherTraining(TeacherCloudTrainingQueryInfo queryInfo);
 
     Map<Long, SysMusicCompareRecord> getMapByIds(List<Long> musicPracticeRecordIds);
+
+    PageInfo<MusicCompareRecordWapper.Result> queryPageByStudent(MusicCompareRecordWapper.Query query);
 }

+ 40 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -18,11 +18,11 @@ 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.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 javax.annotation.Resource;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -30,39 +30,31 @@ import java.util.stream.Collectors;
 @Service
 public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Long, ExtracurricularExercisesReply> implements ExtracurricularExercisesReplyService {
 	
-	@Autowired
+	@Resource
 	private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
-	@Autowired
+	@Resource
 	private ExtracurricularExercisesDao extracurricularExercisesDao;
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
-	@Autowired
+	@Resource
 	private TeacherDao teacherDao;
-	@Autowired
+	@Resource
 	private StudentDao studentDao;
-	@Autowired
+	@Resource
 	private SysConfigDao sysConfigDao;
-	@Autowired
+	@Resource
 	private CourseScheduleDao courseScheduleDao;
-	@Autowired
+	@Resource
 	private SysMusicScoreDao sysMusicScoreDao;
-	@Autowired
+	@Resource
 	private StudentServeService studentServeService;
-
-    @Autowired
+    @Resource
     private MusicGroupService musicGroupService;
-
-
-    @Autowired
+    @Resource
     private ClassGroupDao classGroupDao;
-
-    @Autowired
-    private ExtracurricularExercisesService extracurricularExercisesService;
-
-    @Autowired
+    @Resource
     private CourseHomeworkService courseHomeworkService;
-
-    @Autowired
+    @Resource
     private StudentLessonTrainingDetailService studentLessonTrainingDetailService;
 
 	@Override
@@ -71,6 +63,32 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	}
 
 	@Override
+	public List<StudentCourseHomework> findExtraExerciseStudents(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query) {
+		Long extraExerciseId = query.getCourseScheduleId().longValue();
+		ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(extraExerciseId);
+		if(extracurricularExercises == null){
+			throw new BizException("课外训练不存在");
+		}
+		List<ExtraExerciseStudentsDto> extraExerciseStudents = extracurricularExercisesReplyDao.findExtraExerciseStudent(query);
+        List<StudentCourseHomework> studentCourseHomeworks=new ArrayList<>();
+        for (ExtraExerciseStudentsDto extraExerciseStudent : extraExerciseStudents) {
+            StudentCourseHomework studentCourseHomework= JSON.parseObject(JSON.toJSONString(extraExerciseStudent),StudentCourseHomework.class);
+            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;
+	}
+
+	@Override
 	public List<StudentCourseHomework> findExtraExerciseStudents(Long extraExerciseId, String studentName) {
 		if(Objects.isNull(extraExerciseId)){
 			throw new BizException("请选择课外训练");

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

@@ -870,8 +870,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 
     @Override
     public List<StudentCourseHomework> findExtraExerciseStudentsV2(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query) {
-        List<StudentCourseHomework> extraExerciseStudents = extracurricularExercisesReplyService.findExtraExerciseStudents(
-            query.getCourseScheduleId().longValue(), null);
+        List<StudentCourseHomework> extraExerciseStudents = extracurricularExercisesReplyService.findExtraExerciseStudents(query);
 
         List<StudentCourseHomework> studentCourseHomeworks = getStudentCourseHomeworks(extraExerciseStudents);
         if (query.getSubjectId() != null) {

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

@@ -119,6 +119,8 @@ public class StudentManageServiceImpl implements StudentManageService {
 
     @Autowired
     private SysUserService sysUserService;
+    @Autowired
+    private SubjectService subjectService;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -1196,4 +1198,46 @@ public class StudentManageServiceImpl implements StudentManageService {
     public List<BaseMapDto> queryStuSubjectId(Integer userId) {
         return studentDao.queryStuSubjectIdByTeacherId(userId);
     }
+
+    @Override
+    public PageInfo<CloudTeacherActiveWapper.Result> cloudTeacherActive(CloudTeacherActiveWapper.Query queryInfo) {
+        PageInfo<CloudTeacherActiveWapper.Result> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<CloudTeacherActiveWapper.Result> dataList = null;
+        int count = studentDao.countCloudTeacherSumDetail1(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentDao.queryCloudTeacherSumDetail1(params);
+            List<Integer> subjectIds = dataList.stream().map(e -> e.getSubjectId()).filter(e -> e != null).collect(Collectors.toList());
+            Map<Integer, Subject> subjectMap = subjectService.getMapByIds(subjectIds);
+            for (CloudTeacherActiveWapper.Result dto : dataList) {
+                dto.setSubjectName(subjectMap.get(dto.getSubjectId()) == null ? "" : subjectMap.get(dto.getSubjectId()).getName());
+                if(dto.getTrainNum().compareTo(BigDecimal.ZERO) > 0){
+                    dto.setAvgTrainTime(dto.getTrainTotalTime().divide(dto.getTrainNum(),2, 2));
+                }
+            }
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public CloudTeacherActiveWapper.ResultMap cloudTeacherActiveStatistics(CloudTeacherActiveWapper.Query queryInfo) {
+        CloudTeacherActiveWapper.ResultMap resultMap = new CloudTeacherActiveWapper.ResultMap();
+        resultMap.setResult(this.cloudTeacherActive(queryInfo));
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        CloudTeacherActiveWapper.Statistics statistics = studentDao.cloudTeacherActiveStatistics(params);
+        if(statistics.getTrainDays().compareTo(BigDecimal.ZERO) > 0){
+            statistics.setAvgTrainTime(statistics.getTrainTotalTime().divide(statistics.getTrainDays(),2, 2));
+        }
+        resultMap.setStatistics(statistics);
+        return resultMap;
+    }
 }

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

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.enums.FeatureType;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.biz.dal.enums.IndexDataType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloudTrainingQueryInfo;
 import com.ym.mec.biz.service.*;
@@ -549,6 +550,26 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
     }
 
+    @Override
+    public PageInfo<MusicCompareRecordWapper.Result> queryPageByStudent(MusicCompareRecordWapper.Query query) {
+		PageInfo<MusicCompareRecordWapper.Result> pageInfo = new PageInfo<>(query.getPage(), query.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, query);
+
+		List<MusicCompareRecordWapper.Result> dataList = null;
+		int count = sysMusicCompareRecordDao.countByStudent(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = sysMusicCompareRecordDao.queryPageByStudent(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+    }
+
     private void updateCampData(SysMusicCompareRecord record) {
 		//获取所有进行中的训练营
 		List<TempLittleArtistTrainingCampUserRelation> userRelations = tempLittleArtistTrainingCampUserRelationService.getDao()

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

@@ -53,6 +53,7 @@
         <result column="continuous_course_" property="continuousCourse" />
         <result column="share_mode_" property="shareMode" />
         <result column="merge_flag_" property="mergeFlag" />
+        <result column="courseware_detail_id_" property="coursewareDetailId" />
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -199,7 +200,8 @@
         cs.live_room_id_,
         cs.continuous_course_,
         cs.share_mode_,
-        cs.merge_flag_
+        cs.merge_flag_,
+        cs.courseware_detail_id_
     </sql>
 
     <sql id="courseIgnore">
@@ -765,7 +767,8 @@
         cs.live_room_id_,
         cs.group_type_,
         cs.music_group_id_,
-        cs.share_mode_
+        cs.share_mode_,
+        cs.courseware_detail_id_
         FROM
         course_schedule_teacher_salary csts
         LEFT JOIN course_schedule cs ON csts.course_schedule_id_=cs.id_
@@ -4475,6 +4478,9 @@
     <update id="batchUpdateContinuousCourse">
         update course_schedule set continuous_course_ = #{continuousCourse} where id_ IN (<foreach collection="courseScheduleIds" separator="," item="item">#{item}</foreach>)
     </update>
+    <update id="configCourseware">
+        update course_schedule set courseware_detail_id_ = #{coursewareDetailId} where id_ = #{courseId}
+    </update>
 
     <select id="getTeacherContinuousCourse" resultMap="CourseSchedule">
         SELECT <include refid="resultSql"/> FROM course_schedule cs

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

@@ -209,6 +209,32 @@
 		</if>
 	</select>
 
+	<select id="findExtraExerciseStudent" resultMap="ExtraExerciseStudentsDto">
+		SELECT
+			eer.*,
+			su.username_ student_name_,
+		    su.avatar_,
+		    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="query.search != null and query.search != ''">
+			AND (su.username_ LIKE CONCAT('%',#{query.search},'%') OR su.phone_ LIKE CONCAT('%',#{query.search},'%') OR su.id_ = #{query.search})
+		</if>
+		<if test="query.submitStartTime != null and query.submitStartTime != ''">
+			AND eer.submit_time_ BETWEEN CONCAT(#{query.submitStartTime},' 00:00:00') AND CONCAT(#{query.submitEndTime},' 23:59:59')
+		</if>
+		<if test="query.submitStatus != null">
+			AND eer.status_ = #{query.submitStatus}
+		</if>
+		<if test="query.standardStatus != null and query.standardStatus != ''">
+			AND eer.standard_flag_ = #{query.standardStatus}
+		</if>
+	</select>
+
 	<select id="findExtraExerciseStudentsByExtraExercises" resultMap="ExtracurricularExercisesReply">
 		SELECT * FROM extracurricular_exercises_reply WHERE extracurricular_exercises_id_ IN
 		<foreach collection="extraExerciseIds" item="extraExerciseId" open="(" close=")" separator=",">

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -724,6 +724,18 @@
             <if test="query.subjectId != null">
                 and (sr.actual_subject_id_ = #{query.subjectId} or (sr.actual_subject_id_ is null and s2.subject_id_list_ = #{query.subjectId}))
             </if>
+            <if test="query.search != null and query.search != ''">
+                AND (su.username_ LIKE CONCAT('%',#{query.search},'%') OR su.phone_ LIKE CONCAT('%',#{query.search},'%') OR su.id_ = #{query.search})
+            </if>
+            <if test="query.submitStartTime != null and query.submitStartTime != ''">
+                AND sch.submit_time_ BETWEEN CONCAT(#{query.submitStartTime},' 00:00:00') AND CONCAT(#{query.submitEndTime},' 23:59:59')
+            </if>
+            <if test="query.submitStatus != null">
+                AND sch.status_ = #{query.submitStatus}
+            </if>
+            <if test="query.standardStatus != null and query.standardStatus != ''">
+                AND sch.standard_flag_ = #{query.standardStatus}
+            </if>
         </where>
     </select>
 

+ 54 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1291,6 +1291,60 @@
         group by stm.teacher_id_
         <include refid="global.limit"/>
     </select>
+    <sql id="countCloudTeacherSumDetail1Sql">
+        <where>
+            <if test="memberFlag != null">
+                <if test="memberFlag == true">
+                    AND s.membership_end_time_ >= NOW()
+                </if>
+                <if test="memberFlag == false">
+                    AND (s.membership_end_time_ &lt; NOW() OR s.membership_end_time_ IS NULL)
+                </if>
+            </if>
+            <if test="query.startTime != null and query.startTime != ''">
+                AND smcr.create_date_ BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="teacherId != null">
+                AND stm.teacher_id_ = #{teacherId}
+            </if>
+            <if test="subjectId != null">
+                AND stm.subject_id_list_ = #{subjectId}
+            </if>
+            <if test="search != null and search != ''">
+                AND (su.username_ LIKE CONCAT('%',#{query.search},'%') OR su.phone_ LIKE CONCAT('%',#{query.search},'%') OR su.id_ = #{query.search})
+            </if>
+        </where>
+    </sql>
+    <select id="countCloudTeacherSumDetail1" resultType="java.lang.Integer">
+        select COUNT(DISTINCT stm.student_id_)
+        from student_teacher_mapper stm
+        left join sys_music_compare_record smcr ON stm.student_id_ = smcr.user_id_
+        left join student s ON s.user_id_ = stm.student_id_
+        left join sys_user su ON su.id_ = s.user_id_
+        <include refid="countCloudTeacherSumDetail1Sql"/>
+    </select>
+    <select id="queryCloudTeacherSumDetail1" resultType="com.ym.mec.biz.dal.page.CloudTeacherActiveWapper$Result">
+        select stm.student_id_ userId,su.username_ username,su.phone_ phone,SUM(smcr.play_time_) trainTotalTime,
+        COUNT(DISTINCT smcr.create_date_) trainDays,COUNT(smcr.id_) trainNum,COUNT(score_) testNum ,s.membership_end_time_ >= NOW() memberFlag,
+        s.subject_id_list_ subjectId
+        from student_teacher_mapper stm
+        left join sys_music_compare_record smcr ON stm.student_id_ = smcr.user_id_
+        left join student s ON s.user_id_ = stm.student_id_
+        left join sys_user su ON su.id_ = s.user_id_
+        <include refid="countCloudTeacherSumDetail1Sql"/>
+        GROUP BY stm.student_id_ ORDER BY trainTotalTime DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="cloudTeacherActiveStatistics"
+            resultType="com.ym.mec.biz.dal.page.CloudTeacherActiveWapper$Statistics">
+        select SUM(smcr.play_time_) trainTotalTime,
+               COUNT(DISTINCT smcr.create_date_) trainDays
+        from student_teacher_mapper stm
+                 left join sys_music_compare_record smcr ON stm.student_id_ = smcr.user_id_
+                 left join student s ON s.user_id_ = stm.student_id_
+                 left join sys_user su ON su.id_ = s.user_id_
+        <include refid="countCloudTeacherSumDetail1Sql"/>
+    </select>
 
     <select id="countTeacherSum" resultType="java.lang.Integer">
         select COUNT(distinct su.organ_id_)

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -549,4 +549,41 @@
             #{id}
         </foreach>
     </select>
+	<sql id="queryPageByStudentSql">
+		<where>
+			<if test="heardLevel != null">
+				AND mcr.heard_level_ = #{heardLevel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="heardLevel == null">
+				AND mcr.heard_level_ IN ('BEGINNER','ADVANCED','PERFORMER')
+			</if>
+			<if test="search != null and search != ''">
+				AND (sms.name_ LIKE CONCAT('%',#{search},'%') OR mcr.sys_music_score_id_ = #{search})
+			</if>
+			<if test="startDate != null and startDate != ''">
+				AND mcr.create_date_ BETWEEN #{startDate} AND #{endDate}
+			</if>
+			<if test="feature != null">
+				AND mcr.feature_ = #{feature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="studentId != null">
+				AND mcr.user_id_ = #{studentId}
+			</if>
+		</where>
+	</sql>
+	<select id="countByStudent" resultType="java.lang.Integer">
+		select COUNT(mcr.id_)
+		from sys_music_compare_record mcr
+				 left join sys_music_score sms ON sms.id_ = mcr.sys_music_score_id_
+		<include refid="queryPageByStudentSql"/>
+	</select>
+	<select id="queryPageByStudent" resultType="com.ym.mec.biz.dal.page.MusicCompareRecordWapper$Result">
+		select mcr.create_time_,mcr.sys_music_score_id_ sysMusicScoreId,sms.name_ sysMusicScoreName,mcr.feature_ feature, mcr.heard_level_ heardLevel,
+			   mcr.integrity_ integrity,mcr.score_ score,mcr.intonation_ intonation,mcr.cadence_ cadence,mcr.score_data_ scoreData,
+			   mcr.video_file_path_ videoFilePath,mcr.record_file_path_ recordFilePath
+		from sys_music_compare_record mcr
+				 left join sys_music_score sms ON sms.id_ = mcr.sys_music_score_id_
+		<include refid="queryPageByStudentSql"/>
+		order by mcr.create_date_ DESC
+	</select>
 </mapper>