zouxuan 8 месяцев назад
Родитель
Сommit
cf79c50ca7

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -7,6 +7,7 @@ import java.util.Map;
 import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareWeekData;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -71,4 +72,11 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     List<SysMusicCompareRecord> selectByIds(@Param("musicPracticeRecordIds") List<Long> musicPracticeRecordIds);
 
     Long countStudentPracticeTime(@Param("userId") Long userId, @Param("monday") Date monday, @Param("sunday") Date sunday);
+
+    TeacherIndexWrapper.PracticeSummaryDto getStudentTrainOverView(@Param("studentIds") List<Long> studentIds,
+																   @Param("param") TeacherIndexWrapper.SummarySearch summarySearch);
+
+	List<TeacherIndexWrapper.PracticeTimeDto> getStudentTrainTime(@Param("studentIds") List<Long> studentIds,
+																  @Param("param") TeacherIndexWrapper.SummarySearch summarySearch,
+																  @Param("groupBy") String groupBy);
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -460,7 +460,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 e.setSubjectName(subjectMap.get(e.getSubjectId()));
                 com.yonge.cooleshow.biz.dal.entity.SysUser user = userMap.get(e.getTeacherId());
                 if(Objects.nonNull(user)){
-                    e.setTeacherName(user.getRealName());
+                    e.setTeacherName(user.getUsername());
                     e.setTeacherAvatar(user.getAvatar());
                 }
             }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -2906,7 +2906,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             }
             courseVo.setUserId(courseSchedule.getTeacherId());
             com.yonge.cooleshow.biz.dal.entity.SysUser user = userMap.get(courseSchedule.getTeacherId());
-            courseVo.setUserName(user.getRealName());
+            courseVo.setUserName(user.getUsername());
             courseVo.setAvatar(user.getAvatar());
             courseVo.setImUserId(imGroupService.getImUserId(String.valueOf(user.getId()),ClientEnum.TEACHER.name()));
             courseVos.add(courseVo);

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -535,6 +535,32 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 			return teacherPracticeHome;
 		}
 		//获取学员练习汇总
+		TeacherIndexWrapper.PracticeSummaryDto practiceSummary = sysMusicCompareRecordDao.getStudentTrainOverView(studentIds,summarySearch);
+		//计算平均练习时长
+		if(Objects.nonNull(practiceSummary)
+		&& practiceSummary.getPracticeCount().compareTo(BigDecimal.ZERO) > 0
+		&& practiceSummary.getTotalPracticeTime().compareTo(BigDecimal.ZERO) > 0){
+			practiceSummary.setAveragePracticeTime(practiceSummary.getTotalPracticeTime().divide(practiceSummary.getPracticeCount(), 0, BigDecimal.ROUND_HALF_UP));
+		}
+		teacherPracticeHome.setPracticeSummary(practiceSummary);
+
+		//获取学员练习时长
+		//获取分组条件,如果所选时间段只有一天,则按小时分组,超过一个月按天分组,超过一年按月分组
+		String groupBy;
+		if(StringUtils.equals(summarySearch.getStartTime(),summarySearch.getEndTime())){
+			groupBy = "%Y-%m-%d %H";
+		}else {
+			Date startDate = DateUtil.strToDate(summarySearch.getStartTime(), DateUtil.DEFAULT_PATTERN);
+			Date endDate = DateUtil.strToDate(summarySearch.getEndTime(), DateUtil.DEFAULT_PATTERN);
+			if(DateUtil.daysBetween(startDate,endDate) <= 31){
+				groupBy = "%Y-%m-%d";
+			}else if(DateUtil.monthsBetween(startDate,endDate) <= 12){
+				groupBy = "%Y-%m";
+			}else {
+				groupBy = "%Y";
+			}
+		}
+		teacherPracticeHome.setPracticeTimes(sysMusicCompareRecordDao.getStudentTrainTime(studentIds,summarySearch,groupBy));
 
         return teacherPracticeHome;
     }

+ 5 - 33
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HotTeacherVo.java

