Browse Source

老师详情增加丝、学生数统计

Eric 2 years ago
parent
commit
2a138c31f9

+ 3 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -81,7 +81,9 @@ public class TeacherController extends BaseController {
     })
     @PreAuthorize("@pcs.hasPermissions('teacher/detail')")
     public HttpResponseResult<TeacherVo> detail(@PathVariable("id") Long userId) {
-        TeacherVo detail = teacherService.detail(userId);
+        //TeacherVo detail = teacherService.detail(userId);
+
+        TeacherVo detail = teacherService.findTeacherDetailInfo(userId);
         if (null != detail && !CollectionUtils.isEmpty(detail.getStyleVideo())) {
             List<TeacherStyleVideo> styleVideo = detail.getStyleVideo();
             List<TeacherStyleVideo> collect = styleVideo.stream().filter(o -> AuthStatusEnum.PASS.equals(o.getAuthStatus())).collect(Collectors.toList());

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

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 
 public interface TeacherDao extends BaseMapper<Teacher> {
@@ -98,4 +99,11 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return
      */
     List<HotTeacherVo> queryHotTeacherList(Long subjectId);
+
+    /**
+     * 老师学生人数统计
+     * @param teacherIds 老师ID
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectTeacherStudentNumberStatInfo(@Param("teacherIds") List<Long> teacherIds);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java

@@ -151,4 +151,11 @@ public interface TeacherService extends IService<Teacher> {
      * @return
      */
     List<HotTeacherVo> queryHotTeacherList(Long userId);
+
+    /**
+     * 老师详情信息
+     * @param teacherId 用户ID
+     * @return TeacherVo
+     */
+    TeacherVo findTeacherDetailInfo(Long teacherId);
 }

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

@@ -7,11 +7,14 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -205,6 +208,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherHomeVo.setMusicAlbumNum(null == total.getMusicAlbumNum() ? 0 : total.getMusicAlbumNum());
         teacherHomeVo.setMusicSheetNum(null == total.getMusicSheetNum() ? 0 : total.getMusicSheetNum());
 
+        // 老师学生人数统计
+        List<Long> teacherIds = Lists.newArrayList(userId);
+        Map<Long, Integer> studentNumsMap = getBaseMapper().selectTeacherStudentNumberStatInfo(teacherIds).stream()
+                .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+        teacherHomeVo.setStudentNums(studentNumsMap.getOrDefault(userId, 0));
+
         //取直播缓存
         RMap<Long, String> liveMap = redissonClient.getMap(TEACHER_TEMP_LIVE_ROOM);
         String roomUid = liveMap.get(userId);
@@ -651,7 +661,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 		return hotTeacherList;
 	}
 
-	private void setTagTime(TeacherTagEnum teacherTagEnum, TeacherVo teacherVo) {
+    private void setTagTime(TeacherTagEnum teacherTagEnum, TeacherVo teacherVo) {
         if (teacherTagEnum.equals(TeacherTagEnum.LIVE)) {
             teacherVo.setLiveDate(new Date());
         } else if (teacherTagEnum.equals(TeacherTagEnum.MUSIC)) {
@@ -663,4 +673,53 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
     }
 
+
+    /**
+     * 老师详情信息
+     *
+     * @param teacherId 用户ID
+     * @return TeacherVo
+     */
+    @Override
+    public TeacherVo findTeacherDetailInfo(Long teacherId) {
+
+        // 用户详情基本信息
+        TeacherVo teacherInfo = detail(teacherId);
+
+        if (Objects.nonNull(teacherInfo)) {
+
+            // 设置默认数据
+            teacherInfo
+                    .starGrade(0)
+                    .fansNum(0)
+                    .expTime(0)
+                    .unExpTime(0)
+                    .musicSheetNum(0)
+                    .musicAlbumNum(0)
+                    .studentNums(0);
+
+            // 老师相关统计信息
+            TeacherTotal total = totalService.getTotalById(teacherId);
+
+            if (Objects.nonNull(total)) {
+
+                teacherInfo
+                        .starGrade(total.getStarGrade().intValue())
+                        .fansNum(total.getFansNum())
+                        .expTime(total.getExpTime())
+                        .unExpTime(total.getUnExpTime())
+                        .musicAlbumNum(total.getMusicAlbumNum())
+                        .musicSheetNum(total.getMusicSheetNum());
+            }
+
+            // 老师学生人数统计
+            Map<Long, Integer> studentNumsMap = getBaseMapper().selectTeacherStudentNumberStatInfo(Lists.newArrayList(teacherId)).stream()
+                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+            teacherInfo.setStudentNums(studentNumsMap.getOrDefault(teacherId, 0));
+        }
+
+        return teacherInfo;
+    }
+
 }

+ 28 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java

@@ -1,15 +1,20 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 /**
  * @Author: cy
  * @Date: 2022/5/12
  */
 public class MyFens extends BaseEntity {
+
     @ApiModelProperty("昵称")
     private String userId;
     @ApiModelProperty("昵称")
@@ -25,6 +30,13 @@ public class MyFens extends BaseEntity {
     @ApiModelProperty(value = "是否会员 0否 1是")
     private YesOrNoEnum isVip;
 
+    @ApiModelProperty("手机号")
+    private String phone;
+
+    @ApiModelProperty("关注时间")
+    @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+    private Date starTime;
+
     public String getSubjectName() {
         return subjectName;
     }
@@ -84,4 +96,20 @@ public class MyFens extends BaseEntity {
     public void setIsVip(YesOrNoEnum isVip) {
         this.isVip = isVip;
     }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Date getStarTime() {
+        return starTime;
+    }
+
+    public void setStarTime(Date starTime) {
+        this.starTime = starTime;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -40,6 +40,9 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     @ApiModelProperty("曲谱数 ")
     private Integer musicSheetNum;
 
+    @ApiModelProperty("学生数")
+    private Integer studentNums;
+
     @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
     private String subjectName;
     @ApiModelProperty(value = "性别 0女 1男")
@@ -291,4 +294,12 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     public void setMusicSheetNum(Integer musicSheetNum) {
         this.musicSheetNum = musicSheetNum;
     }
+
+    public Integer getStudentNums() {
+        return studentNums;
+    }
+
+    public void setStudentNums(Integer studentNums) {
+        this.studentNums = studentNums;
+    }
 }

+ 107 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -68,6 +68,21 @@ public class TeacherVo extends Teacher {
     @ApiModelProperty(value = "用户状态 NORMAL-正常   LOCKED-冻结  CLOSED-关闭")
     private UserStatusEnum userStatus;
 
+    @ApiModelProperty("星级")
+    private Integer starGrade;
+    @ApiModelProperty("粉丝数")
+    private Integer fansNum;
+    @ApiModelProperty("已上课时")
+    private Integer expTime;
+    @ApiModelProperty("未上课时")
+    private Integer unExpTime;
+    @ApiModelProperty("专辑数 ")
+    private Integer musicAlbumNum;
+    @ApiModelProperty("曲谱数 ")
+    private Integer musicSheetNum;
+    @ApiModelProperty("学生数")
+    private Integer studentNums;
+
     public YesOrNoEnum getDelFlag() {
         return delFlag;
     }
@@ -237,4 +252,96 @@ public class TeacherVo extends Teacher {
 	public void setUserStatus(UserStatusEnum userStatus) {
 		this.userStatus = userStatus;
 	}
+
+    public Integer getStarGrade() {
+        return starGrade;
+    }
+
+    public void setStarGrade(Integer starGrade) {
+        this.starGrade = starGrade;
+    }
+
+    public Integer getFansNum() {
+        return fansNum;
+    }
+
+    public void setFansNum(Integer fansNum) {
+        this.fansNum = fansNum;
+    }
+
+    public Integer getExpTime() {
+        return expTime;
+    }
+
+    public void setExpTime(Integer expTime) {
+        this.expTime = expTime;
+    }
+
+    public Integer getUnExpTime() {
+        return unExpTime;
+    }
+
+    public void setUnExpTime(Integer unExpTime) {
+        this.unExpTime = unExpTime;
+    }
+
+    public Integer getMusicAlbumNum() {
+        return musicAlbumNum;
+    }
+
+    public void setMusicAlbumNum(Integer musicAlbumNum) {
+        this.musicAlbumNum = musicAlbumNum;
+    }
+
+    public Integer getMusicSheetNum() {
+        return musicSheetNum;
+    }
+
+    public void setMusicSheetNum(Integer musicSheetNum) {
+        this.musicSheetNum = musicSheetNum;
+    }
+
+    public Integer getStudentNums() {
+        return studentNums;
+    }
+
+    public void setStudentNums(Integer studentNums) {
+        this.studentNums = studentNums;
+    }
+
+
+    public TeacherVo starGrade(Integer starGrade) {
+        this.starGrade = starGrade;
+        return this;
+    }
+
+    public TeacherVo fansNum(Integer fansNum) {
+        this.fansNum = fansNum;
+        return this;
+    }
+
+    public TeacherVo expTime(Integer expTime) {
+        this.expTime = expTime;
+        return this;
+    }
+
+    public TeacherVo unExpTime(Integer unExpTime) {
+        this.unExpTime = unExpTime;
+        return this;
+    }
+
+    public TeacherVo musicAlbumNum(Integer musicAlbumNum) {
+        this.musicAlbumNum = musicAlbumNum;
+        return this;
+    }
+
+    public TeacherVo musicSheetNum(Integer musicSheetNum) {
+        this.musicSheetNum = musicSheetNum;
+        return this;
+    }
+
+    public TeacherVo studentNums(Integer studentNums) {
+        this.studentNums = studentNums;
+        return this;
+    }
 }

+ 16 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -250,10 +250,12 @@
     <select id="queryMyFans" resultType="com.yonge.cooleshow.biz.dal.vo.MyFens">
         SELECT
             s.student_id_ AS userId,
+            s.create_time_ AS starTime,
             u.avatar_ AS avatar,
             u.username_ AS userName,
             u.real_name_ AS realName,
             u.gender_ AS gender,
+            u.phone_ AS phone,
             (SELECT group_concat(name_) FROM `subject` WHERE find_in_set(id_,sr.subject_id_)) AS subjectName,
             if(sr.membership_start_time_ &lt;= now() and sr.membership_end_time_ &gt;= now(),1,0) AS isVip
         FROM student_star s
@@ -271,4 +273,18 @@
 		where t.entry_flag_ = 1 and t.is_test_user_ = 0 and find_in_set(#{subjectId},t.subject_id_)
 		order by tt.fans_num_ desc limit 10
     </select>
+
+    <!--老师学生人数统计-->
+    <select id="selectTeacherStudentNumberStatInfo"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.teacher_id_ AS id, COUNT(DISTINCT t1.id_) AS total FROM user_binding_teacher t1
+        <where>
+            <if test="teacherIds != null">
+                AND t1.teacher_id_ IN (<foreach collection="teacherIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.teacher_id_
+    </select>
+    <!--老师学生人数统计-->
+
 </mapper>