weifanli 3 лет назад
Родитель
Сommit
300ba22fcb

+ 6 - 22
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java

@@ -22,8 +22,8 @@ public class Student implements Serializable {
     * 学员声部 
     */
     @ApiModelProperty("学员声部 ")
-	@TableField(value = "subject_id_list_")
-    private String subjectIdList;
+	@TableField(value = "subject_id_")
+    private String subjectId;
     /**
     * 会员等级 
     */
@@ -77,12 +77,12 @@ public class Student implements Serializable {
         this.userId = userId;
     }
 
-    public String getSubjectIdList() {
-        return subjectIdList;
+    public String getSubjectId() {
+        return subjectId;
     }
 
-    public void setSubjectIdList(String subjectIdList) {
-        this.subjectIdList = subjectIdList;
+    public void setSubjectId(String subjectId) {
+        this.subjectId = subjectId;
     }
 
     public Long getMemberRankSettingId() {
@@ -140,20 +140,4 @@ public class Student implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-
-    @Override
-    public String toString() {
-        return "Student{" +
-				"userId=" + userId +
-						",subjectIdList='" + subjectIdList + "'" + 
-						",memberRankSettingId='" + memberRankSettingId + "'" +
-						",membershipStartTime='" + membershipStartTime + "'" + 
-						",membershipEndTime='" + membershipEndTime + "'" + 
-						",cloudStudySequenceDays='" + cloudStudySequenceDays + "'" + 
-						",cloudStudyUseLastDay='" + cloudStudyUseLastDay + "'" + 
-						",createTime='" + createTime + "'" + 
-						",updateTime='" + updateTime + "'" + 
-		                '}';
-    }
-	
 }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherTotal.java

@@ -35,7 +35,7 @@ public class TeacherTotal implements Serializable {
     private Integer unExpTime;
     @ApiModelProperty("是否在直播 ")
 	@TableField(value = "live_flag_")
-    private String liveFlag;
+    private Boolean liveFlag;
 	@TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -81,11 +81,11 @@ public class TeacherTotal implements Serializable {
         this.unExpTime = unExpTime;
     }
     
-	public String getLiveFlag() {
+	public Boolean getLiveFlag() {
         return liveFlag;
     }
 
-    public void setLiveFlag(String liveFlag) {
+    public void setLiveFlag(Boolean liveFlag) {
         this.liveFlag = liveFlag;
     }
     

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -61,5 +61,6 @@ public interface LiveRoomService extends IService<LiveRoom> {
      * 方便测试观察房间数据的方法
      */
     Map<String, Object> test(String roomUid);
+
 }
 

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

@@ -554,6 +554,5 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         result.put("实时观看数", look);
         return result;
     }
-
 }
 

+ 13 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTotalServiceImpl.java

@@ -41,13 +41,14 @@ public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, Studen
     private SysConfigService sysConfigService;
     @Autowired
     private RedissonClient redissonClient;
-	@Override
+
+    @Override
     public StudentTotalVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
-     @Override
-    public IPage<StudentTotalVo> selectPage(IPage<StudentTotalVo> page, StudentTotalSearch query){
+
+    @Override
+    public IPage<StudentTotalVo> selectPage(IPage<StudentTotalVo> page, StudentTotalSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
@@ -73,13 +74,17 @@ public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, Studen
             StudentTotal studentTotal = new StudentTotal();
             studentTotal.setUserId(student.getUserId());
             StudentTotalVo starTotal = studentStarMap.get(student.getUserId());
-            if (null != starTotal) {
+            if (null != starTotal && null != starTotal.getStarTeacherNum()) {
                 studentTotal.setStarTeacherNum(starTotal.getStarTeacherNum());
             }
             StudentTotalVo courseTotal = studentCourseMap.get(student.getUserId());
             if (null != courseTotal) {
-                studentTotal.setFinshClassHours(courseTotal.getFinshClassHours());
-                studentTotal.setUnfinshClassHours(courseTotal.getUnfinshClassHours());
+                if (null != courseTotal.getFinshClassHours()) {
+                    studentTotal.setFinshClassHours(courseTotal.getFinshClassHours());
+                }
+                if (null != courseTotal.getUnfinshClassHours()) {
+                    studentTotal.setUnfinshClassHours(courseTotal.getUnfinshClassHours());
+                }
             }
             //todo 缺少累计练习天数 累计练习时长 累计评测次数
             resultList.add(studentTotal);
@@ -89,5 +94,5 @@ public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, Studen
         saveOrUpdateBatch(resultList);
         return resultList;
     }
-	
+
 }

+ 29 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherTotalServiceImpl.java

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -38,14 +40,16 @@ public class TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, Teache
     private CourseScheduleDao courseScheduleDao;
     @Autowired
     private RedissonClient redissonClient;
+    @Autowired
+    private LiveRoomService liveRoomService;
 
-	@Override
+    @Override
     public TeacherTotalVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
-     @Override
-    public IPage<TeacherTotalVo> selectPage(IPage<TeacherTotalVo> page, TeacherTotalSearch query){
+
+    @Override
+    public IPage<TeacherTotalVo> selectPage(IPage<TeacherTotalVo> page, TeacherTotalSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
@@ -65,21 +69,36 @@ public class TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, Teache
         if (!CollectionUtils.isEmpty(teacherCourseTotal)) {
             teacherCourseMap = teacherCourseTotal.stream().collect(Collectors.toMap(TeacherTotalVo::getUserId, o -> o));
         }
+        //查询老师正在直播的直播间
+        List<LiveRoom> templist = liveRoomService.list(Wrappers.<LiveRoom>lambdaQuery()
+                .eq(LiveRoom::getLiveState, 1)
+                .eq(LiveRoom::getRoomState, 0)
+                .eq(LiveRoom::getType, "TEMP"));
+
+        Map<Long, Boolean> liveMap = new HashMap<>();
+        for (LiveRoom liveRoom : templist) {
+            liveMap.put(liveRoom.getSpeakerId(), true);
+        }
+
         List<TeacherTotal> resultList = new ArrayList<>();
         for (Teacher teacher : teachers) {
             TeacherTotal teacherTotal = new TeacherTotal();
             teacherTotal.setUserId(teacher.getUserId());
             //粉丝数
             TeacherTotalVo fansTotal = teacherStarMap.get(teacher.getUserId());
-            if (null != fansTotal) {
+            if (null != fansTotal && null != fansTotal.getFansNum()) {
                 teacherTotal.setFansNum(fansTotal.getFansNum());
             }
 
             TeacherTotalVo courseTotal = teacherCourseMap.get(teacher.getUserId());
             if (null != courseTotal) {
                 //课时数
-                teacherTotal.setExpTime(courseTotal.getExpTime());
-                teacherTotal.setUnExpTime(courseTotal.getUnExpTime());
+                if (null != courseTotal.getExpTime()) {
+                    teacherTotal.setExpTime(courseTotal.getExpTime());
+                }
+                if (null != courseTotal.getUnExpTime()) {
+                    teacherTotal.setUnExpTime(courseTotal.getUnExpTime());
+                }
                 //星级
                 Double starGrade = courseTotal.getStarGrade();
                 if (null != starGrade) {
@@ -87,6 +106,9 @@ public class TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, Teache
                     teacherTotal.setStarGrade(round.doubleValue());
                 }
             }
+            //是否正在直播
+            teacherTotal.setLiveFlag(null == liveMap.get(teacher.getUserId()) ? false : true);
+
             resultList.add(teacherTotal);
             redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(teacherTotal.getUserId()))
                     .set(teacherTotal);

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -40,6 +40,8 @@ public class StudentVo extends Student {
     private Integer age;
     @ApiModelProperty(value = "是否会员 0否 1是")
     private YesOrNoEnum isVip;
+    @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
+    private String subjectName;
 
     public String getAvatar() {
         return avatar;
@@ -128,4 +130,12 @@ public class StudentVo extends Student {
     public void setIsVip(YesOrNoEnum isVip) {
         this.isVip = isVip;
     }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
 }

+ 9 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.yonge.cooleshow.biz.dal.dao.StudentDao">
     <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.Student">
         <result column="user_id_" property="userId"/>
-        <result column="subject_id_list_" property="subjectIdList"/>
+        <result column="subject_id_" property="subjectId"/>
         <result column="member_rank_setting_id_" property="memberRankSettingId"/>
         <result column="membership_start_time_" property="membershipStartTime"/>
         <result column="membership_end_time_" property="membershipEndTime"/>
@@ -16,7 +16,7 @@
     <!-- 表字段 -->
     <sql id="baseColumns">
          t.user_id_ as "userId"
-        , t.subject_id_list_ as "subjectIdList"
+        , t.subject_id_ as "subjectId"
         , t.current_grade_num_ as "currentGradeNum"
         , t.member_rank_setting_id_ as "memberRankSettingId"
         , t.membership_start_time_ as "membershipStartTime"
@@ -27,7 +27,7 @@
         , t.update_time_ as "updateTime"
         </sql>
     <update id="setSubject">
-        update student set subject_id_list_ = #{subjectIds} where user_id_ = #{id}
+        update student set subject_id_ = #{subjectIds} where user_id_ = #{id}
     </update>
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.StudentVo">
         SELECT
@@ -54,7 +54,10 @@
             TIMESTAMPDIFF(YEAR, u.birthdate_, CURDATE()) as age,
             u.phone_ as phone,
             !isnull(birthdate_) as isReal,
-            (membership_end_time_ > now()) as isVip
+            (membership_end_time_ > now()) as isVip,
+            (
+            SELECT GROUP_CONCAT(name_) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
+            ) as subjectName
         FROM student t
         left join sys_user u on t.user_id_ = u.id_
         <where>
@@ -68,8 +71,8 @@
             <if test="null != param.gender">
                 and u.gender_ = #{param.gender}
             </if>
-            <if test="null != param.subjectIdList and '' != param.subjectIdList">
-                and find_in_set(#{param.subjectIdList},t.subject_id_list_)
+            <if test="null != param.subjectId and '' != param.subjectId">
+                and INTE_ARRAY(t.subject_id_,#{param.subjectId})
             </if>
             <if test="null != param.isVip">
                 <if test="true == param.isVip">

+ 11 - 24
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml

@@ -45,30 +45,17 @@
 		SELECT
 			<include refid="baseColumns"/>
 		FROM teacher_style_video t
-		left join (
-			select t1.teacher_id_,count(1) as star_num_
-			from student_star t1
-			<if test="(param.username != null and param.username != '') or (param.subjectId != null and param.subjectId != '')">
-				join teacher t2 on t1.teacher_id_ = t2.user_id_
-				<where>
-					<if test="param.username != null and param.username != ''">
-						t2.
-					</if>
-				</where>
+		LEFT JOIN teacher a on t.user_id_ = a.user_id_
+		LEFT JOIN sys_user u on t.user_id_ = u.id_
+		LEFT JOIN teacher_total ta on t.user_id_ = ta.user_id_
+		<where>
+			<if test="param.username != null and param.username != ''">
+				AND u.username_ LIKE CONCAT('%', #{param.username}, '%')
 			</if>
-			group by t1.teacher_id_
-		) a on t.user_id_ = a.teacher_id_
-		left join (
-			select teacher_id_,count(1) as course_num_  from course_schedule
-			where status_ = 'COMPLETE' and type_ = 'PRACTICE'
-			group by teacher_id_
-		) b on t.user_id_ = b.teacher_id_
-		left join (
-			select
-				speaker_id_ as teacher_id_,count(1) as is_live_
-			from  live_room where live_state_ = 1 and room_state_ = 0 and type_ = 'temp'
-			group by speaker_id_
-		)  r on t.user_id_ = r.speaker_id_
-		WHERE t.user_id_ = #{userId}
+			<if test="param.subjectId != null and param.subjectId != ''">
+				AND INTE_ARRAY(a.subject_id_,#{param.subjectId})
+			</if>
+		</where>
+		order by ta.live_flag_ desc,(ta.fans_num_ * 0.3 + t.browse_ * 0.3 + ta.exp_time_) desc
 	</select>
 </mapper>