@@ -1,9 +1,10 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import io.swagger.annotations.ApiModelProperty;
-
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class HotTeacherVo extends Teacher {
 
 	/**
@@ -23,35 +24,6 @@ public class HotTeacherVo extends Teacher {
     @ApiModelProperty("是否关注")
     private boolean isWatch;
 
-	public String getAvatar() {
-		return avatar;
-	}
-
-	public void setAvatar(String avatar) {
-		this.avatar = avatar;
-	}
-
-	public String getUsername() {
-		return username;
-	}
-
-	public void setUsername(String username) {
-		this.username = username;
-	}
-
-	public boolean isLiving() {
-		return isLiving;
-	}
-
-	public void setIsLiving(boolean isLiving) {
-		this.isLiving = isLiving;
-	}
-
-	public boolean isWatch() {
-		return isWatch;
-	}
-
-	public void setWatch(boolean isWatch) {
-		this.isWatch = isWatch;
-	}
+	@ApiModelProperty("粉丝数")
+	private Integer fansNum;
 }

+ 4 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TeacherIndexWrapper.java

@@ -7,6 +7,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @ApiModel(value = "TeacherIndexWrapper", description = "首页数据统计")
@@ -54,13 +55,13 @@ public class TeacherIndexWrapper {
     @AllArgsConstructor
     public static class PracticeSummaryDto{
         @ApiModelProperty("练习人数")
-        private Integer practiceCount;
+        private BigDecimal practiceCount = BigDecimal.ZERO;
 
         @ApiModelProperty("平均练习时长")
-        private Long averagePracticeTime;
+        private BigDecimal averagePracticeTime = BigDecimal.ZERO;
 
         @ApiModelProperty("练习总时长")
-        private Long totalPracticeTime;
+        private BigDecimal totalPracticeTime = BigDecimal.ZERO;
 	}
 
     @Data

+ 3 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -154,8 +154,8 @@
         a.id_ as courseId,
         a.class_num_ as classNum,
         s.name_ as subjectName,
-        a.start_time_ as startTime,
-        a.end_time_ as endTime,
+        MIN(a.start_time_) as startTime,
+        MIN(a.end_time_) as endTime,
         a.status_ as `status`,
         b.pre_student_num_ as studentCount,
         b.background_pic_ as backgroundPic,
@@ -183,7 +183,7 @@
         <if test="param.subjectId != null and param.subjectId !=''">
             AND b.subject_id_ = #{param.subjectId}
         </if>
-        order by start_time_
+        GROUP BY b.id_ order by start_time_
     </select>
 
     <select id="queryTeacherPracticeCourse" resultType="com.yonge.cooleshow.biz.dal.vo.MyCourseVo">

+ 25 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -559,6 +559,30 @@
     <select id="countStudentPracticeTime" resultType="java.lang.Long">
 		SELECT SUM(play_time_) FROM sys_music_compare_record WHERE user_id_ = #{userId} AND create_time_ BETWEEN #{monday} AND #{sunday}
 	</select>
-    <!--曲目练习统计-->
+    <select id="getStudentTrainOverView"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$PracticeSummaryDto">
+		select COUNT(DISTINCT user_id_) practiceCount,SUM(play_time_) totalPracticeTime from sys_music_compare_record mcr
+		where mcr.user_id_ IN
+		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+			#{studentId}
+		</foreach>
+		<if test="param.startTime != null and param.startTime != ''">
+			AND mcr.create_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+		</if>
+	</select>
+	<select id="getStudentTrainTime"
+			resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$PracticeTimeDto">
+		select SUM(play_time_) practiceTime,DATE_FORMAT(mcr.create_time_, ${groupBy}) 'date' from sys_music_compare_record mcr
+		where mcr.user_id_ IN
+		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+			#{studentId}
+		</foreach>
+		<if test="param.startTime != null and param.startTime != ''">
+			AND mcr.create_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+		</if>
+		GROUP BY DATE_FORMAT(mcr.create_time_, ${groupBy})
+		ORDER BY 'date'
+	</select>
+	<!--曲目练习统计-->
 
 </mapper>

+ 11 - 7
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -50,6 +50,7 @@
         <result column="graduate_school_" property="graduateSchool"/>
         <result column="username_" property="username"/>
         <result column="isLiving_" property="isLiving"/>
+        <result column="fansNum" property="fansNum"/>
     </resultMap>
 
     <!-- 表字段 -->
@@ -392,7 +393,7 @@
     </select>
 
     <select id="queryHotTeacherList" resultMap="HotTeacherVoMap">
-        select t.user_id_, t.graduate_school_, u.username_, u.avatar_, ifnull(a.speaker_id_, 0) isLiving_
+        select t.user_id_, t.graduate_school_, u.username_, u.avatar_, ifnull(a.speaker_id_, 0) isLiving_,tt.fans_num_ fansNum
         from teacher t
                  left join sys_user u on t.user_id_ = u.id_
                  left join teacher_total tt on tt.user_id_ = t.user_id_
@@ -504,16 +505,19 @@
          ) t GROUP BY t.im_customer_id_
     </select>
     <select id="getStudentIds" resultType="java.lang.Long">
-        select distinct cssp.user_id_ from course_schedule_teacher_salary csts
-        left join course_schedule cs ON cs.id_ = csts.course_schedule_id_
-        left join course_schedule_student_payment cssp ON cssp.course_id_ = cs.id_
+        select distinct cssp.user_id_ from course_group cg
+        left join course_schedule_student_payment cssp ON cssp.course_group_id_ = cg.id_
         <if test="param.subjectId != null">
             left join student st ON st.user_id_ = cssp.user_id_
         </if>
-        where csts.teacher_id_ = #{param.teacherId}
-        <if test="param.startTime != null and param.startTime != ''">
-            and cs.start_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+        where cg.status_ = 'ING' AND cg.teacher_id_ = #{param.teacherId}
+        <if test="param.subjectId != null">
+            and find_in_set(#{param.subjectId},st.subject_id_)
         </if>
+        union
+        select distinct st.user_id_ from tenant_group tg
+        left join student st ON st.tenant_group_id_ = tg.id_
+        where tg.admin_id_ = #{param.teacherId}
         <if test="param.subjectId != null">
             and find_in_set(#{param.subjectId},st.subject_id_)
         </if>